camerauis/cameraapp/generic/GsCamcorderPlugin/src/CamAlbumSettingItem.cpp
branchRCL_3
changeset 24 bac7acad7cb3
parent 0 1ddebce53859
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/GsCamcorderPlugin/src/CamAlbumSettingItem.cpp	Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2007 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 item type for "Add to album"*
+*/
+
+
+
+// INCLUDE FILES
+ 
+#include <cameraapp.mbg>
+#include <gscamerapluginrsc.rsg>
+
+#include "CamAlbumSettingItem.h"
+#include "CamSettings.hrh"
+#include "CamUtility.h"
+#include "CameraappPrivateCRKeys.h"
+#include "CamStaticSettingsModel.h"
+#include "camerauiconfigmanager.h"
+#include "CamAppUiBase.h"
+#include "GSCamcorderPlugin.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// CCamAlbumSettingItem::CCamAlbumSettingItem
+// Two phase construction
+// ---------------------------------------------------------------------------
+//
+CCamAlbumSettingItem::CCamAlbumSettingItem( TInt aSettingItemId, 
+                                            TInt& aValue)
+: CAknEnumeratedTextPopupSettingItem( aSettingItemId, aValue )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CCamAlbumSettingItem::~CCamAlbumSettingItem()
+  {
+  PRINT( _L("Camera => ~CCamAlbumSettingItem") );
+  PRINT( _L("Camera <= ~CCamAlbumSettingItem") );
+  }
+
+// ---------------------------------------------------------------------------
+// CCamAlbumSettingItem::HandleSettingPageEventL
+// Handle events in the setting page
+// ---------------------------------------------------------------------------
+//
+void CCamAlbumSettingItem::HandleSettingPageEventL( CAknSettingPage* /*aSettingPage*/, 
+                                                    TAknSettingPageEvent aEventType )
+    {
+    // Get the value of the currently selected item on the setting page
+    MAknQueryValue* settingPageValues = QueryValue();
+    TInt selectedIndex = settingPageValues->CurrentValueIndex();
+    CArrayPtr<CAknEnumeratedText>* items = EnumeratedTextArray();
+    TInt selectedValue = items->At( selectedIndex )->EnumerationValue();
+
+    // If the user has Okayed the "Yes" option.
+    if ( aEventType == EEventSettingOked  && selectedValue == ECamSettYes )
+        {
+        // Launch the album selection list popup
+        DisplayAlbumSelectionListL();
+        }
+    UpdateListBoxTextL();
+    }
+
+// ---------------------------------------------------------------------------
+// CCamAlbumSettingItem::CompleteConstructionL
+// Gets the correct text for a currently selected album
+// ---------------------------------------------------------------------------
+//	
+void CCamAlbumSettingItem::CompleteConstructionL()
+    {
+    PRINT( _L("Camera => CCamAlbumSettingItem::CompleteConstructionL") );
+    CAknEnumeratedTextPopupSettingItem::CompleteConstructionL();
+    if ( ExternalValue() == ECamSettYes )
+        {
+        // We update the list box only if the setting item is true
+        // In this case, we stop displaying "Yes" and replace it with
+        // current album name.
+        UpdateListTextL();
+        }
+    PRINT( _L("Camera <= CCamAlbumSettingItem::CompleteConstructionL") );
+    }
+
+// ---------------------------------------------------------------------------
+// CCamAlbumSettingItem::UpdateListTextL
+// Update the text in the setting list to show the current capture album name
+// ---------------------------------------------------------------------------
+//
+void CCamAlbumSettingItem::UpdateListTextL()
+    {
+    PRINT( _L("Camera => CCamAlbumSettingItem::UpdateListTextL") );
+ 
+        CAknViewAppUi *AppUi = static_cast<CAknViewAppUi*>( CCoeEnv::Static()->AppUi() );
+        CGSCamcorderPlugin* parent = static_cast<CGSCamcorderPlugin*> 
+                                ( AppUi->View( KGSCamcorderGSPluginUid ) );
+        // If "Add to album" is on
+        if ( ExternalValue() == ECamSettYes )
+            {
+            // A default capture album exists
+            // Replace the "Yes" text with the current capture album name
+            CArrayPtr<CAknEnumeratedText>* itemArray = EnumeratedTextArray();
+            TInt numberOfItems = itemArray->Count();    // item count
+            TInt index = 0;
+            TBool found = EFalse;
+            while ( !found && index < numberOfItems )
+                {
+                TInt value = itemArray->At( index )->EnumerationValue();
+                // This is the "Yes" option 
+                if (  value == ECamSettYes )
+                    {
+                    // Replace the text with the album name
+                    // We get the album name from CenRep key
+                    HBufC* albumName = parent->TextSettingValue( 
+                                ECamSettingItemDefaultAlbumName ).AllocLC();
+
+                    CAknEnumeratedText* newItem = new( ELeave ) 
+                                  CAknEnumeratedText( value, albumName );
+                    CleanupStack::Pop( albumName );
+                    CleanupStack::PushL( newItem );
+                    CAknEnumeratedText* oldItem = itemArray->At( index );
+                    itemArray->Delete( index );
+                    delete oldItem;
+                    oldItem = NULL;
+                    itemArray->InsertL( index, newItem );
+                    CleanupStack::Pop( newItem );
+                    found = ETrue;
+                    }
+                index++;
+                }
+            } // End of ExternalValue        
+    UpdateListBoxTextL();
+    PRINT( _L("Camera <= CCamAlbumSettingItem::UpdateListTextL C") );
+    }
+
+// ---------------------------------------------------------------------------
+// CCamAlbumSettingItem::DisplayAlbumSelectionListL
+// Launch the album selection list popup
+// ---------------------------------------------------------------------------
+//
+void CCamAlbumSettingItem::DisplayAlbumSelectionListL()
+    {
+
+        CAknViewAppUi *AppUi = static_cast<CAknViewAppUi*>( CCoeEnv::Static()->AppUi() );
+        CGSCamcorderPlugin* parent = static_cast<CGSCamcorderPlugin*> 
+                                ( AppUi->View( KGSCamcorderGSPluginUid ) );
+        // Launch the Pop-up menu using the Gallery API
+        // allowMultipleSelection = ETrue --> Multiple Selection
+        // allowMultipleSelection = EFalse --> Single Selection
+        TBool   allowMultipleSelection = EFalse;
+        RArray<TUint32> selectedAlbumIds;
+        CleanupClosePushL( selectedAlbumIds );
+        // Launching the Pop-up menu with the list of albums
+        TRAPD ( err, TGlxCollectionSelectionPopup::ShowPopupL(
+                                        selectedAlbumIds,
+                                        KGlxCollectionTypeIdAlbum,
+                                        allowMultipleSelection,
+                                        ETrue
+                                        ) );
+        
+        TInt defaultAlbumId = 0; // default album id in CenRep
+        
+        TInt prevDefaultId = parent->IntegerSettingValue( 
+                                          ECamSettingItemDefaultAlbumId );
+         if ( selectedAlbumIds.Count() > 0 && err == KErrNone )
+            {
+            // this is the new album which is set as default
+            defaultAlbumId = static_cast<TInt>( selectedAlbumIds[0] );
+            }
+         else if ( prevDefaultId != 0 )
+            {
+            // UseCase: If the user selects cancel when the pop-up active
+            //          we then go back to the prev album selected
+            defaultAlbumId = prevDefaultId;
+            }
+         else
+            {
+            }
+          CleanupStack::PopAndDestroy( &selectedAlbumIds );
+          
+          parent->SetIntegerSettingValueL( ECamSettingItemDefaultAlbumId,
+                                          defaultAlbumId );
+
+     }
+
+// ---------------------------------------------------------------------------
+// CCamAlbumSettingItem::HandleAlbumError
+// Deal with loss of capture album or album information
+// ---------------------------------------------------------------------------
+//
+void CCamAlbumSettingItem::HandleAlbumError()
+    {
+    // Set "Add to album" off
+    SetInternalValue( ECamSettNo );
+    SetExternalValue( ECamSettNo );
+    }
+
+//  End of File