textinput/peninputcommonctrls/inc/peninputrangebar/peninputrangebar.h
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/inc/peninputrangebar/peninputrangebar.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,616 @@
+/*
+* Copyright (c) 2002-2005 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:  Control group of different input ranges
+*
+*/
+
+
+#ifndef C_CAKNFEPCTRLRANGEBAR_H
+#define C_CAKNFEPCTRLRANGEBAR_H
+
+// system includes
+#include <peninputlayoutctrlgroup.h>
+
+// forward declarations
+class CFbsBitmap;
+class TResourceReader;
+class CAknFepCtrlButton;
+class CAknFepCtrlCommonButton;
+// class declaration
+/**
+ *  This is the class definition for control group of different
+ *  input ranges
+ *
+ *  @lib fepcommonctrls.lib
+ *  @since S60 v3.2
+ */
+class CAknFepCtrlRangeBar : public CControlGroup , public MEventObserver
+    {
+public:
+
+    /**
+     * Style of range bar, can be horizontal or vertical
+     */
+    enum TButtonGroupStyle
+        {
+        EBtnGroupHorizontal,
+        EBtnGroupVertical
+        }; 
+
+    /**
+     * Action style of range bar, can be hide or highlight
+    */
+    enum TRangeBarActionStyle
+        {
+        ERangeBarActionStyleHide,     // all indicators action style are unitary: hide
+        ERangeBarActionStyleHighLight, // all indicators action style are unitary: highlight
+        ERangeBarUsingIndicatorStyle // every indicator can have different action style
+        }; 
+
+    /**
+     * Action style of indicator, can be hide or visible
+     * for using indicaotr action style, every indicator's position is fixed
+     */
+    enum TIndicatorActionStyle
+        {
+        EIndicatorActionStyleHide, // hide
+        EIndicatorActionStyleHighLight, // visible and highlight
+        EIndicatorActionStyleNormal // just like normal button press, highlight not latched
+        };
+
+    /**
+     * Two-phased constructor.
+     *
+     * @since S60 v3.2
+     * @param aUiLayout An instance of CFepUiLayout
+     * @param aUtils An instance of the resource environment
+     * @param aControlId The control id of the Range Bar
+     * @param aStyle The style of Range Bar, can be vertical or horizontal
+     * @return The pointer point to CAknFepCtrlRangeBar type object
+     */
+    IMPORT_C static CAknFepCtrlRangeBar* NewL(CFepUiLayout* aUiLayout, 
+                                              TInt aControlId , 
+                                              TButtonGroupStyle aStyle);
+    
+    /**
+     * Two-phased constructor.
+     *
+     * @since S60 v3.2
+     * @param aUiLayout An instance of CFepUiLayout
+     * @param aUtils An instance of the resource environment
+     * @param aControlId A control id of the Range Bar
+     * @param aStyle the style of Range Bar, can be vertical or horizontal     
+     * @return The pointer point to CAknFepCtrlRangeBar type object
+     */
+    IMPORT_C static CAknFepCtrlRangeBar* NewLC(CFepUiLayout* aUiLayout, 
+                                               TInt aControlId , 
+                                               TButtonGroupStyle aStyle);            
+
+    /**
+     * Destructor.
+     *
+     * @since S60 v3.2
+     */
+    IMPORT_C virtual ~CAknFepCtrlRangeBar();
+
+    /**
+     * This function creates the Range Bar from resource type AKN_FEP_INPUTRANGE_LIST.
+     * The function will leave if the count of input ranges is invalid
+     *
+     * @since S60 v3.2
+     * @param aReader A resource reader against AKN_FEP_INPUTMODE_LIST
+     * @return None
+     */
+    IMPORT_C void ConstructFromResourceL(TResourceReader& aReader);
+
+    /**
+     * Refresh the curent Mode Control aera
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    IMPORT_C void RefreshUI();
+
+    /**
+     * Handles the SizeChanged event
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    IMPORT_C void SizeChanged(const TRect aRect);
+
+    /**
+     * Set active input range
+     *
+     * @since S60 v3.2
+     * @param aRange A specified input range
+     * @return ETrue if given input range set successfully, EFalse otherwise
+     */
+    IMPORT_C TBool SetRange(const TInt aRange);
+        
+    /**
+     * Set mode of given range
+     *
+     * @since S60 v3.2
+     * @param aRange A specified input range
+     * @param aModeIndex The mode index in given range
+     * @return None
+     */
+    IMPORT_C void SetCaseL(const TInt aRange, const TInt aModeIndex);
+        
+    /**
+     * Set permitted input ranges
+     *
+     * @since S60 v3.2
+     * @param aPermitted Used to decide which input ranges permitted
+     * @return None
+     */
+    IMPORT_C void SetPermittedRanges(const TInt aPermitted);
+
+    /**
+     * Permit given range or not
+     *
+     * @since S60 v3.2
+     * @param aRangeId The range id of given range
+     * @param aPermit Used to enable given range or not
+     * @return None
+     */
+    IMPORT_C void SetPermittedRange(const TInt aRangeId, TBool aPermit);
+
+    /**
+     * Permit given range & case or not
+     *
+     * @since S60 v3.2
+     * @param aRangeId The range id of given range
+     * @param aRealCaseId The real case id in given range
+     * @param aPermit Used to enable given range & case or not
+     * @return None
+     */
+    IMPORT_C void SetPermittedCase(const TInt aRangeId,
+                                   const TInt aRealCaseId,
+                                   TBool aPermit);
+
+    /**
+     * Hide given range, used when whole rangebar's actions tyle is 
+     * hide or highlight
+     *
+     * @since S60 v3.2
+     * @param aRange Given input range to be hide
+     * @return KErrNone if the button represent given range hided successfully, 
+     * otherwise system wide error codes
+     */
+    IMPORT_C void HideRange(const TInt aRange);
+
+    /**
+     * Hide given range, function only used when whole range bar's action
+     * style is using indicator style
+     *
+     * @since S60 v3.2
+     * @param aRange Given input range to be hide
+     * @return None 
+     */
+    IMPORT_C void HideRangeUsingIndicatorStyle(const TInt aRange);
+
+    /**
+     * Show given range, used when whole rangebar's action style is 
+     * hide or highlight
+     *
+     * @since S60 v3.2
+     * @param aRange Given range to be shown
+     * @return None
+     */
+    IMPORT_C void ShowRange(const TInt aRange);
+
+    /**
+     * Show given range, function only used when whole range bar's action
+     * style is using indicator style
+     *
+     * @since S60 v3.2
+     * @param aRange Given range to be shown
+     * @return None
+     */
+    IMPORT_C void ShowRangeUsingIndicatorStyle(const TInt aRange);
+        
+    /**
+     * Add new input range
+     *
+     * @since S60 v3.2
+     * @param aReader Given resource reader for new input range
+     * @return None
+     */
+    IMPORT_C void AddRangeL(TResourceReader& aReader);        
+        
+    /**
+     * Get current real case of given Range
+     *
+     * @since S60 v3.2
+     * @param aRange Given range
+     * @return Current real case of given range
+     */
+    IMPORT_C TInt GetCase(TInt aRange) const;
+
+    /**
+     * Set font of range bar, this function should be called
+     * by container of range bar
+     *
+     * @since S60 v3.2
+     * @param aFont The font to be set for range bar
+     * @return None
+     */
+    IMPORT_C void SetFont(const CFont* aFont);
+
+    /**
+     * Move range bar according to offset
+     *
+     * @since S60 v3.2
+     * @param aOffset The moving offset
+     * @return None
+     */
+    IMPORT_C void Move(const TPoint& aOffset);
+
+    /**
+     * Set event id which will be sent out when range button is click
+     *
+     * @since S60 v3.2
+     * @param aEventId the event id
+     * @return None
+     */
+    IMPORT_C void SetEventIdForRange(TInt aEventId);
+    
+    /**
+     * Set event id which will be sent out when case button is click
+     *
+     * @since S60 v3.2
+     * @param aEventId the event id
+     * @return None
+     */
+    IMPORT_C void SetEventIdForCase(TInt aEventId);
+
+    /**
+     * Display all ranges whether it is IsHide
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    IMPORT_C void ShowAllRanges();
+    
+    /**
+     * DrawRangeBar
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    IMPORT_C void Draw();
+
+    /**
+     * SetActionStyle
+     *
+     * @since S60 v3.2
+     * @param aActionStyle action style
+     * @return None
+     */
+    IMPORT_C void SetActionStyle(TRangeBarActionStyle aActionStyle);
+
+    /**
+     * ActiveRange
+     *
+     * @since S60 v3.2
+     * @param aRange range to be activated
+     * @return None
+     */
+    IMPORT_C void ActiveRange(TInt aRange);
+        
+    /**
+     * Get the current input range
+     *
+     * @since S60 v3.2
+     * @return Current Input Range
+     */
+    inline TInt InputRange() const;    
+
+    /**
+     * Set display style of range bar
+     *
+     * @since S60 v3.2
+     * @param aNewStyle The style of range bar, can be vertical or horizontal
+     * @return None
+     */
+    inline void SetStyle(const TButtonGroupStyle aNewStyle);        
+        
+    /**
+     * Get display style of range bar
+     *
+     * @since S60 v3.2
+     * @return Current display style of range bar
+     */
+    inline TInt Style() const;
+ 
+    /**
+     * Set layout rect of range bar, this function should be called
+     * by container of range bar
+     *
+     * @since S60 v3.2
+     * @param aRect The layout rect to be set for range bar
+     * @return None
+     */
+    inline void SetCellRect(const TRect aRect);
+
+    /**
+     * Set display cell rects
+     *
+     * @since S60 v3.2 
+     * @return None
+     */
+    IMPORT_C void SetDispalyCellRectsL( const RArray<TRect>& aRects,
+    						  			const RArray<TRect>& aInnerRects ); 
+
+    
+protected:
+
+    /**
+     * From MEventObserver.
+     * Handle event
+     *
+     * @since S60 v3.2
+     * @param aEventType The event type
+     * @param aCtrl The pointer points to control who sends event
+     * @param aEventData The event data
+     * @return None
+     */
+    IMPORT_C void HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl, 
+                                     const TDesC& aEventData);
+        
+    /**
+     * C++ default constructor.
+     *
+     * @since S60 v3.2
+     * @param aUiLayout An instance of CFepUiLayout
+     * @param aControlId The control id of the Range Bar
+     * @param aStyle The style of Range Bar, vertical or horizontal
+     */
+    IMPORT_C CAknFepCtrlRangeBar(CFepUiLayout* aUiLayout, TInt aControlId, 
+                                 TButtonGroupStyle aStyle);
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     *
+     * @since S60 v3.2
+     * @param aUtils An instance of the resource environment
+     * @return None
+     */
+    IMPORT_C void ConstructL();
+    
+    /**
+     * handle pointer down event.
+     *
+     * @since S60 v3.2
+     * @param aPoint 
+     * @return control
+     */
+    virtual CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+public: // data
+
+    /**
+     * Position of the default indicator
+     */
+    TRect iIndicatorRect;
+    
+protected: // data
+
+    /**
+     * This class declares the range indicator
+     * Purpose of this class is to save some information for each indicator
+     *
+     * @since S60 v3.2
+     */  
+    class TAknFepRangeIndicator
+        {
+    public: // data
+        /**
+         * Control type of button
+         */
+        TInt iCtrlType;
+  
+        /**
+         * Id of the input range
+         */
+        TInt iInputRange;    
+        
+        /**
+         * Type of input range, used to judge if it is mixed
+         */
+        TInt iRangeType;
+            
+        /**
+         * control Id of button
+         */
+        TInt iCtrlId;
+            
+        /**
+         * Is button that represent iInputRange hided
+         */
+        TBool iIsHide;
+            
+        /**
+         * Pointer to the indicator button (Own)
+         */
+        CAknFepCtrlCommonButton* iIndicator;
+        
+        /**
+         * Indicator action style,
+         * value from TIndicatorActionStyle
+         */
+        TInt iActionStyle;
+
+        /**
+         * Indicator position index in cellrects list 
+         * only meaningful when whole action style is 
+         * ERangeBarUsingIndicatorStyle
+         */
+        TInt iPosIdx;
+        }; 
+
+private:
+
+    /**
+     * Set layout rect of whole range bar
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    void SetWholeRect();
+    
+    /**
+     * Get number of input ranges hided
+     *
+     * @since S60 v3.2 
+     * @return Number of hided input ranges
+     */
+    TInt NumOfHidedRange();
+    
+    /**
+     * Judge if button in given index has mixed range
+     *
+     * @since S60 v3.2 
+     * @param aIndex Given index
+     * @return ETrue if given index has mixed range, otherwise EFalse
+     */
+    TBool IsMixedRange(const TInt aIndex);
+    
+    /**
+     * Report range or mode change event to observer
+     *
+     * @since S60 v3.2 
+     * @param aEventId the event id
+     * @param aEventData the event data
+     * @return None
+     */
+    void ReportEventToObserver(const TInt aEventId, const TInt aEventData);
+    
+    /**
+     * Set new position to sub controls
+     *
+     * @since S60 v3.2 
+     * @return None
+     */
+    void SetIndicatorRect();
+    
+    /**
+     * update new position to sub controls
+     * this function used when indicator's rect get from cell rects list
+     * and whole range bar's action style is highlight or hide
+     *
+     * @since S60 v3.2 
+     * @return None
+     */
+    void UpdateIndicatorRect( TBool aUpdateImage );
+
+    /**
+     * update new position to sub controls
+     * this function only used when indicator's rect get from cell rects list, 
+     * and whole range bar's action style is using indicator style, every 
+     * indicator's position is fixed
+     *
+     * @since S60 v3.2 
+     * @return None
+     */
+    void UpdateIndicatorRectForUsingIndicatorStyle(TBool aUpdateImage);
+
+    /**
+     * Get indicator index by given range
+     *
+     * @since S60 v3.2 
+     * @return Indicator index
+     */
+    TInt IndicatorIdxByRange(TInt aRange);
+
+    /**
+     * this function only used when indicator's rect get from cell rects list, 
+     * and whole range bar's action style is using indicator style, and indicator
+     * to be hiden is using hide action style
+     *
+     * @since S60 v3.2 
+     * @param aIdx Indicator index to be hiden
+     * @param aHide Whether hide or show indicator
+     * @return None
+     */
+    void HideRangeForHidingIndicatorStyle(TInt aIdx, TBool aHide);
+
+private: // data
+
+    /**
+     * Array of input range indicators
+     */
+    RPointerArray<TAknFepRangeIndicator> iIndicators;
+        
+    /**
+     * Current active input range
+     */
+    TInt iInputRange;       
+        
+    /**
+     * A rect used to erase the screen
+     */
+    TRect iEraseRect;
+    
+    /**
+     * Style of range bar
+     */
+    TButtonGroupStyle iStyle;
+
+    /**
+     * Current font of range bar
+     */
+    const CFont* iFont;
+    
+    /**
+     * event id for range button click
+     */
+    TInt iEventIdForRange;
+    
+    /**
+     * event id for case button click
+     */
+    TInt iEventIdForCase;
+    
+    /**
+     * Whether resize images as well, 
+     * if only the position of the button changed, 
+     * no need to reset the images as well
+     */
+    TBool iIsReloadImages;
+
+    /**
+     * action style
+     */
+    TRangeBarActionStyle iActionStyle;
+    
+    /**
+     * First time construct flag
+     */
+    TBool iFirstTimeConstruct;
+    
+    /**
+     * Rangebar cell rect
+     */
+    RArray<TRect> iCellRects;
+    RArray<TRect> iCellInnerRects;
+    TBool iCellChanged;
+    };
+
+#include "peninputrangebar.inl"
+
+#endif // C_CAKNFEPCTRLRANGEBAR_H
+            
+// End Of File