⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eik_key.cpp

📁 在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己的开发
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		if (init<aMinTime)
			init=aMinTime;
		else if (init>aMaxTime)
			init=aMaxTime;
		timeEd->ConstructL(aMinTime,aMaxTime,init,flags);
		}
	}

void COplDialog::AddDateEditorL(const TDesC& aPrompt,TInt32 aMinDate,TInt32 aMaxDate,TAny* aReturn)
	{
	TDateTime baseDateTime(1900,TMonth(0),0,0,0,0,0);
	TTime baseTime(baseDateTime);
#if defined(__UIQ__)
	CQikDateEditor* dateEd=(CQikDateEditor*)CreateLineByTypeL(aPrompt,++iNextId,KOplDateEditor,aReturn);
#else
#if defined(__S80_DP2_0__)
	TBool realClipboardButtonSetting = Title().HasClipboardButton();
	Title().SetHasClipboardButton(ETrue);
	CEikDateEditor* dateEd=(CEikDateEditor*)CreateLineByTypeL(aPrompt,++iNextId,KOplDateEditor,aReturn);
	Title().SetHasClipboardButton(realClipboardButtonSetting);
#else
	CEikDateEditor* dateEd=(CEikDateEditor*)CreateLineByTypeL(aPrompt,++iNextId,KOplDateEditor,aReturn);
#endif
#endif
	TInt32 init=OplUtil::GetLong(aReturn);
	if (init<aMinDate)
		init=aMinDate;
	else if (init>aMaxDate)
		init=aMaxDate;
	dateEd->ConstructL(baseTime+TTimeIntervalDays(aMinDate),baseTime+TTimeIntervalDays(aMaxDate),baseTime+TTimeIntervalDays(init),EFalse);
										// with popout calendar
	}

#if !defined(__SERIES60__)
void COplDialog::AddFileSelectorL(const TDesC& aPrompt1,const TDesC& aPrompt2,const TDesC& aPrompt3,TInt aFlags,const TUidType& aUidType,TText* aReturn)
	{
	COplFileNameSelector* fileNameSelector = (COplFileNameSelector*)CreateLineByTypeL(aPrompt1,++iNextId,KOplFileSelector,aReturn);
	fileNameSelector->ConstructL(fileNameSelector,aFlags);
	fileNameSelector->SetUidType(aUidType);
	AddValidatedItemL(fileNameSelector,iNextId);

	COplFolderNameSelector* folderNameSelector = (COplFolderNameSelector*)CreateLineByTypeL(aPrompt2,++iNextId,KOplFolderNameSel,NULL);
	folderNameSelector->ConstructL(folderNameSelector,aFlags);

	COplDriveNameSelector* driveNameSelector = (COplDriveNameSelector*)CreateLineByTypeL(aPrompt3,++iNextId,KOplDriveNameSel,NULL);
	driveNameSelector->ConstructL(driveNameSelector,EEikChlistIncrementalMatching,0);
	driveNameSelector->BuildDriveArrayL();

	folderNameSelector->SetCorrespondingDriveSelector(driveNameSelector);

	TParse parse;
	TUint8* ptr8=(TUint8*)aReturn;
	TPtrC ptr((TText*)(ptr8+1+KOplAlignment),*(ptr8));
	User::LeaveIfError(iCoeEnv->FsSession().Parse(ptr, parse));
	if (aFlags&KFileSelectorFlagShowSystem)
		folderNameSelector->SetShowSystem(ETrue);
	folderNameSelector->SetRootL(parse.Drive());
	if (parse.ExtPresent()&&(!parse.IsExtWild())&&(aFlags&KFileSelectorFlagDisallowExisting))
		fileNameSelector->SetExtensionL(parse.Ext());
	if (aFlags&KFileSelectorFlagAllowWildcards)
		fileNameSelector->SetMultipleSelectionAllowed(ETrue);
	if (aFlags&KFileSelectorFlagShowRom)
		driveNameSelector->ShowRom(ETrue);
	folderNameSelector->SetFileSelectionObserver(fileNameSelector);
	driveNameSelector->SetFileSelectionObserver(folderNameSelector);
	driveNameSelector->SetFullNameL(parse.FullName()); 
	}

