texted.cpp
来自「在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己」· C++ 代码 · 共 1,978 行 · 第 1/5 页
CPP
1,978 行
iPrint=CTextPageRegionPrinter::NewL((STATIC_CAST(CTextEdDocument*,iDocument)->iGlobalText),iPrintSetup->PrinterDevice());
iPageTable=new(ELeave) CArrayFixFlat<TInt>(5);
iPrint->SetPageList(iPageTable);
PrintSetupChanged(iPrintSetup);
#endif
FLOGWRITE(_L("Runtime."));
// Initialise file to be run
iOplRtLogon=new(ELeave) CTxOplRtLogon(*this);
iOplRtLogon->ConstructL();
FLOGWRITE(_L("Resource file."));
// Find and load the runtime resource file.
TFileName resourceFile=RuntimeResourceFile();
TFindFile FindResourceFile(iCoeEnv->FsSession());
User::LeaveIfError(FindResourceFile.FindByDir(resourceFile,KNullDesC));
resourceFile=FindResourceFile.File();
BaflUtils::NearestLanguageFile(iCoeEnv->FsSession(),resourceFile);
iOplrResourceFile=iCoeEnv->AddResourceFileL(resourceFile);
#if defined(USE_SENDAS)
iSendAppUi=CSendAppUi::NewL(ETextEdCmdSend,iEikonEnv->AppUiFactory()->MenuBar()->HotKeyTable());
#endif
#if defined(USE_IRLISTEN)
iIrListenAppUi=CIrListenAppUi::NewL(ETextEdCmdIRReceive, iEikonEnv->AppUiFactory()->MenuBar()->HotKeyTable());
#endif
#if defined(USE_ADDTODESK)
LinkUtils::AddLinkHotKeyL(*iEikonEnv->AppUiFactory()->MenuBar()->HotKeyTable(),ETextEdCmdAddToHome);
#endif
FLOGWRITE(_L("CTxtedAppUi::ConstructL() ends."));
}
void CTxtedAppUi::RestorePrefsL()
{
TInt scrollState=ETextEdCmdScrollBarVertical;
TInt fullScreenState=EFalse;
TInt titleBarState=ETrue;
TInt zoomFactor=KZoomStateThree;
TRAPD(err,DoRestorePrefsL(scrollState,fullScreenState,titleBarState,zoomFactor));
if (err)
{
// failed to read so use defaults
iIsMonoSpaced=ETrue;
iTabWidthInChars=KDefaultTabWidthInCharacters;
iGlobalEd->SetAutoIndent(ETrue);
iNonPrintingCharVisibility.SetNoneVisible();
}
if (iExportFormatOption<EExportFormatUnicode || iExportFormatOption>=EExportFormatMaxOptions)
iExportFormatOption=EExportFormatUnicode;
STATIC_CAST(CTextEdDocument*,iDocument)->iGlobalText->SetGlobalCharFormat(STATIC_CAST(CTextEdApplication*,Application())->iCharFormat);
SetFullScreenVisibilityL(fullScreenState);
SetTitleBarVisibilityL(titleBarState);
iAppZoom.SetZoomFactor(zoomFactor);
CmdScrollBarL(scrollState);
}
void CTxtedAppUi::DoRestorePrefsL(TInt& aScrollBarState,TInt& aFullScreenState,TInt& aTitleBarState,TInt& aZoomFactor)
{
CDictionaryStore* iniFile=Application()->OpenIniFileLC(iEikonEnv->FsSession());
// if (!(iniFile->IsPresentL(KUidTextedPrefs)))
// User::Leave(KErrNotFound); // read will leave if not there
RDictionaryReadStream readStream;
readStream.OpenLC(*iniFile,KUidTextedPrefs);
iTabWidthInChars=readStream.ReadInt32L();
readStream>>iNonPrintingCharVisibility;
iIsMonoSpaced=(TBool)readStream.ReadInt8L();
iGlobalEd->SetAutoIndent((TBool)readStream.ReadInt8L());
aScrollBarState=readStream.ReadInt8L();
aFullScreenState=readStream.ReadInt8L();
aTitleBarState=readStream.ReadInt8L();
aZoomFactor=readStream.ReadInt32L();
CCharFormatLayer* charFormat=CCharFormatLayer::NewL(readStream);
delete STATIC_CAST(CTextEdApplication*,Application())->iCharFormat;
STATIC_CAST(CTextEdApplication*,Application())->iCharFormat=charFormat;
iExportFormatOption=(TExportFormatOption)readStream.ReadInt8L();
CleanupStack::PopAndDestroy(); // readStream
CleanupStack::PopAndDestroy(); // iniFile
}
TInt CTxtedAppUi::StorePrefs()
{
TRAPD(err,DoStorePrefsL());
return err;
}
void CTxtedAppUi::DoStorePrefsL()
{
CDictionaryStore* iniFile=Application()->OpenIniFileLC(iEikonEnv->FsSession());
RDictionaryWriteStream writeStream;
writeStream.AssignLC(*iniFile,KUidTextedPrefs);
writeStream.WriteInt32L(iTabWidthInChars);
writeStream<<iNonPrintingCharVisibility;
writeStream.WriteInt8L(TInt8(iIsMonoSpaced));
writeStream.WriteInt8L(TInt8(iGlobalEd->IsAutoIndenting()));
writeStream.WriteInt8L((TInt8)(ScrollBarState()));
writeStream.WriteInt8L((TInt8)iIsFullScreenVisible);
writeStream.WriteInt8L((TInt8)iIsTitleBarVisible);
writeStream.WriteInt32L(iAppZoom.ZoomFactor());
writeStream<<*(STATIC_CAST(CTextEdApplication*,Application())->iCharFormat);
writeStream.WriteInt8L(TInt8(iExportFormatOption));
writeStream.CommitL();
CleanupStack::PopAndDestroy(); // writeStream
iniFile->CommitL();
CleanupStack::PopAndDestroy(); // iniFile
}
TBool CTxtedAppUi::CheckHotKeyNotDimmedL(TInt aCommand)
{
const TInt documentLength=iGlobalEd->TextLength();
if ((aCommand==EEikCmdEditCopy || aCommand==EEikCmdEditCut) && iGlobalEd->SelectionLength()==0)
return EFalse;
if ((aCommand==EEikCmdFileRevert || aCommand==EEikCmdFileSave) && !iDocument->HasChanged())
return EFalse;
if (aCommand==ETextEdCmdTranslateDebug && DebuggerNotPresent())
return EFalse;
if (aCommand==EEikCmdEditUndo && !iGlobalEd->CanUndo())
return EFalse;
if (aCommand==EEikCmdFileExport && documentLength==0)
return EFalse;
if ((aCommand==ETextEdCmdTranslate || aCommand==ETextEdCmdTranslateDebug) && documentLength==0)
return EFalse;
if (!(iDocument->AppFileMode()&EFileWrite))
{
switch (aCommand)
{
case EEikCmdFileSave:
case EEikCmdEditCut:
case EEikCmdEditPaste:
case EEikCmdInsertSymbol:
case EEikCmdSearchReplace:
case EEikCmdFileImport:
return EFalse;
default:
break;
}
}
if (iOplRtLogon->IsActive()) // running
{
switch (aCommand)
{
case EEikCmdFileNew:
case EEikCmdFileOpen:
case EEikCmdFileSaveAs: // changes files
case EEikCmdEditCut:
case EEikCmdEditPaste:
case EEikCmdInsertSymbol:
case EEikCmdSearchReplace:
case ETextEdCmdTranslate:
case ETextEdCmdTranslateDebug:
case ETextEdCmdRun:
case EEikCmdFileImport:
case EEikCmdFileRevert:
case EEikCmdEditUndo:
return EFalse;
default:
//return ETrue;
break;
}
}
return ETrue;
}
void CTxtedAppUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
case EEikCmdExit:
{
StorePrefs();
if (iDocument->HasChanged())
STATIC_CAST(CTextEdDocument*,iDocument)->DoSaveToCurrentFileL();
#if !defined(__UIQ__)
CEikProcess* process=iEikonEnv->Process();
TRAPD(ignore,process->SetLastUsedFileL(CEikProcess::ELastOpenFile,process->MainDocFileName()));
// ignore any error saving current file name
#endif
Exit();
break;
}
case EEikCmdFileNew:
CmdNewFileL();
break;
case EEikCmdFileOpen:
CmdOpenFileL();
break;
#if defined(USE_PRINTING)
case ETextEdCmdPageSetup:
RunPageSetupDialogL();
break;
case EEikCmdPrintPaginate:
RunPaginationDialogL();
break;
case EEikCmdPrintPrint:
case EEikCmdPrintPreview:
{
TBool cancel=EFalse;
if (iPaginateDocumentChanged)
cancel=RunPaginationDialogL();
if (cancel)
break;
switch (aCommand)
{
case EEikCmdPrintPrint:
RunPrintDialogL();
break;
case EEikCmdPrintPreview:
RunPreviewDialogL();
break;
};
break;
}
#endif
case EEikCmdFileSave:
CmdFileSaveL();
break;
case EEikCmdFileSaveAs:
CmdFileSaveAsL();
break;
case EEikCmdFileRevert:
CmdFileRevertL();
break;
case EEikCmdFileImport:
ImportTextL();
break;
case EEikCmdFileExport:
ExportTextL();
break;
case ETextEdCmdDelete:
DeleteL();
break;
case ETextEdCmdAddToHome:
AddToHomeL();
break;
case EEikCmdEditUndo:
iGlobalEd->UndoL();
break;
case EEikCmdEditCut:
iGlobalEd->ClipboardL(CEikEdwin::ECut);
break;
case EEikCmdEditCopy:
iGlobalEd->ClipboardL(CEikEdwin::ECopy);
break;
case EEikCmdEditPaste:
iGlobalEd->ClipboardL(CEikEdwin::EPaste);
break;
case EEikCmdEditSelectAll:
iGlobalEd->SelectAllL();
break;
#if !defined(__UIQ__)
case EEikCmdSearchFind:
#if defined(__S80_DP2_0__)
CEikFindAndReplaceDialog::RunDlgLD(*iGlobalEd, iFindModel, ETrue, iGlobalEd->Rect()); // Try EFalse
#else
CEikFindAndReplaceDialog::RunDlgLD(*iGlobalEd, iFindModel, ETrue, iGlobalEd->Rect());
#endif
break;
#endif
case ETextEdCmdMenuGoTo:
case ETextEdCmdToolBarGoTo:
CmdGotoL(aCommand);
break;
case EEikCmdZoomIn:
case EEikCmdZoomOut:
ZoomL(aCommand);
break;
case ETextEdCmdShowTitleBar:
SetTitleBarVisibilityL(!iIsTitleBarVisible);
break;
case ETextEdCmdShowHorizScrollBar:
SetHorizScrollBarVisibilityL(!iIsHorizScrollBarVisible);
break;
case ETextEdCmdFullScreen:
SetFullScreenVisibilityL(!iIsFullScreenVisible);
break;
case EEikCmdFontChange:
{
TInt flag=EGulNoSymbolFonts;
if (iIsMonoSpaced)
flag=EGulMonospaceFontsOnly;
if (iGlobalEd->RunFontDialogL(flag,NULL,KTextedFontControlFlags))
SetTabWidthL(iTabWidthInChars);
break;
}
case ETextEdCmdIndentation:
TabSettingL();
break;
case ETextEdCmdSetPreferences:
SetPreferencesL();
break;
case EEikCmdInsertSymbol:
iGlobalEd->RunCharMapDialogL();
break;
case ETextEdCmdTranslate:
DoTranslateL(CTextTranslator::ERelease);
break;
case ETextEdCmdTranslateDebug:
DoTranslateL(CTextTranslator::EDebug);
break;
case ETextEdCmdLog:
DoLogL();
break;
case ETextEdCmdRun:
DoRunFileL();
break;
case ETextEdCmdShowLastError:
CmdShowLastError();
break;
case ETextEdCmdIRReceive:
#ifdef USE_IRLISTEN
iIrListenAppUi->ToggleListeningL();
#endif
break;
case ETextEdCmdScrollBarNone:
case ETextEdCmdScrollBarVertical:
case ETextEdCmdScrollBarHorizontal:
case ETextEdCmdScrollBarBoth:
case ETextEdCmdCycleScrollBars:
CmdScrollBarL(aCommand);
break;
default:
HandleSendAsMenuL(aCommand);
break;
}
}
void DeleteSendAsTempFile(TAny* aFileName)
{
CEikonEnv::Static()->FsSession().Delete(*(STATIC_CAST(TDesC*,aFileName)));
}
#ifdef USE_SENDAS
void CTxtedAppUi::HandleSendAsMenuL(const TInt aCommand)
{
/**
* Sends OPL source via the SendUi mechanism.
*
* If there is a highlighted selection, it is sent as text via the message body
* otherwise, the whole file is sent as an attachment to an empty body.
*/
if (iSendAppUi && iSendAppUi->CommandIsValidL(aCommand, TSendingCapabilities(KSendAsMaxBodySizeNotUsed,KSendAsMaxMessageSizeNotUsed,NULL), NULL))
{
TBool sendAsAttachment=EFalse;
TCursorSelection selection=iGlobalEd->Selection();
TSendingCapabilities capabilities=iSendAppUi->MtmCapabilitiesL(iSendAppUi->MtmForCommand(aCommand));
const TBool supportsBody=(capabilities.iFlags & TSendingCapabilities::ESupportsBodyText);
const TInt selectionLength=selection.Length();
// Setup how we should try to send the message by checking if we need to
// send it as an attachment
if ((capabilities.iFlags & TSendingCapabilities::ESupportsAttachments) && (!supportsBody))
sendAsAttachment=ETrue; // Can't use body text, so use attachement instead.
if (supportsBody && !sendAsAttachment)
{
CParaFormatLayer* defaultPFL=CParaFormatLayer::NewL();
CleanupStack::PushL(defaultPFL);
CCharFormatLayer* defaultCFL=CCharFormatLayer::NewL();
CleanupStack::PushL(defaultCFL);
CRichText* richToSend=CRichText::NewL(defaultPFL,defaultCFL);
CleanupStack::PushL(richToSend);
HBufC* buffer=NULL;
if (selectionLength)
{
// Send selection as body text
buffer=HBufC::NewLC(selectionLength);
TPtr selectionPtr=buffer->Des();
iGlobalEd->GlobalText()->Extract(selectionPtr,selection.LowerPos(),selectionLength);
}
else
{
// Send entire file as body text
buffer=HBufC::NewLC(iGlobalEd->GlobalText()->DocumentLength());
TPtr bodyPtr=buffer->Des();
iGlobalEd->GlobalText()->Extract(bodyPtr,0);
}
richToSend->InsertL(0,*buffer);
iSendAppUi->CreateAndSendMessageL(aCommand,richToSend);
CleanupStack::PopAndDestroy(4); // buffer,richToSend,defaultCFL,defaultPFL
return;
}
else if (!supportsBody && !sendAsAttachment)
User::Leave(KErrNotSupported);
// MTM doesn't support body text, so it must support attachments.
TFileName fileName(iEikonEnv->Process()->MainDocFileName());
TParse path;
CApaProcess* process=iDocument->Process();
path.Set(process->TempFilePath(),&fileName,NULL);
fileName=path.FullName();
ConeUtils::EnsurePathExistsL(fileName);
// Create a TCleanupItem so we can delete temp file if anything below leaves. Note
// that we add it to the stack here (BEFORE it's been created) so we can PopAndDestroy
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?