--- a/svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTUIDialog.cpp Mon Jan 18 20:09:49 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1304 +0,0 @@
-/*
-* Copyright (c) 2004,2005 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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:
-*
-* Description: This file implements the SVGT Dialog which
-* is used to display SVGT content
-*
-*/
-
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <uikon/eikctrlstatus.h>
-#endif
-
-#include <e32std.h>
-#include <AknDialog.h>
-#include <coeaui.h>
-#include <eikenv.h>
-#include <bautils.h>
-#include <eikdialg.h>
-#include <eikmenup.h>
-#include <eikspane.h>
-
-#ifdef __SERIES60_HELP
-#include <hlplch.h>
-#endif // __SERIES60_HELP
-
-#include <coeaui.h>
-#include <aknnavi.h>
-#include <aknnavide.h>
-#include <AknWaitNoteWrapper.h>
-#include <SVGRequestObserver.h>
-#include <aknnotewrappers.h>
-#include <akntitle.h>
-#include <data_caging_path_literals.hrh>
-#include <StringLoader.h>
-#include <SVGTUIControl.rsg>
-#include <csxhelp/svgt.hlp.hrh>
-//-----------
-
-// User Includes
-#include "SVGTAppObserver.h"
-#include "SVGTCustControl.h"
-#include "SVGTUIDialog.h"
-#include "svgtfileviewdetails.h"
-
-#include "SVGTUIDialog.hrh"
-#include "SvgtDecoratorControl.h"
-
-const TInt KButtonContainerDisplayTime = 5000000;
-
-// Constants
-
-// The Middle softkey has position 3 at button group's stack
-const TInt KMiddleSKId=3;
-_LIT( KResourceFileName, "Z:SVGTUIControl.rsc" );
-#ifdef _DEBUG
-//_LIT( KUnknownCommandStr, "Unknown Command" );
-#endif
-
-#ifdef __SERIES60_HELP
-// Help Context UID = DLL UID3
-const TUid KSvgtHelpContextUid = { 0x101F8749 };
-#endif // __SERIES60_HELP
-
-// Times longer than this many seconds are shown using the long format
-const TInt KShortTimeLimit = 59*60 + 59;
-
-// Maximum number of seconds shown in the time duration field
-const TInt KMaxTotalTimeSeconds = 9*60*60 + 59*60 + 59; // 59:59
-
-// Maximum length for both the time elapsed/remaining string "mm:ss/mm:ss"
-// and post-recording text "Length: mm:ss"
-const TInt KMaxTimeTextLength = 40;
-
-// This many microseconds in a second
-const TInt KMicro = 1000000;
-
-// Key Constant for toggling between Full/Normal Screen
-const TInt KSvgScreenToggleKey = '*';
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::CSVGTUIDialog
-// Default Constructor. Initialises Dialog State Variables.
-// -----------------------------------------------------------------------------
-//
-CSVGTUIDialog::CSVGTUIDialog()
- {
- // SVGT Viewer State Variables
- iSaveEnable = EFalse;
- iPreview = EFalse;
- iCustControl = NULL;
- iAppObserver = NULL;
- iIsVolumeMuted = EFalse;
- iLastCommandID = EAknSoftkeyOptions;
- iIsButtonContainerVisible = ETrue;
- iQuietExitWhenOrientationChange = EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::ConstructL
-// Second Phase Constructor for CSVGTUIDialog. Opens resource file, reads the
-// dialog menu resource and calls CAknDialog::ConstructL with the resource as
-// param.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::ConstructL()
- {
- // Find which drive this DLL is installed.
- TFileName fileName;
-
- // Get the full resource file
- TParse lParse;
-
- // Add the resource dir
- lParse.Set( KResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL);
-
- // Get the filename with full path
- fileName = lParse.FullName();
-
- BaflUtils::NearestLanguageFile( iEikonEnv->FsSession(), fileName ); //for
- // localization
- iResourceOffset = iEikonEnv->AddResourceFileL( fileName );
-
- // Read time format strings from AVKON resource
- iTimeFormatShort =
- iEikonEnv->AllocReadResourceL( R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO );
- iTimeFormatLong =
- iEikonEnv->AllocReadResourceL( R_QTN_TIME_DURAT_LONG );
-
- iBtnCntrTimer = CPeriodic::NewL( CActive::EPriorityStandard);
- CAknDialog::ConstructL( R_SVGT_DIALOG_MENUBAR );
-
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::NewL
-// Factory function for creating CSVGTUIDialog objects.
-// Returns: CSVGTUIDialog* ; Pointer to the created object.
-// Leaves if error occurs during creation.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CSVGTUIDialog* CSVGTUIDialog::NewL()
- {
- CSVGTUIDialog* self = CSVGTUIDialog::NewLC();
- CleanupStack::Pop( self );
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::NewLC
-// Factory function for creating CSVGTUIDialog objects. It also pushes the
-// created dialog object onto the cleanup stack.
-// Returns: CSVGTUIDialog* ; Pointer to the created object.
-// Leaves if error occurs during creation.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CSVGTUIDialog* CSVGTUIDialog::NewLC()
- {
- CSVGTUIDialog* self = new ( ELeave ) CSVGTUIDialog();
- CleanupStack::PushL( self );
- self->ConstructL();
- return self;
- }
-
-// Destructor
-CSVGTUIDialog::~CSVGTUIDialog()
- {
- if ( iResourceOffset != 0 )
- {
- iEikonEnv->DeleteResourceFile( iResourceOffset );
- }
- // Custom Control will be automatically destroyed by dialog framework
- iCustControl = NULL;
- // App Observer is reset.
- iAppObserver = NULL;
-
- // Set the text in status pane to the stored one
- if (iAppTitleText)
- {
- // Get the Status Pane Control
- CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
- // Get the title pane
- CAknTitlePane* tp = NULL;
- TRAPD( errGetControl,
- tp = static_cast< CAknTitlePane* >( sp->ControlL(
- TUid::Uid( EEikStatusPaneUidTitle ) ) ) );
- if ( errGetControl == KErrNone && tp )
- {
- //set application name in the title pane
- TRAPD( errSetText,
- tp->SetTextL(*iAppTitleText) );
- if ( errSetText != KErrNone )
- {
- // No error handling here
- }
- }
-
- delete iAppTitleText;
- iAppTitleText = NULL;
-
- delete iProgressText;
- iProgressText = NULL;
- }
-
- // Clear the Navi-Pane Decorator
- if ( iNaviDecorator )
- {
- // Restore the old navi-pane
- CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
-
- CAknNavigationControlContainer* np = NULL;
- TRAPD( errGetNaviControl,
- np = static_cast< CAknNavigationControlContainer* >
- ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ) );
- if ( errGetNaviControl == KErrNone && np )
- {
- TRAPD( errPushDefNaviControl,
- np->PushDefaultL ()); // Set default.
- if ( errPushDefNaviControl != KErrNone )
- {
- // No error handling here.
- }
- }
- delete iNaviDecorator;
- }
- iCbaGroup=NULL;
- // Callers responsibility of closing the file handle.
- iFileHandlePtr = NULL;
- // Delete the format strings
- delete iTimeFormatShort;
- delete iTimeFormatLong;
-
- delete iBtnCntrTimer;
- }
-
-TInt CSVGTUIDialog::ButtonContainerTimerCallBack(TAny* aAny)
- {
- CSVGTUIDialog* dlg = (CSVGTUIDialog*)(aAny);
- dlg->iBtnCntrTimer->Cancel();
- dlg->iIsButtonContainerVisible = EFalse;
- TRAP_IGNORE(dlg->SwitchDialogLayoutL( ETrue ));
-
- return KErrNone;
- }
-
-TBool CSVGTUIDialog::HandleCustControlPointerEventL(const TPointerEvent& /* aPointerEvent */)
- {
- TBool fullScreenStatus;
- TBool isEventHandled = EFalse;
- TCallBack callBack(CSVGTUIDialog::ButtonContainerTimerCallBack, this);
-
- iBtnCntrTimer->Cancel();
-
- if(iIsButtonContainerVisible)
- {
- return isEventHandled;
- }
-
- iCustControl->GetCurrentFullScreenStatus(fullScreenStatus);
- if(fullScreenStatus)
- {
- TRect appRect = iEikonEnv->EikAppUi()->ApplicationRect();
-
- if(iBtnGrpPos.iX && iBtnGrpPos.iY)
- SetSize(TSize(appRect.Width() - iBtnGrpSize.iWidth, appRect.Height() - iBtnGrpSize.iHeight));
- if(iBtnGrpPos.iX)
- SetSize(TSize(appRect.Width() - iBtnGrpSize.iWidth, appRect.Height()));
- else if(iBtnGrpPos.iY)
- SetSize(TSize(appRect.Width(), appRect.Height() - iBtnGrpSize.iHeight));
-
- CEikButtonGroupContainer& bgc = ButtonGroupContainer();
- //bgc.MakeVisible(ETrue);
- //bgc.SetSize(iBtnGrpSize);
- //bgc.SetExtent(iBtnGrpPos, iBtnGrpSize);
- //bgc.DrawDeferred();
- iIsButtonContainerVisible = ETrue;
- isEventHandled = ETrue;
- iBtnCntrTimer->Start(KButtonContainerDisplayTime, 0, callBack);
- }
-
- return isEventHandled;
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::ExecuteLD
-// Reimplements CAknDialog::ExecuteLD. It initialises the member variables of
-// the class and calls CAknDialog::ExecuteLD() with the dialog resource.
-// -----------------------------------------------------------------------------
-//
-TInt CSVGTUIDialog::ExecuteLD(
- RFile& aFileHandle, // Filename of SVGT Content
- MSvgtAppObserver* ptr ) // Applications Implementation of callbacks
- {
- // Save this pointer since there are leaving functions in the flow
- CleanupStack::PushL( this );
-
- iFileHandlePtr = &aFileHandle;
- iIsFileHandleValid = ETrue;
- iAppObserver = ptr;
- iQuietExitWhenOrientationChange = iAppObserver->ExitWhenOrientationChange();
-
- // Get the Status Pane Control
- CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
-
- // Get the Title Pane Control
- CAknTitlePane* tp = static_cast< CAknTitlePane* >( sp->ControlL(
- TUid::Uid( EEikStatusPaneUidTitle ) ) );
-
- // Store the Application's title text
- iAppTitleText = HBufC::NewL(tp->Text()->Length());
- *iAppTitleText = *tp->Text();
-
- // Display the filename in the title pane of application
-
- TFileName lFileName;
- // Get the file name from the file handle
- if ( !aFileHandle.Name( lFileName ) )
- {
- TParse p;
- p.Set( lFileName, NULL, NULL);
-
- // SetTextL also ensures that if the length exceeds the layout space
- // available the text is truncated from the end.
- tp->SetTextL( p.NameAndExt() ); // p.NameAndExt() gives "Filename.ext"
-
- }
-
- CSVGTDrmHelper *drmHelper = CSVGTDrmHelper::NewLC();
- // Check if the "Save" Option should be shown or not.
- // The calling application of the dialog decides this.
- if ( iAppObserver )
- {
- iSaveEnable = iAppObserver->CanShowSave();
- }
-
- // Check Rights Status
- iPreview = drmHelper->IsPreviewL( aFileHandle );
-
- CleanupStack::PopAndDestroy( drmHelper );
-
- // ExecuteLD will delete this, so we have to Pop it...
- CleanupStack::Pop( this );
-
- if ( iPreview )
- {
- return CAknDialog::ExecuteLD( R_SVGT_VIEWER_PREVIEW_DIALOG );
- }
- else
- {
- return CAknDialog::ExecuteLD( R_SVGT_VIEWER_DIALOG );
- }
-
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::FormatTimeL
-// Convert a time given in seconds to a descriptor.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::FormatTimeL(
- const TUint& aDuration, // duration in
- // seconds
- TDes& aBuf // Buffer holding formatted
- // string
- ) const
-
- {
- TTime time( TInt64( aDuration ) * KMicro );
-
- if ( time.Int64() > TInt64( KMaxTotalTimeSeconds ) * KMicro )
- {
- time = TInt64( KMaxTotalTimeSeconds ) * KMicro;
- }
-
- if ( time.Int64() < TInt64( KShortTimeLimit ) * KMicro )
- {
- time.FormatL( aBuf, *iTimeFormatShort );
- }
- else
- {
- time.FormatL( aBuf, *iTimeFormatLong );
- }
-
- // Arabic number conversion
- AknTextUtils::LanguageSpecificNumberConversion( aBuf );
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::SaveNeededL
-// This function checks if Save is displayed and saving is already done
-// and prompts a confirmation query to the user and then calls DoSaveL
-// -----------------------------------------------------------------------------
-//
-TBool CSVGTUIDialog::SaveNeededL( TInt aButtonId )
- {
- if ( ( iAppObserver->CanShowSave() ||
- iCustControl->IsTextContentChanged()) &&
- !iAppObserver->IsSavingDone() &&
- !iPreview &&
- LaunchSaveQueryDialogL() )
- {
- iAppObserver->DoSaveL( aButtonId );
- return ETrue;
- }
- else
- {
- return EFalse;
- }
- }
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::LaunchSaveQueryDialogL
-// -----------------------------------------------------------------------------
-//
-TBool CSVGTUIDialog::LaunchSaveQueryDialogL() const
- {
- HBufC* titleText = NULL;
-
- TFileName lFileName;
- if ( iFileHandlePtr )
- {
- iFileHandlePtr->Name( lFileName );
- }
- else
- {
- return EFalse;
- }
- titleText = StringLoader::LoadLC( R_QTN_SVGT_QUERY_CONF_SAVE_DOWNLOADED,
- lFileName );
-
- CAknQueryDialog* query = CAknQueryDialog::NewL( );
- TBool retVal = query->ExecuteLD( R_SVGT_CONFIRMATION_QUERY_YES_NO,
- *titleText );
- CleanupStack::PopAndDestroy( titleText );
-
- if ( retVal == EAknSoftkeyOk || retVal == EAknSoftkeyYes )
- {
- return ETrue;
- }
- return EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::SwitchDialogLayoutL
-// This function changes the layout of the dialog
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::SwitchDialogLayoutL( TBool aIsFullScreen )
- {
- if ( aIsFullScreen )
- {
- // Full Screen Mode
- // Expand Dialog Window to occupy full screen
- SetExtentToWholeScreen();
- // Hide the Status Pane
- CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
- sp->MakeVisible( EFalse );
-
- // Hide the CBA
- CEikButtonGroupContainer* cp = &( ButtonGroupContainer() );
- //cp->SetExtent( TPoint( 0, 0 ), TSize( 0, 0) );
- cp->SetSize( TSize( 0, 0) );
-
- }
- else
- {
- // Normal Screen Mode
- // Show the Status Pane
- CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
- sp->MakeVisible( ETrue );
-
- // Restore the size and position of the dialog
- // to normal screen size(Client Rectangle)
- TRect lRect;
- iCustControl->GetNormalScreenLayoutRect( lRect );
- SetSizeAndPosition( lRect.Size() );
- // Restore original layout
- Layout();
- iBtnCntrTimer->Cancel();
- }
-
- iIsButtonContainerVisible = !aIsFullScreen;
-
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::DynInitMenuPaneL
-// Reimplements CAknDialog::DynInitMenuPaneL inorder to support dynamic hiding
-// of menu items based on current state of the viewer.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::DynInitMenuPaneL(
- TInt aResourceId, // Resource Id for which this func is called
- CEikMenuPane* aMenuPane ) // Menupane object pointer for manipulation
- {
- iBtnCntrTimer->Cancel();
-
-if(
- (aResourceId==R_SVGT_DIALOG_MENU)
- &&iCustControl->GetMSKLabelFlag(EAknSoftkeyContextOptions)
- &&(aMenuPane)
- )
- {
- iCustControl->ChangeMSKLabelFlag(EAknSoftkeyContextOptions);
- if ( iAppObserver )
- {
- iSaveEnable = iAppObserver->CanShowSave();
- }
- aMenuPane->SetItemDimmed(ESvgtDlgSaveCommand,
- !( iSaveEnable||
- iCustControl->IsTextContentChanged() ) );
-
- TSvgtViewerAnimStatus lAnimState;
- iCustControl->GetCurrentAnimState( lAnimState );
- TBool isLoadingDone = iCustControl->IsProcessDone();
- aMenuPane->SetItemDimmed(ESvgtDlgPlayCommand,
- !isLoadingDone ||
- (lAnimState == ESvgAnimPlayingState ));
- aMenuPane->SetItemDimmed(ESvgtDlgPauseCommand,
- !isLoadingDone ||
- (lAnimState != ESvgAnimPlayingState ));
- aMenuPane->SetItemDimmed(ESvgtDlgStopCommand,
- !isLoadingDone ||
- (lAnimState ==ESvgAnimStoppedState));
-
-
- //All the other menu items are dimmed since they are not the part of
- // context menu
- aMenuPane->SetItemDimmed(ESvgtDlgZoomInCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgZoomOutCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgSelectTextCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgEditTextCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgLoopCascadeCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgFindTextCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgFullScreenCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgNormalScreenCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgListRotateCascadeCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgViewDetailsCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgListDownloadCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgHelpCommand,ETrue);
- aMenuPane->SetItemDimmed(EAknCmdExit,ETrue);
- #ifdef RD_SVGT_AUDIO_SUPPORT
- aMenuPane->SetItemDimmed( ESvgtDlgMuteCommand,ETrue);
- aMenuPane->SetItemDimmed( ESvgtDlgUnmuteCommand,ETrue);
- aMenuPane->SetItemDimmed(ESvgtDlgSetVolumeCommand,ETrue);
- #endif //RD_SVGT_AUDIO_SUPPORT
- }
-
- else if ( ( aResourceId == R_SVGT_DIALOG_MENU ) && ( aMenuPane ) )
- {
- if ( iAppObserver )
- {
- iSaveEnable = iAppObserver->CanShowSave();
- }
- aMenuPane->SetItemDimmed(
- ESvgtDlgSaveCommand,
- !( iSaveEnable ||
- iCustControl->IsTextContentChanged() ) );
- TInt zoomLvl = 0;
- iCustControl->GetCurrentZoomLevel( zoomLvl );
- aMenuPane->SetItemDimmed(
- ESvgtDlgZoomOutCommand,
- ( zoomLvl == 0 ) );
-
- // Select Text Option
- aMenuPane->SetItemDimmed( ESvgtDlgSelectTextCommand,
- !iCustControl->IsTextSelectOn() );
-
- // Edit Text Option
- aMenuPane->SetItemDimmed( ESvgtDlgEditTextCommand,
- !iCustControl->IsTextEditOn() );
-
- if ( !iCustControl->IsAnimationPresent() )
- {
- // No Animations case - dim the Play/Pause/Stop buttons
- aMenuPane->SetItemDimmed(
- ESvgtDlgPlayCommand,
- ETrue );
-
- aMenuPane->SetItemDimmed(
- ESvgtDlgPauseCommand,
- ETrue );
-
- aMenuPane->SetItemDimmed(
- ESvgtDlgStopCommand,
- ETrue );
- aMenuPane->SetItemDimmed(
- ESvgtDlgLoopCascadeCommand,
- ETrue );
- }
- else
- {
- // Animations case - normal behaviour
- // Play/Pause Options
- TSvgtViewerAnimStatus lAnimState;
- iCustControl->GetCurrentAnimState( lAnimState );
- TBool isLoadingDone = iCustControl->IsProcessDone();
-
- aMenuPane->SetItemDimmed(
- ESvgtDlgPlayCommand,
- !isLoadingDone ||
- ( lAnimState == ESvgAnimPlayingState ) );
-
- aMenuPane->SetItemDimmed(
- ESvgtDlgPauseCommand,
- !isLoadingDone ||
- ( lAnimState != ESvgAnimPlayingState ) );
-
- aMenuPane->SetItemDimmed(
- ESvgtDlgStopCommand,
- !isLoadingDone ||
- ( lAnimState == ESvgAnimStoppedState ) );
- // Loop Option
- aMenuPane->SetItemDimmed(
- ESvgtDlgLoopCascadeCommand,
- !isLoadingDone ||
- !iCustControl->IsLoopAllowed() );
- }
-#ifdef RD_SVGT_AUDIO_SUPPORT
- aMenuPane->SetItemDimmed( ESvgtDlgMuteCommand, iIsVolumeMuted );
-
- aMenuPane->SetItemDimmed( ESvgtDlgUnmuteCommand, !iIsVolumeMuted );
-#endif //RD_SVGT_AUDIO_SUPPORT
- TBool isFullScreenOn;
- iCustControl->GetCurrentFullScreenStatus( isFullScreenOn );
- aMenuPane->SetItemDimmed(
- ESvgtDlgFullScreenCommand,
- isFullScreenOn );
-
- aMenuPane->SetItemDimmed(
- ESvgtDlgNormalScreenCommand,
- !isFullScreenOn );
-
- aMenuPane->SetItemDimmed(
- ESvgtDlgFindTextCommand,
- EFalse );
-
- aMenuPane->SetItemDimmed(
- ESvgtDlgViewDetailsCommand,
- !iIsFileHandleValid);
- aMenuPane->SetItemDimmed(
- ESvgtDlgListDownloadCommand,
- !iAppObserver->CanShowDownload() );
- }
- else
- {
- if ( ( aResourceId == R_SVGT_LOOP_SUBMENU ) && ( aMenuPane ) )
- {
- // Loop On/Off Submenu option
- TBool isLoopOn = ETrue;
- iCustControl->GetCurrentLoopStatus( isLoopOn );
- if ( isLoopOn )
- {
- aMenuPane->SetItemButtonState( ESvgtDlgLoopOnCommand,
- EEikMenuItemSymbolOn );
- aMenuPane->SetItemButtonState( ESvgtDlgLoopOffCommand,
- EEikMenuItemSymbolIndeterminate );
- }
- else
- {
- aMenuPane->SetItemButtonState( ESvgtDlgLoopOffCommand,
- EEikMenuItemSymbolOn );
- aMenuPane->SetItemButtonState( ESvgtDlgLoopOnCommand,
- EEikMenuItemSymbolIndeterminate );
- }
- }
- }
- }
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::DrawMSKLabelL
-// Reimplements MSVGTMSKImplL::DrawMSKLabelL.This function is called by the
-// CSVGTCustControl whenever MSK label needs to be updated.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::DrawMSKLabelL(TInt aResourceID,TInt aCommandID)
-{
- iLastCommandID = aCommandID;
- iCbaGroup= &( ButtonGroupContainer() );
- HBufC* middleSKText = StringLoader::LoadLC(aResourceID );
- iCbaGroup->AddCommandToStackL(KMiddleSKId, aCommandID,*middleSKText );
- iCbaGroup->MakeCommandVisible(aCommandID, ETrue);
- CleanupStack::PopAndDestroy( middleSKText );
- iCbaGroup->DrawDeferred();
-}
-
-// ----------------------------------------------------------------------------
-// CSVGTUIDialog::RemoveMSKLabel
-// Reimplements MSVGTMSKImplL::RemoveMSKLabel.This function is called by the
-// CSVGTCustControl before adding new MSK label to button group stack.
-// ----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::RemoveMSKLabel()
-{
- iCbaGroup= &( ButtonGroupContainer() );
- MEikButtonGroup* lButtonGroup=iCbaGroup->ButtonGroup();
- TInt lCmdID=lButtonGroup->CommandId(KMiddleSKId);
- iCbaGroup->RemoveCommandFromStack(KMiddleSKId,lCmdID);
- iCbaGroup->DrawDeferred();
-
-}
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::OkToExitL
-// Reimplements CAknDialog::OkToExitL inorder to display custom menu and
-// trap the back softkey to provide restore view functionality/exit.
-// -----------------------------------------------------------------------------
-//
-TBool CSVGTUIDialog::OkToExitL( TInt aButtonId ) // ButtonId of button pressed
- {
- if ( aButtonId == EAknSoftkeyOptions )
- {
- DisplayMenuL();
- return EFalse;
- }
- else if(aButtonId==EAknSoftkeyContextOptions)
- {
- //Flag to differentiate context menu from normal options menu
- iCustControl->ChangeMSKLabelFlag(aButtonId);
-
- //Display context menu
- iMenuBar->SetContextMenuTitleResourceId( R_SVGT_DIALOG_MENUBAR );
- iMenuBar-> TryDisplayContextMenuBarL();
-
- //No task swapper for context menu
- iMenuBar->SetMenuType(CEikMenuBar::EMenuOptionsNoTaskSwapper);
-
- //Restore the options menu
- iMenuBar->SetMenuTitleResourceId( R_SVGT_DIALOG_MENUBAR );
- iMenuBar->SetMenuType(CEikMenuBar::EMenuOptions);
-
- return EFalse;
- }
- else if(aButtonId ==EAknSoftkeySave)
- {
- //Save the content
- ProcessCommandL(ESvgtDlgSaveCommand);
- return EFalse;
- }
-
- else
- {
- if ( aButtonId == EAknSoftkeyBack )
- {
- // Check whether full screen is active
- TBool isFullScreenActive;
- iCustControl->GetCurrentFullScreenStatus( isFullScreenActive );
-
- if ( isFullScreenActive )
- {
- // Yes[FullScreen]: revert back to normal screen
- ProcessCommandL( ESvgtDlgNormalScreenCommand );
- return EFalse;
- }
-
- // Check whether content is zoomed in
- TInt zoomLvl = 0;
- iCustControl->GetCurrentZoomLevel( zoomLvl );
-
- if ( zoomLvl > 0 )
- {
- // Yes[ZoomedIn]: restore to original view
- iCustControl->ProcessViewerCommandL(
- ESvgtDlgZoomOptimalCommand );
- return EFalse;
- }
- return !SaveNeededL( aButtonId );
- }
- else
- {
- // Ignore Select Key..
- if ( aButtonId == EAknSoftkeySelect || aButtonId == EEikBidOk )
- {
- //If animation on mousedown/mouseup is present trigger it
- if(iCustControl->GetMSKLabelFlag(aButtonId))
- {
- TKeyEvent lKeyEvent;
- lKeyEvent.iScanCode=EStdKeyDevice3;
- iCustControl->OfferKeyEventL(lKeyEvent,EEventKey);
- iCustControl->ChangeMSKLabelFlag(aButtonId);
- TRAP_IGNORE(iCustControl->SetMSKLabelL());
- }
-
-
-
- // Select button pressed, ignore.
- return EFalse;
- }
- if ( aButtonId == EEikCmdExit )
- {
- return !SaveNeededL( aButtonId );
- }
- }
-
- }
-
- return ETrue;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::IsLoadingDone
-// This function is called by the application to check whether the
-// loading of the svg content is done.
-// -----------------------------------------------------------------------------
-//
-TBool CSVGTUIDialog::IsLoadingDone()
- {
- return iCustControl->IsProcessDone();
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::HandleApplicationForegroundEvent
-// This API is used by the application to give background/foreground events
-// to the Dialog. The dialog inturn passes the events to custom control.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::HandleApplicationForegroundEvent( TBool aForeground )
- {
- if ( iCustControl )
- {
- iCustControl->HandleApplicationForegroundEvent( aForeground );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::StopUsingContentFileHandle
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::StopUsingContentFileHandle()
- {
- // NOTE: Currently the custom control and the engine are
- // not actively using the File handle. e.g. Engine uses
- // the file handle only during loading of content. And custom
- // control uses it when File Details are shown.
- // If required, in future need to pass this event to custom control.
- // Block the filedetails option now.
- iIsFileHandleValid = EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::StartUsingContentFileHandle
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::StartUsingContentFileHandle()
- {
- iIsFileHandleValid = ETrue;
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::IsTextContentChanged
-// Function used by the client to check if text in the content was modified,
-// to check if save is needed.
-// -----------------------------------------------------------------------------
-//
-TBool CSVGTUIDialog::IsTextContentChanged()
- {
- return (iCustControl->IsTextContentChanged());
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::SaveSvgDom
-// Function used by the client to save the modified svg content
-// -----------------------------------------------------------------------------
-//
-TInt CSVGTUIDialog::SaveSvgDom( const TDesC& aFileName )
- {
- if ( iCustControl )
- {
- return ( iCustControl->SaveSvgDom( aFileName ) );
- }
- else
- {
- return KErrGeneral;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::SaveComplete
-// Function used by the client to indicate saving is complete
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::SaveComplete( const TInt aError )
- {
- if ( !aError )
- {
- // Indicate to Custom Control to perform any cleanup
- // once save is complete
- iCustControl->SaveComplete( aError );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::ProcessCommandL
-// Reimplements CAknDialog::ProcessCommandL inorder to handle dialog menu
-// commands.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::ProcessCommandL( TInt aCommandId ) // Command Id
- {
- // The Commands are handled by the custom CCoe Control and
- // a boolean varialble is used inorder to keep track whether
- // the control command processing needs to be invoked or not.
- TBool procCmdReqd = ETrue;
- CAknDialog::ProcessCommandL( aCommandId );
- switch ( aCommandId )
- {
- case ESvgtDlgSaveCommand:
- if ( iAppObserver )
- {
- iAppObserver->DoSaveL( ESvgtDlgCommand1 );
- }
- break;
- case ESvgtDlgHelpCommand:
-#ifdef __SERIES60_HELP
- procCmdReqd = EFalse;
- HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
- iEikonEnv->EikAppUi()->AppHelpContextL() );
-#endif // __SERIES60_HELP
- break;
- case ESvgtDlgFindTextCommand:
- break;
- case ESvgtDlgViewDetailsCommand:
- break;
- case ESvgtDlgListDownloadCommand:
- {
- if ( iAppObserver )
- {
- iAppObserver->DisplayDownloadMenuL();
- }
- break;
- }
- case ESvgtDlgFullScreenCommand:
- {
- if ( iCustControl )
- {
- iCustControl->SetCurrentFullScreenStatus( ETrue );
- SwitchDialogLayoutL( ETrue ); // ETrue = Full Screen Mode
- // Redraw Status Pane and CBA by doing a draw on dialog
- DrawNow();
- }
- break;
- }
- case ESvgtDlgNormalScreenCommand:
- {
- if ( iCustControl )
- {
- iCustControl->SetCurrentFullScreenStatus( EFalse );
- SwitchDialogLayoutL( EFalse ); // EFalse = Normal Screen Mode
- // Redraw Status Pane and CBA by doing a draw on dialog
- DrawNow();
- }
- break;
- }
-//@@ Touch support
-#ifdef RD_SVGT_AUDIO_SUPPORT
- case ESvgtDlgMuteCommand:
- iIsVolumeMuted = !iIsVolumeMuted;
- iCustControl->SetPresentationVolume(0);
-
- if(iCustControl->IsContentFinite())
- SetNaviPaneInfoL(iIsVolumeMuted, *iProgressText);
- else
- SetNaviPaneInfoL(iIsVolumeMuted, KNullDesC);
- break;
-
- case ESvgtDlgUnmuteCommand:
- iIsVolumeMuted = !iIsVolumeMuted;
- // Set the volume level to the value it was before muting
- iCustControl->SetPresentationVolume(iCustControl->GetPrevVolume());
-
- if(iCustControl->IsContentFinite())
- SetNaviPaneInfoL(iIsVolumeMuted, *iProgressText);
- else
- SetNaviPaneInfoL(iIsVolumeMuted, KNullDesC);
- break;
- case ESvgtDlgSetVolumeCommand: // Fall Through
-#endif //RD_SVGT_AUDIO_SUPPORT
-//@@ Touch support
- case ESvgtDlgLoopOnCommand: // Fall Through
- case ESvgtDlgLoopOffCommand: // Fall Through
- case ESvgtDlgPlayCommand: // Fall Through
- case ESvgtDlgPauseCommand: // Fall Through
- case ESvgtDlgStopCommand: // Fall Through
- case ESvgtDlgZoomInCommand: // Fall Through
- case ESvgtDlgZoomOutCommand: // Fall Through
- case ESvgtDlgAngle90: // Fall Through
- case ESvgtDlgAngle180: // Fall Through
- case ESvgtDlgAngle270: // Fall Through
- case ESvgtDlgSelectTextCommand: // Fall Through
- case ESvgtDlgEditTextCommand: // Fall Through
- break;
- case EAknSoftkeyBack: // Fall Through
- case EEikCmdExit:
- // Close this dialog
- procCmdReqd = EFalse; // No Further Processing required.
- TryExitL( aCommandId );
- break;
- case EAknCmdExit:
- // Close this dialog
- procCmdReqd = EFalse; // No Further Processing required.
- if ( !SaveNeededL( aCommandId ) )
- {
- TryExitL( aCommandId );
- iAvkonAppUi->ProcessCommandL( EAknCmdExit );
- }
- break;
- default:
- procCmdReqd = EFalse;
- break;
- }
- // If custom control has been created and control needs
- // to process the command invoke the control's ProcessViewerCommandL()
- // function
- if ( procCmdReqd && iCustControl )
- {
- iCustControl->ProcessViewerCommandL( aCommandId );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::CreateCustomControlL
-// Reimplements CAknDialog::CreateCustomControlL inorder to add the SVGT
-// custom control as part of the dialog in the UI framework.
-// Returns: SEikControlInfo which contains the SVGT Cust Control, if
-// aControlType == ESVGTCustControl
-// else,
-// the structure does not contain any control.
-// -----------------------------------------------------------------------------
-//
-SEikControlInfo CSVGTUIDialog::CreateCustomControlL(
- TInt aControlType ) // Control Type
- {
- SEikControlInfo controlInfo;
- controlInfo.iControl = NULL;
- controlInfo.iTrailerTextId = 0;
- controlInfo.iFlags = EEikControlHasEars;//EEikControlIsNonFocusing;
-
- switch ( aControlType )
- {
- case ESVGTCustControl:
- iCustControl = CSVGTCustControl::NewL(
- *iFileHandlePtr,
- iAppObserver,
- this,
- this,
- this,
- ETrue, // Progressive rendering enabled.
- // To enable it pass ETrue
- // otherwise EFalse.
- NULL,
- ESvgDisplayIcons|
- ESvgDrawPanIndicator|
- ESvgDrawPointer |
- ESvgDisplayErrorNotes |
- ESvgDrawPauseIndicator |
- ESvgUseBackLight
- );
- iCustControl->AddListener(this,EAudioListener);
- controlInfo.iControl = iCustControl;
- controlInfo.iControl->SetContainerWindowL(*this);
- iCustControl->SetPointerObserver(this);
- break;
- default:
- return CAknDialog::CreateCustomControlL(aControlType);
- }
- return controlInfo;
- }
-
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::SizeChanged
-// Reimplements CAknDialog::SizeChanged inorder to support the resize of the
-// dialog when functions such as SetRect, SetExtent are called on the dialog.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::SizeChanged()
- {
- CAknDialog::SizeChanged();
- iCustControl->SetExtent( Rect().iTl, Rect().Size() );
- AknLayoutUtils::LayoutMetricsPosition(AknLayoutUtils::EControlPane, iBtnGrpPos);
- AknLayoutUtils::LayoutMetricsSize(AknLayoutUtils::EControlPane, iBtnGrpSize);
- DrawNow();
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::OfferKeyEventL
-// Handles Key events by reimplementing CCoeControl::OfferKeyEventL.
-// Returns:
-// EKeyWasConsumed: If this control uses this key.
-// EKeyWasNotConsumed: Otherwise.
-// -----------------------------------------------------------------------------
-//
-TKeyResponse CSVGTUIDialog::OfferKeyEventL(
- const TKeyEvent& aKeyEvent, // Key Event
- TEventCode aType) // Event Code
- {
- if ( iCustControl )
- {
- if ( aType == EEventKey )
- {
- if ( aKeyEvent.iScanCode == EStdKeyEnter )
- {
- TryExitL( iLastCommandID );
-
- return iCustControl->OfferKeyEventL( aKeyEvent, aType );
- }
-
- if ( aKeyEvent.iCode == KSvgScreenToggleKey &&
- aKeyEvent.iRepeats == 0 ) // Ignore Repeat Events
- {
- // Screen Mode Change Handling
- TBool isFullScreenOn;
- iCustControl->GetCurrentFullScreenStatus( isFullScreenOn );
- if ( isFullScreenOn )
- {
- // Toggle to Normal Screen
- ProcessCommandL( ESvgtDlgNormalScreenCommand );
- }
- else
- {
- // Toggle to Full Screen
- ProcessCommandL( ESvgtDlgFullScreenCommand );
- }
- // No further processing required.
- return EKeyWasConsumed;
- }
- }
- // Pass the key to the custom control
- TKeyResponse lCcRetVal = iCustControl->OfferKeyEventL( aKeyEvent,
- aType );
- if ( lCcRetVal == EKeyWasConsumed )
- {
- return EKeyWasConsumed;
- }
- }
- return CAknDialog::OfferKeyEventL( aKeyEvent, aType );
- }
-
-#ifdef __SERIES60_HELP
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::OfferKeyEventL
-// Handles Key events by reimplementing CCoeControl::OfferKeyEventL.
-// Returns:
-// EKeyWasConsumed: If this control uses this key.
-// EKeyWasNotConsumed: Otherwise.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::GetHelpContext( TCoeHelpContext& aContext ) const
- {
- aContext.iMajor = KSvgtHelpContextUid;
- aContext.iContext = KSVGT_HLP_VIEWER;
- }
-#endif // __SERIES60_HELP
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::HandleResourceChange
-// Handles change of skin/Layout
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::HandleResourceChange( TInt aType )
- {
- CAknDialog::HandleResourceChange( aType );
- if( iQuietExitWhenOrientationChange )
- {
- TryExitL( EAknCmdExit );
- return;
- }
- if ( aType == KAknsMessageSkinChange )
- {
- // No skin related action performed.
- }
- else if ( aType == KEikDynamicLayoutVariantSwitch )
- {
- if ( iCustControl )
- {
- TBool isFullScreenOn;
- // Check whether the custom control is using full-screen or
- // normal screen
- iCustControl->GetCurrentFullScreenStatus( isFullScreenOn );
- // Change the layout to reflect layout switch
- TRAP_IGNORE( SwitchDialogLayoutL( isFullScreenOn ) );
- }
- }
-
- // If it is a Layout switch, need to do a redraw
- if ( aType == KEikDynamicLayoutVariantSwitch )
- {
- // Redraw the dialog
- DrawDeferred();
- }
- }
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::DrawProgressBarL
-// This function updates the progress bar in the navi pane. It is called back
-// by the custom control.
-// -----------------------------------------------------------------------------
-//
-void CSVGTUIDialog::DrawProgressBarL( TUint aTimeElapsed, // Time Elapsed in
- // Seconds
- TUint aTimeTotal ) // Total time in seconds
- {
-
- TBuf<KMaxTimeTextLength> timeElapsedBuf; // Time Elapsed, e.g. "00:12"
- TBuf<KMaxTimeTextLength> totalTimeBuf; // Total duration, e.g. "00:55"
-
- // Format the time to user readable format. The format is locale dependent
- FormatTimeL( aTimeElapsed, timeElapsedBuf );
- FormatTimeL( aTimeTotal, totalTimeBuf );
-
- // Format label text based on resource
- CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat( 2 ); // Allocate 2
- // strings for
- // elapsed time
- // and total
- // time strings
- CleanupStack::PushL( strings );
- strings->AppendL( timeElapsedBuf );
- strings->AppendL( totalTimeBuf );
-
- delete iProgressText;
- iProgressText = NULL;
- iProgressText = StringLoader::LoadL( R_QTN_SVGT_TIME_INDIC,
- *strings,
- iEikonEnv );
- // Destroy the array of strings
- CleanupStack::PopAndDestroy( strings );
-
- SetNaviPaneInfoL( iIsVolumeMuted, *iProgressText);
- }
-
-void CSVGTUIDialog::HandleApplicationExitL( TInt aExitCommand )
- {
- if((aExitCommand == EAknSoftkeyBack) || ( aExitCommand == EEikCmdExit))
- {
- this->TryExitL(aExitCommand);
- }
- else
- {
- User::LeaveIfError(KErrArgument);
- }
- }
-
-EXPORT_C void CSVGTUIDialog::AssignImageData( const TDesC& aUri, HBufC8* aData )
- {
- iCustControl->AssignImageData(aUri, aData);
- }
-
-// -----------------------------------------------------------------------------
-// CSVGTUIDialog::SetNaviPaneInfoL
-// Sets the mute icon & text to the navi pane.
-// -----------------------------------------------------------------------------
-void CSVGTUIDialog::SetNaviPaneInfoL(TBool aIsVolumeMuted, const TDesC& aText)
- {
- CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
- CAknNavigationControlContainer* np =
- static_cast<CAknNavigationControlContainer*>
- ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
- // Save the old Navi Decorator so that it can be deleted after
- // creating the new navi decorator
- CAknNavigationDecorator* lOldNaviDecorator = iNaviDecorator;
-
- iNaviDecorator = NULL;
-
- CSvgtDecoratorControl* decoControl = new (ELeave) CSvgtDecoratorControl;
- CleanupStack::PushL(decoControl);
- decoControl->ConstructL();
- decoControl->ShowVolumeMutedIcon(aIsVolumeMuted);
- decoControl->SetTextL(aText);
- iNaviDecorator = CAknNavigationDecorator::NewL(np, decoControl);
- iNaviDecorator->SetContainerWindowL(*this);
- CleanupStack::Pop(decoControl);
-
- // Clear the old Navi-Pane Decorator
- if ( lOldNaviDecorator )
- {
- delete lOldNaviDecorator ;
- lOldNaviDecorator = NULL;
- }
- // Push the new Navi decorator in the Navigation Pane
- np->PushL( *iNaviDecorator );
- }
-
-void CSVGTUIDialog::VolumeMuted(TBool aVolumeMuted)
- {
- if(iCustControl->IsContentFinite())
- {
- TRAP_IGNORE( SetNaviPaneInfoL(aVolumeMuted, *iProgressText));
- }
- else
- {
- TRAP_IGNORE(SetNaviPaneInfoL(aVolumeMuted, KNullDesC));
- }
- iIsVolumeMuted = aVolumeMuted;
- }
-// End of File