textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbutton.h
changeset 0 eb1f2e154e89
child 18 c8fb4cf7b3ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbutton.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,814 @@
+/*
+* Copyright (c) 2005-2006 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:  header file of button and dragbar
+*
+*/
+
+#ifndef C_CBUTTONBASE_H
+#define C_CBUTTONBASE_H
+
+#include <peninputlayoutbasecontrol.h>
+/**
+ *  CButtonBase
+ *
+ *  Button base control. This class could be used directly by user.
+ *
+ *  @lib peninputlayoutcontrol.lib
+ *  @since S60 V4.0
+ */
+class CButtonBase: public CFepUiBaseCtrl
+    {
+public: 
+    //constructor and destructor
+    /**
+     * Destructor.        
+     *
+     * @since S60 V4.0        
+     */                  
+    IMPORT_C virtual ~CButtonBase();
+
+    /**
+     * Factory function.        
+     *
+     * @since S60 V4.0        
+     * @param aRect The rectangle area for this control
+     * @param aUiLayout Ui layout who contains this control.Ownership not transferred
+     * @param aControlId control Id
+     * @return An instance of CButtonBase class        
+     */                               
+    IMPORT_C static CButtonBase* NewL(const TRect& aRect,CFepUiLayout* aUiLayout,TInt aControlId);
+
+    /**
+     * Set button active or deactive.        
+     *
+     * @since S60 V4.0        
+     * @param aFlag Button status flag.
+     */                                       
+    IMPORT_C void SetActive(TBool aFlag);
+    
+    /**
+     * Set button dimmed.        
+     *
+     * @since S60 V4.0        
+     * @param aFlag Dim status. Default value is ETrue.
+     */                                      
+    IMPORT_C void SetDimmed(TBool aFlag);           
+
+    /**
+     * Set bitmap for given status .        
+     *
+     * @since S60 V4.0        
+     * @param aBmp The bitmap. Ownership transferred to button
+     * @param aType The bitmap type used for
+     */                                 
+    IMPORT_C void SetBitmapL(CFbsBitmap* aBmp, TButtonBmpType aType);
+
+    /**
+     * Set mask bitmap for given status.        
+     *
+     * @since S60 V4.0        
+     * @param aBmp The bitmap. Ownership transferred to button
+     * @param aType The bitmap type used for
+     */                                 
+    IMPORT_C void SetMaskBitmapL(CFbsBitmap* aBmp, TButtonBmpType aType);
+
+    /**
+     * get bitmap for given type . 
+     *
+     * @since S60 V4.0        
+     * @param aType The bitmap type used for
+     * @param aMaskFlag EFalse if want to get the mask bitmap, otherwise, 
+     *          return the bitmap. Default value is EFalse.
+     * @return The bitmap
+     */                                 
+    IMPORT_C CFbsBitmap* Bitmap(TButtonBmpType aType,TBool aMaskFlag = EFalse);
+
+    /**
+     * Set caption.        
+     *
+     * @since S60 V4.0        
+     * @param aText The button caption
+     */                                 
+    IMPORT_C void SetCaptionL(const TDesC& aText);
+    
+    /**
+     * Get button dimmed status .
+     *
+     * @since S60 V4.0        
+     * @return Button dimmed status
+     */                                                                      
+    inline TBool IsDimmed();
+   
+
+    /**
+     * Enable bitmap stretchable. When it's set, all bitmap in this control
+     * will be stretched to fit in the control. It's stretchable by default
+     *
+     * @since S60 V4.0
+     * @param aFlag the bitmap stretching flag
+     */
+    inline void SetBmpStretchable(TBool aFlag = ETrue);
+
+    /**
+     * Get bitmap stretchable flag
+     *
+     * @since S60 V4.0
+     * @return aFlag the bitmap stretching flag
+     */
+    inline TBool BmpStretchable();
+    
+   
+    //from base class CFepUiBaseCtrl
+    /**
+     * From CFepUiBaseCtrl
+     * Draw control
+     *
+     * @since S60 V4.0
+     */                               
+    IMPORT_C virtual void Draw();    
+
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer levae event. 
+     * This will be called only when it's got pointer down event before and 
+     * now pointer leaves without pointer up event
+     *
+     * @since S60 V4.0
+     * @param aPoint current pointer position
+     */
+    IMPORT_C virtual void HandlePointerLeave(const TPoint& aPoint);
+    
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer enter event. 
+     * This will be called only when it's got pointer down event before and 
+     * pointer leaves but now comes back without pointer up event.
+     *
+     * @since S60 V4.0
+     * @param aPoint current pointer position     
+     */
+    IMPORT_C virtual void HandlePointerEnter(const TPoint& aPoint);            
+    
+    /**
+     * From CFepUiBaseCtrl    
+     * Set control's rectangle
+     *
+     * @since S60 V4.0
+     * @param aRect The new control area
+     */                                       
+    //IMPORT_C virtual void SetRect(const TRect& aRect);    
+
+    /**
+     * Hide or shoe control. A hiden control will not handle the event.
+     *
+     * @since S60 V4.0
+     * @param aFlag ETrue if want to hide the control.
+     */                                               
+    //IMPORT_C virtual void Hide(TBool aFlag);
+    
+    /* Set the font for caption
+     *
+     * @since S60 V4.0
+     * @param aFontSpec the font spec to be used.
+     */                                                   
+    IMPORT_C void SetFont(const TFontSpec& aFontSpec);
+    
+    /**
+     * Set font information
+     *
+     * @since S60 V4.0          
+     * @param aFont The font info for key drawing.Ownership not transferred
+     */
+    IMPORT_C void SetFont(const CFont* aFont);    
+
+    /**
+     * Set caption color
+     *
+     * @since S60 V4.0          
+     * @param aCol The caption font color
+     */    
+    inline void SetCaptionColor(const TRgb& aCol);
+    
+    /**
+     * Set font shadow color
+     *
+     * @since S60 V4.0          
+     * @param aCol The font color
+     */    
+    inline void SetCaptionShadowColor(const TRgb& aCol);    
+
+    /**
+     * Reset the bitmap pool.
+     *
+     * @since S60 v4.0
+     */
+    IMPORT_C void ResetBmpPool();    
+
+	IMPORT_C void Hide(TBool aFlag);
+	
+protected:   
+    /**
+     * Constructor
+     *
+     * @since S60 V4.0
+     * @param aRect The rectangle area for this control
+     * @param aUiLayout Ui layout who contains this control.Ownership not transferred
+     * @param aControlId control Id
+     */           
+    IMPORT_C CButtonBase(const TRect& aRect,CFepUiLayout* aUiLayout,TInt aControlId);            
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer down event
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */                                        
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+    
+    /**
+     * Handle pointer move event
+     * From CFepUiBaseCtrl
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */                  
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
+    
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer up event
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+ 	 * @return The control which handles the event
+     */                  
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
+
+    /**
+     * Set background bitmap
+     *
+     * @since S60 V4.0
+     * @param aBmp The background bitmap. Ownership transferred to control
+     */
+    IMPORT_C virtual void SetBackgroundBitmapL(CFbsBitmap* aBmp);
+    
+    /**
+     * Set background mask bitmap
+     *
+     * @since S60 V4.0
+     * @param aBmp The background bitmap. Ownership transferred to control
+     */
+    IMPORT_C virtual void SetBackgroundMaskBitmapL(CFbsBitmap* aBmp);
+
+private:
+    /**
+     * Add a bitmap to bitmap pool
+     *
+     * @since S60 V4.0
+     * @param aBmp The  bitmap to be added
+     */ 
+    void AddBmpToPool(CFbsBitmap* aBmp);
+
+    
+protected:
+    /**
+     * bitmap for active state
+     * Own.
+     */
+    CFbsBitmap* iActiveBmp; 
+    
+    /**
+     * bitmap for pressing in active state
+     * Own.
+     */
+    CFbsBitmap* iActiveBmpPressed; 
+    
+    /**
+     * bitmap for non active state
+     * Own.
+     */
+    CFbsBitmap* iNonActiveBkBmp;    
+    
+    /**
+     * bitmap for pressing in non active state
+     * Own.
+     */
+    CFbsBitmap* iNonActiveBkBmpPressed;
+         
+    /**
+     * mask bitmap for active state
+     * Own.
+     */
+    CFbsBitmap* iActiveMaskBmp;
+    
+    /**
+     * mask bitmap for pressing in active state
+     * Own.
+     */
+    CFbsBitmap* iActiveMaskBmpPressed; 
+    
+    /**
+     * mask bitmap for non active state
+     * Own.
+     */
+    CFbsBitmap* iNonActiveBkMaskBmp; 
+    
+    /**
+     * mask bitmap for pressing in non active state
+     * Own.
+     */
+    CFbsBitmap* iNonActiveBkMaskBmpPressed; 
+        
+private:    
+    /**
+     * Button pressed status
+     */
+    TBool iPressed;    
+    
+    /**
+     * Button dim status
+     */
+    TBool iDimmed;
+
+    /**
+     * Bitmap stretchable flag
+     */ 
+    TBool iStretchable;
+    
+    /**
+     * bitmap for dimmed state
+     * Own.
+     */
+    CFbsBitmap* iDimmedBmp;   
+         
+    /**
+     * mask bitmap for dim stute
+     * Own.
+     */
+    CFbsBitmap* iDimmedMaskBmp;
+    
+    /**
+     * Button caption
+     */
+    HBufC* iCaption;
+    
+    /**
+     * Font object for key drawing
+     * Ownership depends on flag iFontOwnership.
+     */          
+    CFont* iFont;
+
+    /**
+     * Font information for key drawing
+     */     
+    TFontSpec iFontSpec;
+
+    /**
+     *  Flag ownership flag. ETrue if CFont object is owned by this control.
+     */
+    TBool iFontOwnership;    
+    /**
+     * Baseline for caption
+     */
+    TInt iBaseline;
+    
+    /**
+     * Pen color for first level caption
+     */     
+    TRgb iCaptionColor;
+
+    /**
+     * Pen color for caption shadow
+     */     
+    TRgb iCaptionShadowColor;
+    
+    /**
+     * bitmap pool for all bitmaps.
+     */
+    RPointerArray<CFbsBitmap> iBmpPool;
+    
+    /**
+     * keep the bitmap for background bitmap set by SetBackgroundBitmapL in case someone used.
+     * Own.
+     */
+    CFbsBitmap* iNoUsedBkbmp;
+
+    /**
+     * keep the bitmap for mask background bitmap set by SetBackgroundMaskBitmapL in case someone used.
+     * Own.
+     */
+    CFbsBitmap* iNoUsedMaskBkbmp;
+    
+    /**
+     * Reserved item1
+     */
+     TInt iReserved1;
+     
+    /**
+     * Reserved item2
+     */
+     TInt iReserved2;
+
+    };
+
+
+/**
+ *  CDragBar
+ *
+ *  Drag bar
+ *
+ *  @lib peninputlayoutcontrol.lib
+ *  @since S60 V4.0
+ */
+class CDragBar: public CButtonBase,public MTimerHandler,public MEventObserver
+    {
+public:
+    /**
+     * Factory function
+     *
+     * @since S60 V4.0
+     * @param aRect The rectangle area for this control
+     * @param aUiLayout Ui layout who contains this control.Ownership not transferred
+     * @param aControlId control Id
+     * @return The class instance 
+     */               
+    IMPORT_C static CDragBar* NewL(const TRect& aRect,CFepUiLayout* aUiLayout,TInt aControlId);
+    
+    /**
+     * Destructor
+     *
+     * @since S60 V4.0
+     */
+    IMPORT_C virtual ~CDragBar();
+    
+    /**
+     * Add position observer. When drag bar moved, the observer will get notified.
+     *
+     * @since S60 V4.0        
+     * @param aObserver The event observer
+     */                                                              
+    IMPORT_C void AddPositionObserver(MPositionObserver* aObserver);        
+
+    /**
+     * Remove position observer. 
+     *
+     * @since S60 V4.0        
+     * @param aObserver The event observer to be removed
+     */                                                              
+    IMPORT_C void RemovePositionObserver(MPositionObserver* aObserver);        
+
+    /**
+     * Set the long press time out. 
+     *
+     * @since S60 V4.0        
+     * @param aTime The long press event time out interval
+     */                                                              
+    IMPORT_C void SetLongpressTimer(TTimeIntervalMicroSeconds32 aTime);        
+
+    /**
+     * Check a control is the position observer of the dragbar 
+     *
+     * @since S60 V4.0
+     * @param aControl The control to be checked
+     * @return ETrue if the control is position observer of the dragbar
+     */                
+    IMPORT_C TBool IsDraggingComponent(CFepUiBaseCtrl* aControl);
+
+    /**
+     * Get dragging status.        
+     *
+     * @since S60 V4.0        
+     * @param None
+     * @return ETrue if is dragging, otherwise EFalse
+     */                                                      
+    inline TBool IsDragging();        
+
+    /**
+     * Set the moving draw interval. 
+     *
+     * @since S60 V4.0        
+     * @param aTime The drawing interval while moving
+     */    
+    inline void SetRedrawInterval(TTimeIntervalMicroSeconds32 aTime);        
+
+    /**
+     * Enable/disable dragging feature. 
+     * Dragging is enabled by default when created.
+     *
+     * @since S60 V4.0        
+     * @param aFlag dragging flag. Default value is ETrue
+     */                                                              
+    inline void EnableDragging(TBool aFlag = ETrue);                
+
+    /**
+     * Set bitmap for given status .        
+     *
+     * @since S60 V4.0        
+     * @param aBmp The bitmap. Ownership transferred to dragbar
+     * @param The type of the bitmap
+     */                                 
+    IMPORT_C void SetBitmapL(CFbsBitmap* aBmp, TButtonBmpType aType);
+
+    /**
+     * Set mask bitmap for given status . 
+     *
+     * @since S60 V4.0        
+     * @param aBmp The bitmap. Ownership transferred to dragbar
+     * @parma aType The type of bitmap
+     */                                 
+    IMPORT_C void SetMaskBitmapL(CFbsBitmap* aBmp, TButtonBmpType aType);
+
+    //From base class CFepUiBaseCtrl
+    
+    /**
+     * From CFepUiBaseCtrl
+     * Update control and it's components rect
+     *
+     * @since S60 V4.0
+     * @param aOffset The offset to be moved
+     */                
+    IMPORT_C void Move(const TPoint& aOffset);   
+    
+    //from base class MEventObserver
+    
+    /**
+     * From MEventObserver
+     * Handle control event 
+     *
+     * @since S60 V4.0
+     * @param aEventType The event type
+     * @param aCtrl The control who sends the event
+     * @param aEventData The event data
+     */            
+    IMPORT_C void HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl,
+                                                     const TDesC& aEventData);
+ 
+    //from base class MTimerHandler
+    /**
+     * From MTimerHandler
+     * HandleTimerOut. Handling time out event
+     *
+     * @since S60 V4.0
+     * @param aTimeType The timer type
+     */                    
+    IMPORT_C void HandleTimerOut(TInt aTimeType);
+
+    /**
+     * From CFepUiBaseCtrl
+     * OnDeActivate. Called when the layout is going to be hidden
+     *
+     * @since S60 v4.0
+     */        
+    IMPORT_C void OnDeActivate();
+    
+    /**
+     * Cancel pointer down event.
+     * This will be called when a control has pointer down but pointer up 
+     * event happens in other ways. If overrided, this base implementation 
+     * must be called in order to report the event.
+     *
+     * @since S60 V4.0
+     * @param aFocusedFlag ETrue if got focused, otherwise EFalse
+     */                                
+    IMPORT_C virtual void CancelPointerDownL(); 
+    
+    /**
+     * Recalculate moving area. It's called when it's observer changes size.
+     *
+     * @since S60 v4.0
+     */             
+    void ReCalculateDragArea();    
+
+protected:
+    /**
+     * Constructor
+     *
+     * @since S60 V4.0
+     * @param aRect The rectangle area for this control
+     * @param aUiLayout Ui layout who contains this control. Ownership not transferred
+     * @param aControlId control Id
+     */    
+    IMPORT_C CDragBar(const TRect& aRect,CFepUiLayout* aUiLayout,
+                                                            TInt aControlId);
+
+    /**
+     * Second phrase constructor
+     *
+     * @since S60 V4.0
+     */
+    IMPORT_C void ConstructL();
+
+    /**
+     * Test whether the moving destination is valid
+     *
+     * @since S60 V4.0
+     * @param aPt The destionation point
+     * @param aVInfo The valid information in vertial dirtection
+     * @param aHInfo The valid information in horizontal dirtection
+     * @return ETrue if valid, otherwise EFalse 
+     */           
+    IMPORT_C TBool IsValidDestination(const TPoint& aPt,TBool& aVInfo,
+                                                               TBool& aHInfo);
+    
+
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer down event
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */                                        
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+    
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer move event
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */                  
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
+    
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer up event
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */                  
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
+    
+private:    
+    /**
+     * Draw control frame 
+     * 
+     * @since S60 V4.0
+     * @param aFrameRect The rect to be drawn
+     * @param aDrawFlag Draw or erase flag. ETrue if draw
+     * @return The affected rect
+     */            
+    TRect DrawFrame(const TRect& aFrameRect, TBool aDrawFlag = ETrue);
+
+    /**
+     * Show or hide the moving indicator 
+     *
+     * @since S60 V4.0
+     * @param aDrawFlag ETrue if show the moving indicator. Default value ETrue
+     */                    
+    void ShowMovingIndicator(TBool aDrawFlag = ETrue);
+
+    /**
+     * Add a control to the dragging list
+     *
+     * @since S60 V4.0
+     * @param aCtrl The control to be added
+     */                    
+    void AddToDraggingCtrlList(CFepUiBaseCtrl* aCtrl);
+    
+    /**
+     * Do preparation before dragging 
+     *
+     * @since S60 V4.0
+     */                        
+    void PrepareDragging();
+    
+    /**
+     * Restore states after dragging
+     *
+     * @since S60 V4.0
+     */                        
+    void AfterDragging();
+
+private:
+    /**
+     * dragging flag
+     */
+    TBool iIsDragging;
+
+    /**
+     * Moving offset when drag bar is moving.
+     */
+    TPoint iMoveOffset;
+
+    /**
+     * dragging start position
+     */
+    TPoint iDraggingStartPt;
+    
+    /**
+     * Position change observer list
+     */
+    RPointerArray<MPositionObserver> iPosObserverList;
+    
+    /**
+     * The rect to be drawn when dragging. It's the rect of whole dragging area
+     */
+    TRect iDragFrameRect;
+    
+    /** 
+     * Moving flag, is it moving.
+     */
+    TBool iMoved;
+    
+    /**
+     * Flag tells whether whole layout is being draged
+     */
+    TBool iLayoutBeingDraged;
+    
+    /**
+     * Long time press event flag. 
+     * When this is enabled, dragbar starts move only after long press time out
+     */
+    TBool iNeedLongtimePress;
+    
+    /**
+     * Long time press timer interval
+     */
+    TTimeIntervalMicroSeconds32 iLongtimePressTimeout;
+    
+    /**
+     * Flag tells whether long pressing happend
+     */
+    TBool iLongPressed;       
+
+    /**
+     * Draing enabler flag. Only this flag set can dragbar movable.
+     * Default value is ETrue
+     */
+    TBool iDraggingEnabled;
+
+    /**
+     * The position where moving indidator is displayed
+     */
+    TPoint iMovingIndicatorPos;
+
+    /**
+     * Currnt pointer position. Need to kept since we use timely drawing.
+     */
+    TPoint iCurrentPointerPos;
+
+    /**
+     * Redraw timer interval. 
+     * While moving, it's not drawn if another redraw event comes
+     */
+    TTimeIntervalMicroSeconds32 iDrawInterval;        
+    
+    /** 
+     * A list keeps all the control belongs to the dragging area
+     */    
+    RPointerArray<CFepUiBaseCtrl> iDraggingCtrlList;    
+ 
+    /**
+     * long press timer
+     * Own.
+     */
+    CLayoutTimer* iLongPressTimer;    
+    
+    /**
+     * Moving indicator bitmap
+     * Own.
+     */
+    CFbsBitmap* iMovingIndicatorBmp; 
+    
+    /**
+     * Moving indicator mask bitmap
+     * Own
+     */
+    CFbsBitmap* iMovingIndicatorMaskBmp;    
+    
+    /** 
+     * Redraw timer for moving
+     * Own
+     */
+    CLayoutTimer* iMoveTimer;
+
+    /**
+     * Reserved item1
+     */
+     TInt iReserved1;
+     
+    /**
+     * Reserved item2
+     */
+     TInt iReserved2;	       
+    };
+//end of CDragBar
+
+#include <peninputlayoutbutton.inl>
+#endif //C_CBUTTONBASE_H
\ No newline at end of file