--- a/locationsystemui/locationsysui/locsuplsettingsui/src/locsuplsessioncontainer.cpp Thu Aug 19 10:20:18 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,712 +0,0 @@
-/*
-* Copyright (c) 2008 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: SUPL session UI View's container
-*
-*/
-
-
-// System Includes
-#include <eikspane.h> // Status pane
-#include <akntitle.h> // CAknTitlePane
-#include <aknlists.h>
-#include <StringLoader.h>
-#include <locsuplsettingsui.rsg>
-#include <csxhelp/locsupl.hlp.hrh> // Help File
-#include <aknview.h>
-#include <eikmenub.h>
-#include <gulicon.h>
-#include <AknIconUtils.h>
-#include <AknIconArray.h>
-#include <eikclbd.h>
-#include <avkon.mbg> // for select session (mark) icon
-#include <avkon.rsg>
-#include <eiklbx.h>
-#include <ErrorUI.h>
-#include <AknsUtils.h>
-#include <aknapp.h>
-#include <locsuplsettings.mbg> // for session NI/TI icon
-
-// User Includes
-#include "locsuplsettings.hrh"
-#include "locsuplsettingsuid.hrh"
-#include "locsuplsessioncontainer.h"
-#include "locsuplsessionview.h"
-#include "locsuplsessionlbmodel.h"
-#include "locsuplsettingsuiengine.h"
-#include "locsuplsettingseventhandler.h"
-#include "locsupldebug.h"
-
-// CONSTANT DEFINITIONS
-const TInt KIconArrayGranularity = 2; // The number of default icons
-_LIT( KLocSuplSettingsIconFileName, "locsuplsettings.mif" );
-
-
-// ========================= MEMBER FUNCTIONS ================================
-
-// ---------------------------------------------------------------------------
-// CLocSUPLSessionContainer::CLocSUPLSessionContainer
-// Overloaded Constructor
-//
-// ---------------------------------------------------------------------------
-//
-CLocSUPLSessionContainer::CLocSUPLSessionContainer( CLocSUPLSessionView* aView )
- : iView( aView )
- {
- }
-
-// ---------------------------------------------------------------------------
-// CLocSUPLSessionContainer::~CLocSUPLSessionContainer
-// Destructor
-//
-// ---------------------------------------------------------------------------
-//
-CLocSUPLSessionContainer::~CLocSUPLSessionContainer()
- {
- DEBUG( + CLocSUPLSessionContainer::~CLocSUPLSessionContainer );
- // Delete the List box model only after deleting the list box
- delete iListBox;
- iListBox = NULL;
-
- delete iListBoxModel;
- iListBoxModel = NULL;
- DEBUG( - CLocSUPLSessionContainer::~CLocSUPLSessionContainer );
- }
-
-// ---------------------------------------------------------------------------
-// CLocSUPLSessionContainer* CLocSUPLSessionContainer::NewL
-// Static Two phase constructor that instantiates the CLocSUPLSessionContainer
-//
-// @param aRect Client rectangle
-// @param aEngine Reference to the SUPL Settings
-// engine
-// @param aEventHandler Reference to the parent view
-// @return CLocSUPLSessionContainer* Reference to the object created
-// ---------------------------------------------------------------------------
-//
-CLocSUPLSessionContainer* CLocSUPLSessionContainer::NewL(
- const TRect& aRect,
- CLocSUPLSettingsUiEngine& aEngine,
- CLocSUPLSessionView* aView )
- {
- DEBUG( + CLocSUPLSessionContainer::NewL );
- CLocSUPLSessionContainer* self = NewLC( aRect,
- aEngine,
- aView );
- CleanupStack::Pop( self );
- DEBUG( - CLocSUPLSessionContainer::NewL );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CLocSUPLSessionContainer* CLocSUPLSessionContainer::NewLC
-// Static Two phase contructor that instantiates the CLocSUPLSessionContainer
-//
-// @param aRect Client rectangle
-// @param aEngine Reference to the SUPL Settings
-// engine
-// @param aEventHandler Reference to the parent view
-// @return CLocSUPLSessionContainer* Reference to the object created
-// ---------------------------------------------------------------------------
-//
-CLocSUPLSessionContainer* CLocSUPLSessionContainer::NewLC(
- const TRect& aRect,
- CLocSUPLSettingsUiEngine& aEngine,
- CLocSUPLSessionView* aView )
- {
- CLocSUPLSessionContainer* self = new ( ELeave ) CLocSUPLSessionContainer(
- aView );
- CleanupStack::PushL( self );
- self->ConstructL( aRect, aEngine );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::ConstructL
-// Second phase of the two phase Construction process
-//
-// @param aRect Client rectangle
-// @param aEngine Reference to the SUPL Settings engine
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::ConstructL(
- const TRect& aRect ,
- CLocSUPLSettingsUiEngine& aEngine )
- {
- DEBUG( + CLocSUPLSessionContainer::ConstructL );
- //Make this control a window-owning control
- CreateWindowL();
-
- // Create a New Title for the View
- MakeTitleL( R_LOC_SUPL_SERVICES_TITLE );
-
- CreateListboxL( aEngine );
-
- // Get the Help context
- iContextName = KLOC_HLP_SUPL();
-
- SetRect( aRect );
- ActivateL();
- DEBUG( - CLocSUPLSessionContainer::ConstructL );
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::UpdateScreenL
-// Refreshes the screen so that the list box reflects the latest contents
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::UpdateScreenL()
- {
- DEBUG( + CLocSUPLSessionContainer::UpdateScreenL );
-
- TInt oldCount = SessionIds().Count();
- TInt64 sessionId;
- if( iSelectedIndex != KErrNotFound && SessionIds().Count() > iSelectedIndex )
- {
- sessionId = SessionIds()[ iSelectedIndex ];
- }
-
- if ( iListBoxModel )
- {
- iListBoxModel->UpdateSessionIdsL();
- }
-
- TInt newCount = SessionIds().Count();
-
- if ( iListBox )
- {
- // Update Listbox items
- if( newCount <= 0 || newCount == oldCount )
- {
- TRAP_IGNORE( iListBox->HandleItemAdditionL() );
- TRAP_IGNORE( iListBox->HandleItemRemovalL() );
- }
- else if( newCount > oldCount )
- {
- // notify the listbox for item addition
- TRAP_IGNORE( iListBox->HandleItemAdditionL() );
-
- // set focus to newly added item
- TInt index = iListBox->CurrentItemIndex();
- if( index == 0 && newCount == 1 )
- {
- iListBox->SetCurrentItemIndex( 0 );
- }
- else
- {
- iListBox->SetCurrentItemIndex( newCount - 1 );
- }
- }
- else if( newCount < oldCount )
- {
- // notify the listbox for item deletion
- TRAP_IGNORE( iListBox->HandleItemRemovalL() );
-
- // set focus at last selected item or index
- if( iSelectedIndex > newCount-1 )
- {
- iListBox->SetCurrentItemIndex( newCount - 1 );
- }
- else
- {
- TInt newIndex = SessionIds().Find( sessionId );
- if( newIndex != KErrNotFound )
- {
- iListBox->SetCurrentItemIndex( newIndex );
- }
- else
- {
- iListBox->SetCurrentItemIndex( iSelectedIndex );
- }
- }
- }
- }
- DrawDeferred();
- DEBUG( - CLocSUPLSessionContainer::UpdateScreenL );
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::HandleResourceChange
-//
-// ---------------------------------------------------------------------------
-void CLocSUPLSessionContainer::HandleResourceChange(TInt aType)
- {
- DEBUG( + CLocSUPLSessionContainer::HandleResourceChange );
- // Pass the event to the base class
- CCoeControl::HandleResourceChange(aType);
- switch( aType )
- {
- // Dynamic Layout switch
- case KEikDynamicLayoutVariantSwitch:
- {
- SetRect( iView->ClientRect() );
- break;
- }
- default:
- {
- break;
- }
- }
- DEBUG( - CLocSUPLSessionContainer::HandleResourceChange );
- }
-
-// -----------------------------------------------------------------------------
-// CLocSUPLSessionContainer::GetHelpContext
-//
-// -----------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::GetHelpContext( TCoeHelpContext& aContext ) const
- {
- DEBUG( + CLocSUPLSessionContainer::GetHelpContext );
- aContext.iContext = iContextName;
- aContext.iMajor = TUid::Uid( KLOCSUPLSETTINGSUIUID3 );
- DEBUG( - CLocSUPLSessionContainer::GetHelpContext );
- }
-
-// ---------------------------------------------------------------------------
-// TInt CLocSUPLSessionContainer::CountComponentControls
-//
-// ---------------------------------------------------------------------------
-TInt CLocSUPLSessionContainer::CountComponentControls() const
- {
- return 1;
- }
-
-// ---------------------------------------------------------------------------
-// CCoeControl* CLocSUPLSessionContainer::ComponentControl
-//
-// ---------------------------------------------------------------------------
-CCoeControl* CLocSUPLSessionContainer::ComponentControl( TInt /*aIndex*/ ) const
- {
- return iListBox;
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::OfferKeyEventL
-//
-// ---------------------------------------------------------------------------
-//
-TKeyResponse CLocSUPLSessionContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
- TEventCode aType )
- {
- TKeyResponse keyresponse = EKeyWasNotConsumed;
-
- // Now handle the Key Event based on the Key type
- switch ( aKeyEvent.iScanCode )
- {
- case EStdKeyUpArrow:
- case EStdKeyDownArrow:
- {
- keyresponse = iListBox->OfferKeyEventL( aKeyEvent, aType );
- iView->ChangeMSKL();
- return keyresponse;
- }
- case EStdKeyBackspace:
- case EStdKeyDelete:
- {
- if(aType == EEventKey )
- {
- keyresponse = iListBox->OfferKeyEventL( aKeyEvent, aType );
- iView->HandleCommandL( ELocSuplSessionTerminate );
- }
- return keyresponse;
- }
- case EStdKeyHash:
- {
- TBool shiftKeyPressed = ( aKeyEvent.iModifiers & EModifierShift );
- keyresponse = iListBox->OfferKeyEventL( aKeyEvent, aType );
- if( aType == EEventKeyUp && ( EKeyWasConsumed == keyresponse || !shiftKeyPressed ) )
- iView->ChangeMSKL();
- return keyresponse;
- }
- default:
- {
- break;
- }
- }
-
- // now it's iListBox's job to process the key event
- return iListBox->OfferKeyEventL( aKeyEvent, aType );
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::HandleListBoxEventL
-//
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::HandleListBoxEventL( CEikListBox* /* aListBox */,
- TListBoxEvent aEventType )
- {
- DEBUG( + CLocSUPLSessionContainer::HandleListBoxEventL );
- switch ( aEventType )
- {
- case EEventItemClicked:
- {
- // The item is just selected here. Change the MSK to reflect
- // the Correct MSK value
- iView->ChangeMSKL();
- break;
- }
- // List box Item Selection
- case EEventEnterKeyPressed:
- case EEventItemSingleClicked:
- {
- if( SelectedCount() )
- {
- //display menu specific to editor
- ShowContextMenuL();
- }
- else
- {
- iView->HandleCommandL( ELocSuplSessionOpen );
- }
- break;
- }
- default:
- break;
- }
- DEBUG( - CLocSUPLSessionContainer::HandleListBoxEventL );
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::FocusChanged
-//
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::FocusChanged( TDrawNow aDrawNow )
- {
- CCoeControl::FocusChanged( aDrawNow );
- // The focus event has to be explicitly handed over to all the compound
- // controls since CCoeControl does not do that implicitly
- if ( iListBox )
- {
- iListBox->SetFocus( IsFocused(), aDrawNow );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CLocSUPLSessionContainer::SizeChanged
-//
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::SizeChanged()
- {
- if ( iListBox )
- {
- iListBox->SetRect( Rect() );
- }
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::MakeTitleL
-// Sets the Title text
-//
-// @param aResourceText Resource to create title
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::MakeTitleL( TInt aResourceText )
- {
- DEBUG( + CLocSUPLSessionContainer::MakeTitleL );
- // Obtain the title from the Status Pane
- CAknTitlePane* title = static_cast < CAknTitlePane* >( StatusPane()->
- ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
-
- // Set the Title's buffer
- HBufC* buf = StringLoader::LoadL( aResourceText );
- title->SetText( buf ); // Takes ownership of buf
- DEBUG( - CLocSUPLSessionContainer::MakeTitleL );
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::StatusPane
-// Returns the Appui's status pane
-//
-// @return CEikStatusPane* Statuspane pointer
-// ---------------------------------------------------------------------------
-//
-CEikStatusPane* CLocSUPLSessionContainer::StatusPane()
- {
- return iEikonEnv->AppUiFactory()->StatusPane();
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::CreateListboxL
-// Creates the List box and the Listbox model. Associates the list box model
-// with the list box
-//
-// @param aEngine Reference to the SUPL Settings
-// engine
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::CreateListboxL(
- CLocSUPLSettingsUiEngine& aEngine )
- {
- DEBUG( + CLocSUPLSessionContainer::CreateListboxL );
- // Create the Listbox model
- iListBoxModel = CLocSUPLSessionLBModel::NewL( aEngine );
-
- // CAknSingleGraphicStyleListBox "0\tTextLabel\t1\t2"
-
- iListBox = new ( ELeave ) CAknSingleGraphicStyleListBox;
- iListBox->ConstructL(
- this,
- #ifdef RD_SCALABLE_UI_V2
- EAknListBoxStylusMarkableList
- #else
- EAknListBoxMarkableList
- #endif //RD_SCALABLE_UI_V2
- );
- // Set the container control.
- iListBox->SetContainerWindowL( *this );
- // Add scrollbars to listbox
- iListBox->CreateScrollBarFrameL( ETrue );
- iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
- CEikScrollBarFrame::EAuto );
- // Icon array, needed only if listbox style is single number with graphic.
- CAknIconArray* icons = new( ELeave ) CAknIconArray( KIconArrayGranularity );
- CleanupStack::PushL( icons );
-
- TFileName avkonIconFile = AknIconUtils::AvkonIconFileName();
-
- TRAP_IGNORE( AddIconL( *icons,
- avkonIconFile,
- KAknsIIDQgnIndiMarkedAdd,
- EMbmAvkonQgn_indi_marked_add,
- EMbmAvkonQgn_indi_marked_add_mask ) );
-
- TFileName *iconFile = IconFileNameLC();
-
- TRAP_IGNORE( AddIconL( *icons,
- *iconFile,
- KAknsIIDQgnPropRadiobuttOff,
- EMbmLocsuplsettingsQgn_loc_server_disabled,
- EMbmLocsuplsettingsQgn_loc_server_disabled_mask ) );
-
- TRAP_IGNORE( AddIconL( *icons,
- *iconFile,
- KAknsIIDQgnPropRadiobuttOff,
- EMbmLocsuplsettingsQgn_loc_server_disabled,
- EMbmLocsuplsettingsQgn_loc_server_disabled_mask ) );
-
- CleanupStack::PopAndDestroy( iconFile );
-
- iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
- CleanupStack::Pop( icons );
-
- // Set the model & observer
- iListBox->SetListBoxObserver( this );
-
- iListBox->Model()->SetItemTextArray( iListBoxModel );
- iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
- iListBox->ActivateL();
- DEBUG( - CLocSUPLSessionContainer::CreateListboxL );
- }
-
-// -----------------------------------------------------------------------------
-// CLocSUPLSessionContainer::AddIconL
-// -----------------------------------------------------------------------------
-void CLocSUPLSessionContainer::AddIconL( CAknIconArray& aIcons,
- const TDesC& aIconFileWithPath,
- TAknsItemID aSkinID,
- TInt aIconGraphicsIndex,
- TInt aIconGraphicsMaskIndex )
- {
- DEBUG( + CLocSUPLSessionContainer::AddIconL );
- MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-
- CFbsBitmap* bitmap = NULL;
- CFbsBitmap* bitmapMask = NULL;
-
- TRAPD( err, AknsUtils::CreateIconL( skin,
- aSkinID,
- bitmap,
- bitmapMask,
- aIconFileWithPath,
- aIconGraphicsIndex,
- aIconGraphicsMaskIndex ) );
-
- if(err != KErrNone)
- {
- TRAP( err, AknIconUtils::CreateIconL( bitmap,
- bitmapMask,
- aIconFileWithPath,
- aIconGraphicsIndex,
- aIconGraphicsMaskIndex ) );
- }
- User::LeaveIfError( err );
-
- CleanupStack::PushL( bitmap );
- CleanupStack::PushL( bitmapMask );
-
- CGulIcon* icon = CGulIcon::NewL( bitmap, bitmapMask );
-
- // Remove the Bitmap and the Bitmap Icon from the Clean up stack since
- // the ownership is taken over by the icon
- CleanupStack::Pop( bitmapMask );
- CleanupStack::Pop( bitmap );
-
- CleanupStack::PushL( icon );
- aIcons.AppendL( icon );
- CleanupStack::Pop( icon ); // icon
- DEBUG( - CLocSUPLSessionContainer::AddIconL );
- }
-
-// -----------------------------------------------------------------------------
-// CLocSUPLSessionContainer::IconFileNameLC
-// -----------------------------------------------------------------------------
-TFileName* CLocSUPLSessionContainer::IconFileNameLC() const
- {
- TFileName* fileName = new(ELeave) TFileName;
- CleanupStack::PushL( fileName );
-
- TFileName* tmpName = new(ELeave) TFileName;
- CleanupStack::PushL( tmpName );
-
- tmpName->Append( KDC_BITMAP_DIR );
- tmpName->Append( KLocSuplSettingsIconFileName );
-
- CEikAppUi *appUi = ( CEikAppUi *)( CEikonEnv::Static()->AppUi());
- TFileName appDrive = appUi->Application()->AppFullName();
-
- TParse parse;
- User::LeaveIfError( parse.Set( appDrive, NULL, NULL ) );
- User::LeaveIfError( parse.Set( parse.Drive(), tmpName, NULL ) );
-
- fileName->Copy(parse.FullName());
-
- CleanupStack::PopAndDestroy( tmpName );
-
- return fileName;
- }
-
-// ----------------------------------------------------------------------------
-// CLocSUPLSessionContainer::ListBoxL()
-// ----------------------------------------------------------------------------
-//
-CEikListBox& CLocSUPLSessionContainer::ListBoxL()
- {
- User::LeaveIfNull( iListBox );
- return *iListBox;
- }
-
-// -----------------------------------------------------------------------------
-// TInt CLocSUPLSessionContainer::SelectedItemIndex
-// Returns the Selected element. The list box model defines the enumeration that
-// would determine the current element that has been selected
-//
-// @return TInt Index of the item selected
-// -----------------------------------------------------------------------------
-//
-TInt CLocSUPLSessionContainer::SelectedItemIndex()
- {
- return iListBox->CurrentItemIndex();
- }
-
-// ---------------------------------------------------------------------------
-// void CLocSUPLSessionContainer::FocusToSessionDetailL
-// Focus move to server detail setting item
-//
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::FocusToSessionDetailL( TInt aIndex )
- {
- iListBox->SetCurrentItemIndex( aIndex );
- }
-
-// ----------------------------------------------------------------------------
-// CLocSUPLSessionContainer::CurrentSessionId()
-// ----------------------------------------------------------------------------
-//
-TInt64 CLocSUPLSessionContainer::CurrentSessionId()
- {
- if( SelectedItemIndex() != KErrNotFound && SelectedItemIndex() < SessionCount() )
- return iListBoxModel->SessionIds()[ SelectedItemIndex() ];
- else
- return KErrNotFound;
- }
-
-// ----------------------------------------------------------------------------
-// CLocSUPLSessionContainer::SelectedCount()
-// ----------------------------------------------------------------------------
-//
-TInt CLocSUPLSessionContainer::SelectedCount()
- {
- return iListBox->SelectionIndexes()->Count();
- }
-
-// ----------------------------------------------------------------------------
-// CLocSUPLSessionContainer::SessionCount()
-// ----------------------------------------------------------------------------
-//
-TInt CLocSUPLSessionContainer::SessionCount()
- {
- return iListBox->Model()->NumberOfItems();
- }
-
-// ---------------------------------------------------------------------------
-// CLocSUPLSessionContainer::SessionIds()
-// returns server id array
-//
-// ---------------------------------------------------------------------------
-//
-RArray<TInt64>& CLocSUPLSessionContainer::SessionIds()
- {
- return iListBoxModel->SessionIds();
- }
-
-// ---------------------------------------------------------------------------
-// CLocSUPLSessionContainer::SetIndex()
-// sets the current selected item
-//
-// ---------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::SetSelectedIndex()
- {
- iSelectedIndex = SelectedItemIndex();
- }
-
-// ---------------------------------------------------------------------------
-// CLocSUPLSessionContainer::CurrentSessionName()
-// Get the currently focused session name
-//
-// ---------------------------------------------------------------------------
-//
-TPtrC CLocSUPLSessionContainer::CurrentSessionName()
- {
- if( SelectedCount() == 1 )
- return iListBoxModel->SessionName( iListBox->SelectionIndexes()->At(0) );
- else
- return iListBoxModel->SessionName( SelectedItemIndex() );
- }
-
-// -----------------------------------------------------------------------------
-// CLocSUPLSessionContainer::ShowContextMenuL
-// Shows context specific options menu
-// -----------------------------------------------------------------------------
-//
-void CLocSUPLSessionContainer::ShowContextMenuL()
- {
- DEBUG( + CLocSUPLSessionContainer::ShowContextMenuL );
-
- // Switch to Context specific options menu,
- // Show it and switch back to main options menu.
- CEikMenuBar* menuBar = iView->MenuBar();
- // TRAP displaying of menu bar.
- // If it fails, the correct resource is set back before leave.
- TRAPD( err, menuBar->TryDisplayContextMenuBarL() );
- User::LeaveIfError( err );
-
- DEBUG( - CLocSUPLSessionContainer::ShowContextMenuL );
- }
-
-// End of file