diff -r 000000000000 -r eb1f2e154e89 textinput/peninputcommonctrls/inc/peninputbuttons/peninputmultimodebutton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputcommonctrls/inc/peninputbuttons/peninputmultimodebutton.h Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,437 @@ +/* +* 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: Interface of normal button and multidisplay button +* +*/ + + +#ifndef C_CAKNFEPCTRLMULTIMODEBUTTON_H +#define C_CAKNFEPCTRLMULTIMODEBUTTON_H + +// system includes +#include +#include +#include +//#include +#include + +// forward declarations +class TResourceReader; + +struct TAknFepModeIndicator + { + /** + * Range id of button + */ + TInt iRangeId; + + /** + * Real mode(case) of button + */ + TInt iModeId; + + /** + * Permitted or not + */ + TBool iPermitted; + }; + +/** + * Basic functionality for multi display modes graphic buttons + * It provides creation from resource and can react according to SizeChanged Msg + * + * @lib fepcommonctrls.lib + * @since Series 60 release 4.0 + */ +class CAknFepCtrlMultiModeButton : public CAknFepCtrlCommonButton + { +public: + + /** + * Two-phased constructor. + * + * @since S60 v3.2 + * @param aUiLayout An instance of CFepUiLayout + * @param aControlId The control id of input range button + * @return The pointer point to CAknFepCtrlMultiModeButton type object + */ + IMPORT_C static CAknFepCtrlMultiModeButton* NewL(CFepUiLayout* aUiLayout, TInt aControlId, + TAknsItemID aNormalID = KAknsIIDQsnFrFunctionButtonNormal, + TAknsItemID aPressedID = KAknsIIDQsnFrFunctionButtonPressed, + TAknsItemID aInactiveID = KAknsIIDQsnFrFunctionButtonInactive); + + /** + * Two-phased constructor. + * + * @since S60 v3.2 + * @param aUiLayout An instance of CFepUiLayout + * @param aControlId The control id of input range button + * @return The pointer point to CAknFepCtrlMultiModeButton type object + */ + IMPORT_C static CAknFepCtrlMultiModeButton* NewLC(CFepUiLayout* aUiLayout, TInt aControlId, + TAknsItemID aNormalID = KAknsIIDQsnFrFunctionButtonNormal, + TAknsItemID aPressedID = KAknsIIDQsnFrFunctionButtonPressed, + TAknsItemID aInactiveID = KAknsIIDQsnFrFunctionButtonInactive); + + /** + * Destructor. + * + * @since S60 v3.2 + */ + IMPORT_C virtual ~CAknFepCtrlMultiModeButton(); + + /** + * This function creates the button from resource. + * The function will leave if the count of display modes is invalid + * + * @since S60 v3.2 + * @param aReader A Reader which is created against the AKN_FEP_MULTIPLE_IMAGE_BUTTON resource type + * @return None + */ + IMPORT_C void ConstructFromResourceL(TResourceReader& aReader); + + /** + * This function creates button from resource, before calling + * this function, caller should set resource id of button first + * + * @since S60 v3.2 + * @return None + */ + IMPORT_C void ConstructFromResourceL(); + + /** + * Add new display mode to button from resource reader + * + * @since S60 v3.2 + * @param aReader A Reader which is created against the AKN_FEP_BUTTON_IMAGE resource type + * @return None + */ + IMPORT_C void AddModeL(TResourceReader& aReader); + + /** + * Set button to given display mode + * + * @since S60 v3.2 + * @param aType The image type of button, active or nonactive + * @param aModeIndex The index of given display mode + * @return None + */ + IMPORT_C void SetCurrentModeL(const TButtonBmpType aType, const TInt aModeIndex); + + /** + * Get the mode index of next display mode + * + * @since S60 v3.2 + * @return Next display mode of button + */ + IMPORT_C TInt NextMode() const; + + /** + * Set font color for text shown in button + * + * @since S60 v3.2 + * @return None + */ + IMPORT_C void SetFontColor(const TRgb aFontColor); + + /** + * Set shadow font color for text shown in button + * + * @since S60 v3.2 + * @return None + */ + IMPORT_C void SetShadowFontColor(const TRgb aShadowFontColor); + + /** + * This function handles the SizeChanged event, it resizes all images and rects + * + * @since S60 v3.2 + * @param aRect New button extent + * @param aIsReloadImages Whether resize images as well, + * if only the position of the button changed, no need to reset the images as well + * @return Nothing + */ + IMPORT_C void SizeChanged(TRect aRect, TRect aInnerRect = TRect(), + TBool aIsReloadImages = EFalse); + + /** + * This function used to set permitted mode(case) in given range + * + * @since S60 v3.2 + * @param aRangId Range id + * @param aRealCaseId The real case id + * @param aPermit ETrue means permit given range and case, otherwise EFalse + * @return KErrNone if operation successfully, KErrNotSupported otherwise + */ + IMPORT_C TInt SetPermittedModes(const TInt aRangeId, const TInt aRealCaseId, TBool aPermit); + + /** + * This function used to set permitted range, all case in given range will be enable or not + * + * @since S60 v3.2 + * @param aRangId Range id + * @param aPermit ETrue means permit given range, otherwise EFalse + * @return KErrNone if operation successfully, KErrNotSupported otherwise + */ + IMPORT_C TInt SetPermittedRange(const TInt aRangeId, TBool aPermit); + + /** + * Enable all modes + * + * @since S60 v3.2 + * @return None + */ + IMPORT_C void EnableAllModes(); + + /** + * Disable all modes + * + * @since S60 v3.2 + * @return None + */ + IMPORT_C void DisableAllModes(); + + IMPORT_C void DisableOneModes(const TInt aRangeId); + + /** + * Judge if given range supported by this button + * + * @since S60 v3.2 + * @param aRange Given range id + * @return ETrue if given range supported, otherwise EFalse + */ + IMPORT_C TBool IsGivenRangeSupported(const TInt aRange); + + /** + * Set range + * + * @since S60 v3.2 + * @param aRange The given range + * @return KErrNone if operation successfully, otherwise KErrNotSupported + */ + IMPORT_C TInt SetRange(const TInt aRange); + + /** + * Get current active range + * + * @since S60 v3.2 + * @return Current active range if it is permitted, otherwise KErrNotSupported + */ + IMPORT_C TInt CurrentRange() const; + + /** + * Get range of given mode index + * + * @since S60 v3.2 + * @param aModeIndex Index of given mode + * @return Range of given mode if mode exist, otherwise KErrNotSupported + */ + IMPORT_C TInt RangeOfGivenMode(TInt aModeIndex) const; + + /** + * Get real case by given mode index + * + * @since S60 v3.2 + * @param aModeIndex Index of given mode + * @return Real case of given mode index if index valid, otherwise KErrNotFound + */ + IMPORT_C TInt GetRealCaseByMode(TInt aModeIndex) const; + + /** + * Get range list + * + * @since S60 v3.2 + * @param aList Carry the range list on return + * @return None + */ + void GetRangeListL(RArray& aList); + + /** + * Get index of current display mode + * + * @since S60 v3.2 + * @return Index of current display mode of button + */ + inline TInt CurrentMode() const; + + /** + * Get counts of display modes + * + * @since S60 v3.2 + * @return Counts of display modes of button + */ + inline TInt NumberOfModes() const; + + /** + * Set font for text shown in button + * + * @since S60 v3.2 + * @param aFont The font to be set for button + * @return None + */ + inline void SetFont(const CFont* aFont); + + /** + * Set font for text shown in button + * + * @since S60 v3.2 + * @param aShadowFont The font to be set for shadow text on button + * @return None + */ + inline void SetShadowFont(const CFont* aShadowFont); + +protected: + + /** + * C++ default constructor. + */ + IMPORT_C CAknFepCtrlMultiModeButton(CFepUiLayout* aUiLayout, + TInt aControlId, + TAknsItemID aNormalID = KAknsIIDQsnFrFunctionButtonNormal, + TAknsItemID aPressedID = KAknsIIDQsnFrFunctionButtonPressed, + TAknsItemID aInactiveID = KAknsIIDQsnFrFunctionButtonInactive); + + /** + * Judge if image resource of button already exist + * + * @since S60 v3.2 + * @param aResId The image resource id + * @return ETrue if image resource already exist, EFalse otherwise + */ + IMPORT_C TBool ImageAlreadyExist(const TInt32 aResId); + + /** + * Set bitmaps for button according to desired display mode + * + * @since S60 v3.2 + * @param aType The image type for button, can be active or nonactive etc. + * @param aMode The desired display mode index + * @return None + */ + IMPORT_C void SetButtonBmpL(const TButtonBmpType aType , const TInt aMode); + + /** + * Display text for button according to current display mode + * + * @since S60 v3.2 + * @return None + */ + IMPORT_C void DisplayText(); + + /** + * Draws UI + * + * @since S60 v3.2 + * @return None + */ + IMPORT_C void Draw(); + + void ResizeBitmaps(TSize aSize); + +private: + + /** + * Duplicate bitmap + * + * @since S60 v3.2 + * @param aSourceBmp The source bitmap + * @return Pointer to created bitmap + */ + CFbsBitmap* DuplicateBitmapL(CFbsBitmap* aSourceBmp); + + /** + * Transfer bitmap ownship from multimode button to outside. + * + * @since S60 v3.2 + * @param aRemoved The bitmap to be transfered + * @return None + */ + void TransferOwnership(CFbsBitmap* aRemoved); + +private: // data + /** + * Array of foreground bitmaps in different modes + */ + RPointerArray iForegroundBmpList; + /** + * Array of foreground mask bitmaps in different modes + */ + RPointerArray iForegroundMaskBmpList; + /** + * Froground bitmap's position + */ + TRect iForgroundBmpRect; + + + /** + * Array of image resource Id list + */ + RArray iImageResIdList; + + /** + * The index of current display mode + */ + TInt iCurrentMode; + + /** + * The counts of display modes of button + */ + TInt iNumberOfModes; + + /** + * Font of text shown in button + */ + const CFont* iFont; + + /** + * Font of shadow text shown in button + */ + const CFont* iShadowFont; + + /** + * Font color of text shown in button + */ + TRgb iFontColor; + + /** + * Shadow Font color of text shown in button + */ + TRgb iShadowFontColor; + + /** + * Array of text shown on button + */ + RPointerArray iModeTextList; + + /** + * Array of owned bitmap + */ + //RPointerArray iOwnedBitmaps; + + /** + * Array of modes + */ + RPointerArray iModesList; + + /** + * Current bitmap type, active or nonactive + */ + TButtonBmpType iCurrentBmpType; + }; + +#include "peninputmultimodebutton.inl" + +#endif // C_CAKNFEPCTRLMULTIMODEBUTTON_H + +// End Of File