diff -r 000000000000 -r eb1f2e154e89 textinput/peninputcommonctrls/inc/peninputrangebar/peninputrangebar.h --- /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 + +// 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& aRects, + const RArray& 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 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 iCellRects; + RArray iCellInnerRects; + TBool iCellChanged; + }; + +#include "peninputrangebar.inl" + +#endif // C_CAKNFEPCTRLRANGEBAR_H + +// End Of File