--- /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 <AknsConstants.h>
+#include <peninputlayoutbasecontrol.h>
+#include <peninputlayoutbutton.h>
+//#include <peninputbutton.h>
+#include <peninputcommonbutton.h>
+
+// 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<TInt>& 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<CFbsBitmap> iForegroundBmpList;
+ /**
+ * Array of foreground mask bitmaps in different modes
+ */
+ RPointerArray<CFbsBitmap> iForegroundMaskBmpList;
+ /**
+ * Froground bitmap's position
+ */
+ TRect iForgroundBmpRect;
+
+
+ /**
+ * Array of image resource Id list
+ */
+ RArray<TInt32> 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<HBufC> iModeTextList;
+
+ /**
+ * Array of owned bitmap
+ */
+ //RPointerArray<CFbsBitmap> iOwnedBitmaps;
+
+ /**
+ * Array of modes
+ */
+ RPointerArray<TAknFepModeIndicator> iModesList;
+
+ /**
+ * Current bitmap type, active or nonactive
+ */
+ TButtonBmpType iCurrentBmpType;
+ };
+
+#include "peninputmultimodebutton.inl"
+
+#endif // C_CAKNFEPCTRLMULTIMODEBUTTON_H
+
+// End Of File