diff -r 000000000000 -r 96612d01cf9f mediasettings/mediasettingsapp/src/MPSettingsMainContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mediasettings/mediasettingsapp/src/MPSettingsMainContainer.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,291 @@ +/* +* 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 the License "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 class for Main view.* +*/ + + +// Version : %version: 7 % + + + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "MPSettingsApp.h" +#include "MPSettingsMainContainer.h" +#include "MPSettingsConstants.h" +#include "mpxlog.h" + +// CONSTANTS +const TInt KIconArrayGranularity = 3; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMPSettingsMainContainer::CMPSettingsMainContainer +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CMPSettingsMainContainer::CMPSettingsMainContainer() + { + MPX_DEBUG1(_L("#MS# CMPSettingsMainContainer::CMPSettingsMainContainer()")); + } + +// ----------------------------------------------------------------------------- +// CMPSettingsMainContainer::~CMPSettingsMainContainer +// Destructor +// ----------------------------------------------------------------------------- +// +CMPSettingsMainContainer::~CMPSettingsMainContainer() + { + MPX_DEBUG1(_L("#MS# CMPSettingsMainContainer::~CMPSettingsMainContainer()")); + if (iListBox) + { + delete iListBox; + } + } + +// --------------------------------------------------------- +// CMPSettingsMainContainer::ConstructComponentControlsL +// --------------------------------------------------------- +// +void CMPSettingsMainContainer::ConstructComponentControlsL() + { + MPX_DEBUG1(_L("#MS# CMPSettingsMainContainer::ConstructComponentControlsL()")); + // * Create listbox * + + iListBox = new(ELeave) CAknSingleLargeStyleListBox; + + // Set's iListBox to be contained in this container + iListBox->SetContainerWindowL(*this); + + // Construct from resource + TResourceReader rReader; + iCoeEnv->Static()->CreateResourceReaderLC(rReader, + R_MPSETT_MAIN_LBX_RESOURCE); + + // Construct's iListBox from resource file + iListBox->ConstructFromResourceL(rReader); + CleanupStack::PopAndDestroy(); // rReader + + iListBox->CreateScrollBarFrameL(ETrue); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + + MakeIconArrayL(); + + iComponentControl = iListBox; + } + +// --------------------------------------------------------- +// CMPSettingsMainContainer::HandleResourceChange +// --------------------------------------------------------- +// +void CMPSettingsMainContainer::HandleResourceChange( TInt aType ) + { + MPX_DEBUG2(_L("#MS# CMPSettingsMainContainer::HandleResourceChange(0x%X)"),aType); + CCoeControl::HandleResourceChange( aType ); + + if( aType == KAknsMessageSkinChange ) + { + TRAPD(err,MakeIconArrayL()); + + if( err ) + { + TRAP_IGNORE( HandleResourceChangeErrorL( err ) ); + } + } + else if ( aType == KEikDynamicLayoutVariantSwitch ) //Handle change in layout orientation + { + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); + SetRect( mainPaneRect ); + DrawNow(); + } + } + +// --------------------------------------------------------- +// CMPSettingsMainContainer::HandleResourceChangeErrorL +// --------------------------------------------------------- +// +void CMPSettingsMainContainer::HandleResourceChangeErrorL( TInt aError ) + { + CTextResolver* textresolver = NULL; + + // TextResolver instance for error resolving. + textresolver = CTextResolver::NewL(); + + if ( textresolver ) + { + // Resolve the error text + TPtrC text; + text.Set(textresolver->ResolveErrorString( aError )); + + CAknErrorNote* dlg = new (ELeave) CAknErrorNote(ETrue); + dlg->ExecuteLD(text); + + delete textresolver; + } + } + +// --------------------------------------------------------- +// CMPSettingsMainContainer::TitleResourceId +// --------------------------------------------------------- +// +TInt CMPSettingsMainContainer::TitleResourceId() + { + return R_MPSETT_MAIN_VIEW_TITLE; + } + +// --------------------------------------------------------- +// CMPSettingsMainContainer::GetHelpContext +// --------------------------------------------------------- +// +void CMPSettingsMainContainer::GetHelpContext(TCoeHelpContext& aContext) const + { + MPX_DEBUG1(_L("#MS# CMPSettingsMainContainer::GetHelpContext()")); + aContext.iMajor = KIptvHelpContextUid; + aContext.iContext = KIPTV_HLP_SETTINGS; + } + +// --------------------------------------------------------- +// CMPSettingsMainContainer::MakeIconArrayL +// --------------------------------------------------------- +// +void CMPSettingsMainContainer::MakeIconArrayL() + { + MPX_DEBUG1(_L("#MS# CMPSettingsMainContainer::MakeIconArrayL()")); + + TFileName fileName; + + // Construct CAknIconArray for iListBox + CEikColumnListBox* listbox = + static_cast( iListBox ); + + delete listbox->ItemDrawer()->ColumnData()->IconArray(); + listbox->ItemDrawer()->ColumnData()->SetIconArray( NULL ); + + HBufC* mbmpath = StringLoader::LoadLC( R_MPSETT_ICON_MBM_FILE ); + + // This is done to ensure upgraded file is used first. + // If no upgraded file is found, default file in Z: drive will be used. + TFindFile find( CCoeEnv::Static()->FsSession() ); + TInt err = find.FindByDir( *mbmpath, KNullDesC ); + + if ( err ) + { + fileName.Append( *mbmpath ); + } + else + { + fileName.Append( find.File() ); + } + + CAknIconArray* icons = + new ( ELeave ) CAknIconArray( KIconArrayGranularity ); + CleanupStack::PushL( icons ); + + AppendIconToArrayL( + icons, + KAknsIIDQgnPropSetMpVideoSub, + fileName, + EMbmMediasettingsQgn_prop_set_mp_video_sub, + EMbmMediasettingsQgn_prop_set_mp_video_sub_mask ); + + AppendIconToArrayL( + icons, + KAknsIIDQgnPropSetMpStreamSub, + fileName, + EMbmMediasettingsQgn_prop_set_mp_stream_sub, + EMbmMediasettingsQgn_prop_set_mp_stream_sub_mask ); + + AppendIconToArrayL( + icons, + KAknsIIDQgnPropSetMpVideoSub, + fileName, + EMbmMediasettingsQgn_prop_set_service, + EMbmMediasettingsQgn_prop_set_service_mask ); + + CleanupStack::Pop(); // icons + CleanupStack::PopAndDestroy(); // mbmpath + + listbox->ItemDrawer()->ColumnData()->SetIconArray( icons ); + + } + +// --------------------------------------------------------- +// CMPSettingsMainContainer::AppendIconToArrayL +// --------------------------------------------------------- +// +void CMPSettingsMainContainer::AppendIconToArrayL( + CAknIconArray* aArray, + const TAknsItemID& aID, + const TDesC& aMbmFile, + TInt aBitmapId, + TInt aMaskId ) + { + + MPX_DEBUG1(_L("#MS# CMPSettingsMainContainer::AppendIconToArrayL()")); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + CFbsBitmap* bitmap = NULL; + CFbsBitmap* mask = NULL; + + AknsUtils::CreateIconLC( skin, 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(); + } + +// --------------------------------------------------------- +// CMPSettingsMainContainer::FocusChanged +// --------------------------------------------------------- +// +void CMPSettingsMainContainer::FocusChanged(TDrawNow /*aDrawNow*/) +{ + if( iListBox) + { + iListBox->SetFocus( IsFocused() ); + } +} + +// End of File