diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/GsCamcorderPlugin/src/CamAlbumSettingItem.cpp --- /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 +#include + +#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* 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( CCoeEnv::Static()->AppUi() ); + CGSCamcorderPlugin* parent = static_cast + ( 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* 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( CCoeEnv::Static()->AppUi() ); + CGSCamcorderPlugin* parent = static_cast + ( AppUi->View( KGSCamcorderGSPluginUid ) ); + // Launch the Pop-up menu using the Gallery API + // allowMultipleSelection = ETrue --> Multiple Selection + // allowMultipleSelection = EFalse --> Single Selection + TBool allowMultipleSelection = EFalse; + RArray 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( 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