javauis/lcdui_akn/lcdui/inc/CMIDUtils.h
branchRCL_3
changeset 19 04becd199f91
child 25 9ac0a0a7da70
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDUtils.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,442 @@
+/*
+* Copyright (c) 2003 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:  ?Description
+*
+*/
+
+
+#ifndef CMIDUTILS_H
+#define CMIDUTILS_H
+
+#include <coecntrl.h>
+#include <gulcolor.h>
+// MMIDUtils interface
+#include <lcdui.h>
+
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+#ifdef RD_JAVA_S60_RELEASE_5_0_IAD
+#include "javaptivariation.h"
+#endif //RD_JAVA_S60_RELEASE_5_0_IAD
+#endif // RD_INTELLIGENT_TEXT_INPUT
+// FORWARD DECLARATIONS
+class CHWRMLight;
+class CHWRMVibra;
+class CMIDUIManager;
+class CMIDKeyDecoder;
+class CMIDMenuHandler;
+
+//#include <dsyenums.h> // contains enums needed by DosSvrServices
+
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+class CPtiEngine;
+class CRepository;
+#endif // RD_INTELLIGENT_TEXT_INPUT
+
+NONSHARABLE_CLASS(CMIDUtils) : public CBase, public MMIDUtils
+{
+    /**
+     * Enumeration defines values for every keyboard type.
+     * Values come from repository:
+     * 0 No Keyboard
+     * 1 Keyboard with 12 key
+     * 2 QWERTY 4x12 layout
+     * 3 QWERTY 4x10 layout
+     * 4 QWERTY 3 x 11 layout
+     * 5 Half QWERTY
+     * 6 Custom QWERTY
+     */
+    enum TKeyboardTypes
+    {
+        ENoKeyboard,
+        EKeyboardWith12Key,
+        EQWERTY4x12Layout,
+        EQWERTY4x10Layout,
+        EQWERTY3x11Layout,
+        EHalfQWERTY,
+        ECustomQWERTY
+    };
+
+    enum TStickyKeyStatus
+    {
+        EKeyNotPressed,
+        EKeyWasPressed,
+        EKeyWasReleased,
+    };
+
+    enum TLockableKeyStatus
+    {
+        EKeyNotActive,
+        EKeyActive,
+        EKeyNotActiveNext,
+        EKeyLocked,
+    };
+
+    // This class is storage for data needed for scaling.
+    class TScalingData
+    {
+    public:
+        inline TScalingData();
+        inline TBool operator==(const TScalingData& aData) const;
+
+        TSize iOriginalSize;
+        TSize iTargetSize;
+        TSize iScreenSize;
+        TSize iCanvasSize;
+        TReal iRatioX;
+        TReal iRatioY;
+    };
+
+public:
+    enum TDirections
+    {
+        EHorizontal,
+        EVertical
+    };
+
+private:
+    class TStickyKeysHandler
+    {
+    public:
+        TStickyKeysHandler();
+        void  Reset();
+        TBool HandleKey(const TKeyEvent& aKeyEvent, TEventCode aType);
+        TInt  Modifiers() const;
+
+    private:
+        void  ResetState();
+        TUint ModifierFromScanCode(TInt aScanCode);
+        TBool IsSticky(const TKeyEvent& aKeyEvent);
+        void HandleLockableKeys(TUint aModifiers);
+        void HandleFnKey();
+        void HandleShiftKey();
+        void AddShiftToStickyModifiers();
+        void AddFnToStickyModifiers();
+        inline TBool IsFnModifierOn(const TUint aModifiers) const;
+        inline TBool IsShiftModifierOn(const TUint aModifiers) const;
+
+    private:
+        TStickyKeyStatus iStickyKeyState;
+        TLockableKeyStatus iFnKeyState;
+        TLockableKeyStatus iShiftKeyState;
+        TInt iLastStickyScanCode;
+        TUint iStickyModifier;
+        TUint iLastKeyModifier;
+        TUint iActualFnModifierValue;
+        TUint iActualShiftModifierValue;
+    };
+
+public:
+    /**
+     * Static method to create MMIDUtils instance
+     * @param aEnv Environment
+     * @param aUIManager Manager
+     * @return MMIDUtils instance
+     *
+     * @since s60
+     */
+    static MMIDUtils* NewL(MMIDEnv& aEnv, CMIDUIManager* aUIManager);
+
+    //
+    // Utility methods used within lcdui plugin
+    //
+    static void MapJavaToETextChars(HBufC* aText,TBool aSupportLineBreaks=ETrue);
+    static void MapETextToJavaChars(HBufC* aText);
+    static TInt GameAction(TInt aKeyCode);
+    static TBool IsStronglyRightToLeft(HBufC* aText);
+    static void Reverse(HBufC* aText);
+    static TBool IgnoreKeyEvent(TUint aKeyEvent);
+    static CFbsBitmap* CopyBitmapL(CFbsBitmap* aSource);
+
+    /**
+     * Scaling of one integer (as height).
+     *
+     * @param aNonScaled A non-scaled value.
+     * @param aDirection A direction of value. Values are in TDirections.
+     * @return A scaled value.
+     *
+     * @since S60 5.0
+     */
+    TInt DoScaling(TInt aNonScaled, TInt aDirection);
+
+    /**
+     * Scaling of TPoint value.
+     *
+     * @param aNonScaled A non-scaled value.
+     * @return A scaled value.
+     *
+     * @since S60 5.0
+     */
+    TPoint DoScaling(TPoint aNonScaled);
+
+    /**
+     * Scaling and positioning of TPoint value.
+     *
+     * @param aNonScaled A non-scaled value.
+     * @return A scaled value.
+     *
+     * @since S60 5.0
+     */
+    TPoint DoScalingAndPositioning(TPoint aNonScaled);
+
+    /**
+     * Scaling of TRect value.
+     *
+     * @param aNonScaled A non-scaled value.
+     * @return A scaled value.
+     *
+     * @since S60 5.0
+     */
+    TRect DoScaling(TRect aNonScaled);
+
+    /**
+     * Scaling and positioning of TRect value.
+     *
+     * @param aNonScaled A non-scaled value.
+     * @return A scaled value.
+     *
+     * @since S60 5.0
+     */
+    TRect DoScalingAndPositioning(TRect aNonScaled);
+
+    /**
+     * Scaling of TSize value.
+     *
+     * @param aNonScaled A non-scaled value.
+     * @return A scaled value.
+     *
+     * @since S60 5.0
+     */
+    TSize DoScaling(TSize aNonScaled);
+
+    /**
+     * Descaling of one integer (as height).
+     *
+     * @param aNonScaled A scaled value.
+     * @param aDirection A direction of value. Values are in TDirections.
+     * @return A original non-scaled value.
+     *
+     * @since S60 5.0
+     */
+    TInt DoDescaling(TInt aNonScaled, TInt aDirection);
+
+    /**
+     * Descaling of TPoint value.
+     *
+     * @param aNonScaled A scaled value.
+     * @return A original non-scaled value.
+     *
+     * @since S60 5.0
+     */
+    TPoint DoDescaling(TPoint aNonScaled);
+
+    /**
+     * Descaling and position to originalposition of TPoint value.
+     *
+     * @param aNonScaled A scaled value.
+     * @return A original non-scaled value.
+     *
+     * @since S60 5.0
+     */
+    TPoint DoDescalingAndPositioning(TPoint aNonScaled);
+
+    /**
+     * Descaling of TRect value.
+     *
+     * @param aNonScaled A scaled value.
+     * @return A original non-scaled value.
+     *
+     * @since S60 5.0
+     */
+    TRect DoDescaling(TRect aNonScaled);
+
+    /**
+     * Descaling and position to originalposition of TRect value.
+     *
+     * @param aNonScaled A scaled value.
+     * @return A original non-scaled value.
+     *
+     * @since S60 5.0
+     */
+    TRect DoDescalingAndPositioning(TRect aNonScaled);
+
+    /**
+     * Descaling of TSize value.
+     *
+     * @param aNonScaled A scaled value.
+     * @return A original non-scaled value.
+     *
+     * @since S60 5.0
+     */
+    TSize DoDescaling(TSize aNonScaled);
+
+    /**
+     * Reset of iScalingData
+     *
+     * @since S60 5.0
+     */
+    void ResetScalingData();
+
+    /**
+     * @return ETrue if aChar is one of the following characters: 0x0a, 0x0d, 0x2028
+     */
+    static TBool IsLineSeparator(const TText aChar);
+
+    //
+    // From MMIDUtils
+    //
+    TBool PlaySound(TInt aType);
+    //
+    // key utils
+    TBool IsJavaKey(TInt aScanCode);
+    TInt  MapNonUnicodeKey(TUint aScanCode);
+    void  GetKeyName(TDes& aText,TInt aKeyCode);
+    TInt  GetKeyCode(TInt aGameAction);
+    TInt  GetGameAction(TInt aKeyCode);
+    TBool HasPointerEvents();
+    TBool HasPointerMotionEvents();
+    TBool HasRepeatEvents();
+    void GetKeyboardTypeName(TDes* aText);
+    TInt GetKeyScanCode();
+    void SetLastKeyEvent(const TKeyEvent& aEvent);
+    TInt GetKeyModifier();
+    void MappingDataForKey(TKeyEvent& aEvent, TEventCode aType);
+    void HandleResourceChangedL();
+    void HandleForegroundL(TBool aForeground);
+    //
+    // Display utils
+    TBool FlashBacklightL(const TTimeIntervalMicroSeconds32& aDuration);
+    TBool Vibrate(const TTimeIntervalMicroSeconds32& aDuration);
+    TInt Color(TColorType aColorSpecifier);
+    TGraphicsType BorderStyle(TBool aHighlighted);
+    TSize BestImageSize(TImageType aImageType) const;
+    //
+    // Font utils
+    SFontSpec FontSpecifierSpecs(MMIDFont::TFontSpecifier aSpecifier);
+    //
+    // Destruction
+    inline void Dispose();
+    //
+
+private:
+    /**
+     * Ctor
+     * @param aEnv Environment
+     * @param aUIManager Manager
+     *
+     * @since s60
+     */
+    CMIDUtils(MMIDEnv& aEnv, CMIDUIManager* aUIManager);
+
+    ~CMIDUtils();
+    void ConstructL();
+
+    //
+    TBool HasPen();
+    TBool HasMouse();
+
+    /**
+     * Gets a sizes neeeded for futher function of scaling functions.
+     *
+     * @return Initialized instance of TScalingData with actual content.
+     *
+     * @since S60 5.0
+     */
+    CMIDUtils::TScalingData GetScalingData();
+
+    void UpdateStickyKeyFlags(const TKeyEvent& aKeyEvent);
+    void UpdatePTIEngineStatusL();
+
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+#ifdef RD_JAVA_S60_RELEASE_5_0_IAD
+    void CallToJavaPtiVariationL(TInt aType);
+#endif //RD_JAVA_S60_RELEASE_5_0_IAD    
+#endif //RD_INTELLIGENT_TEXT_INPUT
+
+private:
+    MMIDEnv* iEnv;
+
+    // Light Client API, owned
+    CHWRMLight* iLight;
+
+    // Vibra API, owned
+    CHWRMVibra* iVibra;
+    CMIDUIManager* iUIManager;
+    CMIDKeyDecoder* iKeyDecoder;
+
+    TScalingData iScalingData;
+
+
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+    /**
+     * Predictive text input engine for canvas low level key events.
+     * Own.
+     */
+    CPtiEngine* iPtiEngine;
+
+    /**
+     * Acces to a repository ( Fep input txt lang )
+     * Own.
+     */
+    CRepository* iRepository;
+
+#ifdef RD_JAVA_S60_RELEASE_5_0_IAD
+    RLibrary iPtiSupportLib;
+#endif //RD_JAVA_S60_RELEASE_5_0_IAD
+
+#endif // RD_INTELLIGENT_TEXT_INPUT
+
+    TInt iQwertyMode;
+
+    TInt iStickyKey;
+
+    // Stores value of the scan code of the latest key event.
+    // Value is used for com.nokia.key.scancode system property.
+    TInt iLastScanCode;
+
+    TInt iModifier;
+
+    TStickyKeysHandler iStickyHandler;
+
+    // Instace of menu handler. Needed for scaling. Not owned.
+    CMIDMenuHandler* iMenuHandler;
+};
+
+inline void CMIDUtils::Dispose()
+{
+    delete this;
+}
+
+inline CMIDUtils::TScalingData::TScalingData(): iOriginalSize(),
+        iTargetSize(),
+        iScreenSize(),
+        iCanvasSize(),
+        iRatioX(1.0f),
+        iRatioY(1.0f)
+{}
+
+inline TBool CMIDUtils::TScalingData::operator==(const TScalingData& aData) const
+{
+    if (iOriginalSize == aData.iOriginalSize
+            && iTargetSize == aData.iTargetSize
+            && iScreenSize == aData.iScreenSize
+            && iCanvasSize == aData.iCanvasSize
+            && iRatioX == aData.iRatioX
+            && iRatioY == aData.iRatioY)
+    {
+        return ETrue;
+    }
+    return EFalse;
+}
+
+#endif // CMIDUTILS_H