camerauis/cameraapp/generic/src/CamUserSceneSetupContainer.cpp
changeset 0 1ddebce53859
child 2 e8773a61782d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/src/CamUserSceneSetupContainer.cpp	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,451 @@
+/*
+* 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:  Implements container for the user scene setup list.*
+*/
+
+
+// INCLUDE FILES
+#include "CamUserSceneSetupContainer.h"
+#include "CamUserSceneSetupItemArray.h"
+#include "CamAppController.h"
+#include "CamSettings.hrh"
+#include "Cam.hrh"
+#include "CamPanic.h"
+#include <aknlists.h>
+#include <AknIconArray.h>
+#include <barsread.h>
+#include <aknview.h>
+
+#include "CamUtility.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::NewLC
+// Symbian two-phased constructor.
+// ---------------------------------------------------------
+//
+CCamUserSceneSetupContainer* CCamUserSceneSetupContainer::NewLC
+( const TRect& aRect, TInt aResourceId, 
+    CCamAppController& aController, 
+    CAknView& aView )
+    {
+    CCamUserSceneSetupContainer* self =
+        new ( ELeave ) CCamUserSceneSetupContainer( aController, 
+        aView );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect, aResourceId );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::NewL
+// Symbian two-phased constructor.
+// ---------------------------------------------------------
+//
+CCamUserSceneSetupContainer* CCamUserSceneSetupContainer::NewL
+( const TRect& aRect, TInt aResourceId, 
+    CCamAppController& aController, 
+    CAknView& aView )
+    {
+    CCamUserSceneSetupContainer* self = 
+        CCamUserSceneSetupContainer::NewLC
+        ( aRect, aResourceId, aController, 
+       aView );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::~CCamUserSceneSetupContainer
+// Destructor
+// ---------------------------------------------------------
+//
+CCamUserSceneSetupContainer::~CCamUserSceneSetupContainer()
+  {
+  PRINT( _L("Camera => ~CCamUserSceneSetupContainer" ))  
+  delete iUserSceneSetupList;
+  delete iUserSceneSetupItemArray;
+  PRINT( _L("Camera <= ~CCamUserSceneSetupContainer" ))  
+  }
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::HandleChangeInItemArrayOrVisibilityL
+// Handles a change in the item list visibility.
+// ---------------------------------------------------------
+//
+void CCamUserSceneSetupContainer::UpdateDisplayL()
+    {
+    ListBox()->DrawNow();
+    }
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::TitlePaneTextResourceId
+// Returns the resource Id of the title for this container.
+// ---------------------------------------------------------
+//
+TInt CCamUserSceneSetupContainer::TitlePaneTextResourceId()
+    {
+    return iTitleResourceId;
+    }
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::UpdateListItems
+// Updates the list items with the settings model values.
+// ---------------------------------------------------------
+//
+void CCamUserSceneSetupContainer::UpdateListItems( void )
+    {
+    TInt listItemCount = iUserSceneSetupItemArray->Count();
+    TInt i;
+    for ( i = 0; i < listItemCount; ++i )
+        {
+        UpdateListItem( i );
+        }
+    }
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::UpdateCurrentListItem
+// Updates the current list item with it's associated
+// settings model value.
+// ---------------------------------------------------------
+//
+void CCamUserSceneSetupContainer::UpdateCurrentListItem()
+    {
+    TInt selectedItemIndex = iUserSceneSetupList->CurrentItemIndex();
+    UpdateListItem( selectedItemIndex );
+    }
+    
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::HandleListBoxEventL
+// Handles a list box event.
+// ---------------------------------------------------------
+//
+void CCamUserSceneSetupContainer::HandleListBoxEventL
+( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+	{
+	switch( aEventType )
+		{
+		case EEventEnterKeyPressed: // fallthrough
+		case EEventItemDoubleClicked: 
+        case EEventItemSingleClicked:
+			{
+            HandleSelectionL();
+            }
+			break;
+
+		default:
+			break;			
+		}
+	}
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::HandleSelectionL
+// Handles the user selection of a list item.
+// ---------------------------------------------------------
+//
+void CCamUserSceneSetupContainer::HandleSelectionL( void )
+    {
+    TInt CommandId = CommandIdForActivatingCurrentItemControl();
+    iView.HandleCommandL( CommandId );
+    }
+    
+
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::CCamUserSceneSetupContainer
+// C++ constructor
+// ---------------------------------------------------------
+//
+CCamUserSceneSetupContainer::CCamUserSceneSetupContainer
+( CCamAppController& aController, 
+    CAknView& aView )
+: CCamContainerBase( aController, aView )
+    {
+
+    }
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::ConstructL
+// 2nd phase constructor
+// ---------------------------------------------------------
+//
+void CCamUserSceneSetupContainer::ConstructL
+( const TRect& aRect, TInt aResourceId )
+    {
+    const TInt KSettingItemArrayGranularity = 5;
+
+    CreateWindowL();
+
+	// Create the listbox in the right style
+    iUserSceneSetupList = new ( ELeave ) CAknSettingStyleListBox;
+   	iUserSceneSetupList->ConstructL( this, CEikListBox::ELeftDownInViewRect );
+    iUserSceneSetupList->DisableSingleClick( ETrue );
+
+	TPoint pos = iEikonEnv->EikAppUi()->ClientRect().iTl;
+	TSize size = iUserSceneSetupList->MinimumSize();
+	SetExtent( pos, size ); 
+
+
+	// Setup the scroll bar
+	iUserSceneSetupList->CreateScrollBarFrameL( ETrue );
+	iUserSceneSetupList->ScrollBarFrame()->
+        SetScrollBarVisibilityL( CEikScrollBarFrame::EOn, 
+            CEikScrollBarFrame::EAuto );
+            
+    iTitleResourceId = aResourceId;
+
+            
+    // get array of supported resources from psi
+    RArray<TInt> userSceneResourceIds;
+    CleanupClosePushL( userSceneResourceIds );
+    
+    User::LeaveIfError( CamUtility::GetPsiIntArrayL( ECamPsiUserSceneResourceIds, userSceneResourceIds ) );
+
+    // ...get the number of items in this user scene setup list.
+    TInt itemCount = userSceneResourceIds.Count(); 
+	iUserSceneSetupItemArray = new ( ELeave ) 
+        CCamUserSceneSetupItemArray( itemCount );
+    iUserSceneSetupItemArray->ConstructL();
+	
+	// Make the icon array
+	CArrayPtrFlat<CGulIcon>* iconArray = new ( ELeave )
+        CAknIconArray( KSettingItemArrayGranularity );
+	CleanupStack::PushL( iconArray );
+
+    // Create all the user scene setup list items defined in the resource.
+	TInt i;
+	for ( i=0; i < itemCount; ++i )
+		{
+        CCamUserSceneSetupListItem* listItem = 
+            CCamUserSceneSetupListItem::NewL( userSceneResourceIds[i] );
+        CleanupStack::PushL( listItem );
+        // Ownership is transferred
+        iUserSceneSetupItemArray->AppendL( listItem ); 
+        CleanupStack::Pop( listItem );
+		}
+		
+	
+	// Update the display
+	UpdateDisplayL();
+
+	// Looks like we have no choice but to give ownership 
+    // of this to the listbox.
+	// There is no flag as there is for the item data
+	ListBox()->ItemDrawer()->FormattedCellData()->SetIconArrayL( iconArray ); 
+
+    // iconArray now has ownership transferred
+	CleanupStack::Pop( iconArray );  
+    
+    CleanupStack::PopAndDestroy( &userSceneResourceIds );	
+
+	CTextListBoxModel* model= iUserSceneSetupList->Model();
+	model->SetItemTextArray( iUserSceneSetupItemArray );
+    // Ownership retained by SettingItemList
+	model->SetOwnershipType( ELbmDoesNotOwnItemArray ); 
+
+   	TAknLayoutRect layoutRect;
+	layoutRect.LayoutRect( TRect( 
+        TPoint( 0, 0 ), iAvkonAppUi->ClientRect().Size() ), 
+        AKN_LAYOUT_WINDOW_list_gen_pane( 0 ) );
+	iUserSceneSetupList->SetRect( layoutRect.Rect() );
+
+	ListBox()->SetCurrentItemIndex( 0 );
+	ListBox()->SetListBoxObserver( this );
+	ListBox()->UpdateScrollBarsL();
+
+    SetRect( aRect );
+    ActivateL();
+
+    UpdateListItems();
+    }
+
+
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::UpdateListItem
+// Updates a list item with its corresponding settings model value.
+// ---------------------------------------------------------
+//
+void CCamUserSceneSetupContainer::UpdateListItem( TInt aIndex )
+    {     
+    // Get the current value for this list item from the settings model.
+    // ...get settings model id for list item.
+    TInt settingsModelId = 
+            iUserSceneSetupItemArray->At( aIndex )->SettingsModelTypeId();
+    if ( settingsModelId != ECamSettingItemUserSceneReset )
+        {
+        // ...use id to get current value.
+        TInt currentVal = iController.IntegerSettingValue( settingsModelId );
+    
+        // Update list item with the current value.
+        iUserSceneSetupItemArray->At( aIndex )->SetCurrentValue( currentVal );
+        }
+    }
+
+
+// ----------------------------------------------------
+// CCamUserSceneSetupContainer::CommandIdForActivatingCurrentItemControl
+// Returns the command id for activating the current list item control.
+// ----------------------------------------------------
+//
+TInt CCamUserSceneSetupContainer::CommandIdForActivatingCurrentItemControl()
+    {
+    // Get the settings model type id for the selected item.
+    // ...get settings model id for list item.  
+    TInt currentIndex = iUserSceneSetupList->CurrentItemIndex();
+    
+    // ...get settings model id for list item.
+    TInt settingsModelId = 
+        iUserSceneSetupItemArray->At( currentIndex )->
+            SettingsModelTypeId();
+    // Convert settings model id to command id that activates the
+    // control for the selected item.
+    TInt commandId = -1;
+    switch ( settingsModelId )
+        {
+        case ECamSettingItemUserSceneBasedOnScene:
+            {
+            commandId = ECamCmdCaptureSetupSceneUser;
+            }
+            break;
+        case ECamSettingItemUserSceneWhitebalance:
+            {
+            commandId = ECamCmdCaptureSetupWhiteBalanceUser;
+            }
+            break;
+        case ECamSettingItemUserSceneExposure:
+            {
+            commandId = ECamCmdCaptureSetupExposureUser;
+            }
+            break;
+        case ECamSettingItemUserSceneColourFilter:
+            {
+            commandId = ECamCmdCaptureSetupColourFilterUser;
+            }
+            break;
+        case ECamSettingItemUserSceneFlash:
+            {
+            commandId = ECamCmdCaptureSetupFlashUser;
+            }
+            break;
+        case ECamSettingItemUserSceneReset:
+            {
+            commandId = ECamCmdUserSceneReset;
+            }
+            break;
+        case ECamSettingItemUserSceneBrightness:
+            {
+            commandId = ECamCmdCaptureSetupBrightnessUser;
+            }
+            break;
+        case ECamSettingItemUserSceneContrast:
+            {
+            commandId = ECamCmdCaptureSetupContrastUser;
+            }
+            break;
+
+        case ECamSettingItemUserSceneImageSharpness:
+            {
+            commandId = ECamCmdCaptureSetupImageSharpnessUser;
+            }
+            break;
+
+        case ECamSettingItemUserSceneLightSensitivity:
+            {
+            commandId = ECamCmdCaptureSetupLightSensitivityUser;
+            }
+            break;
+        default:
+            {
+            CamPanic( ECamPanicCaptureSetupMenuUnknownItem );
+            }
+        }
+    return commandId;
+    }
+
+
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::CountComponentControls
+// ---------------------------------------------------------
+//
+TInt CCamUserSceneSetupContainer::CountComponentControls() const
+    {
+	return 1;
+	}
+
+// ---------------------------------------------------------
+// CCamUserSceneSetupContainer::ComponentControl
+// ---------------------------------------------------------
+//
+CCoeControl* CCamUserSceneSetupContainer::ComponentControl
+( TInt aIndex ) const
+    {
+    switch( aIndex )
+        {
+        case 0:
+            return iUserSceneSetupList;
+        default:
+            return NULL;            
+        }
+        
+    // Should never get here
+    }
+
+// ---------------------------------------------------------------------------
+// CCamUserSceneSetupContainer::OfferKeyEventL
+// Key event handling
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CCamUserSceneSetupContainer::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType )
+    {
+	return iUserSceneSetupList->OfferKeyEventL( aKeyEvent, aType );
+    }
+
+// ---------------------------------------------------------------------------
+// CCamUserSceneSetupContainer::ListBox
+// Returns a pointer to the list box
+// ---------------------------------------------------------------------------
+//
+CEikFormattedCellListBox* CCamUserSceneSetupContainer::ListBox()
+	{
+	return ( iUserSceneSetupList );
+	}
+
+// ---------------------------------------------------------------------------
+// CCamUserSceneSetupContainer::IsUserSceneResetHighlighted
+// Returns wheather user scene restore is highlighted
+// ---------------------------------------------------------------------------
+//
+TBool CCamUserSceneSetupContainer::IsUserSceneResetHighlighted()
+	{
+    TInt currentIndex = iUserSceneSetupList->CurrentItemIndex();
+    // ...get settings model id for list item.
+    TInt settingsModelId = 
+        iUserSceneSetupItemArray->At( currentIndex )->SettingsModelTypeId();
+    if ( settingsModelId == ECamSettingItemUserSceneReset )
+        {
+        return ETrue;
+        }
+    else 
+        {
+        return EFalse;
+        }
+	}
+
+// End of File