--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/inc/CamSceneSettingContainer.h Wed Sep 01 12:30:54 2010 +0100
@@ -0,0 +1,476 @@
+/*
+* 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: Container for scene setting view
+*
+*/
+
+
+
+#ifndef CAMSCENESETTINGCONTAINER_H
+#define CAMSCENESETTINGCONTAINER_H
+
+// INCLUDES
+#include "CamContainerBase.h"
+#include "CamAppController.h"
+#include "CamSettings.hrh"
+#include <aknutils.h>
+
+// DATA TYPES
+// Container class holding data for animated scene icons
+class TCamAnimationData
+ {
+public:
+ /**
+ * Set up animation data for scene setting icon
+ * @since 2.8
+ * @param aRect The initial highlighted rect
+ */
+ void Initialise( const TRect& aRect );
+
+ // the current highlighted rect to fade in
+ TRect iCurrentRect;
+ // old rect to rub out
+ TRect iCurrentRectOld;
+ // the previous rect to fade out
+ TRect iPreviousRect;
+ // old rect to rub out
+ TRect iPreviousRectOld;
+ // the icon rect to fade out
+ TRect iIconRectFadeOut;
+ // old rect to rub out
+ TRect iIconRectFadeOutOld;
+ // the icon rect to fade in
+ TRect iIconRectFadeIn;
+ // old rect to rub out
+ TRect iIconRectFadeInOld;
+ // the title rect to fade out
+ TRect iTitleFadeOut;
+ // old rect to rub out
+ TRect iTitleFadeOutOld;
+ // the title rect to fade in
+ TRect iTitleFadeIn;
+ // old rect to rub out
+ TRect iTitleFadeInOld;
+ // the pen color to use fading out
+ TRgb iPenFadeOut;
+ // the pen color to use fading in
+ TRgb iPenFadeIn;
+ // icon to fade out
+ const CFbsBitmap* iIconFadeOut;
+ // icon to fade in
+ const CFbsBitmap* iIconFadeIn;
+ // moving down the list
+ TBool iMovingDown;
+ // amount of pixels to animate the fade in/out
+ TBool iDeltaY;
+ // amount of pixels to scroll the list by
+ TBool iScrollingY;
+ // current step in the animation
+ TInt iStep;
+ // amount to add to the left margin when fading icons in/out
+ TReal iIconLeftInc;
+ // left margin offset for drawing the icon when fading in/out
+ TReal iIconLeftOffset;
+ // off screen bitmap to assist with the scrolling of the list
+ CFbsBitmap* iOffScreenBitmap;
+ // is the list in scrolling mode
+ TBool iScrolling;
+ // the position of the off screen bitmap
+ TPoint iOffScreenPos;
+ };
+
+// the size of the icons used during fading
+enum TCamIconSize
+ {
+ ECamIconSizeLarge,
+ ECamIconSizeSmall,
+ ECamIconSizeOne,
+ ECamIconSizeTwo,
+ ECamIconSizeThree,
+ ECamIconSizeFour,
+ ECamIconSizeFive,
+ ECamIconSizeSix
+ };
+
+// FORWARD DECLARATIONS
+class CAknView;
+
+// CLASS DECLARATION
+
+class CCamSceneSettingItem : public CBase
+ {
+ public:
+
+ /**
+ * Symbian OS two-phased constructor
+ * @since 2.8
+ * @param aSceneId Id of scene to create
+ * @param aLargeBmpSize the size of the largest icon to use
+ * @param aSmallBmpSize the size of the smallest icon to use
+ */
+ static CCamSceneSettingItem* NewL( TCamSceneId aSceneId,
+ const TSize& aLargeBmpSize,
+ const TSize& aSmallBmpSize );
+
+ /**
+ * Destructor.
+ * @since 2.8
+ */
+ virtual ~CCamSceneSettingItem();
+
+ /**
+ * Returns the scene id
+ * @return the scene id for this item
+ * @since 2.8
+ */
+ TCamSceneId SceneId() const;
+
+ /**
+ * returns the bitmap for the given size
+ * @param aSize The bitmap size to return
+ * @return The bitmap for the size given
+ * @since 2.8
+ */
+ const CFbsBitmap* Icon( TCamIconSize aSize ) const;
+
+ /**
+ * returns the item title
+ * @return the item title
+ * @since 2.8
+ */
+ const HBufC* Title() const;
+
+ /**
+ * returns the item description
+ * @return the item description
+ * @since 2.8
+ */
+ const HBufC* Description() const;
+
+
+ private:
+
+ /**
+ * Symbian OS 2nd phase constructor.
+ * @param aLargeBmpSize the size of the largest icon to use
+ * @param aSmallBmpSize the size of the smallest icon to use
+ * @since 2.8
+ */
+ void ConstructL( const TSize& aLargeBmpSize,
+ const TSize& aSmallBmpSize );
+
+ /**
+ * C++ constructor
+ * @param aSceneId Id of scene to create
+ * @since 2.8
+ */
+ CCamSceneSettingItem( TCamSceneId aSceneId );
+
+ private:
+ // the bitmap for non-highlighted items
+ CFbsBitmap* iBitmapSmall;
+ // bitmap 1 in the fade in/out animation
+ CFbsBitmap* iBitmap1;
+ // bitmap 2 in the fade in/out animation
+ CFbsBitmap* iBitmap2;
+ // bitmap 3 in the fade in/out animation
+ CFbsBitmap* iBitmap3;
+ // bitmap 4 in the fade in/out animation
+ CFbsBitmap* iBitmap4;
+ // bitmap 5 in the fade in/out animation
+ CFbsBitmap* iBitmap5;
+ // bitmap 6 in the fade in/out animation
+ CFbsBitmap* iBitmap6;
+ // the bitmap to use for highlighted items
+ CFbsBitmap* iBitmapLarge;
+ // the title of the item
+ HBufC* iTitle;
+ // the description of the icon
+ HBufC* iDescription;
+ // the scene id of the item
+ TCamSceneId iSceneId;
+
+ };
+
+
+/**
+* Container for still image Post capture view
+*/
+class CCamSceneSettingContainer : public CCamContainerBase,
+ public MEikScrollBarObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Symbian OS two-phased constructor
+ * @since 2.8
+ * @param aRect Frame rectangle for container.
+ * @param aView Reference to the view containing this container
+ * @param aMode Current capture mode
+ * @param aController reference to CCamAppControllerBase instance
+ * @param aUserBaseScenes Specifies whether this list should
+ * display the base scenes for the user scene.
+ */
+ static CCamSceneSettingContainer* NewL( const TRect& aRect,
+ CAknView& aView,
+ TCamCameraMode aMode,
+ CCamAppController& aController,
+ TBool aUserBaseScenes = EFalse );
+
+ /**
+ * Destructor.
+ * @since 2.8
+ */
+ virtual ~CCamSceneSettingContainer();
+
+ private:
+ /**
+ * Symbian OS 2nd phase constructor.
+ * @since 2.8
+ * @param aRect Frame rectangle for container.
+ */
+ void ConstructL( const TRect& aRect );
+
+ /**
+ * Reads the layout info from the resource
+ * @since 2.8
+ * @param aResourceId The resource containing the layout info
+ * @param aArray The array to add the layout info to.
+ */
+ void ReadLayoutL( TInt aResourceId, RArray<TAknLayoutRect>& aArray ) const;
+ void ReadLayoutL( TInt aResourceId, RArray<TAknLayoutText>& aArray ) const;
+
+ /**
+ * C++ constructor
+ * @since 2.8
+ * @param aMode Current capture mode
+ * @param aController reference to CCamAppControllerBase instance
+ * @param aView Reference to the view containing this container
+ * @param aUserBaseScenes Specifies whether this list should
+ * display the base scenes for the user scene.
+ */
+ CCamSceneSettingContainer( TCamCameraMode aMode,
+ CCamAppController& aController,
+ CAknView& aView,
+ TBool aUserBaseScenes );
+
+ public: // New functions
+ /**
+ * Is the user scene currently selected
+ * @since 2.8
+ * @return ETrue if user scene highlighted
+ */
+ TBool UserSceneHighlighted();
+
+ /**
+ * Saves the selected scene in dynamic settings
+ * @since 2.8
+ * @return ETrue if the scene setting was changed successfully.
+ */
+ TBool SaveSceneSettingL();
+
+ protected: // Functions from base classes
+ /**
+ * From CoeControl
+ * @since 2.8
+ * @return number of contained controls
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl
+ * @since 2.8
+ * @param aIndex The index of the required control
+ * @return Returns the requested control
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * From CCoeControl
+ * @since 2.8
+ * @param aRect area where to draw
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * From CamContainerBase
+ * @since 2.8
+ * @param aKeyEvent the key event
+ * @param aType the type of the event
+ * @return TKeyResponse key event was used by this control or not
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+
+ /**
+ * From MEikScrollBarObserver
+ * Called when a new thumbnail has been generated
+ * @since 2.8
+ * @param aScrollBar
+ * @param aEventType
+ */
+ void HandleScrollEventL( CEikScrollBar* aScrollBar, TEikScrollEvent aEventType );
+
+ private:
+
+ /**
+ * Sets up the scroll bar, used on start up and when items are deleted
+ * to update the state
+ * @since 2.8
+ */
+ void SetupScrollbarL();
+
+ /**
+ * Populates iSettingItemArray with scenes
+ * and scene bitmaps from the MBM file
+ * @param aResourceId resource id for scene array.
+ * @since 2.8
+ */
+ void CreateSceneArrayL( TInt aResourceId );
+
+ /**
+ * Sets the current position of the scene array to the element
+ * associated with a particular scene id.
+ * @param aSceneId the id of the scene.
+ * @since 2.8
+ */
+ void SetCurrentPositionToScene( TCamSceneId aSceneId );
+
+ /**
+ * Called to start the amination
+ * @since 2.8
+ */
+ void StartAnimation();
+
+ /**
+ * Called when the animation timer expires
+ * @since 2.8
+ * @param aPtr pointer to the object that called the timer
+ * @return Error code
+ */
+ static TInt TimerExpired( TAny* aPtr );
+
+ /**
+ * Animates the list
+ * @since 2.8
+ */
+ void Animate();
+
+ /**
+ * Updates the highlight on each call of Animate
+ * @since 2.8
+ * @returns ETrue if the highlight has finished updating
+ */
+ TBool UpdateHighlight();
+
+ /**
+ * Updates the pen/icons on each call of Animate
+ * @since 2.8
+ */
+ void UpdateAnimationData();
+
+ /**
+ * Draws the text on each call of Animate
+ * @since 2.8
+ * @param aText The text to draw
+ * @param aFont The font to use for drawing
+ * @param aBaseline The baseline of the text
+ * @param aFadeOut Whether text is fading in/out
+ */
+ void DrawText( const TDesC& aText, const CAknLayoutFont* aFont,
+ TInt aBaseline, TBool aFadeOut ) const;
+
+ /**
+ * Draws the icons on each call of Animate
+ * @since 2.8
+ * @param aFadeOut whether the icon to draw is fading in/out
+ */
+ void DrawIcon( TBool aFadeOut );
+
+ /**
+ * Draws the highlight on each call of Animate
+ * @since 2.8
+ */
+ void DrawHighlight() const;
+
+ /**
+ * Draws the list onto an off screen bitmap for
+ * scrolling purposes
+ * @since 2.8
+ */
+ void DrawListL();
+
+ /**
+ * Animates the list when scrolling occurs
+ * @since 2.8
+ * @return ETrue if the scrolling has completed
+ */
+ TBool ScrollList();
+
+ /**
+ * Moves the highlight position ready for animating
+ * @since 2.8
+ */
+ void MoveHighlight();
+
+ private: // data
+
+ // Array containing all pointers to all scene items
+ RPointerArray<CCamSceneSettingItem> iSettingItemArray;
+ // Arrays to store the layout data for the list
+ // large icon positions
+ RArray<TAknLayoutRect> iHighlightIcons;
+ // default icon positions
+ RArray<TAknLayoutRect> iNormalIcons;
+ // displaced icon positions
+ RArray<TAknLayoutRect> iDisplacedIcons;
+ // highlight positions
+ RArray<TAknLayoutRect> iHighlightArray;
+ // highlighted title positions
+ RArray<TAknLayoutText> iHighlightTitles;
+ // highlighted decsription positions
+ RArray<TAknLayoutText> iHighlightDescriptions;
+ // default title positions
+ RArray<TAknLayoutText> iNormalTitles;
+ // displaced title positions
+ RArray<TAknLayoutText> iDisplacedTitles;
+ // current highlight position
+ TInt iCurrentArrayPosition;
+ // previous highlight position
+ TInt iPreviousArrayPosition;
+ // position in array of item at the top of screen
+ TInt iTopDisplayPosition;
+ // number of icons to display on screen at any time
+ TInt iNumberOfIconsToDisplay;
+ // the capture mode
+ TCamCameraMode iMode;
+ // Specifies whether or not the scene list is for
+ // the user base scenes
+ TBool iUserBaseScenes;
+ // An animation timer object
+ CPeriodic* iAnimTimer;
+ // Animation Data
+ TCamAnimationData iAnimData;
+ // the scrollbar frame
+ CEikScrollBarFrame* iScrollFrame;
+ // the model to use for the scrollbar
+ TAknDoubleSpanScrollBarModel ivModel;
+ // the position of the scrollbar
+ TAknLayoutRect iScrollLayout;
+
+ };
+
+#endif // CAMSCENESETTINGCONTAINER_H
+
+// End of File