screengrabber/src/SGSettingListContainer.cpp
branchRCL_3
changeset 22 fad26422216a
parent 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/screengrabber/src/SGSettingListContainer.cpp	Wed Sep 01 12:30:35 2010 +0100
@@ -0,0 +1,318 @@
+/*
+* Copyright (c) 2009 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:  
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "SGSettingListContainer.h"
+#include <screengrabber.rsg>
+#include "SG.hrh"
+#include "SGDocument.h"
+
+
+#ifdef SCREENGRABBER_MULTIDRIVE_SUPPORT
+  #include <CAknMemorySelectionSettingItemMultiDrive.h>
+#else
+  #include <CAknMemorySelectionSettingItem.h>
+#endif
+
+#include <eikappui.h>
+#include <akntitle.h>
+#include <eikspane.h> 
+
+#include <AknDef.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CScreenGrabberSettingListContainer::ConstructL(const TRect& aRect)
+// EPOC two phased constructor
+// ---------------------------------------------------------
+//
+void CScreenGrabberSettingListContainer::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+    
+    // set title of the app
+    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+    CAknTitlePane* title = static_cast<CAknTitlePane*>( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+    title->SetTextL( _L("Settings") );
+
+    // get an instance of the engine
+    iModel = static_cast<CScreenGrabberDocument*>(reinterpret_cast<CEikAppUi*>(iEikonEnv->AppUi())->Document())->Model();
+
+    // get the settings from the engine
+    iGrabSettings = iModel->GrabSettings();
+
+    // construct the settings list from resources
+    ConstructFromResourceL(R_SCREENGRABBER_SETTINGLIST);
+    
+    // set visibilities
+    SetVisibilitiesOfSettingItems();
+
+    // set correct drawing area for the listbox
+    SetRect(aRect);
+    HandleResourceChange(KEikDynamicLayoutVariantSwitch);
+
+    ActivateL();
+    }
+
+
+// Destructor
+CScreenGrabberSettingListContainer::~CScreenGrabberSettingListContainer()
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CScreenGrabberSettingListView::CreateSettingItemL( TInt aIdentifier )
+// ---------------------------------------------------------
+//
+CAknSettingItem* CScreenGrabberSettingListContainer::CreateSettingItemL( TInt aIdentifier )
+    {
+    CAknSettingItem* settingItem = NULL;
+
+    switch (aIdentifier)
+        {
+        case ESettingListCaptureModeSelection:
+            settingItem = new(ELeave) CAknEnumeratedTextPopupSettingItem(aIdentifier, iGrabSettings.iCaptureMode);
+            break;
+      
+            
+        case ESettingListSingleCaptureHotkeySelection:
+            settingItem = new(ELeave) CAknEnumeratedTextPopupSettingItem(aIdentifier, iGrabSettings.iSingleCaptureHotkey);
+            break;
+        
+        case ESettingListSingleCaptureImageFormatSelection:
+            settingItem = new(ELeave) CAknEnumeratedTextPopupSettingItem(aIdentifier, iGrabSettings.iSingleCaptureImageFormat);
+            break;
+        
+        case ESettingListSingleCaptureMemorySelection:
+#ifdef SCREENGRABBER_MULTIDRIVE_SUPPORT
+            settingItem = new(ELeave) CAknMemorySelectionSettingItemMultiDrive(aIdentifier, iGrabSettings.iSingleCaptureMemoryInUseMultiDrive);
+#else
+            settingItem = new(ELeave) CAknMemorySelectionSettingItem(aIdentifier, iGrabSettings.iSingleCaptureMemoryInUse);
+#endif
+            break;
+
+        case ESettingListSingleCaptureFileNameSelection:
+            settingItem = new(ELeave) CAknTextSettingItem(aIdentifier, iGrabSettings.iSingleCaptureFileName);
+            break;
+
+
+        case ESettingListSequantialCaptureHotkeySelection:
+            settingItem = new(ELeave) CAknEnumeratedTextPopupSettingItem(aIdentifier, iGrabSettings.iSequantialCaptureHotkey);
+            break;
+        
+        case ESettingListSequantialCaptureImageFormatSelection:
+            settingItem = new(ELeave) CAknEnumeratedTextPopupSettingItem(aIdentifier, iGrabSettings.iSequantialCaptureImageFormat);
+            break;
+
+        case ESettingListSequantialCaptureDelaySelection:
+            settingItem = new(ELeave) CAknIntegerEdwinSettingItem(aIdentifier, iGrabSettings.iSequantialCaptureDelay);
+            break;
+                    
+        case ESettingListSequantialCaptureMemorySelection:
+#ifdef SCREENGRABBER_MULTIDRIVE_SUPPORT
+            settingItem = new(ELeave) CAknMemorySelectionSettingItemMultiDrive(aIdentifier, iGrabSettings.iSequantialCaptureMemoryInUseMultiDrive);
+#else
+            settingItem = new(ELeave) CAknMemorySelectionSettingItem(aIdentifier, iGrabSettings.iSequantialCaptureMemoryInUse);
+#endif
+            break;
+
+        case ESettingListSequantialCaptureFileNameSelection:
+            settingItem = new(ELeave) CAknTextSettingItem(aIdentifier, iGrabSettings.iSequantialCaptureFileName);
+            break;
+
+
+        case ESettingListVideoCaptureHotkeySelection:
+            settingItem = new(ELeave) CAknEnumeratedTextPopupSettingItem(aIdentifier, iGrabSettings.iVideoCaptureHotkey);
+            break;
+        
+        case ESettingListVideoCaptureVideoFormatSelection:
+            settingItem = new(ELeave) CAknEnumeratedTextPopupSettingItem(aIdentifier, iGrabSettings.iVideoCaptureVideoFormat);
+            break;
+        
+        case ESettingListVideoCaptureMemorySelection:
+#ifdef SCREENGRABBER_MULTIDRIVE_SUPPORT
+            settingItem = new(ELeave) CAknMemorySelectionSettingItemMultiDrive(aIdentifier, iGrabSettings.iVideoCaptureMemoryInUseMultiDrive);
+#else
+            settingItem = new(ELeave) CAknMemorySelectionSettingItem(aIdentifier, iGrabSettings.iVideoCaptureMemoryInUse);
+#endif
+            break;
+
+        case ESettingListVideoCaptureFileNameSelection:
+            settingItem = new(ELeave) CAknTextSettingItem(aIdentifier, iGrabSettings.iVideoCaptureFileName);
+            break;
+
+        }
+
+    return settingItem;
+    }
+
+
+// ---------------------------------------------------------
+// CScreenGrabberSettingListView::UpdateSettings()
+// ---------------------------------------------------------
+//
+void CScreenGrabberSettingListContainer::UpdateSettingsL()
+    {
+    // get the modified settings to our own variables
+    StoreSettingsL();  // from CAknSettingItemList
+
+    // store new settings in engine and save the settings in disk
+    TRAP_IGNORE(iModel->SaveSettingsL(iGrabSettings));
+    
+    // Change the keys used for capturing
+    iModel->ActivateCaptureKeysL(ETrue);
+    }
+
+
+// ---------------------------------------------------------
+// CScreenGrabberSettingListView::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
+// ---------------------------------------------------------
+//
+void CScreenGrabberSettingListContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
+    {
+    switch (aEventType) 
+        {
+        case EEventEnterKeyPressed:
+        case EEventItemDoubleClicked:
+            ShowSettingPageL(EFalse);
+            break;
+        default:
+            break;
+        }
+    }
+
+// ---------------------------------------------------------
+// CScreenGrabberSettingListView::ShowSettingPageL(TInt aCalledFromMenu)
+// ---------------------------------------------------------
+//
+void CScreenGrabberSettingListContainer::ShowSettingPageL(TInt aCalledFromMenu) 
+    {
+    // open the setting page
+    TInt listIndex = ListBox()->CurrentItemIndex();
+    TInt realIndex = SettingItemArray()->ItemIndexFromVisibleIndex(listIndex);
+    EditItemL(realIndex, aCalledFromMenu);
+
+    // update and save the settings
+    UpdateSettingsL();
+    
+    // set visibilities
+    SetVisibilitiesOfSettingItems();
+
+    // refresh the screen 
+    DrawNow();
+    }
+
+// ---------------------------------------------------------
+// CScreenGrabberSettingListContainer::SetVisibilitiesOfSettingItems()
+// ---------------------------------------------------------
+//
+void CScreenGrabberSettingListContainer::SetVisibilitiesOfSettingItems() 
+    {
+
+    switch (iGrabSettings.iCaptureMode)
+        {
+        case ECaptureModeSingleCapture:
+            {
+            ((*SettingItemArray())[ESettingListSingleCaptureHotkeySelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListSingleCaptureImageFormatSelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListSingleCaptureMemorySelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListSingleCaptureFileNameSelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListSequantialCaptureHotkeySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureImageFormatSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureDelaySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureMemorySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureFileNameSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListVideoCaptureHotkeySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListVideoCaptureVideoFormatSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListVideoCaptureMemorySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListVideoCaptureFileNameSelection])->SetHidden(ETrue);
+            }
+            break;
+        
+        case ECaptureModeSequantialCapture:
+            {
+            ((*SettingItemArray())[ESettingListSingleCaptureHotkeySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSingleCaptureImageFormatSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSingleCaptureMemorySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSingleCaptureFileNameSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureHotkeySelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListSequantialCaptureImageFormatSelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListSequantialCaptureDelaySelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListSequantialCaptureMemorySelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListSequantialCaptureFileNameSelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListVideoCaptureHotkeySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListVideoCaptureVideoFormatSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListVideoCaptureMemorySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListVideoCaptureFileNameSelection])->SetHidden(ETrue);
+            }
+            break;            
+
+        case ECaptureModeVideoCapture:
+            {
+            ((*SettingItemArray())[ESettingListSingleCaptureHotkeySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSingleCaptureImageFormatSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSingleCaptureMemorySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSingleCaptureFileNameSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureHotkeySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureImageFormatSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureDelaySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureMemorySelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListSequantialCaptureFileNameSelection])->SetHidden(ETrue);
+            ((*SettingItemArray())[ESettingListVideoCaptureHotkeySelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListVideoCaptureVideoFormatSelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListVideoCaptureMemorySelection])->SetHidden(EFalse);
+            ((*SettingItemArray())[ESettingListVideoCaptureFileNameSelection])->SetHidden(EFalse);
+            }
+            break;             
+
+        default:
+            User::Panic(_L("Inv.capt.mode"), 50);
+            break;
+        }
+        
+    HandleChangeInItemArrayOrVisibilityL(); 
+    }
+
+// ---------------------------------------------------------
+// CScreenGrabberSettingListView::HandleResourceChange(TInt aType)
+// ---------------------------------------------------------
+//
+void CScreenGrabberSettingListContainer::HandleResourceChange(TInt aType)
+    {
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+        SetRect(mainPaneRect);
+
+        TSize outputRectSize;
+        AknLayoutUtils::LayoutMetricsSize(AknLayoutUtils::EMainPane, outputRectSize);
+        TRect outputRect(outputRectSize);
+        ListBox()->SetRect(outputRect);
+        }
+    else
+        {
+        CCoeControl::HandleResourceChange(aType);
+        }
+    }
+
+// End of File