void COplDialog::AddFileEditorL(const TDesC& aPrompt1,const TDesC& aPrompt2,const TDesC& aPrompt3,TInt aFlags,TText* aReturn)
	{
	COplFileNameEditor* fileNameEditor = (COplFileNameEditor*)CreateLineByTypeL(aPrompt1,++iNextId,KOplFileEditor,aReturn);
	fileNameEditor->ConstructL(aFlags);
	AddValidatedItemL(fileNameEditor,iNextId);

	COplFolderNameSelector* folderNameSelector = (COplFolderNameSelector*)CreateLineByTypeL(aPrompt2,++iNextId,KOplFolderNameSel,NULL);
	folderNameSelector->ConstructL(folderNameSelector,aFlags);

	COplDriveNameSelector* driveNameSelector = (COplDriveNameSelector*)CreateLineByTypeL(aPrompt3,++iNextId,KOplDriveNameSel,NULL);
	driveNameSelector->ConstructL(driveNameSelector,EEikChlistIncrementalMatching,0);
	driveNameSelector->BuildDriveArrayL();

	folderNameSelector->SetCorrespondingDriveSelector(driveNameSelector);

	TParse parse;
	TUint8* ptr8=(TUint8*)aReturn;
	TPtrC ptr((TText*)(ptr8+1+KOplAlignment),*(ptr8));
	User::LeaveIfError(iCoeEnv->FsSession().Parse(ptr, parse));
	if (aFlags&KFileSelectorFlagShowSystem)
		folderNameSelector->SetShowSystem(ETrue);
	folderNameSelector->SetRootL(parse.Drive());
	folderNameSelector->SetFileSelectionObserver(fileNameEditor);
	if (aFlags&KFileSelectorFlagShowRom)
		driveNameSelector->ShowRom(ETrue);
	driveNameSelector->SetFileSelectionObserver(folderNameSelector);
	driveNameSelector->SetFullNameL(parse.FullName()); 
	}

void COplDialog::AddFolderSelectorL(const TDesC& aPrompt1,const TDesC& aPrompt2,TInt aFlags,TText* aReturn)
	{
	COplFolderNameSelector* folderNameSelector = (COplFolderNameSelector*)CreateLineByTypeL(aPrompt1,++iNextId,KOplFolderNameSel,aReturn);
	folderNameSelector->ConstructL(folderNameSelector,aFlags);

	COplDriveNameSelector* driveNameSelector = (COplDriveNameSelector*)CreateLineByTypeL(aPrompt2,++iNextId,KOplDriveNameSel,NULL);
	driveNameSelector->ConstructL(driveNameSelector,EEikChlistIncrementalMatching,0);
	driveNameSelector->BuildDriveArrayL();

	folderNameSelector->SetCorrespondingDriveSelector(driveNameSelector);

	TParse parse;
	TUint8* ptr8=(TUint8*)aReturn;
	TPtrC ptr((TText*)(ptr8+1+KOplAlignment),*(ptr8));
	User::LeaveIfError(iCoeEnv->FsSession().Parse(ptr, parse));
	if (aFlags&KFileSelectorFlagShowSystem)
		folderNameSelector->SetShowSystem(ETrue);
	folderNameSelector->SetRootL(parse.Drive());
	if (aFlags&KFileSelectorFlagShowRom)
		driveNameSelector->ShowRom(ETrue);
	driveNameSelector->SetFileSelectionObserver(folderNameSelector);
	driveNameSelector->SetFullNameL(parse.DriveAndPath()); 
	}

void COplDialog::AddFolderEditorL(const TDesC& aPrompt1,const TDesC& aPrompt2,const TDesC& aPrompt3,TInt aFlags,TText* aReturn)
	{
	COplFolderNameEditor* folderNameEditor = (COplFolderNameEditor*)CreateLineByTypeL(aPrompt1,++iNextId,KOplFolderNameEd,aReturn);
	folderNameEditor->ConstructL(aFlags);
	AddValidatedItemL(folderNameEditor,iNextId);

	COplFolderNameSelector* folderNameSelector = (COplFolderNameSelector*)CreateLineByTypeL(aPrompt2,++iNextId,KOplFolderNameSel,NULL);
	folderNameSelector->ConstructL(folderNameSelector,aFlags);

	COplDriveNameSelector* driveNameSelector = (COplDriveNameSelector*)CreateLineByTypeL(aPrompt3,++iNextId,KOplDriveNameSel,NULL);
	driveNameSelector->ConstructL(driveNameSelector,EEikChlistIncrementalMatching,0);
	driveNameSelector->BuildDriveArrayL();

	folderNameSelector->SetCorrespondingDriveSelector(driveNameSelector);

	TParse parse;
	TUint8* ptr8=(TUint8*)aReturn;
	TPtrC ptr((TText*)(ptr8+1+KOplAlignment),*(ptr8));
	User::LeaveIfError(iCoeEnv->FsSession().Parse(ptr, parse));
	if (aFlags&KFileSelectorFlagShowSystem)
		folderNameSelector->SetShowSystem(ETrue);
	folderNameSelector->SetRootL(parse.Drive());
	folderNameSelector->SetFileSelectionObserver(folderNameEditor);
	if (aFlags&KFileSelectorFlagShowRom)
		driveNameSelector->ShowRom(ETrue);
	driveNameSelector->SetFileSelectionObserver(folderNameSelector);
	driveNameSelector->SetFullNameL(parse.DriveAndPath()); 
	}
