00001
00002
00003
00004
00005
00006 #include "txtmtmeditorop.h"
00007
00008
00009 #include <aknquerydialog.h>
00010 #include <apparc.h>
00011 #include <msvids.h>
00012 #include <msvuids.h>
00013 #include <eikenv.h>
00014 #include <coemain.h>
00015 #include <eikproc.h>
00016 #include <eikdoc.h>
00017 #include <apacln.h>
00018 #include <s32mem.h>
00019 #include "txtviewerservice.h"
00020 #include <apgcli.h>
00021
00022 #include "txtupan.h"
00023 #include <aknnotewrappers.h>
00024 #include "txtu.h"
00025
00026 #include "txtcmds.hrh"
00027
00028 const TInt KTxtMtmEditorOpBufStoreSize = 127;
00029
00030
00031 CTxtMtmEditorOperation* CTxtMtmEditorOperation::NewL(const TMsvId& aId, TOpenMode aMode, CMsvSession& aMsvSession, TRequestStatus& aObserverRequestStatus, CTextMtmUi& aMtmUi)
00032 {
00033 CTxtMtmEditorOperation* self = new (ELeave) CTxtMtmEditorOperation(aId, aMode, aMsvSession, aObserverRequestStatus, aMtmUi);
00034 CleanupStack::PushL(self);
00035 self->ConstructL();
00036 CleanupStack::Pop(self);
00037 return self;
00038 }
00039
00040
00041 CTxtMtmEditorOperation::CTxtMtmEditorOperation(const TMsvId& aId, TOpenMode aMode, CMsvSession& aMsvSession, TRequestStatus& aObserverRequestStatus,CTextMtmUi& aMtmUi)
00042 : CMsvOperation(aMsvSession, EPriorityStandard, aObserverRequestStatus),iId(aId),iMode(aMode), iMtmUi(aMtmUi)
00043 {
00044 CActiveScheduler::Add(this);
00045 }
00046
00047
00048 void CTxtMtmEditorOperation::ConstructL()
00049 {
00050
00051 RLibrary library;
00052
00053 _LIT(KDllName,"txtu.DLL");
00054
00055
00056 User::LeaveIfError(library.Load(KDllName));
00057
00058
00059 RLibrary dup = library;
00060
00061 TInt err;
00062
00063 err=library.Duplicate(RThread());
00064
00065 if (err==KErrNone)
00066 {
00067 dup.Close();
00068 }
00069
00070
00071 iObserverRequestStatus = KRequestPending;
00072
00073
00074 iStatus = KRequestPending;
00075
00076
00077 SetActive();
00078
00079
00080 LaunchEditorL();
00081 }
00082
00083
00084 CTxtMtmEditorOperation::~CTxtMtmEditorOperation()
00085 {
00086 Cancel();
00087 }
00088
00089
00090 const TDesC8& CTxtMtmEditorOperation::ProgressL()
00091 {
00092 iProgressBuf() = iProgress;
00093 return iProgressBuf;
00094 }
00095
00096
00097 const TDesC8& CTxtMtmEditorOperation::FinalProgress()
00098 {
00099 __ASSERT_ALWAYS(!IsActive(), User::Panic(KTEXTMTMUIPanic, ETextMtmUiOperationActive));
00100 iProgressBuf() = iProgress;
00101 return iProgressBuf;
00102 }
00103
00104
00105 TInt CTxtMtmEditorOperation::RunError(TInt aError)
00106 {
00107
00108 iProgress.iError = aError;
00109 TRequestStatus* stat = &iObserverRequestStatus;
00110 User::RequestComplete(stat, aError);
00111 return KErrNone;
00112 }
00113
00114
00115 void CTxtMtmEditorOperation::DoCancel()
00116 {
00117 delete iMonitor;
00118
00119 iService.Close();
00120
00121
00122 TRequestStatus* stat1 = &iStatus;
00123 User::RequestComplete(stat1, KErrCancel);
00124
00125
00126 TRequestStatus* stat2 = &iObserverRequestStatus;
00127 User::RequestComplete(stat2, KErrCancel);
00128 }
00129
00130
00131 void CTxtMtmEditorOperation::RunL()
00132 {
00133 User::LeaveIfError(iStatus.Int());
00134
00135 switch(iProgress.iState)
00136 {
00137 case TTxtMtmEditorOpProgress::EEditorLaunched:
00138 iProgress.iState = TTxtMtmEditorOpProgress::EEditorLaunched;
00139 TRequestStatus* stat = &iObserverRequestStatus;
00140 User::RequestComplete(stat, iStatus.Int());
00141 break;
00142 default:
00143 break;
00144 }
00145 }
00146
00147
00148 void CTxtMtmEditorOperation::HandleServerAppExit( TInt aReason )
00149 {
00150 TRequestStatus* stat = &iStatus;
00151 User::RequestComplete(stat, KErrNone);
00152
00153 MAknServerAppExitObserver::HandleServerAppExit( aReason );
00154
00155 delete iMonitor;
00156 iService.Close();
00157 }
00158
00159
00160 void CTxtMtmEditorOperation::LaunchEditorL()
00161 {
00162 TEditorParameters aParams;
00163
00164 aParams.iEntry = iId;
00165
00166 if (iMode==EEdit) aParams.iOpenedForEditing=ETrue;
00167 else aParams.iOpenedForEditing=EFalse;
00168
00169 TUid uid = TUid::Uid(0xA00058BD);
00170
00171 iService.ConnectChainedAppL( uid );
00172
00173 iMonitor = CApaServerAppExitMonitor::NewL(
00174 iService,
00175 *this,
00176 CActive::EPriorityStandard);
00177
00178 iProgress.iState=TTxtMtmEditorOpProgress::EEditorLaunched;
00179
00180 iService.OpenL( aParams);
00181 }
00182
00183