diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/inc/CamSceneSettingContainer.h --- /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 + +// 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& aArray ) const; + void ReadLayoutL( TInt aResourceId, RArray& 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 iSettingItemArray; + // Arrays to store the layout data for the list + // large icon positions + RArray iHighlightIcons; + // default icon positions + RArray iNormalIcons; + // displaced icon positions + RArray iDisplacedIcons; + // highlight positions + RArray iHighlightArray; + // highlighted title positions + RArray iHighlightTitles; + // highlighted decsription positions + RArray iHighlightDescriptions; + // default title positions + RArray iNormalTitles; + // displaced title positions + RArray 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