--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/satui/satapp/SATUISrc/CSatUiView.cpp Wed Sep 01 12:15:03 2010 +0100
@@ -0,0 +1,1134 @@
+/*
+* Copyright (c) 2002-2009 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:
+* Defines CSatUiView class
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <coecntrl.h> //for CCoeControl class
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <barsread.h>
+#include <badesca.h> // for descriptor arrays
+#include <aknlists.h>
+#include <eiktxlbx.h>
+#include <akncontext.h> //for Context pane
+#include <fbs.h> //for iocn bitmap
+#include <StringLoader.h>
+#include <avkon.hrh>
+#include "satui.hrh"
+#include <SatUi.rsg>
+#include <AknIconArray.h>
+#include <gulicon.h>
+#include <eikclbd.h>
+#include <msatuiadapter.h>
+#include <aknnotedialog.h>
+#include <aknstaticnotedialog.h>
+#include <featmgr.h> // Used for FeatureManager
+#include <activitymanager.h>
+
+#include "CSatUiApplication.h"
+#include "CSatUiViewAppUi.h"
+#include "CSatUiViewContainer.h"
+#include "CSatUiView.h"
+#include "tflogger.h"
+
+// CONSTANTS
+// From Ui spec 60 sec delay user response
+const TInt KNoResponseFromUserDelay = 60;
+
+_LIT( KTab, "\t" );
+_LIT( KIconTab, "%d\t" );
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CSatUiView::CSatUiView( TBool aSetUpMenu, CSatUiViewAppUi* aAppUi,
+ TBool aEmpty ):
+ iSetUpMenu( aSetUpMenu ),
+ iSatUiAppUi( aAppUi ),
+ iModel( NULL ),
+ iIconsOn( EFalse ),
+ iIconStateChange( EFalse ),
+ iSelfExplanatoryItems( EFalse ),
+ iListBoxVisible( ETrue ),
+ iEmpty( aEmpty )
+ {
+ }
+
+// Symbian OS default constructor can leave.
+void CSatUiView::ConstructL()
+ {
+ TFLOGSTRING( "CSatUiView::ConstructL() called" )
+
+ TInt recource( R_SATUI_SELECTITEM_VIEW );
+
+ if ( iSetUpMenu )
+ {
+ if ( iEmpty )
+ {
+ recource = R_SATUI_EMPTYMENU_VIEW;
+ }
+ else
+ {
+ recource = R_SATUI_SETUPMENU_VIEW;
+ }
+ }
+
+ BaseConstructL( recource );
+
+ iItemsIconArray = new(ELeave) CAknIconArray( 1 );
+ TFLOGSTRING( "CSatUiView::ConstructL() exit" )
+ }
+
+// Two-phased constructor.
+CSatUiView* CSatUiView::NewL( TBool aSetUpMenu,
+ CSatUiViewAppUi* aAppUi,
+ TBool aEmpty )
+ {
+ TFLOGSTRING( "CSatUiView::NewL called" )
+ CSatUiView* self = new ( ELeave ) CSatUiView( aSetUpMenu, aAppUi, aEmpty );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ TFLOGSTRING( "CSatUiView::NewL exit" )
+ return self;
+ }
+
+// Destructor.
+CSatUiView::~CSatUiView()
+ {
+ TFLOGSTRING( "CSatUiView::~CSatUiView() called" )
+
+ delete iContainer;
+ delete iMenuItemNextActions;
+ delete iMenuItems;
+
+ if ( iItemsIconArray )
+ {
+ iItemsIconArray->ResetAndDestroy();
+ delete iItemsIconArray;
+ iItemsIconArray = NULL;
+ }
+
+ TFLOGSTRING( "CSatUiView::~CSatUiView() exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::SetTitle
+// Sets the title needed for showing the view.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::SetTitle( const HBufC* aTitle )
+ {
+ TFLOGSTRING( "CSatUiView::SetTitle called" )
+ iTitle = aTitle;
+ TFLOGSTRING( "CSatUiView::SetTitle exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::SetIconL
+// Sets the icon needed to the view.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::SetIconL( const CFbsBitmap* aIconBitmap )
+ {
+ TFLOGSTRING( "CSatUiView::SetIconL called" )
+ if ( StatusPane()->PaneCapabilities( TUid::Uid(
+ EEikStatusPaneUidContext ) ).IsPresent() )
+ {
+ TFLOGSTRING( "CSatUiView::SetIconL pane is present" )
+ CEikStatusPane* sp=iEikonEnv->AppUiFactory()->StatusPane();
+ CleanupStack::PushL( sp );
+ CAknContextPane* contextPane=( CAknContextPane * )sp->
+ ControlL( TUid::Uid( EEikStatusPaneUidContext ) );
+ CleanupStack::Pop( sp ); //sp
+ if ( aIconBitmap ) //icon from SIM
+ {
+ TFLOGSTRING( "CSatUiView::SetIconL icon from SIM" )
+ contextPane->SetPicture( aIconBitmap );
+ }
+ else //set default icon
+ {
+ TFLOGSTRING( "CSatUiView::SetIconL default icon" )
+ contextPane->SetPictureToDefaultL();
+ }
+ }
+ TFLOGSTRING( "CSatUiView::SetIconL exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::SetItemsIconL
+// Sets the items icon array.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::SetItemsIconL(
+ const CAknIconArray* aItemsIconArray,
+ const TBool aSelfExplanatoryItems )
+ {
+ TFLOGSTRING( "CSatUiView::SetItemsIconL called" )
+ iItemsIconArray->ResetAndDestroy();
+ //if items icon array available
+ if ( aItemsIconArray->Count() )
+ {
+ TFLOGSTRING( "CSatUiView::SetItemsIconL icon array available" )
+ if( !iIconsOn )
+ {
+ //last view not with icons
+ iIconStateChange = ETrue;
+ }
+ iItemsIconArray->InsertL( 0, &aItemsIconArray->operator[]( 0 ),
+ aItemsIconArray->Count() );
+ iIconsOn = ETrue;
+ iSelfExplanatoryItems = aSelfExplanatoryItems;
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::SetItemsIconL icon array not available" )
+ if( iIconsOn )
+ {
+ TFLOGSTRING( "CSatUiView::SetItemsIconL iIconsOn true" )
+ iIconStateChange = ETrue;
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::SetItemsIconL iIconsOn false" )
+ iIconStateChange = EFalse;
+ }
+ iIconsOn = EFalse;
+ iSelfExplanatoryItems = EFalse;
+ }
+ TFLOGSTRING( "CSatUiView::SetItemsIconL exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::SetItemsL
+// Sets all parameters needed for showing the view.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TSatUiResponse CSatUiView::SetItemsL(
+ HBufC* aTitle,
+ const MDesCArray& aMenuItems,
+ const CArrayFixFlat<TSatAction>* aMenuItemNextActions,
+ const TBool aHelpIsAvailable )
+ {
+ TFLOGSTRING( "CSatUiView::SetItemsL called" )
+ iKeypadBlocked = EFalse;
+
+ delete iMenuItemNextActions;
+ iMenuItemNextActions = NULL;
+
+ if( !iMenuItems )
+ {
+ iMenuItems = new ( ELeave ) CDesCArrayFlat( 1 );
+ }
+ // This reset is required
+ iMenuItems->Reset();
+
+ // Remove NULL characters from title
+ TPtr titleptr = aTitle->Des();
+ TInt nullLocation;
+ while ( ( nullLocation = titleptr.Locate( NULL ) ) >= 0 )
+ {
+ titleptr.Delete( nullLocation, 1 );
+ }
+
+ iTitle = aTitle;
+
+ //no memory is allocated to the array buffers here:
+ iMenuItemNextActions = new ( ELeave ) CArrayFixFlat<TSatAction>( 1 );
+
+ iNItems = aMenuItems.MdcaCount();
+
+ TBool nextActions( EFalse );
+
+ TFLOGSTRING2( "CSatUiView::SetItemsL, iNItems: %d", iNItems )
+ if ( iNItems == ( aMenuItemNextActions->Count() ) )
+ {
+ nextActions = ETrue;
+ }
+
+ if (iNItems > 0)
+ {
+ for ( TInt i(0); i < iNItems; i++ )
+ {
+ TInt itemLength = aMenuItems.MdcaPoint(i).Length();
+ HBufC* tmpBuf = HBufC::NewLC(
+ aMenuItems.MdcaPoint(i).Length() + KTabLength );
+ TPtr tmpPtr( tmpBuf->Des() );
+
+ // Item text
+ TPtrC16 text ( aMenuItems.MdcaPoint(i) );
+
+ // Needed for NULL check
+ HBufC* correctText = HBufC::NewLC( itemLength );
+ TPtr ptr = correctText->Des();
+
+ // Check item text through
+ for ( TInt j(0); j < itemLength; j++)
+ {
+ TChar ch = text[j];
+ // Remove NULL characters from item text
+ if ( ch )
+ {
+ ptr.Append( ch );
+ }
+ }
+
+ //if view includes icons
+ if( iIconsOn )
+ {
+ TFLOGSTRING( "CSatUiView::SetItemsL iIconsOn true" )
+ //with icons
+ TBuf<KTabLength> lineTab;
+ lineTab.Format( KIconTab,i );
+ tmpPtr.Copy( lineTab );
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::SetItemsL iIconsOn false" )
+ //without icons
+ tmpPtr.Copy( KTab );
+ }
+
+ if( !iSelfExplanatoryItems )
+ {
+ //icons not selfexplanatory show text
+ tmpPtr.Append( ptr );
+ }
+
+ //memory is allocated here:
+ TRAPD( err, iMenuItems->AppendL(tmpPtr) );
+
+ if ( err )
+ {
+ iMenuItems->Reset();
+ iMenuItemNextActions->Reset();
+ CleanupStack::PopAndDestroy( correctText );
+ CleanupStack::PopAndDestroy( tmpBuf ); //tmpBuf, correctText
+ TFLOGSTRING( "CSatUiView::SetItemsL having error" )
+ return ESatFailure;
+ }
+ TFLOGSTRING2( "CSatUiView::SetItemsL tmpPtr=%S", &tmpPtr )
+ CleanupStack::PopAndDestroy( correctText );
+ CleanupStack::PopAndDestroy( tmpBuf ); //tmpBuf, correctText
+ //select options menu command
+ if ( nextActions )
+ {
+ TRAP( err, iMenuItemNextActions->AppendL(
+ aMenuItemNextActions->At( i ) ) );
+
+ if ( err )
+ {
+ iMenuItems->Reset();
+ iMenuItemNextActions->Reset();
+ TFLOGSTRING( "CSatUiView::SetItemsL return ESatFailure" )
+ return ESatFailure;
+ }
+ }
+ }
+ }
+
+ iHelpIsAvailable = aHelpIsAvailable;
+
+ TFLOGSTRING( "CSatUiView::SetItemsL return ESatSuccess" )
+ return ESatSuccess;
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::SetUpMenuL
+// Checks whether the same view should be refreshed or another
+// one activated and do it.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TSatUiResponse CSatUiView::SetUpMenuL(
+ HBufC* aTitle,
+ const MDesCArray& aMenuItems,
+ const CArrayFixFlat<TSatAction>* aMenuItemNextActions,
+ const TBool aHelpIsAvailable )
+ {
+ TFLOGSTRING( "CSatUiView::SetUpMenuL called" )
+ iDefaultItem = 0; //could be iSelection
+
+ CSatUiView* setUpMenuView = STATIC_CAST( CSatUiView*,
+ AppUi()->View( KSetUpMenuViewId ) );
+
+ TVwsViewId setUpMenuViewId( KUidSATUI, KSetUpMenuViewId );
+ TVwsViewId viewId;
+
+ AppUi()->GetActiveViewId( viewId );
+
+ setUpMenuView->SetItemsL( aTitle, aMenuItems, aMenuItemNextActions,
+ aHelpIsAvailable );
+
+ // Incase empty view is created before the actual SetUpMenu view
+ // CBA resource has to be updated
+ if ( iEmpty )
+ {
+ TFLOGSTRING( "CSatUiView::SetUpMenuL empty view" )
+ iEmpty = EFalse;
+ CEikButtonGroupContainer* cba = Cba();
+
+ if ( cba )
+ {
+ TFLOGSTRING( "CSatUiView::SetUpMenuL cba" )
+ cba->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_EXIT );
+ cba->DrawDeferred();
+ }
+ }
+
+ if ( viewId.iAppUid == setUpMenuViewId.iAppUid )
+ {
+ TFLOGSTRING( "CSatUiView::SetUpMenuL activate SetUpMenuView" )
+ //Activate SetUpMenuView
+ AppUi()->ActivateLocalViewL( KSetUpMenuViewId );
+
+ if ( iContainer )
+ {
+ RefreshL();
+ }
+ }
+ TFLOGSTRING( "CSatUiView::SetUpMenuL return ESatSuccess" )
+ return ESatSuccess;
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::SetAdapter
+// Sets a pointer to MSatUiAdapter provided by SatCli.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::SetAdapter( MSatUiAdapter* aAdapter )
+ {
+ TFLOGSTRING( "CSatUiView::SetAdapter called" )
+ iAdapter = aAdapter;
+ TFLOGSTRING( "CSatUiView::SetAdapter exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiSelectItemView::SelectItemL
+// Checks whether the same view should be refreshed or another
+// one activated and do it.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TSatUiResponse CSatUiView::SelectItemL(
+ HBufC* aTitle,
+ const MDesCArray& aMenuItems,
+ const CArrayFixFlat<TSatAction>* aMenuItemNextActions,
+ const TInt aDefaultItem, TUint8& aSelection,
+ const TBool aHelpIsAvailable )
+ {
+ TFLOGSTRING( "CSatUiView::SelectItemL called" )
+ iDefaultItem = aDefaultItem;
+ TFLOGSTRING2( "CSatUiView::SelectItemL in aDefaultItem = %d", aDefaultItem )
+ CSatUiView* selectItemView = STATIC_CAST( CSatUiView*,
+ AppUi()->View( KSelectItemViewId ) );
+
+ TVwsViewId selectItemViewId( KUidSATUI,KSelectItemViewId );
+ TVwsViewId viewId;
+
+ AppUi()->GetActiveViewId( viewId );
+
+ selectItemView->SetItemsL( aTitle, aMenuItems, aMenuItemNextActions,
+ aHelpIsAvailable);
+
+ if ( viewId.iAppUid == selectItemViewId.iAppUid )
+ {
+ TFLOGSTRING( "CSatUiView::SelectItemL activate SelectItemview" )
+ //Activate SelectItemview
+ AppUi()->ActivateLocalViewL( KSelectItemViewId );
+
+ if ( iContainer )
+ {
+ RefreshL();
+ }
+ }
+
+ iResponse = ESatSuccess;
+
+ iNoResponseFromUserAfterDelay = EFalse;
+
+ //activitymanager for wait user actions
+ CUserActivityManager* activityManager =
+ CUserActivityManager::NewL( EPriorityNormal );
+
+ CleanupStack::PushL( activityManager );
+
+ User::ResetInactivityTime();
+ activityManager->Start( TTimeIntervalSeconds( KNoResponseFromUserDelay ),
+ TCallBack( DispatchUserInactive, this ), 0 );
+
+ if ( !iWait.IsStarted() )
+ {
+ TFLOGSTRING( "CSatUiView::SelectItemL start iWait" )
+ iSatUiAppUi->DispatchTimer( iWait );
+ iWait.Start();
+ }
+
+ CleanupStack::PopAndDestroy( activityManager ); // activityManager
+
+ if ( iNoResponseFromUserAfterDelay )
+ {
+ iResponse = ESatNoResponseFromUser;
+ }
+
+ aSelection= STATIC_CAST(TUint8,iSelection);
+ TFLOGSTRING2( "CSatUiView::SelectItemL out aDefaultItem = %d", aDefaultItem )
+ TFLOGSTRING2( "CSatUiView::SelectItemL exit, return: %d", iResponse )
+ return iResponse;
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::Id
+// Returns the id of the view.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TUid CSatUiView::Id() const
+ {
+ TFLOGSTRING( "CSatUiView::Id() called" )
+ //this should be an UID.
+ if ( iSetUpMenu )
+ {
+ TFLOGSTRING( "CSatUiView::Id() setupmenu-exit" )
+ return KSetUpMenuViewId;
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::Id() selectitem-exit" )
+ return KSelectItemViewId;
+ }
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::HandleCommandL
+// Called by the UI framework when a command has been issued.
+// A command can originate by pressing a softkey or
+// by selection of the options menu item.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::HandleCommandL(
+ TInt aCommandId)
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL called" )
+ if ( iKeypadBlocked || ( EAknSoftkeyEmpty == aCommandId ) )
+ {
+ return;
+ }
+
+ TFLOGSTRING2( "CSatUiView::HandleCommandL iNItems: %d", iNItems )
+ if ( iNItems > 0 )
+ {
+ iSelection = iContainer->ListBox()->CurrentItemIndex();
+ }
+
+ TBool taskSwapper ( EFalse );
+
+ TFLOGSTRING2( "CSatUiView::HandleCommandL aCommandId: %d", aCommandId )
+ switch ( aCommandId )
+ {
+ case ESatUiCmdSelect:
+ {
+ iSatUiAppUi->HelpStatus( EFalse );
+
+ if ( iSetUpMenu )
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL setupmenu" )
+ iSatUiAppUi->ShowWaitNoteL();
+ iAdapter->MenuSelection( iSelection, EFalse );
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL others" )
+ iResponse = ESatSuccess;
+ iWait.AsyncStop();
+ }
+ break;
+ }
+
+ case EAknSoftkeyBack:
+ {
+ iResponse = ESatBackwardModeRequestedByUser;
+ iWait.AsyncStop();
+ break;
+ }
+
+ case EAknSoftkeyExit:
+ case EEikCmdExit:
+ {
+ AknSelectionService::HandleMarkableListProcessCommandL(
+ EAknCmdExit, iContainer->ListBox() );
+ STATIC_CAST( CSatUiViewAppUi*,
+ AppUi())->HandleCommandL( EEikCmdExit );
+ break;
+ }
+ case ESatUiCmdExit:
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL ESatUiCmdExit" )
+ iResponse = ESatSessionTerminatedByUser;
+ if ( iWait.IsStarted() )
+ {
+ iWait.AsyncStop();
+ TFLOGSTRING( "CSatUiView::HandleCommandL iWait stopped" )
+ }
+ break;
+ }
+ case EAknCmdHelp:
+ if ( iHelpIsAvailable )
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL help available" )
+ iSatUiAppUi->HelpStatus( ETrue );
+
+ if ( iSetUpMenu )
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL setupmenu" )
+ iAdapter->MenuSelection( iSelection, ETrue );
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL others" )
+ iResponse = EHelpRequestedByUser;
+ iWait.AsyncStop();
+ }
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL help not available" )
+ // Show Help
+ STATIC_CAST( CSatUiViewAppUi*,
+ AppUi())->HandleCommandL( EAknCmdHelp );
+ }
+ break;
+ case EAknCmdTaskSwapper:
+ {
+ taskSwapper = ETrue;
+ break;
+ }
+ default:
+ break;
+ }
+
+ if ( ( ( iNItems > 0 )) && ( iContainer->ListBox()->ScrollBarFrame() ) )
+ {
+ iContainer->ListBox()->ScrollBarFrame()->MoveVertThumbTo(
+ iSelection );
+ }
+
+ if ( ( ( EAknCmdHelp == aCommandId ) && !iHelpIsAvailable ) || taskSwapper )
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL iKeypadBlocked false" )
+ iKeypadBlocked = EFalse;
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::HandleCommandL iKeypadBlocked true" )
+ iKeypadBlocked = ETrue;
+ }
+
+ TFLOGSTRING( "CSatUiView::HandleCommandL exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::DynInitMenuPaneL
+// Update the options menu when opened.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL called" )
+ if (( aResourceId == R_SATUI_SETUPMENU_OPTIONS_MENU ) ||
+ ( aResourceId == R_SATUI_SELECTITEM_OPTIONS_MENU ) )
+ {
+
+ FeatureManager::InitializeLibL();
+
+ if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+ {
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+
+ FeatureManager::UnInitializeLib();
+
+ TInt nItems( aMenuPane->NumberOfItemsInPane() );
+
+ TFLOGSTRING2( "CSatUiView::DynInitMenuPaneL nItems: %d", nItems )
+ if ( nItems > 0 ) //number of items in the options menu
+ {
+ TFLOGSTRING2( "CSatUiView::DynInitMenuPaneL iNItems: %d", \
+ iNItems )
+ if ( iNItems > 0 ) //number of items in the main pane
+ {
+ TInt sItem = iContainer->ListBox()->CurrentItemIndex();
+ TFLOGSTRING2( "CSatUiView::DynInitMenuPaneL sItem: %d", sItem )
+ HBufC* menuItemNextActions;
+ TInt resource( R_QTN_SAT_OPTION_SELECT );
+
+ if ( iMenuItems->MdcaCount() ==
+ iMenuItemNextActions->Count() )
+ {
+ switch ( ( *iMenuItemNextActions )[ sItem ] )
+ {
+ case ESatSetUpCallAction:
+ {
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL \
+ setupcall" )
+ resource = R_QTN_SAT_OPTION_CALL;
+ break;
+ }
+ case ESatSendSsAction: // flow through
+ case ESatSendUssdAction: // flow through
+ case ESatSendSmAction:
+ {
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL \
+ sendss,sendussd or sendsm" )
+ resource = R_QTN_SAT_OPTION_SEND;
+ break;
+ }
+ case ESatPlayToneAction:
+ {
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL \
+ playtone" )
+ resource = R_QTN_SAT_OPTION_PLAY_TONE;
+ break;
+ }
+ case ESatDisplayTextAction:
+ {
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL \
+ displaytext" )
+ resource = R_QTN_SAT_OPTION_READ;
+ break;
+ }
+ case ESatSetUpMenuAction:
+ case ESatSelectItemAction:
+ {
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL \
+ setupmenu or selectitem" )
+ resource = R_QTN_SAT_OPTION_OPEN;
+ break;
+ }
+ case ESatLaunchBrowserAction:
+ {
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL \
+ launchbrowser" )
+ resource = R_QTN_SAT_OPTION_GOTO;
+ break;
+ }
+ default:
+ {
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL \
+ others" )
+ resource = R_QTN_SAT_OPTION_SELECT;
+ break;
+ }
+ }
+ }
+ menuItemNextActions = StringLoader::LoadLC(
+ resource, iCoeEnv );
+ aMenuPane->SetItemTextL( ESatUiCmdSelect,
+ *menuItemNextActions );
+ aMenuPane->SetItemSpecific( ESatUiCmdSelect, ETrue );
+ // menuItemNextActions
+ CleanupStack::PopAndDestroy( menuItemNextActions );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( ESatUiCmdSelect, ETrue );
+ aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
+ }
+ }
+ }
+ TFLOGSTRING( "CSatUiView::DynInitMenuPaneL exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::HandleListBoxEventL
+// Handles events that occur by selection of the menu item.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::HandleListBoxEventL(
+ CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType)
+ {
+ TFLOGSTRING( "CSatUiView::HandleListBoxEventL called" )
+
+ if ( iKeypadBlocked ||
+ ( EEventEnterKeyPressed != aEventType &&
+ EEventItemSingleClicked != aEventType ) )
+ {
+ return;
+ }
+
+ TFLOGSTRING2( "CSatUiView::HandleListBoxEventL aEventType: %d", \
+ aEventType )
+ switch ( aEventType )
+ {
+ case EEventItemSingleClicked:
+ case EEventEnterKeyPressed:
+
+ iSatUiAppUi->HelpStatus( EFalse );
+
+ if ( iNItems > 0 )
+ {
+ iSelection = iContainer->ListBox()->CurrentItemIndex();
+ }
+
+ if ( iSetUpMenu )
+ {
+ TFLOGSTRING( "CSatUiView::HandleListBoxEventL setupmenu" )
+ iSatUiAppUi->ShowWaitNoteL();
+ iAdapter->MenuSelection( iSelection, EFalse );
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::HandleListBoxEventL others" )
+ iResponse = ESatSuccess;
+
+ iWait.AsyncStop();
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ iKeypadBlocked = ETrue;
+
+ TFLOGSTRING( "CSatUiView::HandleListBoxEventL exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::DoActivateL
+// Called by the view framework when this view is activated.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::DoActivateL(
+ const TVwsViewId& PrevViewId,
+ TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/)
+ {
+ TFLOGSTRING( "CSatUiView::DoActivateL called" )
+
+ TVwsViewId viewId;
+ AppUi()->GetActiveViewId( viewId );
+
+ if ( ( viewId == PrevViewId ) && ( !iIconStateChange ) )
+ {
+ TFLOGSTRING( "CSatUiView::DoActivateL refresh" )
+ //if selectitems and icon state changed
+ RefreshL();
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::DoActivateL draw" )
+ iContainer = CSatUiViewContainer::NewL( iIconsOn, this );
+
+ iContainer->SetMopParent( this );
+ iContainer->ListBox()->SetListBoxObserver( this );
+
+ iModel = STATIC_CAST( CTextListBoxModel*,
+ iContainer->ListBox()->Model() );
+
+ if ( !iMenuItems )
+ {
+ //no memory is allocated to the array buffers here:
+ iMenuItems = new (ELeave) CDesCArrayFlat(1);
+ iMenuItemNextActions = new (ELeave) CArrayFixFlat<TSatAction>( 1 );
+ }
+
+ iRect = ClientRect();
+
+ AppUi()->AddToStackL( iContainer );
+
+ DrawL();
+ }
+ TFLOGSTRING( "CSatUiView::DoActivateL exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::DoDeactivateL
+// Called by the view framework when this view is deactivated.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::DoDeactivate()
+ {
+ TFLOGSTRING( "CSatUiView::DoDeactivate() called" )
+ if ( iContainer )
+ {
+ TFLOGSTRING( "CSatUiView::DoActivateL iContainer" )
+ AppUi()->RemoveFromStack( iContainer );
+ delete iContainer;
+ iContainer = NULL;
+ }
+ TFLOGSTRING( "CSatUiView::DoDeactivate() exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::MakeListBoxVisible
+// Hides and makes list box visible if needed.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::MakeListBoxVisible( TBool aVisible )
+ {
+
+ TFLOGSTRING( "CSatUiView::MakeListBoxVisible() called" )
+ iListBoxVisible = aVisible;
+ TFLOGSTRING( "CSatUiView::MakeListBoxVisible() exit" )
+
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::RefreshL
+// Called by SetUpMenuL and SelectItemL when view is the same but
+// data is changed.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::RefreshL()
+ {
+ TFLOGSTRING( "CSatUiView::RefreshL() called" )
+ if ( !iIconStateChange )
+ {
+ TFLOGSTRING( "CSatUiView::RefreshL() iIconStateChange false" )
+ iRect = ClientRect();
+ DrawL();
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::RefreshL() iIconStateChange true" )
+ //deactivate last selectitem view with other icon state
+ DoDeactivate();
+
+ iContainer = CSatUiViewContainer::NewL( iIconsOn, this );
+
+ iContainer->SetMopParent( this );
+ iContainer->ListBox()->SetListBoxObserver( this );
+
+ iModel = STATIC_CAST( CTextListBoxModel*,
+ iContainer->ListBox()->Model() );
+
+ if ( !iMenuItems )
+ {
+ //no memory is allocated to the array buffers here:
+ iMenuItems = new ( ELeave ) CDesCArrayFlat(1);
+ iMenuItemNextActions = new ( ELeave ) CArrayFixFlat<TSatAction>( 1 );
+ }
+
+ iRect = ClientRect();
+
+ AppUi()->AddToStackL( iContainer );
+
+ DrawL();
+ }
+ TFLOGSTRING( "CSatUiView::RefreshL() exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::DrawL
+// Called by DoActivateL and RefreshL to draw the view.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::DrawL()
+ {
+ TFLOGSTRING( "CSatUiView::DrawL() called" )
+
+ if ( iContainer )
+ {
+ TFLOGSTRING( "CSatUiView::DrawL make ListBox visible" )
+ iContainer->ListBox()->MakeVisible( iListBoxVisible );
+ }
+
+ if ( ( iTitle ) && ( StatusPane()->PaneCapabilities( TUid::Uid(
+ EEikStatusPaneUidTitle ) ).IsPresent() )
+ && iListBoxVisible )
+ {
+ TFLOGSTRING( "CSatUiView::DrawL set title pane" )
+ CAknTitlePane* titlePane = STATIC_CAST( CAknTitlePane*,
+ StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ titlePane->SetTextL( *iTitle );
+ titlePane->DrawNow();
+ }
+
+ if( iIconsOn )
+ {
+ TFLOGSTRING( "CSatUiView::DrawL set icons" )
+ //set icons to view
+ CAknIconArray* itemIconsArray = new( ELeave ) CAknIconArray(1);
+ CleanupStack::PushL( itemIconsArray );
+ itemIconsArray->InsertL( 0, &iItemsIconArray->operator[]( 0 ),
+ iItemsIconArray->Count() );
+ iContainer->ListBox()->ItemDrawer()->ColumnData()->
+ SetIconArray( itemIconsArray );
+ CleanupStack::Pop( itemIconsArray );
+ iItemsIconArray->Reset();
+ }
+
+ iModel->SetItemTextArray( iMenuItems );
+ iModel->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+ iContainer->MakeVisible( ETrue );
+ iContainer->SetRect( iRect );
+ iContainer->ActivateL();
+
+ if ( iSetUpMenu )
+ {
+ TFLOGSTRING( "CSatUiView::DrawL() SetupMenu" )
+ UpdateMskL( 0, ETrue ); // SetupMenu starts at beginning
+ }
+ else
+ {
+ TFLOGSTRING( "CSatUiView::DrawL() others" )
+ UpdateMskL( iDefaultItem, ETrue ); // SelectItem may have default item
+ }
+ iContainer->ListBox()->SetCurrentItemIndex( iDefaultItem );
+ iContainer->ListBox()->DrawNow();
+ TFLOGSTRING2( "CSatUiView::DrawL() iDefaultItem=%d", iDefaultItem )
+ TFLOGSTRING( "CSatUiView::DrawL() exit" )
+ }
+
+// ---------------------------------------------------------
+// CSatUiView::DispatchUserInactive
+// Called when user has been inactive for a pre-defined time period
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CSatUiView::DispatchUserInactive( TAny* aPtr )
+ {
+ TFLOGSTRING( "CSatUiView::DispatchUserInactive called-exit" )
+ if ( ( ( CSatUiView* )aPtr )->iWait.IsStarted() )
+ {
+ ( ( CSatUiView* )aPtr )->iNoResponseFromUserAfterDelay = ETrue;
+ ( ( CSatUiView* )aPtr )->iWait.AsyncStop();
+ }
+ return ( EFalse );
+ }
+
+
+// ---------------------------------------------------------
+// CSatUiView::UpdateMskL
+// Updates the middle soft key
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSatUiView::UpdateMskL( TInt aIndex, TBool aNew )
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL() enter" )
+ CEikButtonGroupContainer* cba = Cba();
+
+ if ( cba && ( aNew || ( iMenuItems->MdcaCount() ==
+ iMenuItemNextActions->Count() ) ) )
+ {
+ TInt resource ( R_QTN_MSK_SELECT );
+ TInt commandId ( ESatUiCmdSelect );
+
+ if ( iEmpty )
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL iEmpty" )
+ resource = R_TEXT_SOFTKEY_EMPTY;
+ commandId = EAknSoftkeyEmpty;
+ }
+ else if ( iMenuItems->MdcaCount() ==
+ iMenuItemNextActions->Count() && iNItems )
+ {
+ switch ( ( *iMenuItemNextActions )[ aIndex ] )
+ {
+ case ESatSetUpCallAction:
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL \
+ setupcall" )
+ resource = R_QTN_MSK_CALL_SAT;
+ break;
+ }
+ case ESatSendSsAction: // flow through
+ case ESatSendUssdAction: // flow through
+ case ESatSendSmAction:
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL \
+ sendss,sendussd or sendsm" )
+ resource = R_QTN_MSK_SEND;
+ break;
+ }
+ case ESatPlayToneAction:
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL \
+ playtone" )
+ resource = R_QTN_MSK_PLAY;
+ break;
+ }
+ case ESatDisplayTextAction:
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL \
+ displaytext" )
+ resource = R_QTN_MSK_READ_SAT;
+ break;
+ }
+ case ESatSetUpMenuAction:
+ case ESatSelectItemAction:
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL \
+ setupmenu or selectitem" )
+ resource = R_QTN_MSK_OPEN;
+ break;
+ }
+ case ESatLaunchBrowserAction:
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL \
+ launchbrowser" )
+ resource = R_QTN_MSK_GOTO_SAT;
+ break;
+ }
+ default:
+ {
+ TFLOGSTRING( "CSatUiView::UpdateMskL \
+ others" )
+ resource = R_QTN_MSK_SELECT ;
+ break;
+ }
+ }
+ TFLOGSTRING2( "CSatUiView::UpdateMskL:aIndex=%d", aIndex )
+ }
+ else // Basic aNew
+ {
+ // No need to to do anything here, default values are used
+ }
+
+ HBufC* msk = StringLoader::LoadLC( resource, iCoeEnv );
+ cba->SetCommandL( CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+ commandId, *msk );
+ cba->DrawDeferred();
+ CleanupStack::PopAndDestroy( msk );
+ }
+
+ TFLOGSTRING( "CSatUiView::UpdateMskL() exit" )
+ }
+