#else
void COplDialog::AddFileSelectorL(const TDesC&, const TDesC&, const TDesC&, TInt, const TUidType&, TText*) {}
void COplDialog::AddFileEditorL(const TDesC&, const TDesC&, const TDesC&, TInt, TText*) {}
void COplDialog::AddFolderSelectorL(const TDesC&, const TDesC&, TInt, TText*) {}
void COplDialog::AddFolderEditorL(const TDesC&, const TDesC&, const TDesC&, TInt, TText*) {}
#endif

/*
void COplDialog::AddCheckBoxL(const TDesC& aPrompt,TInt16* aReturn)
	{
	CEikCheckBox* checkBox=(CEikCheckBox*)CreateLineByTypeL(aPrompt,++iNextId,KOplCheckBox,aReturn);
	TInt init=*(aReturn);
	checkBox->SetState(init?CEikButtonBase::ESet:CEikButtonBase::EClear);
	}
*/

void COplDialog::AddMultiLineEditorL(const TDesC& aPrompt,TInt aNumOfLines,TInt aWidthInChars,TInt aMaxLength,TInt32* aReturn, TBool aReadOnly)
	{
	TInt length=OplUtil::GetLong(aReturn);
	if (length<0 || length>aMaxLength)
		User::Leave(KErrArgument);
	CEikEdwin* edwin=(CEikEdwin*)CreateLineByTypeL(aPrompt,++iNextId,KOplMultiLineTextEditor,aReturn);
	Line(iNextId)->SetTakesEnterKey(ETrue);
	edwin->ConstructL(CEikEdwin::EInclusiveSizeFixed,aWidthInChars,aMaxLength,aNumOfLines);
	edwin->CreateScrollBarFrameL()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);
	TPtr ptr((TText*)(aReturn+1),length,aMaxLength); // KOplAlignment not needed
	edwin->SetTextL(&ptr);
	edwin->SetReadOnly(aReadOnly);
	}

void COplDialog::GetHelpContext(TCoeHelpContext& aContext) const
	{
/* If this dialog is being displayed by Uikon and the user hits the Help key then
 * Cone's CCoeAppUi calls GetHelpContext() for each control on the control stack.
 * So, have to return the help context for this control (if the OPL author has 
 * set one using SetHelp control%,context$) or null.
 *
 * If the author has set one, it'll be in the dialog'th element of the help context
 * array iHelpContextNamesArray.
 */
	COplRuntime* rt=TheRuntime(); // expensive call, so cache it here.
	TFixedArray<TCoeContextName,KOplLenContextNamesArray>* helpContext=rt->HelpContextNamesArray();
	if (helpContext)
		{
		TCoeContextName dialogContext=helpContext->At(EOplHelpDialog);
		TUid helpUid=rt->HelpUid();
		if (dialogContext.Length() && helpUid!=KNullUid)
			{
			aContext=TCoeHelpContext(helpUid,dialogContext);
			}
		}
	}

//
// Dialog OpCodes
//
void FuncOpCode::Dialog(CStack& aStack, COplRuntime& aRuntime, CFrame* aFramePtr)
	{
	COplDialog* dialog=aRuntime.Dialog();
	if ((dialog==NULL)||(dialog->InitFrame()!=aFramePtr))
		User::Leave(KOplStructure);
	aRuntime.SetDialog(NULL);
	CleanupStack::PushL(dialog);
	TInt16 ret;
	dialog->RunLD(&ret);
	aStack.Push(ret);
	}

