textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h
changeset 0 eb1f2e154e89
child 5 a47de9135b21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,710 @@
+/*
+ * 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:  peninput generic vkb window layout class
+ *
+ */
+
+#ifndef C_PENINPUTSPLITQWERTYWINDOW_H
+#define C_PENINPUTSPLITQWERTYWINDOW_H
+
+// System includes
+#include <peninputlayoutwindowext.h>
+#include <peninputuistatemgrinterface.h>
+#include <AknLayoutDef.h>
+
+// Forward declarations
+class CAknFepCtrlEventButton;
+class CAknFepCtrlDragButton;
+class CAknFepCtrlRepeatButton;
+class CAknFepCtrlCommonButton;
+class CPeninputCommonChoiceList;
+class CPeninputSplitQwertyLafMgr;
+class CPeninputSyncBitmapRotator;
+class CRepository;
+class CFepLayoutScrollableList;
+
+// Constants
+const TInt KMaxFileLength = 80;
+const TInt KMaxRangeLabelLength = 32;
+
+/**
+ * class TAllRangeLabels
+ */
+class TAllRangeLabels
+    {
+public:
+    TBuf<KMaxRangeLabelLength> iLabelNativeChar;
+    TBuf<KMaxRangeLabelLength> iLabelNativeNumber;
+    TBuf<KMaxRangeLabelLength> iLabelLatinChar;
+    TBuf<KMaxRangeLabelLength> iLabelLatinNumber;
+    TBuf<KMaxRangeLabelLength> iLabelSymbol;
+    TBuf<KMaxRangeLabelLength> iLabelAccent;
+    };
+
+/**
+ * class CPeninputSplitQwertyWindow
+ * Main window of IME Split-Qwerty 
+ *
+ *  @lib peninputsplitqwerty.lib
+ *  @since S60 v5.0
+ */
+class CPeninputSplitQwertyWindow : public CPeninputLayoutWindowExt
+    {
+public:
+    /**
+     * Symbian constructor
+     *
+     * @since S60 v5.0
+     * @param aUiLayout The plugin ui layout
+     * @param aLayoutContext The vkb layout context
+     * @return The pointer to CPeninputSplitQwertyWindow object
+     */
+    static CPeninputSplitQwertyWindow* NewL( CFepUiLayout* aUiLayout,
+                                             MPeninputLayoutContext* aLayoutContext,
+                                             MPeninputUiStateMgr* aUiStateMgr );
+
+    /**
+     * C++ destructor
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    virtual ~CPeninputSplitQwertyWindow();
+
+public: //from base class CPeninputLayoutWindowExt
+    /**
+     * From CPeninputLayoutWindowExt
+     * Get id of window config resource
+     *
+     * @since S60 v5.0
+     * @return The id of window config resource
+     */
+    TInt GetWindowConfigResId();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Get id of window resource
+     *
+     * @since S60 v5.0
+     * @return The id of window resource
+     */
+    TInt GetWindowResId();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Get resource id of numeric keymapping
+     *
+     * @since S60 v5.0
+     * @return The id of window resource
+     */
+    TInt GetNumKeymappingResId();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Get file name of window config resource
+     *
+     * @since S60 v5.0
+     * @param aLangID The id of language
+     * @return The file name of window config resource
+     */
+    const TDesC& GetWindowConfigResFileName( TInt aLangID );
+
+    /**
+     * From CPeninputLayoutWindow
+     * Get file name of window resource
+     *
+     * @since S60 v5.0
+     * @return The file name of window resource
+     */
+    const TDesC& GetWindowResFileName();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Change unit size
+     *
+     * @since S60 v5.0
+     * @return The window rect
+     */
+    const TRect ChangeUnitSize();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Change size of client area
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void ChangeClientSize();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Construct all controls specified in resource
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void CreateAllControlsL();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Set control fonts. Fonts info comes from resource
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void SetControlsFont();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Pop up choice list
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void PopupChoiceList();
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Re-organize all controls in the assigned client area layout
+     *
+     * @since S60 v5.0
+     * @param aClientLayoutId The id of client area layout
+     * @return None
+     */
+    void ReorganizeControls( TInt aClientLayoutId, TBool aNeedReset );
+
+    /**
+     * From CPeninputLayoutWindowExt
+     * Do when case changed
+     *
+     * @since S60 v5.0
+     * @param aNewCase The new case
+     * @return None
+     */
+    void DoCaseChange( TInt aNewCase );
+
+public:
+    /**
+     * From CPeninputLayoutWindowExt
+     * Handle control event 
+     *
+     * @since S60 v5.0
+     * @param aEventType The event type
+     * @param aCtrl The control who sends the event
+     * @param aEventData The event data
+     * @return None
+     */
+    void HandleControlEvent( TInt aEventType, CFepUiBaseCtrl* aCtrl,
+                             const TDesC& aEventData );
+
+public:
+    /**
+     * ConstructFromResourceL load settings from resource.
+     * Before calling this function, the resource id should be set
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void ConstructFromResourceL();
+
+    /**
+     * Callback function to do background construction
+     * 
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    static TInt BackgroundTaskL( TAny* aPtr );
+
+    /**
+     * Set current language
+     *
+     * @since S60 v5.0
+     * @param aLang Current language
+     * @return None
+     */
+    void SetSwitchlistLanguage( TInt aLang );
+
+    /**
+     * Set current editor is secret
+     *
+     * @since S60 v5.0
+     * @param aSecret Editor is secret
+     * @return None
+     */
+    void SetSwitchlistSecretFlag( TBool aSecret );
+
+    /**
+     * Dim the arrow keys on qwerty when the editor is findpane or secret editor
+     * 
+     * @since S60 v5.0
+     * @param aSecret Editor is secret
+     * @return None
+     */
+    void DimArrowKeys( TBool aDimArrow );
+
+    /**
+     * Handle accented char event
+     *
+     * @since S60 v5.0
+     * @param aEventType The event type
+     * @param aEventData The event data
+     * @param aDeadKey The DeadKey char buffer
+     * @param anewCharBuf The new Accented buffer
+     * @return None
+     */
+    TBool HandleAccentCharEvent( TInt aEventType, const TDesC& aEventData,
+                                 const TDesC& aDeadKey, HBufC* anewCharBuf );
+
+    /**
+     * Handle virtual key latched event
+     *
+     * @since S60 v5.0
+     * @param aEventType The event type
+     * @param aCtrl The controler
+     * @param aEventData Event data
+     * @return None
+     */
+    void HandleVirtualKeyLatchedEvent( TInt aEventType, CFepUiBaseCtrl* aCtrl, 
+                                       const TDesC& aEventData );
+
+    /**
+     * Handle virtual key up event
+     *
+     * @since S60 v5.0
+     * @param aEventType The event type
+     * @param aCtrl The controler
+     * @param aEventData Event data
+     * @return None
+     */
+    TBool HandleVirtualKeyUpEvent( TInt aEventType, CFepUiBaseCtrl* aCtrl,
+                                   const TDesC& aEventData );
+
+    /*
+     * Set dead key
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void SetDeadKey();
+
+    /**
+     * Unlatch a DeadKey by the key buffer
+     *
+     * @since S60 v5.0
+     * @param abuf The key buffer which will be unlatched
+     * @return None
+     */
+    void UnLatchDeadKey( const TDesC& abuf = KNullDesC );
+
+    /**
+     * Update laf data
+     * 
+     * @since S60 v5.0
+     * @return None
+     */
+    void UpdateLafData();
+
+    /*
+     * Load accent labels for range list
+     *
+     * @since S60 v5.0
+     * @param aLang current language id
+     * @return None
+     */
+    void ConstructAccentListL( TInt aLangId );
+
+    /*
+     * Load range labels for range list
+     *
+     * @since S60 v5.0
+     * @param aLangId current language id
+     * @return None
+     */
+    void ConstructRangeLabelListL( TInt aLangId );
+
+    /**
+     * Show or hide preview bubble
+     * 
+     * @since S60 v5.0
+     * @param aShow ETrue if preview bubble is going to be Shown
+     * @return None
+     */    
+    void ShowBubble( TInt aShow );
+
+    /**
+     * Update state of range button
+     * 
+     * @since S60 v5.0
+     * @return None
+     */
+    void UpdateRangeCtrlsL();
+
+    /**
+     * Update layout position and size
+     * 
+     * @since S60 v5.0
+     * @return None
+     */
+    void UpdateLayoutPosAndSize();
+
+
+protected: //from base class CPeninputLayoutWindowExt
+    /**
+     * Set laf layout type
+     * 
+     * @since S60 v5.0
+     * @param aRows row count 
+     * @param aColumns column count
+     * @return None
+     */
+    virtual void SetLafLayOut( TInt aRows, TInt aColumns );
+
+    /**
+     * Create custom control
+     * 
+     * @since S60 v5.0
+     * @return ETrue if success
+     */
+    virtual TBool CreateCustomControlL( TInt16 aControlId, TInt32 aImageId );
+
+    /**
+     * Add custom control to this group
+     * 
+     * @since S60 v5.0
+     * @param aCtrl a control
+     * @return None
+     */
+    virtual void AddCustomControlGroupL( CFepUiBaseCtrl* aCtrl );
+
+    /**
+     * Set layout size
+     * 
+     * @since S60 v5.0
+     * @return None
+     */
+    void SetVkbLayoutSize();
+
+private:
+    /**
+     * C++ constructor
+     *
+     * @since S60 v5.0
+     * @param aUiLayout The plugin ui layout
+     * @param aLayoutContext The vkb layout context
+     * @return None
+     */
+    CPeninputSplitQwertyWindow( CFepUiLayout* aUiLayout,
+                                MPeninputLayoutContext* aLayoutContext,
+                                MPeninputUiStateMgr* aUiStateMgr );
+
+    /**
+     * Symbian constructor
+     * 
+     * @since S60 v5.0
+     * @return None
+     */
+    void ConstructL();
+    
+private:
+    /**
+     * Add range bar into client area
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void AddRangeBarL();
+
+    /**
+     * Add button to client area
+     *
+     * @since S60 v5.0
+     * @param aControlId The control id
+     * @param aEventId The control's event id
+     * @param aResId The control's resource id
+     * @param aUnicode The control's unicode
+     * @param aIsRepeat The TBool indicating whether the 
+     *        control is repeated or not
+     * @return The pointer to CAknFepCtrlEventButton object
+     */
+    CAknFepCtrlEventButton* AddButtonL( const TInt aControlId,
+                                        const TInt aEventId, 
+                                        const TInt aResId, 
+                                        const TInt aUnicode = 0,
+                                        const TBool aIsRepeat = EFalse );
+
+    /**
+     * Add popup window to display accented char list
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void AddPopupWindowL();
+
+    /**
+     * Reorgnize position and size of function buttons
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void ReorgnizeTitleBar();
+
+    /**
+     * Show range list
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void PopupRangeListL();
+
+    /**
+     * Get resource info of accented chars popup window
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void GetPopupWndInfoFromResL( TResourceReader reader, const TRect& aRect );
+
+    /**
+     * Background constructor
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void DoIdleConstructL();
+
+    /**
+     * Simulate raw event
+     *
+     * @since S60 v5.0
+     * @param aScanCode scan code of key
+     * @param aType event type
+     * @return None
+     */
+    void SimulateRawEvent( TInt aScanCode, TRawEvent::TType aType );
+
+    inline TBool IsRtoLLanguage( TInt aLanguage );
+    inline TBool IsValidLanguage( TInt aLanguage );
+
+    inline CAknFepCtrlEventButton* EventButtonCtrl( TInt aCtrlId );
+    inline CAknFepCtrlCommonButton* CommonButtonCtrl( TInt aCtrlId );
+    TInt IntContext( TPeninputDataType aDataIndex );
+
+    /**
+     * Handle size changed for range list
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void HandlePopupSizeChange();
+
+    /**
+     * Handle dead key event
+     *
+     * @since S60 v5.0
+     * @param aEventType event type
+     * @param aEventData event data
+     * @return ETrue if event is handled
+     */
+    TBool HandleDeadKeyL( TInt aEventType, const TDesC& aEventData );
+
+    /**
+     * Handle resource of button(base on language direction)
+     *
+     * @since S60 v5.0
+     * @param aControlId id of button control
+     * @return None
+     */
+    void HandleButtonResOnLangDirChange( TInt aControlId );
+    void HandleButtonResOnLangDirChangeL( TInt aControlId );
+
+    /**
+     * Handle range list event
+     *
+     * @since S60 v5.0
+     * @return None
+     */
+    void HandleRangeListSelectedL( CFepUiBaseCtrl* aCtrl, const TDesC& aData );
+
+private: // Data
+
+    /**
+     * The vkb extenting control for vkb area
+     * Not own
+     */
+    CPeninputVkbCtrlExt* iVkbCtrl;
+
+    /**
+     * button ctrl: left arrow
+     * Not own
+     */
+    CAknFepCtrlRepeatButton* iArrowLeftButton;
+
+    /**
+     * button ctrl: right arrow
+     * Not own
+     */
+    CAknFepCtrlRepeatButton* iArrowRightButton;
+
+    /**
+     * button ctrl: range
+     * Not own
+     */
+    CAknFepCtrlCommonButton* iRangeButton;
+
+    /**
+     * Range list
+     * Not own
+     */
+    CPeninputCommonChoiceList* iPopupWnd;
+
+    /**
+     * The resource file name
+     */
+    TBuf<KMaxFileLength> iResourceFilename;
+
+    /**
+     * The background bitmap of popup window
+     * Not own
+     */
+    CFbsBitmap* iPopupWndBgImg;
+
+    /**
+     * The focus bitmap of popup window
+     * Not own
+     */
+    CFbsBitmap* iPopupWndFocusImg;
+
+    /**
+     * The UI state manager
+     * Not own
+     */
+    MPeninputUiStateMgr* iUiStateMgr;
+
+    /**
+     * Application window rect
+     */
+    TRect iAppWndRect;
+
+    /**
+     * AO for background task
+     * Own
+     */
+    CIdle* iIdle;
+
+    /**
+     * Whether popup window has been initied
+     */
+    TBool iPopupInited;
+
+    /**
+     * Popup window item rect
+     */
+    TRect iPopupItemRect;
+
+    /**
+     * Choice text layout
+     */
+    TAknTextLineLayout iChoiceTextLayout;
+
+    /**
+     * Whether popup window text property has been set
+     */
+    TBool iPopupSet;
+
+    /**
+     * Array of unit size
+     * Own
+     */
+    RArray<TSize> iUnits;
+
+    /**
+     * Laf data manager
+     * Own
+     */
+    CPeninputSplitQwertyLafMgr* iLafMgr;
+
+    /**
+     * The new DeadKey buffer
+     */
+    TBuf<16> iNewDeadKeyBuf;
+
+    /**
+     * The old DeadKey buffer
+     */
+    TBuf<16> iOldDeadKeyBuf;
+
+    /**
+     * Window layout of preview bubble 
+     */
+    TAknWindowLineLayout iBubbleSize;
+    
+    /**
+     * Text layout of preview bubble 
+     */
+    TAknTextLineLayout iBubbleTextLayout;
+    
+    /**
+     * Flag for first construction
+     */
+    TBool iFirstConstruct;
+
+    /**
+     * Writing language
+     */
+    TInt iLanguage;
+
+    /**
+     * Bitmap rotator
+     * Own
+     */
+    CPeninputSyncBitmapRotator* iBmpRotator;
+
+    /**
+     * Accent commonds for range list
+     * Own
+     */
+    RArray<CFepLayoutChoiceList::SItem> iAccentCmdList;
+
+    /**
+     * Range labels for range list
+     */
+    TAllRangeLabels iRangeLabels;
+
+    };
+
+inline TBool CPeninputSplitQwertyWindow::IsRtoLLanguage( TInt aLanguage )
+    {
+    return ( aLanguage == ELangArabic || aLanguage == ELangHebrew
+            || aLanguage == ELangFarsi || aLanguage == ELangUrdu );
+    }
+
+inline TBool CPeninputSplitQwertyWindow::IsValidLanguage( TInt aLanguage )
+    {
+    return ( aLanguage != ELangTest && aLanguage != ELangNone );
+    }
+
+inline CAknFepCtrlEventButton* CPeninputSplitQwertyWindow::EventButtonCtrl(
+                                                                TInt aCtrlId )
+    {
+    return static_cast<CAknFepCtrlEventButton*> ( Control( aCtrlId ) );
+    }
+
+inline CAknFepCtrlCommonButton* CPeninputSplitQwertyWindow::CommonButtonCtrl(
+                                                                TInt aCtrlId )
+    {
+    return static_cast<CAknFepCtrlCommonButton*> ( Control( aCtrlId ) );
+    }
+
+#endif // C_PENINPUTSPLITQWERTYWINDOW_H