diff -r 000000000000 -r 522cd55cc3d7 locationcentre/lcapp/src/lclistbox.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationcentre/lcapp/src/lclistbox.cpp Tue Feb 02 00:16:03 2010 +0200 @@ -0,0 +1,165 @@ +/* +* Copyright (c) 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 defintion for Location System UI +* +*/ + + +// SYSTEM INCLUDES +#include +#include +#include + +// USER INCLUDES +#include "lclistbox.h" +#include "lclistboxmodel.h" +#include "lclocationappinfo.h" + +// CONSTANT DEFINTION +const TInt KLcViewListboxGranularity = 2; + + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CLcListBox::CLcListBox +// --------------------------------------------------------------------------- +// +CLcListBox::CLcListBox() + { + // C++ Default constructor. No allocations or functions which can Leave + // should be called from here. + } + +// --------------------------------------------------------------------------- +// CLcListBox::~CLcListBox +// --------------------------------------------------------------------------- +// +CLcListBox::~CLcListBox() + { + // C++ Destructor. Free all resources associated with this class. + + // Delete the listbox model + delete iListBoxModel; + } + +// --------------------------------------------------------------------------- +// void CLcListBox::ConstructL +// --------------------------------------------------------------------------- +// +void CLcListBox::ConstructL( CLcLocationAppInfoArray* aAppArray, + const CCoeControl* aParent, + MEikListBoxObserver* aObserver ) + { + // Create the List box model using the Application Info array + iListBoxModel = CLcListBoxModel::NewL( aAppArray ); + + // Call the base class constructor + CAknSingleLargeStyleListBox::ConstructL( aParent, EAknListBoxSelectionList ); + + // If the parent window has been set, the set it as the Container window + if ( aParent ) + { + SetContainerWindowL( *aParent ); + } + // If the list box observer has been set then set ot to the list box + if ( aObserver ) + { + SetListBoxObserver( aObserver ); + } + CreateScrollBarFrameL( ETrue ); + + ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto ); + + // The ownership of the list box model is retained with the Container. + // This is because the model contains the additional functionality of + // changing the settings values in addition to retreiving it. + Model()->SetItemTextArray( iListBoxModel ); + Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); + + UpdateIconsL(); + // ItemDrawer()->ColumnData()->SetIconArray( NULL ); + ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue ); + + } + +// --------------------------------------------------------------------------- +// CLcListBox* CLcListBox::NewL +// --------------------------------------------------------------------------- +// +CLcListBox* CLcListBox::NewL( + CLcLocationAppInfoArray* aAppArray, + const CCoeControl* aParent, + MEikListBoxObserver* aObserver ) + { + CLcListBox* self = new ( ELeave ) CLcListBox; + CleanupStack::PushL( self ); + self->ConstructL( aAppArray, aParent, aObserver ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// void CLcListBox::UpdateListBoxContents +// --------------------------------------------------------------------------- +// +void CLcListBox::UpdateListBoxContentsL( + CLcLocationAppInfoArray* aAppArray ) + { + // This function transfers the ownership of the Application information + // array. So first we have to delete the existing array and then we can + iListBoxModel->UpdateListBoxContents( aAppArray ); + + UpdateIconsL(); + } + +// ----------------------------------------------------------------------------- +// CLocPsySettingsContainer::UpdateIconsL +// ----------------------------------------------------------------------------- +void CLcListBox::UpdateIconsL() + { + CLcLocationAppInfoArray& iconArray( iListBoxModel->AppInfoArray()); + + CAknIconArray* icons = new( ELeave ) CAknIconArray( KLcViewListboxGranularity ); + CleanupStack::PushL( icons ); + + // Append each of the Icon elements to this array. + for ( TInt i = 0; i < iconArray.Count(); i++ ) + { + TRAPD( error, icons->AppendL( iconArray[i].IconL())); + if ( error ) + { + User::Leave( error ); + } + } + + // Destroy the old icons because SetIconArray() does not destroy them. + CArrayPtr* oldIcons = 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 + ItemDrawer()->ColumnData()->SetIconArray( icons ); + CleanupStack::Pop( icons ); + + // Draws listbox again + HandleItemAdditionL(); + HandleItemRemovalL(); + } +