--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/locpsysettings/locpsysettingsui/src/locpsysettingscontainer.cpp Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,494 @@
+/*
+* Copyright (c) 2002 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: Provides Postioning Method Settings view's container class methods.
+*
+*/
+
+
+// System Includes
+
+#include <eikapp.h> // CEikApplication
+#include <aknlists.h> // CAknSingleLargeStyleListBox
+#include <AknIconArray.h> // Icon Array
+#include <eikclbd.h> // Column Listbox
+#include <StringLoader.h> // StringLoader
+#include <barsread.h> // TResourceReader
+#include <akntitle.h> // CAknTitlePane
+#include <featmgr.h> // FeatureManager
+#include <AknsConstants.h> // Skin Ids
+#include <gulicon.h> // Gul Icon
+#include <avkon.hrh>
+#include <data_caging_path_literals.hrh>
+#include <locpsysettingsuiview.rsg>
+#include <avkon.mbg>
+#include <locpsysettings.mbg>
+#include <eikenv.h>
+#include <csxhelp/locpsys.hlp.hrh>
+// User Includes
+#include "locpsysettingscontainer.h"
+#include "locpsysettingsview.h"
+#include "locpsysettingsui.hrh"
+#include "locpsysettingsuiuid.hrh"
+#include "locpsyappdebug.h"
+#include "locpsyeng.h"
+#include "locpsysettingsinterface.h"
+#include "locpsylbmodel.h"
+#include "locpsykeyprocessor.h"
+#include "locpsysettingsuiconsts.h"
+#include <bldvariant.hrh>
+#include <AknDef.h>
+
+// CONSTANTS
+const TInt KViewListboxGranularity = 2;
+const TInt KMinSelectedItemNumber = 0;
+
+#ifdef _DEBUG
+
+_LIT( KPosMethodSettingsContainerPanicMsg, "CLocPsySettingsContainer");
+enum TPanicCode
+ {
+ KLocErrHelpContext
+ };
+
+// ==================== LOCAL FUNCTIONS ====================
+
+void Panic(TPanicCode aReason)
+ {
+ User::Panic( KPosMethodSettingsContainerPanicMsg, aReason );
+ }
+
+#endif
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer* CLocPsySettingsContainer::NewL
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+CLocPsySettingsContainer* CLocPsySettingsContainer::NewL(
+ MLocPsyKeyProcessor* aKeyProcessor,
+ MObjectProvider* aParent,
+ CLocPsySettingsView* aView,
+ MLocPsySettings* aSettingsModel,
+ const TRect& aRect )
+ {
+ CLocPsySettingsContainer* view =
+ new (ELeave) CLocPsySettingsContainer( aKeyProcessor, aView );
+ CleanupStack::PushL( view );
+ view->SetMopParent( aParent );
+ view->ConstructL( aSettingsModel, aRect );
+ CleanupStack::Pop( view );
+ return view;
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::CLocPsySettingsContainer
+// C++ Constrcutor
+// -----------------------------------------------------------------------------
+CLocPsySettingsContainer::CLocPsySettingsContainer( MLocPsyKeyProcessor* aKeyProcessor,
+ CLocPsySettingsView* aView )
+ : iKeyProcessor(aKeyProcessor),
+ iParentView(aView)
+ {
+
+
+ __ASSERT_DEBUG( KLOC_HLP_PSYS().Length() <= iContextName.MaxLength(),
+ Panic( KLocErrHelpContext ) );
+ iContextName = KLOC_HLP_PSYS();
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::ConstructL(const TRect& aRect)
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::ConstructL( MLocPsySettings* aSettingsModel,
+ const TRect& aRect )
+ {
+ CreateWindowL();
+ CreateListboxL( aSettingsModel );
+ MakeTitleL( R_LOC_MAIN_TITLE );
+ SetRect( aRect );
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::~CLocPsySettingsContainer
+// Destructor
+// -----------------------------------------------------------------------------
+CLocPsySettingsContainer::~CLocPsySettingsContainer()
+ {
+ delete iListBox;
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::OfferKeyEventL
+// -----------------------------------------------------------------------------
+TKeyResponse CLocPsySettingsContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ if ( iKeyProcessor->ProcessKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
+ {
+ return EKeyWasConsumed;
+ }
+
+ TInt count = CountComponentControls();
+ for ( TInt i( 0 ) ; i < count; i++ )
+ {
+ if( ComponentControl(i)->OfferKeyEventL( aKeyEvent, aType ) ==
+ EKeyWasConsumed )
+ {
+ return EKeyWasConsumed;
+ }
+ }
+ return EKeyWasNotConsumed;
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::HandleResourceChange
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::HandleResourceChange(TInt aType)
+ {
+ CCoeControl::HandleResourceChange(aType);
+ switch( aType )
+ {
+ case KAknsMessageSkinChange:
+ {
+ TRAPD( error, UpdateIconsL() );
+ if ( error != KErrNone )
+ {
+ iEikonEnv->HandleError( error );
+ }
+ DrawDeferred();
+
+ break;
+ }
+ case KEikDynamicLayoutVariantSwitch:
+ {
+ iParentView->HandleScreenSizeChange();
+ DrawDeferred();
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// void CLocPsySettingsContainer::HandleListBoxEventL
+//
+// ---------------------------------------------------------------------------
+//
+void CLocPsySettingsContainer::HandleListBoxEventL( CEikListBox* /* aListBox */,
+ TListBoxEvent aEventType )
+ {
+ switch (aEventType)
+ {
+ // List box Item Selection
+ case EEventEnterKeyPressed:
+ case EEventItemSingleClicked:
+ {
+ // PSY has been selected. The event has to be propagated to the
+ // command handler to pop-up the Context Specific menu
+
+ // Set the Key event to represent EKeyOK
+ TKeyEvent keyevent;
+ keyevent.iCode = EKeyOK;
+
+ // Set the Key event to Event Key
+ TEventCode keyCode( EEventKey );
+
+ iKeyProcessor->ProcessKeyEventL( keyevent, keyCode );
+ break;
+ }
+ default:
+ break;
+ }
+ }
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::GetHelpContext
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iContext = iContextName;
+ aContext.iMajor = TUid::Uid( LOCPSYSETTINGSUI_UID3 );
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::SelectedRow
+// -----------------------------------------------------------------------------
+TInt CLocPsySettingsContainer::SelectedRow() const
+ {
+ return iListBox->CurrentItemIndex();
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::SetSelectedRow
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::SetSelectedRow( TInt aIndex ) const
+ {
+ iListBox->SetCurrentItemIndex( aIndex );
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::HandleMarkCommandL
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::HandleMarkCommandL( TInt aCommand )
+ {
+ AknSelectionService::HandleMarkableListProcessCommandL( aCommand, iListBox );
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::UpdateL
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::UpdateL()
+ {
+ iListBox->HandleItemAdditionL();
+ iListBox->HandleItemRemovalL();
+
+ TInt currentItem = iListBox->CurrentItemIndex();
+ MDesCArray* array = iListBox->Model()->ItemTextArray();
+ if( KErrNotFound == currentItem || currentItem >= array->MdcaCount() )
+ {
+ TInt newSelected = array->MdcaCount() - 1;
+ if( newSelected >= KMinSelectedItemNumber )
+ {
+ iListBox->SetCurrentItemIndex( newSelected );
+ }
+ }
+
+ DrawDeferred();
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::FocusChanged
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::FocusChanged( TDrawNow aDrawNow )
+ {
+ if( iListBox )
+ {
+ iListBox->SetFocus( IsFocused(), aDrawNow );
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::SizeChanged
+// Called by framework when the view size is changed
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::SizeChanged()
+ {
+ iListBox->SetRect( Rect());
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::CountComponentControls
+// -----------------------------------------------------------------------------
+TInt CLocPsySettingsContainer::CountComponentControls() const
+ {
+ return 1; // return nbr of controls inside this container
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::ComponentControl
+// -----------------------------------------------------------------------------
+CCoeControl* CLocPsySettingsContainer::ComponentControl( TInt /*aIndex*/ ) const
+ {
+ return iListBox;
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::AddIconL
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::AddIconL( CAknIconArray* aIcons,
+ const TDesC& aIconFileWithPath,
+ TAknsItemID aSkinID,
+ TInt aIconGraphicsIndex,
+ TInt aIconGraphicsMaskIndex )
+ {
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+ CFbsBitmap* bitmap = NULL;
+ CFbsBitmap* bitmapMask = NULL;
+ AknsUtils::CreateIconL( skin, aSkinID, bitmap, bitmapMask,
+ aIconFileWithPath, aIconGraphicsIndex,
+ aIconGraphicsMaskIndex );
+ 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
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::LocIconFileNameLC
+// -----------------------------------------------------------------------------
+TFileName* CLocPsySettingsContainer::LocIconFileNameLC() const
+ {
+ TFileName* fileName = new(ELeave) TFileName;
+ CleanupStack::PushL( fileName );
+
+ TFileName* tmpName = new(ELeave) TFileName;
+ CleanupStack::PushL( tmpName );
+
+ tmpName->Append( KDC_BITMAP_DIR );
+ tmpName->Append( KPosMethodSettingsIconFileName );
+
+ // Obtain the drive where the DLL is installed
+ TFileName* dllDrive = new (ELeave) TFileName;
+ CleanupStack::PushL( dllDrive );
+ Dll::FileName( *dllDrive );
+
+ TParse parse;
+ User::LeaveIfError( parse.Set( *dllDrive, NULL, NULL ) );
+ User::LeaveIfError( parse.Set( parse.Drive(), tmpName, NULL ) );
+
+ fileName->Copy(parse.FullName());
+
+ CleanupStack::PopAndDestroy( dllDrive );
+ CleanupStack::PopAndDestroy( tmpName );
+
+ return fileName;
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::AvkonIconFileNameLC
+// -----------------------------------------------------------------------------
+TFileName* CLocPsySettingsContainer::AvkonIconFileNameLC() const
+ {
+ TFileName* fileName = new(ELeave) TFileName;
+ CleanupStack::PushL( fileName );
+ *fileName = AknIconUtils::AvkonIconFileName();
+ return fileName;
+ }
+
+// Makes the title of the view
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::MakeTitleL
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::MakeTitleL( TInt aResourceText )
+ {
+ // title pane is owned by the framework
+ CAknTitlePane* title = static_cast<CAknTitlePane*>( StatusPane()->
+ ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+ HBufC* buf = StringLoader::LoadL( aResourceText );
+ title->SetText( buf ); // Takes ownership of buf
+ }
+
+// -----------------------------------------------------------------------------
+// CLocBaseContainer::MakeEmptyTextListBoxL
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::MakeEmptyTextListBoxL( CEikListBox& aListBox,
+ TInt aResourceText )
+ {
+ HBufC* textFromResourceFile;
+ textFromResourceFile = iCoeEnv->AllocReadResourceLC( aResourceText );
+ // Set text for empty list
+ aListBox.View()->SetListEmptyTextL( *textFromResourceFile );
+ CleanupStack::PopAndDestroy( textFromResourceFile );
+ }
+
+// -----------------------------------------------------------------------------
+// CLocBaseContainer::StatusPane
+// -----------------------------------------------------------------------------
+CEikStatusPane* CLocPsySettingsContainer::StatusPane()
+ {
+ return iEikonEnv->AppUiFactory()->StatusPane();
+ }
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::CreateListboxL
+//
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::CreateListboxL(MLocPsySettings* aSettingsModel)
+ {
+ delete iListBox;
+ iListBox = NULL;
+
+ iListBox = new(ELeave) CAknSingleGraphicStyleListBox();
+ iListBox->SetContainerWindowL( *this );
+ iListBox->SetListBoxObserver( this );
+
+ TResourceReader reader;
+ iEikonEnv->CreateResourceReaderLC( reader, R_LOCATION_PSY_LISTBOX );
+ iListBox->ConstructFromResourceL( reader );
+ CleanupStack::PopAndDestroy(); //reader
+
+ UpdateIconsL();
+
+ CLocPsyLBModel* lbmodel = CLocPsyLBModel::NewL( aSettingsModel );
+ iListBox->Model()->SetItemTextArray( lbmodel );
+ iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+
+ MakeEmptyTextListBoxL( *iListBox, R_LOC_PSY_METHODS_LIST_EMPTY );
+
+ // Make scroll arrows
+ iListBox->CreateScrollBarFrameL( ETrue );
+ iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EAuto );
+ iListBox->ActivateL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLocPsySettingsContainer::UpdateIconsL
+// -----------------------------------------------------------------------------
+void CLocPsySettingsContainer::UpdateIconsL()
+ {
+ CAknIconArray* icons = new( ELeave ) CAknIconArray( KViewListboxGranularity );
+ CleanupStack::PushL( icons );
+
+ TFileName *locIconFile = LocIconFileNameLC();
+
+ AddIconL( icons,
+ *locIconFile,
+ KAknsIIDQgnPropPslnActive,
+ EMbmLocpsysettingsQgn_prop_psln_active ,
+ EMbmLocpsysettingsQgn_prop_psln_active_mask );
+
+ CleanupStack::PopAndDestroy(locIconFile);
+
+ TFileName* aknIconFile = AvkonIconFileNameLC();
+
+ AddIconL( icons,
+ *aknIconFile,
+ KAknsIIDQgnPropEmpty,
+ EMbmAvkonQgn_prop_empty ,
+ EMbmAvkonQgn_prop_empty_mask );
+
+ CleanupStack::PopAndDestroy(aknIconFile);
+
+ //get old icons and delete those
+ CAknIconArray* Oldicons = static_cast<CAknIconArray*>(
+ iListBox->ItemDrawer()->ColumnData()->IconArray() );
+ delete Oldicons;
+
+ //set new icons to array
+ iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+ CleanupStack::Pop(icons);
+ }
+
+// End of File