void OpCode::dInit(CStack& aStack, COplRuntime& aRuntime, CFrame* aFramePtr)
	{
	// MUST for real code have one dialog ptr in aRuntime
	// Must save frame pointer in aRuntime
	// Must save item ID in aRuntime

	delete aRuntime.Dialog();
	aRuntime.SetDialog(NULL); //set to NULL incase the new leaves
	TInt noOfParams=aRuntime.IP8();
	TInt flags=EEikDialogFlagWait|EEikDialogFlagAllKeysToButtons /*|EEikDialogFlagNoBackup*/;
	TPtrC title;
	if (noOfParams==2)
		{
		TInt f=aStack.PopInt16();
		flags|=((f&EOplDialogFlagsButtonsRight)?EEikDialogFlagButtonsRight:EEikDialogFlagButtonsBelow);
		if (f&EOplDialogFlagsNoTitleBar)
			flags|=EEikDialogFlagNoTitleBar;
		if (f&EOplDialogFlagsFillScreen)
			flags|=EEikDialogFlagFillScreen;
		if (f&EOplDialogFlagsNoDrag)
			flags|=EEikDialogFlagNoDrag;
		if (f&EOplDialogFlagsDensePacking)
			flags|=EEikDialogFlagDensePacking;
		}
	if (noOfParams>0)
		{
		title.Set(aStack.PopString());
		}
	COplDialog* dialog=new(ELeave) COplDialog();
#if defined(__UIQ__)
	dialog->ConstructLC(aFramePtr);
#else
	dialog->ConstructLC(aFramePtr,flags);
#endif
	if (title.Length()!=0)
		dialog->AddTitleL(title);
	aRuntime.SetDialog(dialog);
	CleanupStack::Pop();
	}

LOCAL_C void ParseForPromptsL(const TDesC& aString,TPtrC& aP1,TPtrC& aP2,TPtrC& aP3)
	{
	TInt pos=aString.Locate(',');
	if (pos==KErrNotFound)
		{
		aP1.Set(aString);
		return;
		}
	aP1.Set(aString.Ptr(),pos);
	if (pos>=aString.Length())
		return;
	TPtrC rest=aString.Mid(pos+1);
	pos=rest.Locate(',');
	if (pos==KErrNotFound)
		{
		aP2.Set(rest);
		return;
		}
	aP2.Set(rest.Ptr(),pos);
	if (pos<rest.Length())
		{
		aP3.Set(rest.Mid(pos+1));
		if (aP3.Locate(',')!=KErrNotFound)
			User::Leave(KErrArgument);
		}
	}

struct SOplButton
	{
	TInt iId;
	TBool iDefaultCommand;
	TPtrC iButtonText;
	CEikButtonGroupContainer::THotKeyFlags iHotkeyFlags;
	};

const TInt KMaxSupportedButtons=4;

