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 + -
显示快捷键?