diff -r 000000000000 -r 522cd55cc3d7 locationcentre/lcservice/src/lcpopuplistbox.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationcentre/lcservice/src/lcpopuplistbox.cpp Tue Feb 02 00:16:03 2010 +0200 @@ -0,0 +1,177 @@ +/* +* Copyright (c) 2007 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: List box used to display the Location Centre pop-up. +* +*/ + + +// SYSTEM INCLUDES +#include // Icon Array +#include // Column Listbox + +// USER INCLUDES +#include "lcpopuplistbox.h" +#include "lcpopuplistboxmodel.h" +#include "lclocationappinfo.h" + +// CONSTANT DEFINTION +const TInt KLcPopupListboxGranularity = 4; + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CLcPopupListBox::CLcPopupListBox +// --------------------------------------------------------------------------- +// +CLcPopupListBox::CLcPopupListBox( CLcLocationAppInfoArray* aAppArray ) + :iAppArray( aAppArray ) + { + // C++ Default constructor. No allocations or functions which can Leave + // should be called from here. + } + +// --------------------------------------------------------------------------- +// CLcPopupListBox::~CLcPopupListBox +// --------------------------------------------------------------------------- +// +CLcPopupListBox::~CLcPopupListBox() + { + // C++ Destructor. Free all resources associated with this class. + + // Delete the List box model. + delete iListBoxModel; + + // Delete the Application Info array + delete iAppArray; + } + +// --------------------------------------------------------------------------- +// void CLcPopupListBox::ConstructL +// --------------------------------------------------------------------------- +// +void CLcPopupListBox::ConstructL( CCoeControl* aParent ) + { + // Create the list box model + iListBoxModel = CLcPopupListBoxModel::NewL( *iAppArray ); + + CAknSingleGraphicPopupMenuStyleListBox::ConstructL( aParent, EAknListBoxMenuList ); + CreateScrollBarFrameL(ETrue); + ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto ); + + UpdateIconsL(); + + // The ownership of the List box model is retained with the Container. + // This is needed because the model is used to return the identifier of the + // Location based Application or Content/Service when its selected. + Model()->SetItemTextArray( iListBoxModel ); + Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); + + ActivateL(); + } + +// --------------------------------------------------------------------------- +// void CLcPopupListBox::UpdateModel +// --------------------------------------------------------------------------- +// +void CLcPopupListBox::UpdateListBoxL( CLcLocationAppInfoArray* aAppArray ) + { + // Delete the existing contents and set the new Application info array + // to the listbox model. + delete iAppArray; + iAppArray = aAppArray; + + iListBoxModel->UpdateModel( *iAppArray ); + + UpdateIconsL(); + + HandleItemAdditionL(); + HandleItemRemovalL(); + + DrawDeferred(); + } + +// --------------------------------------------------------------------------- +// void CLcPopupListBox::UpdateIconsL +// --------------------------------------------------------------------------- +// +void CLcPopupListBox::UpdateIconsL() + { + TInt count = iAppArray->Count(); + // Update the Icons only if there are any elements the List box + if ( count ) + { + // Create a new Icons Array + CAknIconArray* icons = new( ELeave ) CAknIconArray( KLcPopupListboxGranularity ); + CleanupStack::PushL( icons ); + + // Add All the icons to the Icons array + for ( TInt i = 0; i < count; i++ ) + { + icons->AppendL(( *iAppArray )[i].IconL() ); + } + + // Get old icons and delete those. This is done because SetIconArray will + // not do it. + CAknIconArray* oldIcons = + static_cast( ItemDrawer()->ColumnData()->IconArray()); + + delete oldIcons; + + //Set New Icons to array + ItemDrawer()->ColumnData()->SetIconArray( icons ); + CleanupStack::Pop(icons); + } + ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue ); + + DrawDeferred(); + } + +// --------------------------------------------------------------------------- +// TInt CLcPopupListBox::AppInfoId +// --------------------------------------------------------------------------- +// +TPtrC CLcPopupListBox::AppInfoId() const + { + return ( *iAppArray )[ CurrentItemIndex() ].Id(); + } + +// --------------------------------------------------------------------------- +// void CLcPopupListBox::HandleResourceChange +// --------------------------------------------------------------------------- +// +void CLcPopupListBox::HandleResourceChange( TInt aType ) + { + // Pass the event to the base class + CCoeControl::HandleResourceChange( aType ); + switch( aType ) + { + // Dynamic Layout switch and Skin Change + case KEikDynamicLayoutVariantSwitch: + { + SetRect( Rect()); + break; + } + case KAknsMessageSkinChange: + { + TRAP_IGNORE( UpdateIconsL()); + break; + } + default: + { + break; + } + } + DrawDeferred(); + }