mediasettings/mediasettingsapp/src/MPSettingsMainContainer.cpp
changeset 0 96612d01cf9f
child 1 6711b85517b7
--- /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    <barsread.h>
+#include    <MediaSettings.rsg>
+#include    <aknlists.h>
+#include    <AknIconArray.h>
+#include    <AknsUtils.h>
+#include    <gulicon.h>
+#include    <calslbs.h>
+#include    <eikclbd.h>
+#include    <StringLoader.h>
+#include    <mediasettings.mbg>
+#include    <featmgr.h>
+#include    <aknnotewrappers.h>
+#include    <textresolver.h>
+#include    <AknCommonDialogs.h>
+#include    <csxhelp/iptv.hlp.hrh>
+
+#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<CEikColumnListBox*>( 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