--- /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