textinput/peninputhwrtrui/inc/truihwrbox.h
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputhwrtrui/inc/truihwrbox.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,593 @@
+/*
+* 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:  hand writing box - control in Training UI application 
+*
+*/
+
+
+#ifndef C_TRAININGUIHWRBOX_H
+#define C_TRAININGUIHWRBOX_H
+
+// includes 
+#include <coecntrl.h>
+#include <AknInfoPopupNoteController.h> // Tooltip
+
+// forward declarations  
+class MTruiHwrBoxObserver;
+class CAknInfoPopupNoteController;
+class CAknsBasicBackgroundControlContext;
+
+const TPoint KTail( 0xFFFF,0 );
+
+// Class declaration
+/**
+ *  CTruiHwrBox
+ *  CTruiHwrBox is new component, which allows input and output a character
+ *  model by strokes
+ *  @lib avkon.lib
+ */ 
+class CTruiHwrBox : public CCoeControl, public MAknInfoPopupNoteObserver
+    {   
+public:
+
+    /* Flags for hwrbox state. HwrBox must be one and only one state */   
+    enum TBoxState
+        {
+        /* Already has model but doesn't play the animation */
+        EExistModelStop = 0,
+        /* Already has model and play the animation */
+        EExistModelDraw,
+        /* Ready to input an new character model */
+        ENewModelStop,
+        /* Use is inputting an new character model */
+        ENewModelDraw,
+        }; 
+        
+    enum THwrBoxFlag
+        {
+        ENoFrameHwrBox = 0x00000000,
+        EFrameHwrBox = 0x00000001,
+        EReadOnlyHwrBox = 0x00000002,
+        EWritableHwrBox = 0x00000004
+        };
+        
+public: 
+
+    /**
+     * Two-phased constructor.
+     * @param aParent the parent control for choice list
+     * @param aRect the extent of the control
+     * @return Pointer to CTruiHwrBox's instance
+     */
+    static CTruiHwrBox* NewL( CCoeControl* aParent, 
+                              MTruiHwrBoxObserver* aHwrBoxObserver = NULL,
+                              MAknsControlContext* aBgContext = NULL );
+
+    /**
+     * Two-phased constructor.
+     * @param aParent the parent control for choice list
+     * @param aRect the extent of the control
+     * @return Pointer to CTruiHwrBox's instance
+     */
+    static CTruiHwrBox* NewLC( CCoeControl* aParent,
+                               MTruiHwrBoxObserver* aHwrBoxObserver = NULL,
+                               MAknsControlContext* aBgContext = NULL );
+    
+    /**
+     * Destructor
+     */
+    ~CTruiHwrBox(); 
+    
+    /**
+     * Periodic Callback function
+     * To save the model
+     *
+     * @param aObject: Transfer the pointer to CTruiHwrBox into this function
+     * @return system-wide err code
+     */
+    static TInt TimeToSaveL( TAny* aObject );
+    
+    /**
+     * Save the new inputting model
+     */
+    void SaveModelL();
+
+    /**
+     * Save the new inputting model by manual.
+     */
+    void SaveModelByManuallyL();
+    
+    /**
+     * Periodic Callback function
+     * To draw the next piont in the animation
+     *
+     * @param aObject: Transfer the pointer to CTruiHwrBox into this function
+     * @return system-wide err code
+     */
+    static TInt TimeToDrawNextL( TAny* aObject );
+    
+    /**
+     * Draw the next piont in the animation
+     */
+    void DrawNextL();
+    
+    /**
+     * Begin to draw the existing model
+     *
+     * @param aIsScale ETrue scale points to the fitable size before playing.
+     * @param aRefSize The size as the reference coordination for scaling.
+     */
+    void PlayAnimation( TBool aIsScale = EFalse, const TSize& aRefSize = TSize( 1, 1 ) );
+    
+    /**
+     * clear the existing model
+     */
+    void ClearExistModel();
+    
+    /**
+     * Set HwrBox observer
+     * @param aHwrBoxObserver the observer
+     */
+    void SetHwrBoxObserver( MTruiHwrBoxObserver* aHwrBoxObserver );
+    
+    /**
+     * Get the Hwrbox's model
+     *
+     * @return Reference to iPointArrayModel
+     */
+    RArray<TPoint>& Model();
+    
+    /**
+     * Get the Hwrbox's state
+     *
+     * @return Current HWR box's state
+     */
+    TInt BoxState() const;
+    
+    /**
+     * Pause the playing of animation
+     */
+    void PausePlaying();
+    
+    /**
+     * Resume the playing of animation
+     */
+    void ResumePlaying();
+    
+    /**
+     * Set guiding line
+     *
+     * @param aTop The vertical coordinate of top guiding line
+     * @param aBottom The vertical coordinate of bottom guiding line
+     * @return system-wide err code
+     */
+    TInt SetGuidingLine( TInt aTop, TInt aBottom );
+    
+    /**
+     * Show trails statically
+     *
+     * @param aPointArray The points that will be shown in HwrBox
+     */
+    void ShowTrails( const RArray<TPoint>& aPointArray, 
+                     TBool aIsScale = EFalse,
+                     const TSize& aRefSize = TSize( 1, 1 ) );
+    
+    /**
+     * Show tooltip
+     *
+     * @param aText The tooltip tex.
+     * @param aPosition The tooltip's location.
+     * @param aBeforeTimeout The time internal that will popup tooltip
+     * @param aInViewTimeout The time internal that will hide tooltip
+     */
+    void ShowTooltipL( const TDesC& aText,
+                       const TPoint& aPosition, 
+                       const TInt aBeforeTimeout,
+                       const TInt aInViewTimeout );
+    
+    /**
+     * Set the position for tooltip
+     *     
+     * @param aPosition The tooltip's location.
+     */
+    void SetTooltipPosition( const TPoint& aPosition );
+    
+    /**
+     * Hide tooltip
+     *
+     */
+    void HideInfoPopupNote();
+// From CCoeControl 
+    
+    /**
+     * From CCoeControl. Handles key events.
+     * @param aKeyEvent the key event    
+     * @param aType The type of key event
+     * @return Indicates whether or not the keyevent was used by this control   
+     */
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );    
+    
+    /**
+     * From CCoeControl. Draws control to given area
+     * @param aRect The rectangle that should be drawn by the control. 
+     */
+    void Draw( const TRect& aRect ) const;
+       
+    /**
+     * Draw character model
+     */
+    void DrawModel();
+    
+    /**
+     * Set box state from outside
+     *
+     * @param aReady ture means model is loaded
+     *               false means no model is loaded
+     */
+    void ModelIsReady( TBool aReady = ETrue );
+    
+    TRect DrawableRect() const;
+    
+    inline void SetHwrBoxFlag( TUint aFlag )
+        {
+        iFlag = aFlag;
+        };
+        
+    /**
+     * Set flag to indicate if draw bottom guideline
+     *
+     * @param aBottomGuideLineDisplay ETrue means draw bottom guideline
+     */
+    inline void SetDisplayBottomGuideLine( TBool aBottomGuideLineDisplay )
+        {
+        iBottomGuideLineDisplay = aBottomGuideLineDisplay;
+        };
+
+    /**
+     * Set flag to indicate if draw top guideline
+     *
+     * @param aTopGuideLineDisplay ETrue means draw bottom guideline
+     */
+    inline void SetDisplayTopGuideLine( TBool aTopGuideLineDisplay )
+        {
+        iTopGuideLineDisplay = aTopGuideLineDisplay;
+        };
+        
+    /**
+     * Set editing mode to readonly or writable
+     *
+     * @param aReadOnly ETrue means hwrbox is readonly
+     *                  EFalse means hwrbox is loaded
+     */
+    void SetHwrBoxReadOnly( TBool aReadOnly );
+
+// from CCoeControl
+    
+    /**
+     * From CCoeControl. Handles pointer events
+     * @param aPointerEvent the pointer event be be handled.
+     */
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );    
+    
+protected: 
+
+
+    /**
+     * From CoeControl.
+     * Responds to changes to the size and position of the contents of this control.
+     */
+    void SizeChanged();
+    
+    /**
+     * Handles a change to the control's resources.
+     *
+     * @param aType A message UID value.
+     */
+    void HandleResourceChange( TInt aType );
+    
+    /**
+     * Handle focus changed
+     *
+     */
+    void FocusChanged( TDrawNow aDrawNow ); 
+
+private:
+
+    /**
+     * C++ Default Constructor 
+     */
+    CTruiHwrBox(); 
+
+    /**
+     * 2nd phase constructor
+     * @param aParent the parent control for choice list
+     * @param aRect the extent of the control
+     */
+    void ConstructL( CCoeControl* aParent,
+                     MTruiHwrBoxObserver* aHwrBoxObserver = NULL,
+                     MAknsControlContext* aBgContext = NULL );
+    
+    /**
+     * Check if the point is contained in drawing area
+     *
+     * @param aPoint The point which to be checked
+     * @return ETrue: The point is in drawing area
+     *         EFalse: The point isn't in drawing area
+     */
+    TBool IsContained( const TPoint& aPoint ) const;
+    
+    /**
+    * Adjust shortcut model's point to fit the popup hwr box. 
+    * @param aOriginSize Origin size of which input character model.
+    * @param aRealSize Real popup hwr box's size.
+    * @param aModel The model to be adjuested.
+    */    
+    void ScaleModel( const TSize& aOriginSize, 
+                     const TSize& aRealSize, 
+                     RArray<TPoint>& aModel );
+       
+    /**
+     * Draws all points.     
+     */
+    void DrawTrails( CWindowGc& aGc ) const;
+    
+    /**
+     * Set context for this control.
+     *
+     * @param aGc Handle for CWindowGc
+     */
+    void PrepareContext( CWindowGc& aGc ) const;
+    
+    /**
+     * Load bitmaps for border.
+     *
+     */
+    void LoadBorderBitmapsL();
+    
+    /**
+     * Load bitmaps for shadows.
+     *
+     */
+    void LoadShadowBitmapsL();
+
+    /**
+     * Load bitmaps for guidelines.
+     *
+     */
+    void LoadGuideLineBitmapsL();
+    
+    /**
+     * Load layouts for borders from LAF.
+     *
+     * @param aVarity Varity for LAF
+     */
+    void LoadBorderLayout( TInt aVarity );
+
+    /**
+     * Load layouts for shadows from LAF.
+     *
+     * @param aVarity Varity for LAF
+     */
+    void LoadShadowLayout( TInt aVarity );
+    
+    /**
+     * Load layouts for guidelines from LAF.
+     *
+     * @param aVarity Varity for LAF
+     */
+    void LoadGuideLineLayout( TInt aVarity );
+
+    /**
+     * Draw borders.
+     *
+     */
+    void DrawBorders( CWindowGc& aGc ) const;
+    
+    /**
+     * Draw shadows.
+     *
+     */
+    void DrawShadows( CWindowGc& aGc ) const;
+
+    /**
+     * Draw guideliens.
+     *
+     */    
+    void DrawGuideLines( CWindowGc& aGc ) const;    
+    
+// From MAknInfoPopupNoteObserver
+    /**
+    * Handles events reported from info popup note.
+    * @param aController The controller that controls the note, from
+    *   where the event originates.
+    * @param aEvent The event.
+    */
+    void HandleInfoPopupNoteEvent( CAknInfoPopupNoteController* aController,
+            TAknInfoPopupNoteEvent aEvent );
+    
+private: // data
+
+    /**
+     * When this timer time out, the inputting of new character is over.
+     * Own.
+     */
+    CPeriodic* iTimeToSave;
+    
+    /**
+     * To control drawing speed
+     * Own.
+     */
+    CPeriodic* iTimeToDrawNext;
+
+    /**
+     * Contain the points need to be drawn on screen
+     * Own
+     */
+    RArray<TPoint> iPointArrayDraw;
+
+    /**
+     * Contain the character model points
+     * Own
+     */
+    RArray<TPoint> iPointArrayModel;
+    
+    /**
+     * Current control state 
+     */
+    TBoxState iBoxState;
+    
+    /**
+     * Observe user's input
+     * Not own
+     */
+    MTruiHwrBoxObserver* iHwrBoxObserver;
+    
+    /**
+     * Use this attribute to count the last animated point
+     * zero implies the first point
+     */
+    TInt iLastAnimatedPoint;
+    
+    /**
+     * Guideline top left point
+     */
+    TPoint iGuideLineTopL;
+    
+    /**
+     * Guideline top right point
+     */
+    TPoint iGuideLineTopR;
+    
+    /**
+     * Guideline bottom left point
+     */
+    TPoint iGuideLineBottomL;
+    
+    /**
+     * Guideline bottom right point
+     */
+    TPoint iGuideLineBottomR;
+    
+    /**
+     * Indicate pen position
+     */
+    TBool iPenInRect;   
+          
+    /**
+     * Flag of training box.
+     */
+    TUint iFlag;
+    
+    /**
+     * Component used to show tooltip
+     * Own.
+     */
+    CAknInfoPopupNoteController* iTooltip;
+    
+    /**
+     * Check if draw bottom guideline.
+     */
+    TBool iBottomGuideLineDisplay;
+    
+    /**
+     * Check if draw bottom guideline.     
+     */    
+    TBool iTopGuideLineDisplay;
+        
+    /**
+     * Pointer array to store pointers to bitmaps of borders
+     * 
+     * Own
+     */    
+    RPointerArray<CFbsBitmap> iBorderBitmaps;
+
+    /**
+     * Pointer array to store pointers to mask bitmaps of borders
+     * 
+     * Own
+     */
+    RPointerArray<CFbsBitmap> iBorderBitmapMasks;
+
+    /**
+     * Array to store pointers to TAknLayoutRect for borders
+     * 
+     * Own
+     */
+    RArray<TAknLayoutRect> iBorderLayout;
+
+
+    /**
+     * Pointer array to store pointers to bitmaps of shadows
+     * 
+     * Own
+     */    
+    RPointerArray<CFbsBitmap> iShadowBitmaps;
+
+    /**
+     * Pointer array to store pointers to mask bitmaps of shadows
+     * 
+     * Own
+     */
+    RPointerArray<CFbsBitmap> iShadowBitmapMasks;
+
+    /**
+     * Array to store pointers to TAknLayoutRect for shadows
+     * 
+     * Own
+     */
+    RArray<TAknLayoutRect> iShadowLayout;
+    
+    /**
+     * Pointer array to store pointers to bitmaps of guideline
+     * 
+     * Own
+     */    
+    RPointerArray<CFbsBitmap> iGuideLineBitmaps;
+
+    /**
+     * Pointer array to store pointers to mask bitmaps of guideline
+     * 
+     * Own
+     */
+    RPointerArray<CFbsBitmap> iGuideLineBitmapMasks;
+
+    /**
+     * Array to store pointers to TAknLayoutRect for guidelines
+     * 
+     * Own
+     */
+    RArray<TAknLayoutRect> iGuideLineLayout;
+    
+    /**
+     * Rect of drawable for trails;
+     * 
+     */
+    TRect iDrawabelRect;
+    
+    /**
+     * Color of pen;
+     * 
+     */
+    TRgb iPenColor;
+    
+    
+    CAknsBasicBackgroundControlContext* iBgContext;
+    
+    TBool iStartSave;
+    };    
+
+#endif // TRAININGUIHWRBOX_H
+
+// end of file
+