/* Copyright (c) 2005 Nokia. All rights reserved. */ /* The PerlUi class is licensed under the same terms as Perl itself. */ #include "PerlUi.h" #ifdef __SERIES60__ # include # include # include # ifndef __SERIES60_1X__ # include # endif #endif /* #ifdef __SERIES60__ */ #if defined(__SERIES80__) || defined(__SERIES90__) # include # include # include # include # include # include #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */ #ifdef __UIQ__ # include # include # include #endif /* #ifdef __UIQ__ */ #include #include #include #include #include #include #include #include #include #include "PerlUi.hrh" #include "PerlUi.rsg" #if defined(__SERIES80__) || defined(__SERIES90__) #include "Eikon.rsg" #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "PerlBase.h" #include "PerlUtil.h" #define symbian_get_vars() Dll::Tls() // Not visible from perlXYZ.lib? _LIT(KDefaultScript, "default.pl"); EXPORT_C void CPerlUiAppUi::ConstructL() { BaseConstructL(); iAppView = CPerlUiAppView::NewL(ClientRect()); AddToStackL(iAppView); CEikonEnv::Static()->DisableExitChecks(ETrue); // Symbian FAQ-0577. } EXPORT_C TBool CPerlUi::OkCancelDialogL(TDesC& aMessage) { #ifdef __SERIES60__ CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone); dlg->PrepareLC(R_PERLUI_OK_CANCEL_DIALOG); dlg->SetTextL(aMessage); return dlg->RunDlgLD() == EAknSoftkeyOk; #endif /* #ifdef __SERIES60__ */ #if defined(__SERIES80__) || defined(__SERIES90__) return CCknConfirmationDialog::RunDlgWithDefaultIconLD(aMessage, R_EIK_BUTTONS_CANCEL_OK); #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */ #ifdef __UIQ__ CEikDialog* dlg = new (ELeave) CEikDialog(); return dlg->ExecuteLD(R_PERLUI_OK_CANCEL_DIALOG) == EEikBidOk; #endif /* #ifdef __UIQ__ */ } EXPORT_C TBool CPerlUi::YesNoDialogL(TDesC& aMessage) { #ifdef __SERIES60__ CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone); dlg->PrepareLC(R_PERLUI_YES_NO_DIALOG); dlg->SetTextL(aMessage); return dlg->RunDlgLD() == EAknSoftkeyOk; #endif /* #ifdef __SERIES60__ */ #if defined(__SERIES80__) || defined(__SERIES90__) return CCknConfirmationDialog::RunDlgWithDefaultIconLD(aMessage, R_EIK_BUTTONS_NO_YES); #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */ #ifdef __UIQ__ CEikDialog* dlg = new (ELeave) CEikDialog(); return dlg->ExecuteLD(R_PERLUI_YES_NO_DIALOG) == EEikBidOk; #endif /* #ifdef __UIQ__ */ } EXPORT_C void CPerlUi::InformationNoteL(TDesC& aMessage) { #ifdef __SERIES60__ CAknInformationNote* note = new (ELeave) CAknInformationNote; note->ExecuteLD(aMessage); #endif /* #ifdef __SERIES60__ */ #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) CEikonEnv::Static()->InfoMsg(aMessage); #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */ } EXPORT_C TInt CPerlUi::WarningNoteL(TDesC& aMessage) { #ifdef __SERIES60__ CAknWarningNote* note = new (ELeave) CAknWarningNote; return note->ExecuteLD(aMessage); #endif /* #ifdef __SERIES60__ */ #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) CEikonEnv::Static()->AlertWin(aMessage); return ETrue; #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */ } #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) CPerlUiTextQueryDialog::CPerlUiTextQueryDialog(HBufC*& aBuffer) : iData(aBuffer) { } TBool CPerlUiTextQueryDialog::OkToExitL(TInt /* aKeycode */) { iData = static_cast(Control(EPerlUiTextQueryInputField))->GetTextInHBufL(); return ETrue; } void CPerlUiTextQueryDialog::PreLayoutDynInitL() { SetTitleL(iTitle); CEikLabel* promptLabel = ControlCaption(EPerlUiTextQueryInputField); promptLabel->SetTextL(iPrompt); } /* TODO: OfferKeyEventL() so that newline can be seen as 'OK'. * Or a hotkey for the button? */ #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */ EXPORT_C TBool CPerlUi::TextQueryDialogL(const TDesC& aTitle, const TDesC& aPrompt, TDes& aData, const TInt aMaxLength) { #ifdef __SERIES60__ CAknTextQueryDialog* dlg = new (ELeave) CAknTextQueryDialog(aData); dlg->SetPromptL(aPrompt); dlg->SetMaxLength(aMaxLength); return dlg->ExecuteLD(R_PERLUI_TEXT_QUERY_DIALOG); #endif /* #ifdef __SERIES60__ */ #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) HBufC* data = NULL; CPerlUiTextQueryDialog* dlg = new (ELeave) CPerlUiTextQueryDialog(data); dlg->iTitle.Set(aTitle); dlg->iPrompt.Set(aPrompt); dlg->iMaxLength = aMaxLength; if (dlg->ExecuteLD(R_PERLUI_ONELINER_DIALOG)) { aData.Copy(*data); return ETrue; } return EFalse; #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */ } EXPORT_C TBool CPerlUi::FileQueryDialogL(TDes& aFilename) { #ifdef __SERIES60__ return AknCommonDialogs::RunSelectDlgLD(aFilename, R_PERLUI_FILE_SELECTION_DIALOG); #endif /* #ifdef __SERIES60__ */ #if defined(__SERIES80__) || defined(__SERIES90__) if (CCknOpenFileDialog::RunDlgLD(aFilename, CCknFileListDialogBase::EShowAllDrives |CCknFileListDialogBase::EShowSystemFilesAndFolders |CCknFileListDialogBase::EShowBothFilesAndFolders )) { TEntry aEntry; // Be paranoid and check that the file is there. RFs aFs; aFs.Connect(); if (aFs.Entry(aFilename, aEntry) == KErrNone) return ETrue; else CEikonEnv::Static()->InfoMsg(_L("File not found")); } return EFalse; #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) */ #ifdef __UIQ__ return EFalse; // No filesystem access in UIQ 2.x! #endif /* #ifdef __UIQ__ */ } #ifdef __SERIES60__ EXPORT_C void CPerlUiAppUi::HandleCommandL(TInt aCommand) { switch(aCommand) { case EEikCmdExit: case EAknSoftkeyExit: Exit(); break; default: DoHandleCommandL(aCommand); break; } } #endif /* #ifdef __SERIES60__ */ #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) EXPORT_C void CPerlUiAppView::HandleCommandL(TInt aCommand, CPerlUiAppUi* aAppUi) { aAppUi->DoHandleCommandL(aCommand); } EXPORT_C void CPerlUiAppUi::HandleCommandL(TInt aCommand) { switch(aCommand) { case EEikCmdExit: Exit(); break; default: iAppView->HandleCommandL(aCommand, this); break; } } #endif /* #if defined(__SERIES80__) || defined(__SERIES90__) || defined(__UIQ__) */ CPerlUiAppView* CPerlUiAppView::NewL(const TRect& aRect) { CPerlUiAppView* self = CPerlUiAppView::NewLC(aRect); CleanupStack::Pop(self); return self; } CPerlUiAppView* CPerlUiAppView::NewLC(const TRect& aRect) { CPerlUiAppView* self = new (ELeave) CPerlUiAppView; CleanupStack::PushL(self); self->ConstructL(aRect); return self; } void CPerlUiAppView::ConstructL(const TRect& aRect) { CreateWindowL(); SetRect(aRect); ActivateL(); } CPerlUiAppView::~CPerlUiAppView() { } void CPerlUiAppView::Draw(const TRect& /*aRect*/) const { CWindowGc& gc = SystemGc(); TRect rect = Rect(); gc.Clear(rect); }