--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditor/ImageEditorUI/src/ImageEditorUIView.cpp Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,1516 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - Initial contribution
+*
+* Contributors:
+* Ixonos Plc
+*
+* Description:
+* Image Editor's view class that handles all view related issues.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikmenub.h>
+#include <eikbtgpc.h>
+#include <bautils.h>
+
+#include <avkon.hrh>
+#include <aknviewappui.h>
+#include <aknconsts.h>
+#include <akntitle.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <aknglobalnote.h>
+#include <sendui.h>
+#include <aknpopup.h>
+#include <CMessageData.h>
+#include <AknInfoPopupNoteController.h>
+#include <Avkon.rsg>
+
+#include <apgcli.h>
+#include <apadef.h>
+#include <apaid.h>
+#include <StringLoader.h>
+#include <pathinfo.h>
+
+#include <ImageEditorUI.rsg>
+#include "ImageEditorUI.hrh"
+#include "ImageEditorUIPanics.h"
+#include "ImageEditorUIView.h"
+#include "ImageEditorUIContainer.h"
+#include "ImageEditorUtils.h"
+
+#include "DrawUtils.h"
+#include "PluginInfo.h"
+#include "ResolutionUtil.h"
+
+#include "ImageEditorControlBase.h"
+#include "SingleParamControl.h"
+#include "imageeditordebugutils.h"
+#include "plugingrid.h"
+//#include "platform_security_literals.hrh"
+
+#ifdef AIW_PRINT_PROVIDER_USED
+#include <AiwServiceHandler.h>
+#include <AiwMenu.h>
+#include <AiwCommon.hrh>
+#endif
+
+// CONSTANTS
+_LIT (KResourceDir, "\\resource\\apps\\");
+_LIT (KResourceFile, "imageeditorui.rsc");
+_LIT (KComponentName, "ImageEditorUI");
+
+#define KMediaGalleryUID3 0x101F8599
+
+// MACRO DEFINITIONS
+#ifdef LANDSCAPE_SUPPORT
+#define LANDSCAPE_ARG(x) x
+#else
+#define LANDSCAPE_ARG(x)
+#endif
+
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ConstructL()
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView::ConstructL()");
+
+ // Read resource
+ TFileName resourcefile;
+ resourcefile.Append(KResourceDir);
+ resourcefile.Append(KResourceFile);
+
+ User::LeaveIfError( CompleteWithAppPath( resourcefile ) );
+ // Implementation of RConeResourceLoader uses BaflUtils::NearestLanguageFile
+ // to search for a localised resource in proper search order
+ iResLoader.OpenL ( resourcefile );
+
+ // Construct base view
+ BaseConstructL (R_IMAGEEDITORUI_VIEW);
+
+ // Get reference to status pane
+ CEikStatusPane * sp = AppUi()->StatusPane();
+
+ // Get reference to navi pane
+ iNaviPane =
+ (CAknNavigationControlContainer *) sp->ControlL (TUid::Uid (EEikStatusPaneUidNavi));
+
+ // Get reference to title pane
+ iTitlePane =
+ (CAknTitlePane *) sp->ControlL (TUid::Uid (EEikStatusPaneUidTitle));
+
+ // Initialize soft key ID:s (needs to be changed if cba resource in
+ // R_IMAGEEDITORUI_VIEW changes)
+ iSoftkey1 = EAknSoftkeyEmpty;
+ iSoftkey2 = EAknSoftkeyEmpty;
+ iMSK = EAknSoftkeyEmpty;
+
+ iInPlugin = EFalse;
+
+ iPopupController = CAknInfoPopupNoteController::NewL();
+
+ // Read strings needed for zoom popup
+ HBufC8 * res8 = CEikonEnv::Static()->AllocReadResourceAsDes8LC ( R_ZOOM_TEXTS );
+ TResourceReader resource;
+ //Set resource reader buffer
+ resource.SetBuffer( res8 );
+
+ //Read zoom text count
+ TInt16 arraycount = ( TInt16 )resource.ReadInt16();
+
+ // There have to be as many zoom texts as there are zoom states
+ __ASSERT_ALWAYS( arraycount == ENumOfZooms, User::Panic(KComponentName,
+ EImageEditorPanicZoomTextCountDoesntMatch) );
+
+ if ( arraycount > 0 )
+ {
+ //Construct a new descriptor array
+ if ( !iZoomTexts )
+ {
+ iZoomTexts = new ( ELeave ) CDesCArraySeg( 16 );
+ }
+
+ //Read text to array
+ for ( TInt i = 0; i < arraycount; ++i )
+ {
+ //Construct a flat descriptor array and read all the texts
+ HBufC * parameter = resource.ReadHBufCL();
+ CleanupStack::PushL( parameter );
+ TPtrC ptr = parameter->Des();
+ iZoomTexts->AppendL ( ptr );
+ CleanupStack::PopAndDestroy(); // parameter
+ }
+ }
+ CleanupStack::PopAndDestroy (); // res8
+
+
+#ifdef AIW_PRINT_PROVIDER_USED
+ iServiceHandler = CAiwServiceHandler::NewL();
+ // Attach menu services.
+ iServiceHandler->AttachMenuL(R_IMAGEEDITORUI_MENUPANE, R_IMAGE_EDITOR_INTEREST);
+#endif
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Constructred succesfully");
+}
+
+//=============================================================================
+EXPORT_C CImageEditorUIView::CImageEditorUIView() :
+CAknView (),
+iResLoader ( *iEikonEnv ),
+iBusy(ETrue),
+iContainerInStack(EFalse)
+{
+
+}
+
+//=============================================================================
+EXPORT_C CImageEditorUIView::~CImageEditorUIView()
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView::~CImageEditorUIView()");
+
+ iResLoader.Close();
+
+#ifdef AIW_PRINT_PROVIDER_USED
+ delete iServiceHandler;
+#endif
+
+ if (iNaviPane && iNaviDecorator)
+ {
+ iNaviPane->Pop (iNaviDecorator);
+ delete iNaviDecorator;
+ iNaviDecorator = 0;
+ }
+ iNaviDecorator = 0;
+
+ if ( iNaviPane && iPreviousNaviDecorator )
+ {
+ iNaviPane->Pop ( iPreviousNaviDecorator );
+ delete iPreviousNaviDecorator;
+ iPreviousNaviDecorator = 0;
+ }
+ iPreviousNaviDecorator = 0;
+
+ RemoveContainerFromStack();
+ if ( iContainer )
+ {
+ delete iContainer;
+ iContainer = 0;
+ }
+
+ iArray.Reset();
+
+ iNaviPane = NULL;
+ iTitlePane = NULL;
+ iControl = NULL;
+ iPreview = NULL;
+ iSendAppUi = NULL;
+
+ if ( iPopupController )
+ {
+ delete iPopupController;
+ }
+
+ if ( iZoomTexts )
+ {
+ iZoomTexts->Reset();
+ delete iZoomTexts;
+ }
+
+ LOG(KImageEditorLogFile, "CImageEditorUIView: View deleted");
+}
+
+//=============================================================================
+EXPORT_C TUid CImageEditorUIView::Id() const
+{
+ return KViewId;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::UpdateLayoutL ( TInt LANDSCAPE_ARG(aScreenMode) ) const
+ {
+ CEikStatusPane* sp = StatusPane();
+ __ASSERT_ALWAYS( sp, User::Panic(KComponentName, EImageEditorPanicStatusPaneNotAccessible) );
+
+#ifdef LANDSCAPE_SUPPORT
+
+ TPixelsAndRotation rotation;
+ iEikonEnv->ScreenDevice()->GetScreenModeSizeAndRotation(aScreenMode, rotation);
+
+ LOGFMT2(KImageEditorLogFile, "CImageEditorUIView: View mode: ScreenMode: %d, Rotation: %d", aScreenMode, rotation.iRotation);
+
+ switch (rotation.iRotation)
+ {
+ case CFbsBitGc::EGraphicsOrientationRotated270: // view mode
+ {
+ LOG(KImageEditorLogFile, "CImageEditorUIView: EGraphicsOrientationRotated270");
+
+#ifndef SWAP_SOFTKEY_POSITIONS
+ sp->SwitchLayoutL(R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_RIGHT);
+#else
+ sp->SwitchLayoutL(R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_LEFT);
+#endif
+ break;
+ }
+
+ case CFbsBitGc::EGraphicsOrientationRotated90: // camcorder mode
+ {
+ LOG(KImageEditorLogFile, "CImageEditorUIView: EGraphicsOrientationRotated90");
+
+#ifndef SWAP_SOFTKEY_POSITIONS
+ sp->SwitchLayoutL(R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_LEFT);
+#else
+ sp->SwitchLayoutL(R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_RIGHT);
+#endif
+ break;
+ }
+
+ case CFbsBitGc::EGraphicsOrientationNormal:
+ default:
+ {
+ if( CResolutionUtil::Self()->GetLandscape() )
+ {
+ sp->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL /*R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT*/ );
+ }
+ else
+ {
+ sp->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
+ }
+ break;
+ }
+ }
+
+#endif
+
+ if (iFullScreen)
+ {
+ // Hide status pane
+ sp->MakeVisible (EFalse);
+ }
+ else
+ {
+ // Make status pane visible
+ sp->MakeVisible (ETrue);
+
+#ifdef LANDSCAPE_SUPPORT
+
+ // And now the CBA...
+ TRect rect = ClientRect();
+
+ CEikButtonGroupContainer* cba = Cba();
+ __ASSERT_ALWAYS( cba, User::Panic(KComponentName, EImageEditorPanicCbaNotAccessible) );
+
+ MEikButtonGroup* bgrp = cba->ButtonGroup();
+ STATIC_CAST( CEikCba*, bgrp)->SetBoundingRect(rect);
+ cba->HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+
+#endif
+ }
+
+ }
+
+//=============================================================================
+EXPORT_C TBool CImageEditorUIView::ViewScreenModeCompatible(TInt /*aScreenMode*/)
+ {
+ // Supports any screen size
+ return ETrue;
+ }
+
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::HandleCommandL (TInt aCommand)
+{
+
+ // If focus is gained or lost
+ if ( (aCommand == EImageEditorFocusGained) || (aCommand == EImageEditorFocusLost) )
+ {
+ if (iContainer && iControl)
+ {
+ ((CImageEditorControlBase *)iControl)->HandlePluginCommandL (aCommand);
+ }
+ }
+ // If soft key 1 pressed
+ else if ( iInPlugin && (aCommand == iSoftkey1) && (aCommand != EAknSoftkeyOptions) )
+ {
+ if ( iContainer && iContainer->Busy() )
+ {
+ return;
+ }
+ else
+ {
+ ((CImageEditorControlBase *)iControl)->HandlePluginCommandL (aCommand);
+ }
+ }
+
+ // If soft key 2 pressed
+ else if ( iInPlugin && (aCommand == iSoftkey2) )
+ {
+ if ( iContainer && iContainer->Busy() )
+ {
+ return;
+ }
+ else
+ {
+ ((CImageEditorControlBase *)iControl)->HandlePluginCommandL (aCommand);
+ }
+ }
+
+ // If msk pressed
+ else if ( iInPlugin && (aCommand == iMSK) )
+ {
+ if ( iContainer && iContainer->Busy() )
+ {
+ return;
+ }
+ else
+ {
+ ((CImageEditorControlBase *)iControl)->HandlePluginCommandL (aCommand);
+ }
+ }
+
+ // Menu plug-in item selected
+ else if ( iInPlugin && MenuItemPressedL(aCommand) )
+ {
+ ((CImageEditorControlBase *)iControl)->HandlePluginCommandL (aCommand);
+ }
+
+ else
+ {
+ switch (aCommand)
+ {
+ case EImageEditorPreGlobalZoomChange:
+ case EImageEditorGlobalZoomChanged:
+ case EImageEditorGlobalCropChanged:
+ case EImageEditorPreGlobalPanChange:
+ case EImageEditorGlobalPanChanged:
+ case EImageEditorGlobalRotationChanged:
+ case EImageEditorPreScreenModeChange:
+ case EImageEditorPostScreenModeChange:
+ {
+ if (iInPlugin)
+ {
+ ((CImageEditorControlBase *)iControl)->HandlePluginCommandL (aCommand);
+ }
+ return;
+ }
+
+ case EAknSoftkeyBack:
+ {
+ if ( iContainer && iContainer->Busy() )
+ {
+ return;
+ }
+ else
+ {
+ AppUi()->HandleCommandL (EImageEditorSoftkeyCmdBack);
+ break;
+ }
+ }
+ case EImageEditorUpdateSoftkeys:
+ {
+ if (iInPlugin)
+ {
+ UpdateSoftkeysL();
+ }
+ break;
+ }
+ case EImageEditorUpdateNavipane:
+ {
+ if (iInPlugin)
+ {
+ UpdateNaviPaneL();
+ }
+ break;
+ }
+ case EImageEditorTryDisplayMenuBar:
+ {
+ CEikMenuBar* menu = MenuBar();
+ __ASSERT_ALWAYS( menu, User::Panic(KComponentName, EImageEditorPanicMenuNotAccessible) );
+ menu->TryDisplayMenuBarL();
+ break;
+ }
+ case EImageEditorDoPrint:
+ {
+#ifdef AIW_PRINT_PROVIDER_USED
+
+ CAiwGenericParamList& in = iServiceHandler->InParamListL();
+
+ TFileName filename(iImageFileName);
+ TAiwVariant variant(filename);
+ TAiwGenericParam param(EGenericParamFile, variant);
+
+ in.AppendL(param);
+
+ iServiceHandler->ExecuteMenuCmdL(
+ iSelectedPrintMenuCmd,
+ in,
+ iServiceHandler->OutParamListL()
+ );
+#endif
+ break;
+ }
+ default:
+ {
+ // Print and save
+ if (aCommand >= EImageEditorMenuAiwPrintBase &&
+ aCommand <= EImageEditorMenuAiwPrintLast)
+ {
+ iSelectedPrintMenuCmd = aCommand;
+ AppUi()->HandleCommandL (EImageEditorSaveAndPrint);
+ }
+ else
+ {
+ AppUi()->HandleCommandL (aCommand);
+ }
+ break;
+ }
+ }
+ }
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::HandleClientRectChange()
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Client rect changed");
+
+ if (iContainer)
+ {
+ iContainer->SetRect ( ClientRect() );
+ }
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetImageL (CFbsBitmap * aBitmap)
+{
+ iPreview = aBitmap;
+ if (iContainer)
+ {
+ iContainer->SetImageL (aBitmap);
+ }
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetImageFileName (const TDesC& aFileName)
+{
+ iImageFileName.Copy(aFileName);
+}
+
+
+
+//=============================================================================
+EXPORT_C CCoeControl * CImageEditorUIView::GetContainer () const
+{
+ return iContainer;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ActivatePluginL (CCoeControl * aControl)
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Activating plugin");
+
+ // Activate the plugin based on UI type
+ switch ( iArray[iIndex]->PluginUiType() )
+ {
+ case 1: // EPluginUiTypeNone
+ {
+ // For non-UI plug-ins active main view and render
+ iInPlugin = EFalse;
+ ActivateMainViewL();
+ HandleCommandL (EImageEditorCmdRender);
+ break;
+
+
+ }
+ case 2: // EPluginUiTypeSingleParam
+ case 3: // EPluginUiTypeMultiParam
+ case 4: // EPluginUiTypeCustomized
+ {
+ iInPlugin = ETrue;
+
+ // Set control
+ iControl = aControl;
+ if (iContainer)
+ {
+ iContainer->SetControl (iControl);
+ }
+
+ // Set plug-in item
+ if (iControl)
+ {
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Activating plugin: calling SetSelectedUiItemL");
+
+ ((CImageEditorControlBase *)iControl)->SetSelectedUiItemL (iArray[iIndex]);
+ }
+
+ // Prepare the plug-in item
+ if (iControl)
+ {
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Activating plugin: calling PrepareL");
+
+ ((CImageEditorControlBase *)iControl)->PrepareL ();
+ }
+
+ // Update soft keys
+ UpdateSoftkeysL();
+
+ // Update navigation pane
+ UpdateNaviPaneL();
+
+ break;
+ }
+ default:
+ {
+ iInPlugin = ETrue;
+
+ // Set control
+ iControl = aControl;
+ if (iContainer)
+ {
+ iContainer->SetControl (iControl);
+ }
+ break;
+ }
+ }
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ActivateMainViewL()
+{
+
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Activating main view");
+
+ iInPlugin = EFalse;
+
+ // Reset buttons
+ iSoftkey1 = EAknSoftkeyOptions;
+ iSoftkey2 = EAknSoftkeyBack;
+ iMSK = EImageEditorMenuCmdApplyEffect;
+
+ if ( InZoomingState() )
+ {
+ if ( iZoomMode == ( ENumOfZooms - 1 ) )
+ {
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_CANCEL );
+ }
+ else
+ {
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_CANCEL_ZOOMIN );
+ }
+ }
+ else
+ {
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_BACK_APPLY );
+ }
+
+ // Reset navi pane
+ ClearNaviPaneTextL();
+
+ // Set control in container to NULL
+ iControl = 0;
+ if (iContainer)
+ {
+ iContainer->SetControl (iControl);
+ }
+
+}
+
+//=============================================================================
+EXPORT_C CPluginInfo * CImageEditorUIView::GetSelectedPluginInfoL ()
+{
+ TInt selectedItem;
+ TInt dialog_ok = CPluginSelectionDialog::RunDlgLD(&iPreview, selectedItem, &iArray, ClientRect());
+
+ if (dialog_ok && selectedItem != KErrCancel)
+ {
+ iIndex = selectedItem;
+ return iArray[selectedItem];
+ }
+ else
+ {
+ if ( InZoomingState() )
+ {
+ if ( iZoomMode == ( ENumOfZooms - 1 ) )
+ {
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_CANCEL );
+ }
+ else
+ {
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_CANCEL_ZOOMIN );
+ }
+ }
+ else
+ {
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_BACK_APPLY );
+ }
+ return NULL;
+ }
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::AddPluginUiItemL (const CPluginInfo * aPluginInfo)
+{
+ TLinearOrder<CPluginInfo> order (CPluginInfo::ComparePluginOrder);
+ iArray.InsertInOrder (aPluginInfo, order);
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetCustomButtonsL (TInt aResourceID) const
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Setting buttons");
+
+ CEikButtonGroupContainer* cba = Cba();
+ __ASSERT_ALWAYS( cba, User::Panic(KComponentName, EImageEditorPanicCbaNotAccessible) );
+
+ cba->SetCommandSetL (aResourceID);
+ cba->DrawDeferred();
+}
+
+//=============================================================================
+EXPORT_C TInt CImageEditorUIView::LaunchSaveChangesQueryL () const
+{
+ // Create dialog prompt
+ HBufC * prompt = iEikonEnv->AllocReadResourceLC (R_LIST_QUERY_SAVE_CONFIRMATION);
+
+ // Execute query dialog
+ TInt ret = SDrawUtils::LaunchQueryDialogL (*prompt);
+
+ CleanupStack::PopAndDestroy(); // prompt
+
+ return ret;
+}
+
+//=============================================================================
+EXPORT_C TInt CImageEditorUIView::LaunchExitWithoutSavingQueryL () const
+{
+ // Create dialog prompt
+ HBufC * prompt = iEikonEnv->AllocReadResourceLC (R_LIST_QUERY_EXIT_WITHOUT_SAVING_CONFIRMATION);
+
+ // Execute query dialog
+ TInt ret = SDrawUtils::LaunchQueryDialogL (*prompt);
+
+ CleanupStack::PopAndDestroy(); // prompt
+
+ return ret;
+}
+
+//=============================================================================
+EXPORT_C TInt CImageEditorUIView::LaunchCancelTextInputQueryL () const
+{
+
+ // Create dialog prompt
+ // At the moment query is not in use and corresponding string is removed
+ // from the loc file. To enable this, a new string has to be defined.
+ HBufC * prompt = iEikonEnv->AllocReadResourceLC(R_LIST_QUERY_CANCEL_TEXT_INPUT);
+
+ // Execute query dialog
+ TInt ret = SDrawUtils::LaunchQueryDialogOkOnlyL (*prompt);
+
+ CleanupStack::PopAndDestroy(); // save_conf, prompt
+
+ return ret;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::LaunchSendQueryL (
+ const TSendingCapabilities& aCaps,
+ TFileName& aFileName
+ ) const
+{
+ if (iSendAppUi)
+ {
+ CMessageData* msgData = CMessageData::NewLC();
+ msgData->AppendAttachmentL(aFileName);
+
+ iSendAppUi->ShowQueryAndSendL (msgData, aCaps);
+
+ CleanupStack::PopAndDestroy(msgData);
+ }
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::LaunchSendQueryL (
+ const TSendingCapabilities& aCaps,
+ RFile& aFileHandle
+ ) const
+{
+ if (iSendAppUi)
+ {
+ CMessageData* msgData = CMessageData::NewLC();
+ msgData->AppendAttachmentHandleL(aFileHandle);
+
+ iSendAppUi->ShowQueryAndSendL (msgData, aCaps);
+
+ CleanupStack::PopAndDestroy(msgData);
+ }
+}
+
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::LaunchSaveWaitDialogL(
+ CAknProgressDialog** aSelfPtr,
+ TInt aFinalValue,
+ MProgressDialogCallback* aCallback
+ ) const
+{
+ // Create dialog prompt
+ HBufC * prompt;
+
+ TApaAppCaption caption;
+ TRAPD( err, ResolveCaptionNameL( caption ) );
+
+ // If something goes wrong, show basic "Saving" note
+ if ( err )
+ {
+ prompt = iEikonEnv->AllocReadResourceLC( R_WAIT_NOTE_SAVING );
+ }
+ else
+ {
+ prompt = StringLoader::LoadLC( R_WAIT_NOTE_SAVING_TO, caption );
+ }
+
+ // Launch wait dialog with Cancel softkey
+ SDrawUtils::LaunchProgressNoteL (
+ aSelfPtr,
+ R_PROGRESS_DIALOG,
+ *prompt,
+ aFinalValue,
+ aCallback
+ );
+
+ CleanupStack::PopAndDestroy(); // prompt
+}
+
+//=============================================================================
+void CImageEditorUIView::ResolveCaptionNameL( TApaAppCaption& aCaption ) const
+ {
+ RApaLsSession appArcSession;
+ CleanupClosePushL( appArcSession );
+ User::LeaveIfError( appArcSession.Connect() );
+
+ // Get Media Gallery caption
+ TApaAppInfo appInfo;
+ User::LeaveIfError( appArcSession.GetAppInfo( appInfo, TUid::Uid( KMediaGalleryUID3 ) ) );
+
+ aCaption = appInfo.iCaption;
+
+ CleanupStack::PopAndDestroy( &appArcSession );
+ }
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::LaunchLoadWaitDialogL(
+ CAknWaitDialog** aSelfPtr,
+ MProgressDialogCallback* aCallback
+ ) const
+{
+ // Create dialog prompt
+ HBufC * prompt = iEikonEnv->AllocReadResourceLC (R_WAIT_NOTE_LOADING);
+
+ // Launch wait dialog with empty softkeys
+ SDrawUtils::LaunchWaitNoteL (
+ aSelfPtr,
+ R_WAIT_DIALOG,
+ *prompt,
+ aCallback
+ );
+
+ CleanupStack::PopAndDestroy(); // prompt
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::LaunchWaitDialog() const
+{
+ // Show empty set of cba buttons while animation on the screen
+ SetCustomButtonsL ( R_AVKON_SOFTKEYS_EMPTY );
+ iContainer->ShowWaitNote();
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::HideWaitDialog() const
+{
+ iContainer->HideWaitNote();
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ShowInformationNoteL (const TDesC& aNoteText) const
+{
+
+ CAknGlobalNote * globalnote = CAknGlobalNote::NewLC();
+ globalnote->ShowNoteL (EAknGlobalInformationNote, aNoteText);
+
+ CleanupStack::PopAndDestroy(); // globalnote
+
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ShowConfirmationNoteL (const TDesC& aNoteText) const
+{
+
+ CAknGlobalNote * globalnote = CAknGlobalNote::NewLC();
+ globalnote->ShowNoteL (EAknGlobalConfirmationNote, aNoteText);
+
+ CleanupStack::PopAndDestroy(); // globalnote
+
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetNaviPaneTextL (
+ const TDesC & aText,
+ TBool aLeftNaviPaneScrollButtonVisibile,
+ TBool aRightNaviPaneScrollButtonVisible )
+ {
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Setting navi pane text");
+
+ if (iNaviPane )
+ {
+ // Create a new decorator
+ CAknNavigationDecorator* newNaviDecorator =
+ iNaviPane->CreateNavigationLabelL (aText);
+ CleanupStack::PushL (newNaviDecorator);
+
+ // Set the navi scroll indicators for the new decorator
+ newNaviDecorator->SetScrollButtonDimmed(
+ CAknNavigationDecorator::ELeftButton,
+ !aLeftNaviPaneScrollButtonVisibile );
+ newNaviDecorator->SetScrollButtonDimmed(
+ CAknNavigationDecorator::ERightButton,
+ !aRightNaviPaneScrollButtonVisible );
+ if ( aLeftNaviPaneScrollButtonVisibile || aRightNaviPaneScrollButtonVisible )
+ {
+ newNaviDecorator->MakeScrollButtonVisible( ETrue );
+ }
+
+ // Set new decorator on top of Navi Pane's decorator stack
+ // (topmost decorator is the one to show)
+ iNaviPane->PushL (*newNaviDecorator);
+
+ // remove old "previous decorator" from decorator stack and delete it
+ if ( iPreviousNaviDecorator )
+ {
+ iNaviPane->Pop( iPreviousNaviDecorator );
+ delete iPreviousNaviDecorator;
+ iPreviousNaviDecorator = NULL;
+ }
+
+ // update decorator pointers to new ones
+ iPreviousNaviDecorator = iNaviDecorator;
+ iNaviDecorator = newNaviDecorator;
+
+ // set observer for the currently shown decorator
+ (iNaviPane->Top())->SetNaviDecoratorObserver( iContainer );
+
+ CleanupStack::Pop (newNaviDecorator);
+ }
+
+ }
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ClearNaviPaneTextL()
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Clearing navi pane text");
+ if (iNaviPane)
+ {
+ if (iNaviDecorator)
+ {
+ iNaviPane->Pop (iNaviDecorator);
+ delete iNaviDecorator;
+ iNaviDecorator = 0;
+ }
+
+ if (iPreviousNaviDecorator)
+ {
+ iNaviPane->Pop (iPreviousNaviDecorator);
+ delete iPreviousNaviDecorator;
+ iPreviousNaviDecorator = 0;
+ }
+ HBufC * title = iEikonEnv->AllocReadResourceLC (R_MAIN_VIEW_TITLE);
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL ( title->Des() );
+ iPreviousNaviDecorator = iNaviPane->CreateNavigationLabelL ( title->Des() );
+
+ iNaviPane->PushL (*iPreviousNaviDecorator);
+ iNaviPane->PushL (*iNaviDecorator);
+ iNaviPane->DrawDeferred();
+ iNaviDecorator->DrawDeferred();
+ CleanupStack::PopAndDestroy(); // title
+ }
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetTitlePaneTextL (const TDesC & aText)
+{
+ iTitlePane->SetTextL (aText);
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ClearTitlePaneTextL()
+{
+ iTitlePane->SetTextL ( KNullDesC );
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetSoftKey1L (
+ const TDesC & aText,
+ const TInt aCommand
+ )
+{
+ CEikButtonGroupContainer * cba = Cba();
+ // TInt replace_position = cba->PositionById (iSoftkey1);
+ TInt replace_position( CEikButtonGroupContainer::ELeftSoftkeyPosition );
+ cba->SetCommandL (replace_position, aCommand, aText);
+ cba->DrawDeferred();
+ iSoftkey1 = aCommand;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetSoftKey2L (
+ const TDesC & aText,
+ const TInt aCommand
+ )
+{
+ CEikButtonGroupContainer * cba = Cba();
+ //TInt replace_position = cba->PositionById (iSoftkey2);
+ TInt replace_position( CEikButtonGroupContainer::ERightSoftkeyPosition );
+ cba->SetCommandL (replace_position, aCommand, aText);
+ cba->DrawDeferred();
+ iSoftkey2 = aCommand;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetMiddleSoftKeyL (
+ const TDesC & aText,
+ const TInt aCommand
+ )
+{
+ CEikButtonGroupContainer * cba = Cba();
+
+ if ( aCommand == EAknSoftkeyContextOptions )
+ {
+ TInt contextMenuId =
+ ((CImageEditorControlBase *)iControl)->GetContextMenuResourceId();
+ if ( contextMenuId )
+ {
+ MenuBar()->SetContextMenuTitleResourceId( contextMenuId );
+ }
+ }
+
+ TInt replace_position( CEikButtonGroupContainer::EMiddleSoftkeyPosition );
+ cba->SetCommandL ( replace_position, aCommand, aText );
+ cba->DrawDeferred();
+ iMSK = aCommand;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetBusy()
+{
+
+ if (iContainer)
+ {
+ iContainer->SetBusy();
+ }
+
+ iBusy = ETrue;
+ RemoveContainerFromStack();
+
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ResetBusy()
+{
+
+ AddContainerToStack();
+ iBusy = EFalse;
+
+ if (iContainer)
+ {
+ iContainer->ResetBusy();
+ }
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetUndoFlag (const TBool aUndo)
+{
+ iCanUndo = aUndo;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetSaveFlag (const TBool aSave)
+{
+ iCanSave = aSave;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetFullScreen()
+{
+ if (iContainer)
+ {
+ iContainer->SetFullScreen();
+ }
+ iFullScreen = ETrue;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::ResetFullScreen()
+{
+ if (iContainer)
+ {
+ iContainer->ResetFullScreen();
+ }
+ iFullScreen = EFalse;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetZoomModeL ( const TZoomMode& aMode )
+{
+ iZoomMode = aMode;
+
+ HandleZoomModeChangeL();
+
+}
+
+//=============================================================================
+void CImageEditorUIView::HandleZoomModeChangeL()
+ {
+
+ if ( !iInPlugin && iZoomMode != EZoomNormal )
+ {
+ if ( iZoomMode != ( ENumOfZooms - 1 ) )
+ {
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_CANCEL_ZOOMIN );
+ }
+ else
+ {
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_CANCEL );
+ }
+ }
+ else if ( !iInPlugin && iZoomMode == EZoomNormal )
+ {
+
+ SetCustomButtonsL( R_IMAGEEDITORUI_SK_OPTIONS_BACK_APPLY );
+ }
+
+ // hide previous tooltip
+ iPopupController->HideInfoPopupNote();
+
+ // show tooltip (also if in plugin)
+ if ( iZoomMode != EZoomNormal )
+ {
+
+ SDrawUtils::ShowToolTip ( iPopupController,
+ ( CCoeControl* )iContainer,
+ TPoint( iContainer->Rect().iTl.iX,
+ iContainer->Rect().iTl.iY ),
+ EHRightVTop,
+ iZoomTexts->MdcaPoint( iZoomMode ) );
+ }
+
+ }
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::DynInitMenuPaneL (
+ TInt aResourceId,
+ CEikMenuPane * aMenuPane
+ )
+ {
+ // This is called by the framework, aMenuPane should never be null pointer...
+ __ASSERT_ALWAYS( aMenuPane, User::Panic(KComponentName, EImageEditorPanicMenuNotAccessible) );
+
+#ifdef AIW_PRINT_PROVIDER_USED
+ if ( iServiceHandler->HandleSubmenuL( *aMenuPane ) )
+ {
+ // Return if AIW submenu
+ return;
+ }
+#endif
+
+ if ( aResourceId != R_IMAGEEDITORUI_MENUPANE )
+ {
+ return;
+ }
+
+ // In busy mode
+ if ( iBusy )
+ {
+ DimAllL ( aResourceId, *aMenuPane );
+ }
+ // In idle mode
+ else
+ {
+ // In plug-in mode
+ if ( iInPlugin )
+ {
+ DimAllL ( aResourceId, *aMenuPane );
+ InsertPluginItemsL ( *aMenuPane );
+
+#ifdef FULLSCREEN_AVAILABLE
+ // After plugin specific items, add menu commands that are common
+ // for all plugins' options menus
+ // In normal screen mode
+ if ( !iFullScreen )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdFullScreen, EFalse );
+ }
+
+ // In full screen mode
+ else
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdNormalScreen, EFalse );
+ }
+#endif // FULLSCREEN_AVAILABLE
+
+ aMenuPane->SetItemDimmed ( EImageEditorMenuCmdHelp, EFalse );
+ aMenuPane->SetItemDimmed ( EImageEditorMenuCmdExit, EFalse );
+ }
+ else if ( InZoomingState() )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdUndo, ETrue );
+#ifdef FULLSCREEN_AVAILABLE
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdFullScreen, ETrue );
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdNormalScreen, ETrue );
+#endif // FULLSCREEN_AVAILABLE
+
+ if ( !iCanSave || IsMemoryInCriticalLevel() )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdSave, ETrue );
+ }
+
+ TInt position;
+ if ( aMenuPane->MenuItemExists( EImageEditorMenuCmdSend,
+ position ) )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdSend, ETrue );
+ }
+ if ( aMenuPane->MenuItemExists( EImageEditorAiwCriteriaPrint,
+ position ) )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorAiwCriteriaPrint, ETrue );
+ }
+
+ if ( iZoomMode == EZoomIn3 )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdZoomIn, ETrue );
+ }
+ // Set "Apply Effect" item to be after "Zoom Out" in zooming
+ // state's options menu
+ if ( aMenuPane->MenuItemExists( EImageEditorMenuCmdApplyEffect,
+ position ) )
+ {
+ CEikMenuPaneItem::SData data =
+ aMenuPane->ItemData( EImageEditorMenuCmdApplyEffect );
+ aMenuPane->DeleteMenuItem( EImageEditorMenuCmdApplyEffect );
+ aMenuPane->AddMenuItemL( data, EImageEditorMenuCmdZoomOut );
+ }
+ }
+ // In main view mode
+ else
+ {
+
+#ifdef AIW_PRINT_PROVIDER_USED
+
+#else
+ aMenuPane->SetItemDimmed( EImageEditorAiwCriteriaPrint, ETrue );
+#endif
+
+ // Display CSendUi menu item
+ if ( iSendAppUi )
+ {
+ iSendAppUi->AddSendMenuItemL(
+ *aMenuPane,
+ SIE_SENDUI_MENU_ITEM_INDEX,
+ EImageEditorMenuCmdSend,
+ TSendingCapabilities (0, 0, TSendingCapabilities::ESupportsAttachments) );
+ }
+
+ // Nothing to undo
+ if ( !iCanUndo )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdUndo, ETrue );
+ }
+#ifdef FULLSCREEN_AVAILABLE
+ // In full screen mode
+ if ( iFullScreen )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdFullScreen, ETrue );
+ }
+
+ // In normal screen mode
+ else
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdNormalScreen, ETrue );
+ }
+#endif // FULLSCREEN_AVAILABLE
+ if ( !iCanSave || IsMemoryInCriticalLevel() )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdSave, ETrue );
+ }
+
+ if ( iZoomMode == EZoomNormal )
+ {
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdZoomOut, ETrue );
+ aMenuPane->SetItemDimmed( EImageEditorMenuCmdFitToScreen, ETrue );
+ }
+
+#ifdef AIW_PRINT_PROVIDER_USED
+ if ( iServiceHandler->IsAiwMenu( aResourceId ) )
+ {
+ CAiwGenericParamList& in = iServiceHandler->InParamListL();
+
+ TFileName filename( iImageFileName );
+ TAiwVariant variant( filename );
+ TAiwGenericParam param( EGenericParamFile, variant );
+
+ in.AppendL( param );
+
+ iServiceHandler->InitializeMenuPaneL( *aMenuPane,
+ aResourceId,
+ EImageEditorMenuAiwPrintBase,
+ in);
+ }
+#endif
+
+ }
+ }
+ }
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::SetSendAppUi(CSendUi* aSendAppUi)
+ {
+ iSendAppUi = aSendAppUi;
+ }
+
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::HandleStatusPaneSizeChange()
+{
+
+}
+
+//=============================================================================
+void CImageEditorUIView::DimAllL (
+ TInt /*aResourceId*/,
+ CEikMenuPane & aMenuPane
+ ) const
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView::DimAllL");
+
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdApplyEffect, ETrue);
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdExit, ETrue);
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdUndo, ETrue);
+#ifdef FULLSCREEN_AVAILABLE
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdFullScreen, ETrue);
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdNormalScreen, ETrue);
+#endif // FULLSCREEN_AVAILABLE
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdZoomIn, ETrue);
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdZoomOut, ETrue);
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdSave, ETrue);
+ aMenuPane.SetItemDimmed (EImageEditorAiwCriteriaPrint, ETrue);
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdHelp, ETrue);
+ aMenuPane.SetItemDimmed (EImageEditorMenuCmdFitToScreen, ETrue);
+}
+
+//=============================================================================
+void CImageEditorUIView::UpdateSoftkeysL ()
+{
+ __ASSERT_ALWAYS( iControl, User::Panic(KComponentName, EImageEditorPanicControlIsNull) );
+
+ // Get plug-in info
+ CPluginInfo * pgn_info = iArray[iIndex];
+
+ // Get soft key pair index
+ TInt sk_index = ((CImageEditorControlBase *)iControl)->GetSoftkeyIndexL();
+
+ // Set soft key 1
+ SetSoftKey1L (
+ pgn_info->Sk1Texts()[sk_index],
+ pgn_info->Sk1Cmds()[sk_index]
+ );
+
+ // Set soft key 2
+ SetSoftKey2L (
+ pgn_info->Sk2Texts()[sk_index],
+ pgn_info->Sk2Cmds()[sk_index]
+ );
+
+ // Set middle soft key
+ SetMiddleSoftKeyL (
+ pgn_info->MSKTexts()[sk_index],
+ pgn_info->MSKCmds()[sk_index]
+ );
+}
+
+//=============================================================================
+void CImageEditorUIView::UpdateNaviPaneL()
+{
+ __ASSERT_ALWAYS( iControl, User::Panic(KComponentName, EImageEditorPanicControlIsNull) );
+
+ TBool leftNaviPaneScrollButtonVisibile;
+ TBool rightNaviPaneScrollButtonVisible;
+ TPtrC naviText = ((CImageEditorControlBase *)iControl)->GetNaviPaneTextL(
+ leftNaviPaneScrollButtonVisibile,
+ rightNaviPaneScrollButtonVisible );
+
+ SetNaviPaneTextL (
+ naviText,
+ leftNaviPaneScrollButtonVisibile,
+ rightNaviPaneScrollButtonVisible );
+}
+
+//=============================================================================
+void CImageEditorUIView::InsertPluginItemsL (CEikMenuPane & aMenuPane)
+{
+ __ASSERT_ALWAYS( iControl, User::Panic(KComponentName, EImageEditorPanicControlIsNull) );
+
+ // Insert the plug-in commands
+ CMenuItemArray & menu_items = iArray[iIndex]->MenuItems();
+ TBitField dimmed = ((CImageEditorControlBase *)iControl)->GetDimmedMenuItems();
+ for (TInt i = 0; i < menu_items.Count(); ++i)
+ {
+ // Check the visibility for each menu item.
+ if ( ! dimmed.GetBit(i) )
+ {
+ aMenuPane.InsertMenuItemL ( menu_items[i], i );
+ }
+ }
+}
+
+//=============================================================================
+TBool CImageEditorUIView::MenuItemPressedL (TInt aCommand)
+{
+ CMenuItemArray & menu_items = iArray[iIndex]->MenuItems();
+ for (TInt i = 0; i < menu_items.Count(); ++i)
+ {
+ if ( menu_items[i].iCommandId == aCommand )
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::DoActivateL (
+ const TVwsViewId & /*aPrevViewId*/,
+ TUid /*aCustomMessageId*/,
+ const TDesC8 & /*aCustomMessage*/
+ )
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Activating view");
+ // Construct container
+ iContainer = new (ELeave) CImageEditorUIContainer;
+ iContainer->SetMopParent (this);
+ iContainer->ConstructL ( ClientRect() );
+ iContainer->SetView (this);
+ HandleCommandL (EImageEditorCmdViewReady);
+
+}
+
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::DoDeactivate()
+{
+ LOG(KImageEditorLogFile, "CImageEditorUIView: Deactivating view");
+
+ RemoveContainerFromStack();
+
+ if ( iContainer )
+ {
+ delete iContainer;
+ iContainer = 0;
+ }
+}
+
+//=============================================================================
+void CImageEditorUIView::AddContainerToStack()
+{
+ if (!iContainerInStack && iContainer)
+ {
+ TRAPD(err, AppUi()->AddToViewStackL (*this, iContainer); );
+ if (err == KErrNone)
+ {
+ iContainerInStack = ETrue;
+ }
+ }
+}
+
+
+
+//=============================================================================
+void CImageEditorUIView::RemoveContainerFromStack()
+{
+ if (iContainerInStack)
+ {
+ AppUi()->RemoveFromViewStack (*this, iContainer);
+ iContainerInStack = EFalse;
+ }
+}
+
+//=============================================================================
+EXPORT_C TBool CImageEditorUIView::InZoomingState()
+ {
+ if ( iZoomMode == EZoomIn1 ||
+ iZoomMode == EZoomIn2 ||
+ iZoomMode == EZoomIn3 )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+//=============================================================================
+EXPORT_C TInt CImageEditorUIView::LaunchSaveImageQueryL () const
+{
+
+ // Create dialog heading and options
+ HBufC * heading = CEikonEnv::Static()->AllocReadResourceLC (R_SIE_LIST_QUERY_HEADING_SAVE);
+ HBufC * option1 = CEikonEnv::Static()->AllocReadResourceLC (R_SIE_LIST_QUERY_SAVE_NEW);
+ HBufC * option2 = CEikonEnv::Static()->AllocReadResourceLC (R_SIE_LIST_QUERY_SAVE_REPLACE);
+
+ // Query dialog texts
+ CDesCArray * options = new (ELeave) CDesCArraySeg (2);
+ CleanupStack::PushL (options);
+ options->AppendL( option1->Des() );
+ options->AppendL( option2->Des() );
+
+ // Execute query dialog
+ TInt ret = SDrawUtils::LaunchListQueryDialogL (options, *heading);
+
+ options->Reset();
+
+ CleanupStack::PopAndDestroy(4); //options, option2, option1, heading
+
+ return ret;
+}
+
+//=============================================================================
+EXPORT_C void CImageEditorUIView::GetTouchPanDirections( TInt& xMovement,
+ TInt& yMovement )
+ {
+
+ xMovement = 0;
+ yMovement = 0;
+ iContainer->GetDragDirections( xMovement, yMovement );
+ }
+
+EXPORT_C TBool CImageEditorUIView::IsMemoryInCriticalLevel()
+ {
+ TEntry entry;
+ RFs & fs = iEikonEnv->FsSession();
+ fs.Entry( iImageFileName, entry );
+ TFileName driveAndPath;
+ driveAndPath.Copy( PathInfo::PhoneMemoryRootPath() );
+ driveAndPath.Append( PathInfo::ImagesPath() );
+ return !ImageEditorUtils::ImageFitsToDriveL( fs, iImageFileName, driveAndPath);
+ }
+
+// End of File
+