emailuis/emailui/inc/FreestyleEmailUiLauncherGridVisualiser.h
branchRCL_3
changeset 25 3533d4323edc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/FreestyleEmailUiLauncherGridVisualiser.h	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,453 @@
+/*
+* Copyright (c) 2007-2010 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:  FreestyleEmailUi main UI grid definition.
+*
+*/
+
+
+
+#ifndef __FREESTYLEEMAILUI_MAINGRIDUIVISUALISER_H__
+#define __FREESTYLEEMAILUI_MAINGRIDUIVISUALISER_H__
+
+// SYSTEM INCLUDE FILES
+#include <alf/alfcontrol.h>
+#include <AiwServiceHandler.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfgridlayout.h>
+#include <alf/alfmappingfunctions.h>
+#include <alf/alfbitmapprovider.h>
+#include <aknphysicsobserveriface.h>
+
+// INTERNAL INCLUDE FILES
+#include "FreestyleEmailUiViewBase.h"
+#include "FreestyleEmailUiLauncherGridModel.h"
+#include "FreestyleEmailUiAppui.h"
+
+#include "FSEmailLauncherItem.h"
+#include "freestyleemailuimailboxdeleter.h"
+#include "FreestyleEmailUiUtilities.h"
+
+// FORWARD DECLARATIONS 
+class CBrushAnimation;
+class CFsAlfScrollbarLayout;
+class CAknStylusPopUpMenu;
+class CCoeControl;
+class CAknPhysics;
+
+class TFSLauncherGridMailboxStatus
+    {
+    public:
+        TInt iMailboxCount;
+        TInt iMailboxesOnline;
+        TInt iMailboxesOffline;
+        TInt iMailboxesSyncing;
+    };
+
+
+// Grid visualiser
+class CFSEmailUiLauncherGridVisualiser : public CFsEmailUiViewBase,
+                     				   	 public MAlfBitmapProvider,
+                     				   	 public MFSEmailLauncherItemObserver,
+                     				   	 public MEikScrollBarObserver,
+                     				   	 public MFSEmailUiMailboxDeleteObserver,
+  									     public MFSEmailUiGenericTimerCallback,
+  		                                 public MAknPhysicsObserver
+    {
+public:
+    enum TDirection
+        {
+        EDirectionRight=0,
+        EDirectionLeft,
+        EDirectionUp,
+        EDirectionDown,
+        EDirectionReset, 
+        EDirectionNone,
+        // <cmail> 
+        EDirectionTouch 
+        // </cmail> 
+        };
+
+    static CFSEmailUiLauncherGridVisualiser* NewL(CAlfEnv& aEnv, 
+   									  CFSEmailUiLauncherGrid* aControl, 
+    								  CFreestyleEmailUiAppUi* aAppUi,
+    								  CAlfControlGroup& aControlGroup, 
+    								  TInt aColumns, 
+    								  TInt aRows);
+
+    static CFSEmailUiLauncherGridVisualiser* NewLC(CAlfEnv& aEnv,
+    									 CFSEmailUiLauncherGrid* aControl, 
+    								   CFreestyleEmailUiAppUi* aAppUi,
+    								   CAlfControlGroup& aControlGroup, 
+    								   TInt aColumns, 
+    								   TInt aRows);
+
+    void AddMenuItemL(TUid aUid);
+	void SelectL();	
+	// Menu pane init and command handling
+	void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+	void HandleCommandL(TInt aCommand);
+
+    TBool OfferEventL(const TAlfEvent& aEvent);
+    // <cmail> 
+    /**
+      * Handler for touch related events
+      * @param aEvent, event type
+      * @return ETrue if event was used
+      */
+    TBool HandlePointerEventL(const TAlfEvent& aEvent);
+    
+    /**
+      * Function for searching right item when pointer event occurs
+      * @param aEvent, event type
+      * @return KErrnone if item was not found, else index to founded item
+      */
+    TInt FindPointedItem( const TAlfEvent& aEvent );
+    
+    /**
+      * Function for setting focus to item 
+      * @param aId, id of item where focus is going to be changed
+      */
+    void SetFocusedItemL( TInt aId );
+    
+    void HandleRowMovement( TDirection aDir, TInt aSelected );
+    // </cmail> 
+    TUid Id() const;			   
+    // <cmail> Toolbar
+    /*
+    void DoActivateL(const TVwsViewId& aPrevViewId,
+	                 TUid aCustomMessageId,
+	                 const TDesC8& aCustomMessage);
+     */
+	void ChildDoDeactivate(); 
+  
+    void VisualLayoutUpdatedL();
+
+	// Dynamic switch handling
+	void HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType );
+	void HandleDynamicVariantSwitchOnBackgroundL( CFsEmailUiViewBase::TDynamicSwitchType aType );
+	
+	// React to changes in grid contents
+	void HandleContentChangeL();
+    
+    void LaunchWizardL();
+    void GoToInboxL( TFSMailMsgId& mailboxId, 
+                     TFSMailMsgId& mailboxInboxId );
+
+	// From MFSEmailLauncherItemObserver
+	void RefreshLauncherViewL();
+    
+	TBool UiOperationLaunched();
+
+	// Modifies the value of iWizardWaitnoteShown
+    void SetWizardWaitnoteShown( TBool aWaitnoteShown );
+    
+	// Bitmap provider for grid ecom plugins icons 
+	void ProvideBitmapL(TInt aId, CFbsBitmap*& aBitmap, CFbsBitmap*& aMaskBitmap);
+
+    // Set refresh needed flag
+	void SetRefreshNeeded();
+	// <cmail> 
+    // Handling of foreground events
+	void HandleForegroundEventL( TBool aForeground );
+	
+    /**
+     * From MEikScrollBarObserver
+     * 
+     * Callback method for scroll bar events
+     *
+     * Scroll bar observer should implement this method to get scroll bar events.
+     *
+     * @since S60 0.9
+     * @param aScrollBar A pointer to scrollbar which created the event
+     * @param aEventType The event occured on the scroll bar
+     */
+    void HandleScrollEventL(CEikScrollBar* aScrollBar, TEikScrollEvent aEventType);
+    // </cmail> 
+	
+	// From base class CFsEmailUiViewBase
+	void GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const;
+	
+	void FadeOut(TBool aDirectionOut);
+	
+    /**
+     * Called when flip state changes.
+	 */
+	void FlipStateChangedL( TBool aKeyboardFlipOpen );
+
+    /**
+     * Handles application foreground events. When applcation is brought to
+     * foreground, calls the virtual HandleForegroundEventL() method, which
+     * can be implemented by subclasses.
+     */
+    virtual void HandleAppForegroundEventL( TBool aForeground );
+	
+	// Fire timer callback
+	void TimerEventL( CFSEmailUiGenericTimer* aTriggeredTimer );
+
+	
+// <cmail> Toolbar    
+private: // from
+    
+    /**
+     * @see CFsEmailUiViewBase::ChildDoActivateL
+     */
+    void ChildDoActivateL( const TVwsViewId& aPrevViewId,
+            TUid aCustomMessageId,
+            const TDesC8& aCustomMessage );  
+// </cmail> Toolbar 
+
+private: // from MFSEmailUiMailboxDeleteObserver
+    
+    void MailboxDeletionComplete();
+    
+private: // from MAknPhysicsObserver
+
+   /**
+    * @see MAknPhysicsObserver::ViewPositionChanged
+    */
+   virtual void ViewPositionChanged( const TPoint& aNewPosition, 
+           TBool aDrawNow, TUint aFlags );
+
+   /**
+    * @see MAknPhysicsObserver::PhysicEmulationEnded
+    */
+   virtual void PhysicEmulationEnded();
+
+   /**
+    * @see MAknPhysicsObserver::ViewPosition
+    */
+   virtual TPoint ViewPosition() const;
+    
+private: // New methods.
+
+    CFSEmailUiLauncherGridVisualiser(CAlfEnv& aEnv, 
+    					 CFSEmailUiLauncherGrid* aControl,
+    					 CFreestyleEmailUiAppUi* aAppUi,
+    					 CAlfControlGroup& aControlGroup);
+    void ConstructL(TInt aColumns, TInt aRows);
+    virtual ~CFSEmailUiLauncherGridVisualiser();
+	void CreateModelL();
+    void MoveSelection( TDirection aDir );
+    void MoveSelectorToCurrentItem( TDirection aDir );
+    void Select();
+    void DisplayProductInfoL();
+	void RescaleIconsL();
+    void SetRingWrapLimits();
+	void AddItemToModelL( CFSEmailLauncherItem* aItem,  TInt aPluginArrayIndex );
+
+	void ConstructScrollbarL( CAlfLayout* aParent );
+    void UpdateScrollBarRangeL();
+    CFSMailBox* ShowMailboxSelectionQueryL( const RPointerArray<CFSMailBox>& aMailBoxes );
+
+    // Check status of all configured mailboxes
+    TFSLauncherGridMailboxStatus CheckMailboxStatusL();
+
+    void DoFirstStartL();
+
+    /**
+     * Funciton should decide if item focus should still be drawn dispite of
+     * releasing button.
+     */
+    void HandleButtonReleaseEvent();
+
+    /**
+     * Reduces item's icon size.
+     */
+    void ResizeItemIcon( TBool aReduce );
+
+    /**
+     * Handles the focus state changes of CFSEmailUiLauncherGridVisualiser
+     * @param aVisible Indicates if focus should become visible or removed
+     */
+	void FocusVisibilityChange( TBool aVisible );
+
+	/**
+	 * Launches and displays the pop-up menu invoked by a long tap event.
+	 * @param aItemId The ID of the item for which to open the menu.
+	 */
+	void LaunchStylusPopupMenu( const TInt aItemId );
+
+
+private: // data types
+
+    struct TItemVisualData
+        {
+        CAlfAnchorLayout* iBase;
+        CAlfImageVisual* iImage;
+        CAlfTextVisual* iText;
+        };
+
+	struct TLevel
+        {
+	    CAlfGridLayout* iGridLayout;
+		RArray<TItemVisualData> iItemVisualData;
+		TInt iSelected;
+        TInt iParent; 
+		TPoint iParentPos;
+        RArray<TMenuItem> iItems; 
+        };      
+
+	struct TPluginIdIconIdPair
+		{
+		TInt iPluginArrayIndex;
+		TInt iIconId;
+		};
+	
+    class TRingMovementFuncMappingDataProvider: public MAlfTableMappingFunctionDataProvider
+        {
+    public:
+        inline TRingMovementFuncMappingDataProvider() : iStart(0), iEnd(0) { }
+        // From MAlfTableMappingFunctionDataProvider    
+        TReal32 MapValue( TReal32 aValue, TInt aMode ) const;
+        inline void SetStart( TReal32 aStart ) { iStart = aStart; }
+        inline void SetEnd( TReal32 aEnd ) { iEnd = aEnd; }
+    private:
+        TReal32 iStart;
+        TReal32 iEnd;
+        };
+
+    /**
+     * Structure for passing button down events
+     */
+    struct TItemIdInButtonDownEvent
+        {
+        TInt iItemId;
+        TBool iLaunchSelection;
+        };
+
+private: // methods
+    void ConstructRingL();
+
+    void CreateCaptionForApplicationL(TUid aUid, TDes& aCaption, TBool aShortCaption);
+	void FocusItem(TBool aHasFocus, TInt aItem);
+    void ScrollToRow(TInt row);
+	void PopulateL(TLevel& aLevel);
+	void UpdateLauncherItemListL();
+	void UpdateGridOffset();
+	void SetDefaultStatusPaneTextL();
+
+    void DetachSelectorMappingFunctions();
+    void UpdateFocusVisibility();
+    void UpdatePhysicsL();
+
+private: // data
+	CAlfEnv& iEnv;
+	CAlfControl* iControl;
+	TLevel iCurrentLevel;
+    CFSEmailUiLauncherGridModel* iModel;
+    TInt iVisibleRows;
+    TInt iVisibleColumns;
+    TInt iRowCount;
+    TInt iFirstVisibleRow;
+    TReal iRowHeight;
+    TReal iColumnWidth;
+    // Selector layout. Not own.
+    CAlfLayout* iSelector;
+    // Mapping function for selector horizontal position. Own.
+    CAlfTableMappingFunction* iRingMovementXFunc;
+    // Mapping function for selector vertical position. Own.
+    CAlfTableMappingFunction* iRingMovementYFunc;
+    TRingMovementFuncMappingDataProvider iRingMovementXFuncMappingDataProvider;
+    TRingMovementFuncMappingDataProvider iRingMovementYFuncMappingDataProvider;
+
+	TBool iStartupAnimation;
+    CAlfAnchorLayout* iWaterMarkBackgroundImageLayout;
+	TInt iStartupEffectStyle;
+    TInt iNewEmailCount;
+    CAlfTextVisual* iNewMailTextVisual;
+  	CAlfImageVisual* iNewMailBgVisual;
+ 	CAlfAnchorLayout* iTopTextLayout; 
+  	CAlfTextVisual* iTimeTitle;
+  	CAlfImageVisual *iSelectorImageVisual;
+  	RPointerArray<CAlfTexture> iIconArray;
+  	RArray<TInt> iMailboxRequestIds;
+  	TBool iSynchronizingMailbox;
+  	TBool iMailboxOnline;
+  	RPointerArray<CFSEmailLauncherItem> iLauncherItems;
+  	RArray<TUid> iLauncherItemUids;
+
+    CAlfDeckLayout* iParentLayout;
+    CAlfAnchorLayout* iWidgetLayout;
+    // <cmail> 
+    CAknDoubleSpanScrollBar* iScrollbar;
+    TAknDoubleSpanScrollBarModel iScrollbarModel;
+    // </cmail> 
+	CAlfImageVisual* iBgImageVisual;
+    
+    CAiwServiceHandler* iAiwSHandler;
+	
+	/**
+	 * ETrue if "Creating mailbox" wait note is shown. 
+	 * Then the key presses are ignored.
+	 */
+	TBool iWizardWaitnoteShown;
+
+	/**
+	 * ETrue indicates that the grid contents and layout must be updated next time when the
+	 * grid is activated.
+	 */
+	TBool iRefreshNeeded;
+	
+	// Array holding pairs of plugin id's vs icon id's
+	RArray<TPluginIdIconIdPair> iPluginIdIconIdPairs;
+   
+    // Plugin texture count, also serves as index when adding items to array
+    // and if for bitmap provider
+	TInt iPluginTextureId;
+	
+	// Boolean value indicating that construction has completed.
+	TBool iConstructionCompleted;
+	
+	// To indicate whether grid has started, for ODS, IAD and 
+	// "create mailbox query" interoperability
+	TBool iFirstStartComplete;
+
+	// Boolean value to prevent wizard/help crash when double-clicking.
+	TBool iDoubleClickLock;
+
+	// Item id that was seleceted in button down event
+	TItemIdInButtonDownEvent iItemIdInButtonDownEvent;
+
+	// Boolean value - true is user has launched any operation from UI.
+    TBool iUiOperationLaunched;
+
+    // Mailbox deleter - handles deletion of one or more mailboxes.
+    CFSEmailUiMailboxDeleter* iMailboxDeleter;
+
+    // A pop-up menu that is invoked by long tap events. Used for e.g.
+    // deleting mail boxes.
+    CAknStylusPopUpMenu* iStylusPopUpMenu;
+    TBool iStylusPopUpMenuLaunched;
+
+    // Contains the ID of a selected mailbox. Used for deleting mailboxes
+    // with long tap pop-up menu.
+    TFSMailMsgId iMailboxToDelete;
+    
+    CCoeControl* iCoeControl;
+
+    // Timer to postpone the Drawing 
+    CFSEmailUiGenericTimer* iStartupCallbackTimer;
+    
+    CAknPhysics* iPhysics;   
+    TBool iPointerAction;
+    TBool iIsDragging;
+    TPoint iPreviousPosition;
+    TPoint iOriginalPosition;
+    TTime iStartTime;
+    TBool iScrolled;
+    TInt iTotalDragging;
+    TBool iLaunchWizardExecuted; // prevents reentrant Wizard calling
+    }; // class  CFSEmailUiLauncherGridVisualiser
+
+#endif // __FREESTYLEEMAILUI_MAINGRIDUIVISUALISER_H__