diff -r 000000000000 -r eb1f2e154e89 textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h --- /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 +#include +#include + +// 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 iLabelNativeChar; + TBuf iLabelNativeNumber; + TBuf iLabelLatinChar; + TBuf iLabelLatinNumber; + TBuf iLabelSymbol; + TBuf 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 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 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 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 ( Control( aCtrlId ) ); + } + +inline CAknFepCtrlCommonButton* CPeninputSplitQwertyWindow::CommonButtonCtrl( + TInt aCtrlId ) + { + return static_cast ( Control( aCtrlId ) ); + } + +#endif // C_PENINPUTSPLITQWERTYWINDOW_H