--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/inc/CamBurstThumbnailGridModel.h Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,480 @@
+/*
+* 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: Model class holding thumbnail grid state information*
+*/
+
+
+
+#ifndef CAMBURSTTHUMBNAILGRIDMODEL_H
+#define CAMBURSTTHUMBNAILGRIDMODEL_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include <coecntrl.h>
+
+#include <eiksbobs.h> // For Scroll component
+#include <eikscrlb.h> // For ScrollModel
+
+#include "CamAppController.h"
+#include "CamBurstThumbnailGridSizer.h"
+
+// CONSTANTS
+// The max number of items in the small grid layout
+const TInt KSmallGridCellCount = 6;
+
+// The height of the small grid in cells
+const TInt KSmallGridHeight = 2;
+
+// The height of the large grid in cells
+const TInt KLargeGridHeight = 3;
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CCamThumbnailGridSizer;
+
+// CLASS DECLARATION
+
+/**
+* Simple class representing a burst capture image's attributes
+*
+* @since 2.8
+*/
+class CThumbnailGridItem : public CBase
+ {
+public:
+ // Constructor
+ CThumbnailGridItem();
+
+ // Destructor
+ ~CThumbnailGridItem();
+
+public:
+ // Scaled-down thumbnail for display in the Grid control
+ CFbsBitmap* iDisplayThumb;
+
+ // Whether or not this item has been marked.
+ TBool iMarked;
+ };
+
+
+/**
+* Mix-in class used for listening to GridModel events.
+*
+* @since 2.8
+*/
+class MThumbModelObserver
+ {
+public:
+ /**
+ * Called when the highlighted option changes
+ * @since 2.8
+ */
+ virtual void HighlightChanged();
+
+ /**
+ * Called when one or more images have been deleted
+ * @since 2.8
+ */
+ virtual void ImagesDeleted();
+
+ /**
+ * Called when a new thumbnail has been generated
+ * @since 2.8
+ */
+ virtual void ThumbnailGenerated();
+ };
+
+
+/**
+* Contains the state of the Burst Post-Capture control
+*
+* @since 2.8
+*/
+class CCamBurstThumbnailGridModel : public CBase,
+ public MBitmapScaler
+ {
+ public:
+ // Bitmask used to identify the events to register for.
+ enum TModelEvent
+ {
+ EModelEventHighlight = 0x1,
+ EModelEventDeleted = 0x2,
+ EModelEventThumb = 0x4
+ };
+
+ // Used to represent the direction of highlight movement
+ enum TMoveSelect
+ {
+ EMoveSelectUp,
+ EMoveSelectDown,
+ EMoveSelectLeft,
+ EMoveSelectRight,
+ };
+
+ // Used to represent the internal state for the image resizing operation
+ enum TTmbState
+ {
+ ETmbStateScaling, // Currently scaling an image
+ ETmbStateIdle // Image finished, but more to do
+ };
+
+ public:
+ /**
+ * Two-phased constructor.
+ */
+ static CCamBurstThumbnailGridModel* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CCamBurstThumbnailGridModel();
+
+ public: // New functions
+ /**
+ * Attempts to move the selection highlight a specified direction
+ * @since 2.8
+ * @param aDir The direction to move the hightlight
+ * @return TBool indicating whether the move was possible or not
+ */
+ TBool MoveHighlight( TMoveSelect aDir );
+
+ TBool SetHighlight( TInt aIndex );
+
+ /**
+ * Sets new size for the scaling
+ * @param aThumbSize The new size
+ */
+ void SetThumbnailSize( const TSize aThumbSize );
+
+ /**
+ * Returns the number of valid (non-deleted) cells. Used by thumbnail
+ * grid to find how many cells it may need to draw.
+ * @since 2.8
+ * @return Number of cells
+ */
+ TInt NoOfValidCells();
+
+ /**
+ * Returns a specific grid item based on the supplied index.
+ * @since 2.8
+ * @param aValidIndex The index of the grid item to retrieve
+ * @return Pointer to the required item
+ */
+ CThumbnailGridItem* GridItem( TInt aValidIndex );
+
+ /**
+ * Returns a specific bitmap based on the supplied index.
+ * @since 2.8
+ * @param aValidIndex The index of the bitmap to retrieve
+ * @return Pointer to the required bitmap
+ */
+ const CFbsBitmap* Snapshot( TInt aValidIndex );
+
+ /**
+ * Set the burst array for the model to use
+ * @since 2.8
+ * @param aArray pointer to the burst array
+ */
+ void SetBurstArrayL( CCamBurstCaptureArray* aArray );
+
+ /**
+ * Returns the grid index for the cell in the top-left of the display
+ * @since 2.8
+ * @return The index to top left cell
+ */
+ TInt TopLeftGridIndex();
+
+ /**
+ * Returns the position of the highlight.
+ * @since 2.8
+ * @return The index to the valid (non-deleted) list
+ */
+ TInt HighlightedGridIndex();
+
+ /**
+ * Returns the index of the hightlighted entry in the CONTROLLER's
+ * burst array. This array includes deleted and NON-DELETED items
+ * @since 2.8
+ * @return The index to the controller's burst array
+ */
+ TInt HighlightedBurstIndex();
+
+ /**
+ * Sets (or clears) the selection 'mark' of the currently highlighted
+ * cell item
+ * @since 2.8
+ * @param aSet Whether to set or clear the mark
+ */
+ void SetCurrentMark( TBool aSet );
+
+ /**
+ * Marks or un-marks all non-deleted items
+ * @since 2.8
+ * @param aMark ETrue to set the mark, EFalse to clear it.
+ */
+ void MarkAll( TBool aMark );
+
+ /**
+ * Returns the number of images that have been "marked"
+ * @since 2.8
+ * @return The number of marked images.
+ */
+ TInt NoOfMarkedImages() const;
+
+ /**
+ * Returns the total number of images including 'deleted' images
+ * @since 2.8
+ * @return The number of images.
+ */
+ TInt NoOfImages() const;
+
+ /**
+ * Returns whether the specified item is marked or not.
+ * @since 2.8
+ * @param aIndex The index of the item to check
+ * @return ETrue if it is marked, else EFalse
+ */
+ TInt IsMarkedL( TInt aIndex );
+
+ /**
+ * Deletes all marked items
+ * @since 2.8
+ */
+ void DeleteMarkedL();
+
+ /**
+ * Deletes currently highlighted object
+ * @since 2.8
+ */
+ void DeleteHighlightL();
+
+ /**
+ * Adds an observer to a specified set of events
+ * @since 2.8
+ * @param aObserver The component to be notified
+ * @param aBitMask The bitmask of events to be reported
+ */
+ void AddModelObserverL( MThumbModelObserver* aObserver, TInt aBitMask );
+
+ /**
+ * Remove an observer to a specified set of events
+ * @since 2.8
+ * @param aObserver The component to not be notified
+ * @param aBitMask The bitmask of events to not be reported
+ */
+ void RemoveModelObserver( MThumbModelObserver* aObserver, TInt aBitMask );
+
+ /**
+ * Notify all observers to a specific event
+ * @since 2.8
+ * @param aEvent The event which has occurred.
+ * @param aParam Optional parameter to be passed with the event
+ */
+ void NotifyModelObserver( TModelEvent aEvent, TInt aParam = 0 );
+
+ /**
+ * Returns the image name (no path or extension) of the currently
+ * highlighted item.
+ * @since 2.8
+ * @return The image name
+ */
+ TPtrC HighlightedImageName();
+
+ /**
+ * Returns the height of the visible grid, typically 2 or 3 cells high.
+ * @since 2.8
+ * @returns the height of the visible grid.
+ */
+ TInt GridHeight();
+
+ /**
+ * Returns the image name (no path or extension) of an item.
+ * @since 2.8
+ * @param aIndex The index of the item.
+ * @return The image name
+ */
+ TPtrC ImageName( TInt aIndex );
+
+ /**
+ * Returns the image name (with path and extension) of an item.
+ * Uses the index in the global array (including deleted items)
+ * @since 2.8
+ * @param aIndex The index of the item (in the global array).
+ * @return The image full name and path
+ */
+ TPtrC ImageFileName( TInt aIndex ) const;
+
+ /**
+ * Refreshes internal state by checking whether the currently
+ * highlighted item has been deleted. This may happen if an item
+ * is viewed in post capture, then deleted.
+ * @since 2.8
+ */
+ void RefreshL();
+
+ /**
+ * Used to update where the top-left view on the grid is located.
+ * @since 2.8
+ * @param aMovingUp whether the update is because the curor is moving up.
+ */
+ void UpdateViewableGrid( TBool aMovingUp );
+
+ /**
+ * Converts from the "valid-only" list of items to the global "AllThumb"
+ * list.
+ * @since 2.8
+ * @param aValidIndex The valid index to convert from.
+ * @return The global index, or KErrNotFound.
+ */
+ TInt ConvertFromValidToGlobalIndex( TInt aValidIndex );
+
+ /**
+ *
+ */
+ void ScrollGrid( TBool aScrollDown, TInt aNewScrollPos );
+
+ /**
+ * Cancels the thumbnail scaling
+ * @since 2.8
+ */
+ void CancelThumbnails();
+
+ /**
+ * Notifies model that images have been deleted outside of camera
+ */
+ void ImageFilesDeleted();
+
+ public: // Functions from base classes
+ /**
+ * Called by sizer utility class when a bitmap rescale operation
+ * has completed.
+ * @since 2.8
+ * @param aErr Indicates the completion code (standard epoc error codes possible)
+ * @param aBitmap The resized bitmap (called class takes ownership)
+ */
+ void BitmapScaleCompleteL( TInt aErr, CFbsBitmap* aBitmap, TInt32 aInfo );
+
+ protected: // New functions
+
+ protected: // Functions from base classes
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CCamBurstThumbnailGridModel();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Adds the specified cell to the internal structures. Takes ownership
+ * of the supplied cell object
+ * @since 2.8
+ * @param aCell The grid item to add
+ */
+ void AddCellL( CThumbnailGridItem* aCell );
+
+ /**
+ * Used for the generation of the specified thumbnail
+ * @since 2.8
+ * @param aIndex The index (global) of the item to resize
+ */
+ void StartThumbnailL( TInt aIndex );
+
+ /**
+ * Force a check for thumbs; deleting those not visible and generating
+ * new thumbs for newly visible cells.
+ * @since 2.8
+ */
+ void RecalculateThumbs();
+
+ /**
+ * Queues thumbnails to be resized as required.
+ * @since 2.8
+ */
+ void QueueThumbnailsL();
+
+ /**
+ * Internal function used by the various delete functions
+ * @since 2.8
+ * @param aGlobalIndex The global index of the item to delete
+ */
+ void DeleteItemL( TInt aGlobalIndex );
+
+ /**
+ * Internal function used by the various delete functions
+ * @since 2.8
+ * @param aHighlightDeleted Whether the delete operation this call
+ * followed involved the deletion of the highlight
+ */
+ void DoPostDeleteGridCheck( TBool aHighlightDeleted );
+
+
+ private: // Data
+ TInt iCurrHighlight; // Grid index of current highlight
+ TInt iImagesMarked; // Number of images marked
+ TInt iTmpThumbIndex; // The record we are creating a thumb for
+
+ // An array of ALL thumbnail grid items, the "global" list.
+ // Includes delete and non-deleted
+ RPointerArray <CThumbnailGridItem> iAllThumbGrid;
+
+ // An array of VALID (non-deleted) items only.
+ RPointerArray <CThumbnailGridItem> iValidThumbGrid;
+
+
+ // Pointer to the burst mode capture array.
+ CCamBurstCaptureArray* iBurstArray; // Not owned
+
+ // Utility class used for resizing bitmaps
+ CCamThumbnailGridSizer* iGridSizer;
+
+ // Current internal state (referring to resizing)
+ TTmbState iState;
+
+ // List of objects requesting bitmap state updates
+ RPointerArray <MThumbModelObserver> iThumbObserver;
+
+ // Array of observers for the hightlight changed
+ RPointerArray <MThumbModelObserver> iHighlightObserver;
+
+ // Array of observers for the delete events
+ RPointerArray <MThumbModelObserver> iDeleteObserver;
+
+ // Grid index of "top left" cell.
+ TInt iTopLeftIndex;
+
+ // Either 2 (if upto 6 images) or 3 (if more than 6 images)
+ TInt iGridHeight;
+
+ // Size of the scaled thumbnails
+ TSize iThumbSize;
+ };
+
+
+#endif // CAMBURSTTHUMBNAILGRIDMODEL_H
+
+// End of File
+
+