filemanager/App/src/CFileManagerSettingListContainer.cpp
branchRCL_3
changeset 21 65326cf895ed
child 22 f5c50b8af68c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/App/src/CFileManagerSettingListContainer.cpp	Wed Sep 01 12:31:07 2010 +0100
@@ -0,0 +1,287 @@
+/*
+* Copyright (c) 2006-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:  Setting list container in file manager
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <filemanager.rsg>
+#include <aknlists.h>
+#include <barsread.h>
+#include <eikclbd.h>
+#include <gulicon.h>
+#include <aknconsts.h>
+#include <AknIconArray.h>
+#include <avkon.mbg>
+#include <filemanager.mbg>
+#include <CFileManagerEngine.h>
+#include <FileManagerEngine.hrh>
+#include "FileManager.hrh"
+#include "CFileManagerDocument.h"
+#include "CFileManagerIconArray.h"
+#include "CFileManagerSettingListContainer.h"
+
+
+// needed because _LIT macro does not expand parameter, which is also macro
+#define _CREATE_LIT(a,b) _LIT(a,b)
+
+// CONSTANTS
+const TInt KRestoreIconListGranularity = 3;
+_CREATE_LIT( KFileManagerBitmapFile, filemanager_mbm_file_location );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::CFileManagerSettingListContainer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerSettingListContainer::CFileManagerSettingListContainer(
+        const TListType aType ) :
+    iType( aType )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::ConstructL
+// 
+// -----------------------------------------------------------------------------
+// 
+void CFileManagerSettingListContainer::ConstructL(
+        const TRect& aRect,
+        const TInt aFocusedIndex,
+        MDesCArray* aArray,
+        const TDesC& aHelpContext )
+    {
+    CFileManagerContainerBase::ConstructL( aRect, aFocusedIndex );
+    SetTextArray( aArray );
+    SetHelpContext( aHelpContext );
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::CreateListBoxL
+// 
+// -----------------------------------------------------------------------------
+// 
+CEikTextListBox* CFileManagerSettingListContainer::CreateListBoxL()
+    {
+    CEikTextListBox* listBox = NULL;
+
+    switch ( iType )
+        {
+        case EListBackup:
+            {
+            listBox = CreateBackupListBoxL();
+            break;
+            }
+        case EListRestore:
+            {
+            listBox = CreateRestoreListBoxL();
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+
+    return listBox;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::CreateBackupListBoxL
+// 
+// -----------------------------------------------------------------------------
+// 
+CEikTextListBox* CFileManagerSettingListContainer::CreateBackupListBoxL()
+    {
+    CAknSettingStyleListBox* listBox = new( ELeave ) CAknSettingStyleListBox;
+    CleanupStack::PushL( listBox );
+    listBox->SetContainerWindowL( *this );
+    listBox->ConstructL( this, EAknListBoxSelectionList );
+    listBox->ItemDrawer()->ColumnData()->SetSkinEnabledL( ETrue );
+    CleanupStack::Pop( listBox );
+    return listBox;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::CreateRestoreListBoxL
+// 
+// -----------------------------------------------------------------------------
+// 
+CEikTextListBox* CFileManagerSettingListContainer::CreateRestoreListBoxL()
+    {
+    CAknAppUi* appUi = static_cast< CAknAppUi* >( ControlEnv()->AppUi() );
+    CFileManagerDocument* doc =
+        static_cast< CFileManagerDocument* >( appUi->Document() );
+    CAknDoubleGraphicStyleListBox* listBox =
+        new( ELeave ) CAknDoubleGraphicStyleListBox;
+    CleanupStack::PushL( listBox );
+    listBox->SetContainerWindowL( *this );
+    listBox->ConstructL( this, EAknListBoxMultiselectionList );
+    listBox->ItemDrawer()->ColumnData()->SetSkinEnabledL( ETrue );
+
+    // Create icon array and icons
+    CAknIconArray* iconArray = new( ELeave ) CAknIconArray(
+        KRestoreIconListGranularity );
+    listBox->ItemDrawer()->
+        ColumnData()->SetIconArray( iconArray );    // changes ownership
+
+    CGulIcon* icon = CFileManagerIconArray::LoadIconL(
+        KAvkonBitmapFile,
+        EMbmAvkonQgn_indi_checkbox_on,
+        EMbmAvkonQgn_indi_checkbox_on_mask,
+        KAknsIIDQgnIndiCheckboxOn.iMajor,
+        KAknsIIDQgnIndiCheckboxOn.iMinor,
+        ETrue );
+    CleanupStack::PushL( icon );
+    iconArray->AppendL( icon );
+    CleanupStack::Pop( icon );
+
+    icon = CFileManagerIconArray::LoadIconL(
+        KAvkonBitmapFile,
+        EMbmAvkonQgn_indi_checkbox_off,
+        EMbmAvkonQgn_indi_checkbox_off_mask,
+        KAknsIIDQgnIndiCheckboxOff.iMajor,
+        KAknsIIDQgnIndiCheckboxOff.iMinor,
+        ETrue );
+    CleanupStack::PushL( icon );
+    iconArray->AppendL( icon );
+    CleanupStack::Pop( icon );
+
+    icon = CFileManagerIconArray::LoadIconL(
+        KFileManagerBitmapFile,
+        EMbmFilemanagerQgn_indi_mmc_add,
+        EMbmFilemanagerQgn_indi_mmc_add_mask,
+        KAknsIIDQgnIndiMmcAdd.iMajor,
+        KAknsIIDQgnIndiMmcAdd.iMinor,
+        ETrue );
+    CleanupStack::PushL( icon );
+    iconArray->AppendL( icon );
+    CleanupStack::Pop( icon );
+
+    icon = CFileManagerIconArray::LoadIconL(
+        KFileManagerBitmapFile,
+        EMbmFilemanagerQgn_indi_usb_memc,
+        EMbmFilemanagerQgn_indi_usb_memc_mask,
+        KAknsIIDQgnIndiMmcAdd.iMajor,
+        KAknsIIDQgnIndiMmcAdd.iMinor,
+        ETrue );
+    CleanupStack::PushL( icon );
+    iconArray->AppendL( icon );
+    CleanupStack::Pop( icon );
+
+    // Disable lists MSK observer because the container will be used
+    // as observer
+    listBox->EnableMSKObserver( EFalse );
+    CleanupStack::Pop( listBox );
+    return listBox;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerSettingListContainer* CFileManagerSettingListContainer::NewL(
+        const TRect& aRect,
+        const TInt aFocusedIndex,
+        const TListType aType,
+        MDesCArray* aArray,
+        const TDesC& aHelpContext )
+    {
+    CFileManagerSettingListContainer* self =
+        new( ELeave ) CFileManagerSettingListContainer( aType );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect, aFocusedIndex, aArray, aHelpContext );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::~CFileManagerSettingListContainer
+// Destructor
+// -----------------------------------------------------------------------------
+// 
+CFileManagerSettingListContainer::~CFileManagerSettingListContainer()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::OfferKeyEventL
+// 
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CFileManagerSettingListContainer::OfferKeyEventL(
+        const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse response = EKeyWasNotConsumed;
+
+    switch( aKeyEvent.iCode )
+        {
+        case EKeyEnter: // FALLTHROUGH
+        case EKeyOK:
+            {
+            // Notify restore list about selection change
+            if ( iType == EListRestore )
+                {
+                static_cast< CAknAppUi* >( ControlEnv()->AppUi() )->
+                    ProcessCommandL( EFileManagerSelectionKey );
+                response = EKeyWasConsumed;
+                }
+            else
+            	{
+            	response = ListBox().OfferKeyEventL( aKeyEvent, aType );
+            	}
+            break;
+            }
+        case EKeyApplicationF:
+            {
+            // Suppress this from listbox,
+            // otherwise empty multiselection list sometimes works badly on exit
+            break;
+            }
+        default:
+            {
+            response = CFileManagerContainerBase::OfferKeyEventL(
+                aKeyEvent, aType );
+            }
+        }
+    return response;
+    }
+
+// -----------------------------------------------------------------------------
+// CFileManagerSettingListContainer::HandleControlEventL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerSettingListContainer::HandleControlEventL(
+        CCoeControl* aControl, TCoeEvent aEventType )
+    {
+    if ( iType == EListRestore &&
+        aEventType == EEventStateChanged )
+        {
+        static_cast< CAknAppUi* >( ControlEnv()->AppUi() )->
+            ProcessCommandL( EFileManagerCheckMark );
+        }
+
+    CFileManagerContainerBase::HandleControlEventL(
+        aControl, aEventType );
+    }
+
+//  End of File