void OpCode::dItem(CStack& aStack, COplRuntime& aRuntime, CFrame* aFramePtr)
	// Handle a control item in a dialog
	{
	COplDialog* dialog=aRuntime.Dialog();
	
	aRuntime.SetDialog(NULL); // temporarily take ownership
	CleanupStack::PushL(dialog);

	if ((dialog==NULL)||(dialog->InitFrame()!=aFramePtr))
		User::Leave(KOplStructure);
	TInt itemType=aRuntime.IP8();
	switch (itemType)
		{
	case 0:
		{
		// dTEXT
		TInt flags=(aRuntime.IP8()?aStack.PopInt16():0);
		TPtrC body=aStack.PopString();
		TPtrC prompt=aStack.PopString();
		dialog->AddTextLabelL(prompt,body,flags);
		break;
		}
	case 1:
		{
		// dCHOICE
		TInt numOptionalArgs = aRuntime.IP8();
		TBool incrementalMatching=EFalse;
		if (numOptionalArgs==1)
			incrementalMatching = (TBool)(aStack.PopInt16());
		TPtrC list=aStack.PopString();
		TPtrC prompt=aStack.PopString();
		aStack.PopInt16(); // field flag
		TInt16* ptr=&aStack.PopRefInt16();
		CDesCArray* array=dialog->AddChoiceListL(prompt,ptr,incrementalMatching);
		TChar comma(',');
		TInt remainder=list.Length();
		TInt pos=list.Locate(comma);
		while (pos>0)
			{
			array->AppendL(list.Left(pos));
			remainder-=(pos+1);
			list.Set(list.Right(remainder));
			pos=list.Locate(comma);
			}
		if (pos==0||list.Length()==0)
			User::Leave(KErrArgument);
		_LIT(KEllipses,"...");
		if (list!=KEllipses)
			{
			array->AppendL(list);
			dialog->ChoiceListFinishedL();
			}
		break;
		}
	case 2:
		{
		// dLONG
		// Stack (tos 1st)= {max&,min&,prompt$,leftSideVar}
		TInt max=aStack.PopInt32();
		TInt min=aStack.PopInt32();
		if (min>max)
			User::Leave(KErrArgument);
		TPtrC prompt=aStack.PopString();
		aStack.PopInt16(); // field flag
		TInt32* pLive=&(aStack.PopRefInt32());
		dialog->AddLongEditorL(prompt,min,max,pLive);
		break;
		}
	case 3:
		{
		// dFLOAT
		TReal64 max=aStack.PopReal64();
		TReal64 min=aStack.PopReal64();
		if (min>max)
			User::Leave(KErrArgument);
		TPtrC prompt=aStack.PopString();
		aStack.PopInt16(); // field flag
		dialog->AddFloatEditorL(prompt,min,max,&aStack.PopRefReal64());
		break;
		}
	case 4:
		{
		// dTIME
		TUint max=aStack.PopInt32();
		TUint min=Abs(aStack.PopInt32());
		TInt16 flags=aStack.PopInt16();
		if (flags<0||flags>0xf||min>max||max>=86400)
			User::Leave(KErrArgument);
		TPtrC prompt=aStack.PopString();
		aStack.PopInt16(); // field flag
		dialog->AddTimeEditorL(prompt,min,max,flags,&aStack.PopRefInt32());
		break;
		}
	case 5:
		{
		// dDATE
		TInt32 max=aStack.PopInt32();
		TInt32 min=Abs(aStack.PopInt32());
		if (min>max)
			User::Leave(KErrArgument);
		TPtrC prompt=aStack.PopString();
		aStack.PopInt16(); // field flag
		dialog->AddDateEditorL(prompt,min,max,&aStack.PopRefInt32());
		break;
		}
	case 6:
	case 7:
		{
		// case 7 is dEDIT with len%
		// case 6 is dEDIT without len%
		TInt widthInChars=((itemType==6)?0:aStack.PopInt16());
		TPtrC prompt=aStack.PopString();
		aStack.PopInt16(); // field flag
		TText* ptr=aStack.PopRefString();
		TInt maxLen=aStack.PopInt16();
		if (itemType==6)
			widthInChars=maxLen;
		dialog->AddTextEditorL(prompt,widthInChars,maxLen,ptr);
		break;
		}
	case 8:
		{
		// dXINPUT
		TInt numOptionalArgs = aRuntime.IP8();
		TBool seedTextContents=EFalse;
		if (numOptionalArgs==1)
			seedTextContents = (TBool)(aStack.PopInt16());
		TPtrC prompt=aStack.PopString();
		aStack.PopInt16(); // field flag
		TText* ptr=aStack.PopRefString();
		TInt maxLen=aStack.PopInt16();
		dialog->AddSecretEditorL(prompt,maxLen,ptr,seedTextContents);
		break;
		}
	case 9:
		{
		// dFILE
		TUid uid3=TUid::Uid(aStack.PopInt32());
		TUid uid2=TUid::Uid(aStack.PopInt32());
		TUid uid1=TUid::Uid(aStack.PopInt32());
		TUidType uidType(uid1,uid2,uid3);
		TInt16 flags=aStack.PopInt16();
		TPtrC prompt=aStack.PopString();

		TPtrC p1;
		TPtrC p2;
		TPtrC p3;
		ParseForPromptsL(prompt,p1,p2,p3);

		aStack.PopInt16(); // field flag
		TText* ptr=aStack.PopRefString();
		if (aStack.PopInt16()<255) // used to be 128
			User::Leave(KErrArgument);
		if (flags&KFileSelectorFlagAllowDirsOnly) // folders only
			{
			if (flags&KFileSelectorFlagEditor) //editor
				dialog->AddFolderEditorL(p1,p2,p3,flags,ptr);
			else //selector
				{
				if (p3.Length()!=0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -