diff -r 8bda91a87a00 -r 8ee96d21d9bf gssettingsuis/Gs/GSApplication/Src/GSMainContainer.cpp --- a/gssettingsuis/Gs/GSApplication/Src/GSMainContainer.cpp Thu Aug 19 10:12:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,538 +0,0 @@ -/* -* Copyright (c) 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: Container for the main view of General Settings -* -*/ - - -// INCLUDE FILES -#include - -#include "GSUi.h" -#include "gsmainview.h" -#include "GSMainContainer.h" -#include "gsplugininterface.h" -#include "GsLogger.h" -#include // Resources for mainview - -#include -#include -#include -#include // For loading icons -#include // For loading icons -#include -#include -#include -#include // For CGulIcon -#include -#include // for KUidGS -#include "GsContainerExt.h" //For CGsContainerExt - -//CONSTANTS - -// ========================= MEMBER FUNCTIONS ================================ - - -// --------------------------------------------------------------------------- -// CGSMainContainer::ConstructL(const TRect& aRect) -// Symbian OS two phased constructor -// -// --------------------------------------------------------------------------- -// -void CGSMainContainer::ConstructL( - const TRect& aRect, - CAknViewAppUi* aAppUi, - CArrayPtrFlat* aPluginArray ) - { - iAppUi = aAppUi; - iPluginArray = aPluginArray; - - // Initialize the array containing pointers to plugins that are actually - // displayed in lbx. - iVisiblePlugins = new CArrayPtrFlat( 10 ); - - CEikStatusPane* sp = iAppUi->StatusPane(); - CAknTitlePane* title = static_cast - ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - // Set view title from resource: - TResourceReader rReader; - iCoeEnv->CreateResourceReaderLC( rReader, R_GS_MAIN_VIEW_TITLE ); - title->SetFromResourceL( rReader ); - CleanupStack::PopAndDestroy(); //rReader - - CreateWindowL(); // Makes this control a window-owning control - - // Create listbox: - iListBox = new( ELeave ) CAknSingleLargeStyleListBox; - iListBox->ConstructL( this ); - iListBox->SetContainerWindowL( *this ); - iListBox->SetListBoxObserver( this ); - iListBox->CreateScrollBarFrameL(ETrue); - iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); - - // Obtain reference to listbox's item text array: - iItemTextArray - = STATIC_CAST( CDesCArray*, iListBox->Model()->ItemTextArray() ); - iExt = CGsContainerExt::NewL(); - - SetRect( aRect ); - ActivateL(); - __GSLOGSTRING( "[CGSMainContainer] ConstructL()" ); - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::~CGSMainContainer() -// Destructor -// -// --------------------------------------------------------------------------- -// -CGSMainContainer::~CGSMainContainer() - { - if ( iVisiblePlugins ) - { - iVisiblePlugins->Reset(); - } - delete iVisiblePlugins; - - if ( iItemTextArray ) - { - iItemTextArray->Reset(); - } - - if ( iListBox ) - { - delete iListBox; - } - delete iExt; - __GSLOGSTRING( "[CGSMainContainer] ~CGSMainContainer" ); - } - -// --------------------------------------------------------------------------- -// CGSMainContainer::UpdateListbox -// -// Updates listbox from iPluginArray. -// --------------------------------------------------------------------------- -// -void CGSMainContainer::UpdateListBoxL() - { - - if( iPluginArray->Count() == 0 ) - { - return; - } - - __GSLOGSTRING( "[CGSMainContainer::UpdateListBoxL]" ); - - // Empty item array because it will be reoccupied. - iItemTextArray->Reset(); - - // Empty the array because it will be updated. - iVisiblePlugins->Reset(); - - // Array for icons in the listbox. Owns the icons. - CAknIconArray* icons = new (ELeave) CAknIconArray( 10 ); - CleanupStack::PushL( icons ); - - // Index of the plugin inserted into lbx item array. - TInt pluginIndex = 0; - - // 1) Add each plugin's data to listbox if the plugin is visible. - for( TInt i = 0; i < iPluginArray->Count(); i++ ) - { - CGSPluginInterface* plugin = iPluginArray->operator[]( i ); - if( plugin->Visible() ) - { - AddPluginDataToLbxL( plugin, pluginIndex, iItemTextArray, icons ); - pluginIndex++; - } - } - - // Destroy the old icons because SetIconArray() does not destroy them. - CArrayPtr* oldIcons - = iListBox->ItemDrawer()->ColumnData()->IconArray(); - if( oldIcons ) - { - oldIcons->ResetAndDestroy(); - delete oldIcons; - } - - // Transfer ownership of icon array to the lbx. - // SetIconArray() does not delete the old icon array - iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons ); - CleanupStack::Pop( icons ); - - // Draws listbox again - iListBox->HandleItemAdditionL(); - } - - -//Disabling warning caused by err variable used inside macros -#pragma diag_suppress 550 -// ----------------------------------------------------------------------------- -// CGSMainContainer::AddPluginDataToLbxL() -// -// -// ----------------------------------------------------------------------------- -// -void CGSMainContainer::AddPluginDataToLbxL( CGSPluginInterface* aPlugin, - TInt aIndex, - CDesCArray* aItemTextArray, - CAknIconArray* aIconArray ) - { - // Add the plugin to visible plugins array: - iVisiblePlugins->AppendL( aPlugin ); - - // 1.1) Read item descriptor from plugin: - TBuf<256> buf; - _LIT( KTab, "\t" ); - - TRAPD - ( - captionErr, - aPlugin->GetCaptionL( buf ); - ) - - // If plugin caption fails, set caption to error string. - if( captionErr != KErrNone ) - { - _LIT( KGSParentPluginCaptionErrorTxt, "Error" ); - buf.Append( KGSParentPluginCaptionErrorTxt ); - } - else - { - __GSLOGSTRING2( "[CGSMainContainer] 0x%X::GetCaptionL Error: %d", - aPlugin->Id().iUid, captionErr ); - } - - /** - * 1.2) Create formatted item string. - * list_single_large_pane: - * list item string format: "1\tTextLabel\t0\t0" - * where 0 is an index to icon array - */ - TBuf<256> item; - item.AppendNum( aIndex ); - item.Append( KTab ); - item.Append( buf ); - - aItemTextArray->AppendL( item ); - - // 1.3) Add icons if listbox uses them: - CGulIcon* icon; - TRAPD - ( - iconErr, - icon = aPlugin->CreateIconL( KGSIconTypeLbxItem ); - ) - - __GSLOGSTRING2( - "[CGSMainContainer] CreateIconL result for 0x%X: %d", - aPlugin->Id().iUid, iconErr ); - TSize size = icon->Bitmap()->SizeInPixels(); - CleanupStack::PushL( icon ); - aIconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - } -//Enabling warnings -#pragma diag_default 550 - - -// --------------------------------------------------------------------------- -// CGSMainContainer::GetHelpContext(TCoeHelpContext& aContext) const -// Gets Help -// -// --------------------------------------------------------------------------- -// -void CGSMainContainer::GetHelpContext( TCoeHelpContext& aContext ) const - { - aContext.iMajor = KUidGS; - aContext.iContext = KCP_HLP_MAIN_VIEW; - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::SizeChanged -// called by framwork when the view size is changed -// -// --------------------------------------------------------------------------- -// -void CGSMainContainer::SizeChanged() - { - if ( iListBox ) - { - iListBox->SetRect( Rect() ); - } - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::CountComponentControls -// -// -// --------------------------------------------------------------------------- -// -TInt CGSMainContainer::CountComponentControls() const - { - return 1; - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::ComponentControl -// -// -// --------------------------------------------------------------------------- -// -CCoeControl* CGSMainContainer::ComponentControl(TInt /*aIndex*/) const - { - return iListBox; - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::TKeyResponse OfferKeyEventL -// Called when a key is pressed. -// -// --------------------------------------------------------------------------- -// -TKeyResponse CGSMainContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType) - { - switch ( aKeyEvent.iCode ) - { - case EKeyLeftArrow: - case EKeyRightArrow: - // Listbox takes all event even if it doesn't use them - return EKeyWasNotConsumed; - default: - break; - } - // now it's iListBox's job to process the key event - return iListBox->OfferKeyEventL(aKeyEvent, aType); - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::HandleListBoxEventL -// -// -// --------------------------------------------------------------------------- -void CGSMainContainer::HandleListBoxEventL( - CEikListBox* aListBox, - TListBoxEvent aEventType ) - { - __GSLOGSTRING1( - "[CGSMainContainer] HandleListBoxEventL aEventType:%d", - aEventType); - switch ( aEventType ) - { - case EEventEnterKeyPressed: - case EEventItemSingleClicked: - { - if (aListBox->CurrentItemIndex() < 0) - { - // Negative listbox value -> no item selected? - break; - } - if ( iExt->iDblClickPreventer->IsActive() ) - { - break; - } - iExt->iDblClickPreventer->Start(); - CGSPluginInterface* selectedPlugin = iVisiblePlugins->operator[]( - aListBox->CurrentItemIndex()); - - // Different command is used depending on the plugin type. - switch (selectedPlugin->ItemType()) - { - // In these cases the plugin is a view: - case EGSItemTypeSingleLarge: - case EGSItemTypeSetting: - case EGSItemTypeSettingIcon: - iAppUi->ActivateLocalViewL(selectedPlugin->Id()); - break; - // In these cases the plugin is a dialog: - case EGSItemTypeSettingDialog: - case EGSItemTypeSingleLargeDialog: - selectedPlugin->HandleSelection( - EGSSelectionBySelectionKey); - UpdateListBoxL(); // Refrest the listbox if value changed. - break; - } - } - break; - default: - break; - } - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::ListBox() -// -// -// --------------------------------------------------------------------------- -// -CAknSingleLargeStyleListBox* CGSMainContainer::ListBox() - { - return iListBox; - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::HandleResourceChange() -// -// -// --------------------------------------------------------------------------- -// -void CGSMainContainer::HandleResourceChange( TInt aType ) - { - //Handle layout orientation or skin change - CCoeControl::HandleResourceChange( aType ); - if ( aType == KAknsMessageSkinChange ) - { - TRAP_IGNORE( UpdateListBoxL() ); - } - else if ( aType == KEikDynamicLayoutVariantSwitch ) - { - TRect mainPaneRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, - mainPaneRect); - SetRect( mainPaneRect ); - } - } - - -// ----------------------------------------------------------------------------- -// CGSMainContainer::SelectedPlugin() -// -// -// ----------------------------------------------------------------------------- -// -CGSPluginInterface* CGSMainContainer::SelectedPlugin() - { - CGSPluginInterface* plugin = NULL; - const TInt index = iListBox->CurrentItemIndex(); - if ( index >= 0 && index <= iVisiblePlugins->Count() ) - { - plugin = iVisiblePlugins->operator[]( index ); - __GSLOGSTRING2( "[CGSMainContainer] SelectedPlugin 0x%X in index %d", - plugin->Id().iUid, index ); - } - return plugin; - } - - -// ----------------------------------------------------------------------------- -// CGSMainContainer::SetSelectedItem() -// -// -// ----------------------------------------------------------------------------- -// -void CGSMainContainer::SetSelectedItem( TUid aSelectedItemUid ) - { - __GSLOGSTRING1( "[CGSMainContainer] SetSelectedItem(0x%X)", - aSelectedItemUid.iUid ); - - TInt selectedItemIndex = 0; - for( TInt i = 0; i < iVisiblePlugins->Count(); i++ ) - { - CGSPluginInterface* plugin = iVisiblePlugins->operator[]( i ); - - __GSLOGSTRING2( "[CGSMainContainer] Checking [%d] 0x%X)", - i, plugin->Id().iUid ); - - // If plugin is found, select it: - if( plugin->Id() == aSelectedItemUid ) - { - __GSLOGSTRING2( "[CGSMainContainer] Match 0x%X in index %d", - plugin->Id().iUid, i ); - selectedItemIndex = i; - break; - } - } - iListBox->SetCurrentItemIndexAndDraw( selectedItemIndex ); - } - - -// --------------------------------------------------------------------------- -// CGSMainContainer::FocusChanged -// -// Set focus on the selected listbox. For animated skins feature. -// --------------------------------------------------------------------------- -void CGSMainContainer::FocusChanged( TDrawNow /*aDrawNow*/ ) - { - if( iListBox ) - { - iListBox->SetFocus( IsFocused() ); - } - } - - -// ----------------------------------------------------------------------------- -// CGSMainContainer::SetListBoxEmptyTextL() -// -//Set the empty text of list box. -// ----------------------------------------------------------------------------- -// -void CGSMainContainer::SetListBoxEmptyTextL(const TDes& aEmpty ) - { - if( iListBox ) - { - iListBox->View()->SetListEmptyTextL( aEmpty ); - } - } - -// ----------------------------------------------------------------------------- -// CGSMainContainer::StoreListBoxPositionL -// -//Store the exact position of listbox. -// ----------------------------------------------------------------------------- -// -void CGSMainContainer::StoreListBoxPositionL( CGSMainView::TListBoxPosition& aPosition ) - { - aPosition.iCurrentItemIndex = iListBox->CurrentItemIndex(); - aPosition.iItemOffsetInPixels = iListBox->View()->ItemOffsetInPixels(); - aPosition.iTopItemIndex = iListBox->View()->TopItemIndex(); - } - -// ----------------------------------------------------------------------------- -// CGSMainContainer::RestoreListBoxPositionL -// -//Restore the exact position of listbox. -// ----------------------------------------------------------------------------- -// -void CGSMainContainer::RestoreListBoxPositionL( const CGSMainView::TListBoxPosition& aPosition, TBool aScreenModeChanged ) - { - if ( aPosition.iCurrentItemIndex >= 0 ) - { - iListBox->SetCurrentItemIndex( aPosition.iCurrentItemIndex ); - } - - if ( aScreenModeChanged ) - { - iListBox->View()->VerticalMoveToItemL( aPosition.iCurrentItemIndex, - CListBoxView::ESingleSelection ); - } - else - { - iListBox->View()->SetItemOffsetInPixels( aPosition.iItemOffsetInPixels ); - iListBox->View()->SetTopItemIndex( aPosition.iTopItemIndex ); - } - } -// End of File