diff -r 000000000000 -r 7f85d04be362 homesync/contentmanager/homesyncwizard/src/cmsmultiselectionpopup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homesync/contentmanager/homesyncwizard/src/cmsmultiselectionpopup.cpp Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,300 @@ +/* +* 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: Multiselection popup implementation +* +*/ + + +// INCLUDE FILES +#include +#include +#include + +#include "cmsmultiselectionpopup.h" +#include "msdebug.h" + +// Format string for listbox items +_LIT(KItemFormatString, "1\t%S"); + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::NewL +// --------------------------------------------------------------------------- +// +CMSMultiselectionPopup* CMSMultiselectionPopup::NewL( + CDesCArrayFlat* aItemArray, + CListBoxView::CSelectionIndexArray* aSelectionIndexArray, + const TDesC& aHeading ) + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::NewL begin")); + + CMSMultiselectionPopup* self = + CMSMultiselectionPopup::NewLC( aItemArray, + aSelectionIndexArray, + aHeading ); + CleanupStack::Pop( self ); + + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::NewL end")); + return self; + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::NewLC +// --------------------------------------------------------------------------- +// +CMSMultiselectionPopup* CMSMultiselectionPopup::NewLC( + CDesCArrayFlat* aItemArray, + CListBoxView::CSelectionIndexArray* aSelectionIndexArray, + const TDesC& aHeading ) + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::NewLC begin")); + + CMSMultiselectionPopup* self = + new(ELeave) CMSMultiselectionPopup( NULL, + aHeading ); + + CleanupStack::PushL(self); + self->ConstructL( aItemArray, aSelectionIndexArray ); + + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::NewLC end")); + return self; + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::ConstructL +// --------------------------------------------------------------------------- +// +void CMSMultiselectionPopup::ConstructL( + CDesCArrayFlat* aItemArray, + CListBoxView::CSelectionIndexArray* aSelectionIndexArray ) + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::\ + ConstructL begin")); + + iItemArray = aItemArray; + + iSelectionIndexes = aSelectionIndexArray; + + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::\ + ConstructL end")); + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::CMSMultiselectionPopup +// --------------------------------------------------------------------------- +// +CMSMultiselectionPopup::CMSMultiselectionPopup( + CListBoxView::CSelectionIndexArray* aSelectionIndexArray, + const TDesC& aHeading ) + : CAknListQueryDialog( aSelectionIndexArray ), + iHeading( aHeading ) + + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup:: \ + CMSMultiselectionPopup")); + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::~CMSMultiselectionPopup +// --------------------------------------------------------------------------- +// +CMSMultiselectionPopup::~CMSMultiselectionPopup() + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::\ + CMSMultiselectionPopup")); + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::UpdateAndDrawPopup +// --------------------------------------------------------------------------- +// +void CMSMultiselectionPopup::UpdateAndDrawPopupL( + CDesCArrayFlat* aItemArray ) + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup:: \ + UpdateAndDrawPopupL begin")); + + iItemArray = aItemArray; + + if ( iItemArray->Count() ) + { + CreateAndSetListboxItemsL(); + } + + Layout(); + SizeChanged(); + iListBox->DrawNow(); + + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup:: \ + UpdateAndDrawPopupL ends")); + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::AppendIconToArrayL +// --------------------------------------------------------------------------- +// +void CMSMultiselectionPopup::AppendIconToArrayL(CAknIconArray* aArray, + MAknsSkinInstance* aSkin, + const TDesC& aMbmFile, + const TAknsItemID& aID, + TInt aBitmapId, + TInt aMaskId) const + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup:: \ + AppendIconToArrayL begin")); + + __ASSERT_DEBUG( aArray, User::Leave(KErrArgument) ); + + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + + AknsUtils::CreateIconLC(aSkin, aID, + bitmap, mask, aMbmFile, aBitmapId, aMaskId); + + CGulIcon* icon = CGulIcon::NewL(bitmap, mask); + icon->SetBitmapsOwnedExternally(EFalse); + + // icon now owns the bitmaps, no need to keep on cleanup stack. + CleanupStack::Pop(2); // mask, bitmap + bitmap = NULL; + mask = NULL; + + CleanupStack::PushL(icon); + + aArray->AppendL(icon); + + // aArray now owns the icon, no need to delete. + CleanupStack::Pop(icon); + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup:: \ + AppendIconToArrayL end")); + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::OkToExitL(TInt aButtonId) +// --------------------------------------------------------------------------- +// +TBool CMSMultiselectionPopup::OkToExitL(TInt aButtonId) + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::\ +OkToExitL begin")); + + if ( aButtonId == EAknSoftkeyNext || aButtonId == EAknSoftkeyBack ) + { + LOG(_L("[MSAppWizard]\t CUPnPAppMultiselectionPopup::\ +OkToExitL: Next or Back")); + + const CListBoxView::CSelectionIndexArray* selected = + ListBox()->SelectionIndexes(); + + if ( iSelectionIndexes ) + { + TInt selectCount = selected->Count(); + iSelectionIndexes->Reset(); + for ( TInt i = 0; i < selectCount; i++ ) + { + iSelectionIndexes->AppendL( selected->At( i ) ); + } + } + } + + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::\ +OkToExitL end")); + return ETrue; + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::CreateAndSetListboxItemsL() +// --------------------------------------------------------------------------- +// +void CMSMultiselectionPopup::CreateAndSetListboxItemsL() + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup::\ + CreateAndSetListboxItemsL")); + + TInt itemCount = iItemArray->Count(); + + CDesCArrayFlat* listItems = new (ELeave) CDesCArrayFlat( 5 ); + CleanupStack::PushL( listItems ); + + for ( TInt i = 0; i < itemCount; i++) + { + TPtrC itemStr = iItemArray->MdcaPoint(i); + HBufC* item = HBufC::NewLC( itemStr.Size() + + sizeof( KItemFormatString ) ); + item->Des().Format( KItemFormatString, &itemStr ); + + listItems->AppendL( *item ); + CleanupStack::PopAndDestroy( item ); + } + SetItemTextArray( listItems ); + CleanupStack::Pop( listItems ); + } + +// --------------------------------------------------------------------------- +// CMSMultiselectionPopup::PreLayoutDynInitL() +// --------------------------------------------------------------------------- +// +void CMSMultiselectionPopup::PreLayoutDynInitL() + { + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup:: \ + PreLayoutDynInitL begin")); + + // two icons + CAknIconArray* icons = new (ELeave) CAknIconArray(2); + CleanupStack::PushL( icons ); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TFileName iconsPath( AknIconUtils::AvkonIconFileName() ); + + AppendIconToArrayL( icons, skin, + iconsPath, + KAknsIIDQgnPropCheckboxOn, + EMbmAvkonQgn_indi_checkbox_on, + EMbmAvkonQgn_indi_checkbox_on_mask ); + + AppendIconToArrayL( icons, skin, + iconsPath, + KAknsIIDQgnPropCheckboxOff, + EMbmAvkonQgn_indi_checkbox_off, + EMbmAvkonQgn_indi_checkbox_off_mask ); + + + CAknListQueryDialog::SetIconArrayL(icons); + + CleanupStack::Pop(icons); + + iListBox = ListBox(); + + CAknFilteredTextListBoxModel* model = STATIC_CAST( + CAknFilteredTextListBoxModel*, + iListBox->Model()); + + // create listbox items if any + if ( iItemArray->Count() ) + { + CreateAndSetListboxItemsL(); + } + + SetHeaderTextL( iHeading ); + + iListBox->ActivateL(); + + CAknListQueryDialog::PreLayoutDynInitL(); + + LOG(_L("[MSAppWizard]\t CMSMultiselectionPopup:: \ + PreLayoutDynInitL end")); + } + +// End of file + +