# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1282202125 -10800 # Node ID ac7e4d1d92097845493b90f0db06ddabac1beba1 # Parent b1ea1642412e482dd9a23ea39543a32b11e1c015 Revision: 201031 Kit: 201033 diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -36,12 +36,15 @@ #include #include #include -#include +#include +#include #include "AknFepPredictiveSettingList.h" #include "AknFepPredictiveSettingData.h" #include "AknFepPredictiveSettingDialog.h" +const TInt KFSQMode = 2; + CAknFepMultiSelectionSettingItem::CAknFepMultiSelectionSettingItem ( TInt aResourceId, CAknFepPredictiveSettingData &aData, CCoeEnv* aCoeEnv ) : CAknBigSettingItemBase(aResourceId), iData(aData), iCoeEnv(aCoeEnv) @@ -289,37 +292,56 @@ switch (aIdentifier) { case EAknFepCmdPredAutoComplSetting: + { settingItem = new (ELeave) CAknBinaryPopupSettingItem ( aIdentifier, iSettingsData.AutoWordCompl()); if(DeviceHasMultipleKeyboards()) { settingItem->SetHidden(ETrue); } + } break; case EAknFepCmdPredAutoComplMultiSetting: + { settingItem = new (ELeave) CAknFepMultiSelectionSettingItem ( aIdentifier, iSettingsData, iCoeEnv ); if(!DeviceHasMultipleKeyboards()) { settingItem->SetHidden(ETrue); } + } break; case EAknFepCmdPredNumberCandidateSetting: + { settingItem = new (ELeave) CAknBinaryPopupSettingItem ( aIdentifier, iSettingsData.NumberCandidates()); - if(keyboardLayout == EPtiKeyboard12Key || keyboardLayout == EPtiKeyboardHalfQwerty) + + TInt dialogState = 0; + RProperty::Get( KPSUidAknFep, KAknFepSettingDialogState, dialogState ); + //Remove Number Candidate item from setting dialog + if ( dialogState == KFSQMode || + keyboardLayout == EPtiKeyboard12Key || + keyboardLayout == EPtiKeyboardHalfQwerty) + { + // When dialog state is 2, it means that the setting dialog is opened + // for virtual qwerty keyboard settingItem->SetHidden(ETrue); + } + } break; case EAknFepCmdPredTypingCorrectionSetting: + { settingItem = new (ELeave) CAknEnumeratedTextPopupSettingItem ( aIdentifier, iSettingsData.TypingCorrection()); // Disabled for ITU-T if(keyboardLayout == EPtiKeyboard12Key || keyboardLayout == EPtiKeyboardHalfQwerty) settingItem->SetHidden(ETrue); + } break; case EAknFepCmdPredPrimaryCandidateSetting: + { settingItem = new (ELeave) CAknBinaryPopupSettingItem ( aIdentifier, iSettingsData.PrimaryCandidate()); @@ -327,6 +349,7 @@ if(keyboardLayout == EPtiKeyboardHalfQwerty || keyboardLayout == EPtiKeyboard12Key) settingItem->SetHidden(ETrue); + } break; default: break; diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -79,7 +79,15 @@ { underlyingEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; } - } + } + else if (FeatureManager::FeatureSupported(KFeatureIdKorean)) + { + // Use the special sct resource file for Korean variant. + if (!underlyingEditorSCTResId || underlyingEditorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG) + { + underlyingEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN; + } + } else if (!underlyingEditorSCTResId) { underlyingEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG; diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/conf/aknfep.confml Binary file fep/aknfep/conf/aknfep.confml has changed diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/conf/aknfep_101F876D.crml Binary file fep/aknfep/conf/aknfep_101F876D.crml has changed diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/inc/AknFepLanguageManager.h --- a/fep/aknfep/inc/AknFepLanguageManager.h Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/inc/AknFepLanguageManager.h Thu Aug 19 10:15:25 2010 +0300 @@ -55,6 +55,7 @@ class RPeninputServer; class TImePlguinImplDetail; class CAknFepPluginManager; +class CAknFepSharedDataInterface; /** * CAknFepLanguageManager is a part of Japanese FEP. @@ -84,8 +85,10 @@ * @param aCaseMan * @param aLanguage */ - static CAknFepLanguageManager* NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan); + static CAknFepLanguageManager* NewL( MAknFepManagerUIInterface* aFepMan, + CAknFepCaseManager* aCaseMan, + CAknFepSharedDataInterface* aSharedData = NULL ); + /** * Destructor. @@ -187,8 +190,9 @@ * * @since 2.6 */ - CAknFepLanguageManager(MAknFepManagerUIInterface* aFepManager, - CAknFepCaseManager* aCaseManager); + CAknFepLanguageManager( MAknFepManagerUIInterface* aFepManager, + CAknFepCaseManager* aCaseManager, + CAknFepSharedDataInterface* aSharedData = NULL ); /** * Second phase construction @@ -258,6 +262,12 @@ * @since S60 v3.2 */ TBool iIsSplitView; + + /** + * Shared data manager + */ + CAknFepSharedDataInterface* iSharedData; + }; inline CAknFepPenInputImePlugin* CAknFepLanguageManager::CurrentImePlugin() diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/inc/AknFepManager.h --- a/fep/aknfep/inc/AknFepManager.h Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/inc/AknFepManager.h Thu Aug 19 10:15:25 2010 +0300 @@ -131,6 +131,7 @@ }; const TInt KChrKeyMultitapTimeout = 1000000; +const TInt KFnKeyLongPressTimeout = 600000; /** * Translates ET9Eng language codes into localised descriptors and command Id's */ @@ -1364,6 +1365,32 @@ * @return none */ void SetChangeModeByShiftAndSpace( TBool aFlag ); + + /** + * Handle the Fn Key Monitor + * + * @since 3.0 + * @return KErrNone if succeed, KErrDied if failed + */ + static TInt HandleFnKeyPressMonitorCallback(TAny* aObj); + + /** + * Handle the Fn Key Monitor + * for Qwerty only. + * + * @since 3.0 + */ + void HandleFnKeyPressMonitor(); + + /** + * Activate fn key press monitor to detect long pressing event + */ + void ActivateFnkeyPressMonitor(); + + /** + * Deactivate fn key press monitor + */ + void DeactivateFnkeyPressMonitor(); public: //Hash Key Manager Interface @@ -2836,7 +2863,12 @@ * when rotating the screen, we need to consider it, e.g V-ITUT to FSQ */ TBool iMatchesListLaunched; - + + /** + * monitor the long press event from Fn key + * when long press event occurs, Fn key will be set to Lock state + */ + CPeriodic* iFnKeypressMonitor; public: @@ -2895,6 +2927,10 @@ * @param aCallback, the callback when the timer expires */ void MultitapThroughSCTCharL(TCallBack aCallBack); + /** + * Notify mfne editor to toggle AM or PM for 12-hour time + */ + void ChangeMfneAmPm(); private: TBool NumericResourceMultiTapTimerTimeoutL(); diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/inc/AknFepManagerUIInterface.h --- a/fep/aknfep/inc/AknFepManagerUIInterface.h Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/inc/AknFepManagerUIInterface.h Thu Aug 19 10:15:25 2010 +0300 @@ -401,6 +401,13 @@ * An editor of unlimited length will return its maximum size as zero */ virtual TBool EditorHasFreeSpace( TInt aNumberOfCharacter = 0 ) const = 0; + + /** + * Check whether the editor is a Java number editor + * Return ETrue if the editor is a Java number editor + */ + virtual TBool IsSpecialNumericEditor() = 0; + virtual void RedecorateAfterDeletionL( const TDesC& aTextThatWasDeleted ) = 0; diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/inc/AknFepPluginManager.h --- a/fep/aknfep/inc/AknFepPluginManager.h Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/inc/AknFepPluginManager.h Thu Aug 19 10:15:25 2010 +0300 @@ -448,6 +448,24 @@ */ void RemoveLastFocusedWinFromOpenList(); + /** + * Set the editor pointer to NULL + * + * @since v5.0 + * @param none + * @return void + */ + void ClearDestroyedEditorPointer(); + + /** + * Get the editor state + * + * @since v5.0 + * @param none + * @return the pointer of editor state + */ + CAknEdwinState* EdwinState(); + public: // inline /** @@ -758,6 +776,24 @@ void InformMfneUiStatusL( TBool aOpened ); + /** + * Update editor state according to current ui state + * + * @since Symbian^3 + * @param aOpened specifies current ui is opened or closed + */ + void SetEdwinFlagsByUiStatus( TBool aOpened ); + + /** + * Update state flags of specified editor + * + * @since Symbian^3 + * @param aEdwin specifies the editor to be updated + * @param aFlags editor state flags + * @param aSet ETrue to add flags, or EFalse to remove flags. + */ + void SetAknEdwinFlags( MCoeFepAwareTextEditor* aEdwin, TInt aFlags, TBool aSet ); + void UpdatePredicState(); TBool NotifyInGlobalNoteEditorL(); @@ -856,6 +892,14 @@ * @CAknFepUiInterfaceMenuPane* aMenuPane The menu pane used to add more menu items */ void InitMenuItemForArabicFingerHwrL(CAknFepUiInterfaceMenuPane* aMenuPane); + + /** + * andling the menu cmd for changing the input mode + * + * @param aInputMode: the inputmode should be activate + * @return None + */ + void ProcessChangingInputModeCmdL(TInt aInputMode); private: // Data @@ -1030,6 +1074,13 @@ TBool iLaunchHelp; TInt iCurPermittedModes; MCoeFepAwareTextEditor* iMfne; + + /** + * current focused editor + * not own + */ + MCoeFepAwareTextEditor* iEdwin; + TBool iMfneChanged; TBool iIsInEditWordQueryDlg; @@ -1083,6 +1134,11 @@ TBool iLaunchSCTInSpell; TBool iFocuschangedForSpellEditor; + + /** + * Indicate whether portrait FSQ feature is enabled + */ + TBool iPortraitFSQEnabled; }; class CConnectAo : public CActive diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/inc/AknFepSharedDataInterface.h --- a/fep/aknfep/inc/AknFepSharedDataInterface.h Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/inc/AknFepSharedDataInterface.h Thu Aug 19 10:15:25 2010 +0300 @@ -34,6 +34,7 @@ #include #include #include +#include // for TPluginInputMode class CRepository; @@ -567,6 +568,22 @@ * 1 is arabic native number. */ void SetDefaultArabicNumberMode(TInt aValue); + + /** + * Get the last used plugin input mode for portrait orientation + * + * @since 5.2 + * @return value of KAknFepLastUsedPortraitInput value. + */ + TPluginInputMode PluginPortraitInputMode() const; + + /** + * Replaces the last used plugin input mode for portrait orientation + * + * @since 5.2 + * @param Replace value of KAknFepLastUsedPortraitInput value. + */ + void SetPluginPortraitInputMode( TPluginInputMode aLastUsedPortraitInputMode ); private: /** * C++ Constructor diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h --- a/fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h Thu Aug 19 10:15:25 2010 +0300 @@ -38,9 +38,7 @@ private: virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - - void KeyTimerExpired(); - + private: }; diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -539,13 +539,9 @@ // Not derived from edwin if ( aPermittedMode == EAknEditorNumericInputMode ) { - if ( SupportNativeNumberRange() ) - { - iPermittedRange = ERangeNativeNumber; - } - iPermittedRange |= ERangeNumber; + // Only number range is supported in Korean Variant + iPermittedRange = ERangeNumber; } - else if ( aPermittedMode & EAknEditorTextInputMode ) { // Derived from edwin and EAknEditorTextInputMode diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl Thu Aug 19 10:15:25 2010 +0300 @@ -33,6 +33,7 @@ const TInt KVkbUiId = 0x10282359; const TInt KFsqUiId = 0x2001114D; const TInt KSsqUiId = 0x2001E2BB; +const TInt KPrtFsqUiId = 0x20026837; const TInt KFingerHwrUiId = 0x2001E2C4; inline CPluginFepManagerBase* CPenInputImePluginGeneric::GetCurrentUi() { @@ -42,6 +43,8 @@ case EPluginInputModeVkb: case EPluginInputModeFingerHwr: case EPluginInputModeFSQ: + // Portrait FSQ is added as a new mode + case EPluginInputModePortraitFSQ: return iPluginUiManager; default: return NULL; diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -49,6 +49,7 @@ _LIT(KHwrImeName, "Generic HWR"); _LIT(KVkbImeName, "Generic VKB"); _LIT(KFSQImeName, "Generic FSQ"); +_LIT(KPrtFSQImeName, "Portrait QWERTY"); _LIT(KSSQImeName, "Split View Qwerty"); _LIT(KFingerHwrImeName, "Generic Fingerhwr"); _LIT(KHwrResourceFormatPattern, "peninputhwrwindowconfiginfo_*.rsc"); @@ -207,6 +208,16 @@ } } break; + case EPluginInputModePortraitFSQ: + { + // UI layout for portrait FSQ. + // Note: Don't need to check whether portrait QWERTY feature is + // enabled. Because otherwise, aMode can not have + // EPluginInputModePortraitFSQ. + layoutId.iUid = KPrtFsqUiId; + } + break; + case EPluginInputModeFingerHwr: { layoutId.iUid = KFingerHwrUiId; @@ -271,6 +282,13 @@ { mode = EPluginInputModeFSQ; } + // If full screen portrait QWERTY feature is enabled, portrait QWERTY UI + // layout is used. + else if( aLayoutId == KPrtFsqUiId ) + { + mode = EPluginInputModePortraitFSQ; + } + else if( aLayoutId == KFingerHwrUiId ) { mode = EPluginInputModeFingerHwr; @@ -365,6 +383,11 @@ id = KFsqUiId; } break; + case EPluginInputModePortraitFSQ: + { + id = KPrtFsqUiId; + } + break; case EPluginInputModeFingerHwr: { id = KFingerHwrUiId; @@ -465,6 +488,7 @@ TBool hwr = EFalse; TBool vkb = EFalse; TBool fsq = EFalse; + TBool prtfsq = EFalse; TBool ssq = EFalse; TBool fingerhwr = EFalse; CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) ); @@ -489,6 +513,14 @@ fsq = ETrue; } + // If full screen portrait QWERTY feature is enabled, set the mode is enabled. + if ( infoArray[i]->ImplementationUid().iUid == KPrtFsqUiId + && FeatureManager::FeatureSupported( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ) ) + { + prtfsq = ETrue; + } + if (infoArray[i]->ImplementationUid().iUid == KSsqUiId && FeatureManager::FeatureSupported(KFeatureIdVirtualFullscrQwertyInput)) { @@ -533,7 +565,7 @@ delete dir; } - if( vkb || fsq ) + if( vkb || fsq || prtfsq ) { TFindFile fileFinder(CCoeEnv::Static()->FsSession()); TFileName resName; @@ -571,6 +603,34 @@ j <= KSupportLanguages[i].iLangEnd; ++j) { VkbResNameFromLangId( resName, j); + + if( IsFileInDir( dir, resName ) ) + { + detail.iLanguage = j; + detail.iMeritValue = KSupportLanguages[i].iMerit; + aSupportList.Append(detail); + } + } + } + } + + // Add portrait full qwerty as the supported mode. + // Note: Feature flag check is not needed here because prtfsq should be + // EFalse if the feature flag is not enabled. + // Note: We share the same layout for portrait FSQ with landscape FSQ. + if( prtfsq ) + { + detail.iMode = EPluginInputModePortraitFSQ; + // Display name is "Portrait QWERTY". + detail.iDisplayName.Copy( KPrtFSQImeName() ); + // Add all the support languages. They are defined in 10282358.rss. + for ( TInt i = 0; i < sizeof( KSupportLanguages ) / sizeof( TLangMeritPair ); ++i ) + { + for ( TInt j = KSupportLanguages[i].iLangStart; + j <= KSupportLanguages[i].iLangEnd; ++j ) + { + VkbResNameFromLangId( resName, j ); + if( IsFileInDir( dir, resName ) ) { detail.iLanguage = j; @@ -768,6 +828,7 @@ } case EPluginInputModeVkb: case EPluginInputModeFSQ: + case EPluginInputModePortraitFSQ: { return iPluginUiManager = CPluginFepManagerVkb::NewL(*this, iPenInputServer); } diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepFnKeyManager.cpp --- a/fep/aknfep/src/AknFepFnKeyManager.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepFnKeyManager.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -130,6 +130,21 @@ iFepMan.SetCase(EFnKeyLowerCase); iFepMan.UpdateIndicators(); } + else if( keyboardType == EPtiKeyboardQwerty4x10 && (EFnKeyPressed == iFnKeyState || EFnKeyPressedAgain == iFnKeyState) + && aState == EFnKeyLock ) + { + UpdatePreviousCase(); + iFepMan.SetCase(EFnKeyLowerCase); + iFnKeyState = aState; + iFepMan.UpdateIndicators(); + } + else if( keyboardType == EPtiKeyboardQwerty4x10 && EFnKeyDown == iFnKeyState + && aState == EFnKeyNone ) + { + iFepMan.SetCase( (TCase)iPreviousCase ); + iFnKeyState = aState; + iFepMan.UpdateIndicators(); + } #endif // RD_INTELLIGENT_TEXT_INPUT #ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ #ifdef RD_INTELLIGENT_TEXT_INPUT diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepLanguageManager.cpp --- a/fep/aknfep/src/AknFepLanguageManager.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepLanguageManager.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -38,6 +38,7 @@ #include "AknFepUiManagerWestern.h" // CAknFepUIManagerWestern #include "AknFepUiManagerChinese.h" // CAknFepUIManagerChinese #include "AknFepLanguageManager.h" // this class +#include "AknFepSharedDataInterface.h" // CAknFepSharedDataInterface #include "AknFepUiManagerKorean.h" // CAknFepUIManagerKorean #include // TAknEditorNumericKeymap @@ -47,6 +48,7 @@ #include "AknFepPluginManager.h" #include #include +#include void Cleanup( TAny* aAny ) { @@ -67,10 +69,11 @@ // first phase construction. // ----------------------------------------------------------------------------- // -CAknFepLanguageManager* CAknFepLanguageManager::NewL(MAknFepManagerUIInterface* aFepMan, - CAknFepCaseManager* aCaseMan) +CAknFepLanguageManager* CAknFepLanguageManager::NewL( MAknFepManagerUIInterface* aFepMan, + CAknFepCaseManager* aCaseMan, + CAknFepSharedDataInterface* aSharedData ) { - CAknFepLanguageManager* self = new(ELeave) CAknFepLanguageManager(aFepMan, aCaseMan); + CAknFepLanguageManager* self = new(ELeave) CAknFepLanguageManager(aFepMan, aCaseMan, aSharedData); CleanupStack::PushL(self); self->ConstructL(); CleanupStack::Pop(); // self @@ -199,12 +202,14 @@ // ----------------------------------------------------------------------------- // CAknFepLanguageManager::CAknFepLanguageManager(MAknFepManagerUIInterface* aFepManager, - CAknFepCaseManager* aCaseManager) + CAknFepCaseManager* aCaseManager, + CAknFepSharedDataInterface* aSharedData ) :iInputLanguage(ELangEnglish), iFepManager(aFepManager), iCaseManager(aCaseManager), - iPluginManager(NULL) + iPluginManager(NULL), + iSharedData(aSharedData) { } @@ -310,7 +315,8 @@ } else // Portrait { - secondMode = EPluginInputModeItut; + secondMode = ( iSharedData ) + ? iSharedData->PluginPortraitInputMode() : EPluginInputModeItut; } TPluginInputMode curMode = aPreferedMode; TInt language = aPenInputLang; diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepManager.cpp --- a/fep/aknfep/src/AknFepManager.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepManager.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -522,7 +522,7 @@ } #endif iCaseMan = CAknFepCaseManager::NewL(*this); - iLangMan = CAknFepLanguageManager::NewL(this, iCaseMan); + iLangMan = CAknFepLanguageManager::NewL( this, iCaseMan, iSharedDataInterface ); iPtiEngine->ActivateLanguageL(inputLanguage); #ifdef RD_INTELLIGENT_TEXT_INPUT #ifdef FF_DUAL_LANGUAGE_SUPPORT @@ -575,6 +575,8 @@ iIsFnKeyMapped = IsFnKeyMappedL(); iKeyboardType = (TPtiKeyboardType)iSharedDataInterface->KeyboardLayout(); #endif + + iFnKeypressMonitor = CPeriodic::NewL(CActive::EPriorityStandard); } CAknFepManager::~CAknFepManager() @@ -703,6 +705,8 @@ iNumericResourceTimer = NULL; } #endif + delete iFnKeypressMonitor; + iFnKeypressMonitor = NULL; } #ifdef RD_INTELLIGENT_TEXT_INPUT @@ -3126,6 +3130,24 @@ FepUI()->HandleKeyL(EKeyLeftCtrl, EShortKeyPress); }*/ + //The default value of response is EKeyWasConsumed. So in some case, fep don¡¯t + //do anything, but it return Consumed. + //This make app miss the event EEventKeyUp. + //As per the logic of the function, the combine about ctrl key including: + // Ctrl key + C; Ctrl key + V; Ctrl + X + // Ctrl key + Shift key + // Ctrl key + space + // Ctrl key + Function key + //In above cases, it return EKeyWasConsumed, it is correct. + //The function for Ctrl Key as pressing the only one key ctrl at one time is to + //do something if the flag EFlagQwertyShiftMode is set + //In this case, it return EKeyWasConsumed, it is correct. + //In other case, it should return EKeyWasNotConsumed + if( ( aKeyEvent.iScanCode == EStdKeyRightCtrl || aKeyEvent.iScanCode==EStdKeyLeftCtrl ) + && !IsFlagSet(EFlagQwertyShiftMode) ) + { + response = EKeyWasNotConsumed; + } return response; } @@ -3602,6 +3624,17 @@ // Delete anu UI components launched by Fep. iUiInterface->DeleteDialogs(); } + + if ( iFepPluginManager ) + { + // Check whether the destroyed editor is the editor that stored in fep + // according to the editor state + if ( aAknEdwinState == iFepPluginManager->EdwinState()) + { + // Set the editor pointer to NULL to avoid wild pointer exist + iFepPluginManager->ClearDestroyedEditorPointer(); + } + } } if ( IsFepAwareTextEditor() ) { @@ -4622,7 +4655,8 @@ if (iFepPluginManager && (iFepPluginManager->PluginInputMode() == EPluginInputModeItut || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || - iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)) + iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || + iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) ) { iFepPluginManager->SetMenuState(); } @@ -4806,7 +4840,8 @@ if (iFepPluginManager && (iFepPluginManager->PluginInputMode() == EPluginInputModeItut || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || - iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)) + iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || + iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) ) { iFepPluginManager->SetMenuState(EFalse); } @@ -5518,10 +5553,17 @@ } } TInt inputOptionsPos = 0; - if ( aMenuPane->MenuItemExists( EEikCmdEditPaste, inputOptionsPos ) ) - { - inputOptionsPos++; - } + TInt pastePos = 0; + + if ( aMenuPane->MenuItemExists( EEikCmdEditPaste, pastePos ) ) + { + CEikMenuPaneItem::SData& itemData = aMenuPane->GetMenuPane()->ItemDataByIndexL( pastePos ); + if ( !( itemData.iFlags & EEikMenuItemDimmed ) ) + { + inputOptionsPos = pastePos + 1; + } + } + //Now we have the position at which we need to insert the menu item. if ( #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ @@ -6383,14 +6425,6 @@ aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue); aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue); aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue); - if( iMode == EHangul || inputLanguage == ELangKorean) - { - TInt index; - if ( aMenuPane->MenuItemExists( EAknCmdEditModeKorean, index ) ) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, EFalse); - } - } } if ( IsModePermitted(ENumber) ) @@ -7545,6 +7579,7 @@ TRAP_IGNORE( NumericResourceMultiTapTimerTimeoutL()); } #endif + DeactivateFnkeyPressMonitor(); } TBool CAknFepManager::IsModePermitted(TInt aMode, TWidthChar aWidth) const @@ -8767,15 +8802,7 @@ void CAknFepManager::LaunchInsertWordQueryL(const TDesC& aInitialText, TCursorSelection aTextSpanToReplace) { - TInt recourceId; - if(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen) - { - recourceId = R_AVKON_INSERT_WORD_FS_QUERY; - } - else - { - recourceId = R_AVKON_INSERT_WORD_QUERY; - } + TInt recourceId = R_AVKON_INSERT_WORD_QUERY; LaunchFepQueryDialogL(recourceId, aInitialText, aTextSpanToReplace); } @@ -8793,15 +8820,7 @@ iUncommittedText.iAnchorPos, iUncommittedText.Length()); - TInt recourceId; - if(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen) - { - recourceId = R_AVKON_INSERT_WORD_FS_QUERY; - } - else - { - recourceId = R_AVKON_INSERT_WORD_QUERY; - } + TInt recourceId = R_AVKON_INSERT_WORD_QUERY; LaunchFepQueryDialogL(recourceId, newText, iUncommittedText); } @@ -9985,7 +10004,8 @@ } else { - if(IsKoreanInputLanguage( ) && IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) + if(IsKoreanInputLanguage( ) && !IsQwerty() && + IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) { showCursor = EFalse; } @@ -10360,7 +10380,6 @@ //maxLength of 0 means the editor has no limit TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep(); - TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); TCursorSelection currentSelection; iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection); @@ -10371,16 +10390,19 @@ { return 0; } - else - { - if( isToCountUncommittedTextLength ) - { - return ( maxEdSize - edSize + - currentSelection.Length() + UncommittedText().Length() ); - } - return (maxEdSize - edSize + currentSelection.Length()); - } - } + + TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); + + if( isToCountUncommittedTextLength ) + { + return ( maxEdSize - edSize + + currentSelection.Length() + UncommittedText().Length() ); + } + + return (maxEdSize - edSize + currentSelection.Length()); + + } + #ifdef RD_INTELLIGENT_TEXT_INPUT TInt CAknFepManager::EditorFreeSpaceForAutoWordCompletion(TBool& aUnlimit, TBool /* isToCountUncommittedTextLength = EFalse*/ ) const @@ -10657,12 +10679,13 @@ // Any latin input mode is not permitted by the editor. // For compatibility permitted japanese input modes are checked and // corresponding latin input modes are allowed. - if ( iPermittedInputModes & (EAknEditorKatakanaInputMode | + if ( iPermittedInputModes & ( EAknEditorKatakanaInputMode | EAknEditorHalfWidthTextInputMode | EAknEditorFullWidthTextInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | - EAknEditorHiraganaInputMode)) + EAknEditorHiraganaInputMode + | EAknEditorHangulInputMode ) ) { iPermittedInputModes |= EAknEditorTextInputMode; } @@ -10673,12 +10696,13 @@ if ( !(defaultInputMode & (EAknEditorTextInputMode | EAknEditorNumericInputMode))) { - if (defaultInputMode & (EAknEditorKatakanaInputMode | + if ( defaultInputMode & ( EAknEditorKatakanaInputMode | EAknEditorHalfWidthTextInputMode| EAknEditorFullWidthTextInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | - EAknEditorHiraganaInputMode)) + EAknEditorHiraganaInputMode + | EAknEditorHangulInputMode ) ) { defaultInputMode = EAknEditorTextInputMode; } @@ -10766,7 +10790,7 @@ { if (IsKoreanInputLanguage()) { - if(iMode == EHangul || iMode == ENumber || iMode == EAknEditorNullInputMode ) + if( iMode == EAknEditorNullInputMode ) { SetWesternPredictive(EFalse); TryChangeModeL(EHangul); @@ -10782,6 +10806,12 @@ TryChangeModeL(ELatin); } } + else if ( editorMode == EAknEditorHangulInputMode ) + { + // Choose EHangul as the current fep mode + // if the editor mode stored in editor state is EAknEditorHangulInputMode. + TryChangeModeL(EHangul); + } else if (!iStrokeUsedInQWERTY) { if (editorMode == EStroke && sharedDataMode == ECangJie) @@ -11392,7 +11422,7 @@ } break; case EHangul: - editorMode = EAknEditorTextInputMode; + editorMode = EAknEditorHangulInputMode; break; default: if (IsFeatureSupportedJapanese()) @@ -12802,8 +12832,10 @@ #ifdef RD_SCALABLE_UI_V2 TBool fingerItutIndicator = ( iFepPluginManager && iFepPluginManager->PluginInputMode() == EPluginInputModeItut ); + // Portrait FSQ is added. TBool fingerFSQIndicator = ( iFepPluginManager && - iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ); + ( iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || + iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) ); #else TBool fingerItutIndicator = EFalse; TBool fingerFSQIndicator = EFalse; @@ -13043,9 +13075,12 @@ } // Add This condition for Phonebook, ReTe, PF52.50_2008_wk32: // Navigation bar disappears after tapping find pane and then returning back to Names list view. + // Portrait FSQ is added. if (!(editingStateIndicator == (MAknEditingStateIndicator*)iIndicator && - ( iFepPluginManager && ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut - || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ) ) && + ( iFepPluginManager && + ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut + || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ + || iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) ) && IsFindPaneEditor())) { editingStateIndicator->SetState(newState); @@ -13829,6 +13864,16 @@ } } } + + if ( FeatureManager::FeatureSupported(KFeatureIdKorean) ) + { + // Use the special sct resource file for Korean variant. + if (currentEditorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG) + { + currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN; + } + } + if (currentEditorSCTResId == EDefaultSCTResourceId) // -1 forces the default in SCT resource definition { if (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly) @@ -13863,7 +13908,12 @@ if ( FeatureManager::FeatureSupported(KFeatureIdChinese) ) { currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; - } + } + else if( FeatureManager::FeatureSupported(KFeatureIdKorean) ) + { + // Use the special sct resource file for Korean variant. + currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN; + } else { currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG; @@ -15178,6 +15228,26 @@ { return response; } + + // You will not understand the flowing lines, + // for it is just a "hole stem" than normal logic. + // + // Let me explain: + // In HWR, 4x12 keyboard is used, and predictive should be disabled for it. + // unfortunately, the existed codes enable predictive in some special case. + // when you switch from FSQ to HWR, with ITI on, you will get that. + // then if you press arrow key, + // the code blow of "HandlePredictiveNaviEventOutsideInlineEditL" will be called. + // which is writen for FSQ, not HWR, that finally cause navi-event being consumed. + // No navigation action being performed. + // + // It is not a complete fix, just for simplicity. + if (iFepPluginManager && + iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr) + { + return EKeyWasNotConsumed; + } + if (WesternPredictive()) { response = HandlePredictiveNaviEventOutsideInlineEditL(aCode, aLength); @@ -15531,7 +15601,24 @@ // we have text selected - set cursor to start/end of current selection TTmDocPosSpec newPos; aResponse = NavigateFromSelectionL( currentEditorSelection, naviEvent, newPos ); - if ( aCode != EKeyBackspace && WesternPredictive() ) + + // You will not understand the following lines, + // for it is just a "hole stem" than normal logic. + // + // Let me explain: + // In HWR, 4x12 keyboard is used, and predictive should be disabled for it. + // unfortunately, the existing codes enable predictive in some special case. + // when you switch from FSQ to HWR, with ITI on, you will get that. + // then if you select some words and press arrow key, + // the if bratch of the code blow will be excuted. + // which is writen for FSQ, not HWR, + // MoveCursorToEndOfWordL or MoveCursorToStartOfWordL is called unexpected + // + // It is not a complete fix, just for simplicity. + TBool isFingerHwr = ( iFepPluginManager != NULL ) && + ( iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr ); + + if ( aCode != EKeyBackspace && !isFingerHwr && WesternPredictive() ) { if (CursorInsideWord()) { @@ -15765,7 +15852,8 @@ if( iFepPluginManager->PluginInputMode() != EPluginInputModeNone && iFepPluginManager->PluginInputMode() != EPluginInputModeItut // Add this condition for correction of dim features on FSQ - && iFepPluginManager->PluginInputMode() != EPluginInputModeFSQ ) + && iFepPluginManager->PluginInputMode() != EPluginInputModeFSQ + && iFepPluginManager->PluginInputMode() != EPluginInputModePortraitFSQ ) { iFepPluginManager->LaunchPenInputLanguageSelectionL(aLaunchedByTouchWin); return; @@ -17414,6 +17502,14 @@ void CAknFepManager::CalculateEditorDigitType(TDigitType& aDestination) { + // When current range is latin number mode + if ( iMode == ENumber ) + { + // Set the Local Digit Type flag to EDigitTypeWestern + aDestination = EDigitTypeWestern; + return; + } + TBool ASCIIDigits = EFalse; MObjectProvider* mop = iInputCapabilities.ObjectProvider(); @@ -18294,6 +18390,14 @@ charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; } } + else if ( FeatureManager::FeatureSupported(KFeatureIdKorean) ) + { + // Use the special sct resource file for Korean variant. + if (charMap == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG) + { + charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN; + } + } if (!charMap) { // override numeric keymap if necessary. flag is for non standard charmaps @@ -18313,10 +18417,7 @@ { currentEditorSCTResId = charMap; } - if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap && - ( R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY == currentEditorSCTResId || - R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId || - R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId) ) + if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap) { TBool isEmpty = ETrue; TRAP_IGNORE(isEmpty = GetSctLengthL(charMap)); @@ -18424,11 +18525,13 @@ { if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || - iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr) + iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || + iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) + { SetStopProcessFocus(ETrue, EFalse); iFepPluginManager->SetMenuState(); - } + } else if (!iFepPluginManager->IsGlobleNotes()) { iFepPluginManager->ClosePluginInputUiL( ETrue ); @@ -18484,10 +18587,11 @@ { if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || - iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr) + iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || + iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) { SetStopProcessFocus(EFalse); - } + } else { HandleChangeInFocus(); @@ -18894,42 +18998,42 @@ TEventCode aEventCode, TKeyResponse& aRetCode) { - TCursorSelection currentEditorSelection(0,0); - if(iInputCapabilities.FepAwareTextEditor()) - { - iInputCapabilities.FepAwareTextEditor()-> - GetCursorSelectionForFep(currentEditorSelection); - } - - TInt inputMode = PluginInputMode(); - TBool isArabicFingerHwr = (inputMode == EPluginInputModeFingerHwr && - GetInputLanguageFromSharedDataInterface() == ELangArabic); - if(!IsMfneEditor() && (inputMode == EPluginInputModeItut || - inputMode == EPluginInputModeFSQ || isArabicFingerHwr) - && currentEditorSelection.Length() != 0) - { - - if ((aKeyEvent.iScanCode == EStdKeyLeftArrow) || (aKeyEvent.iScanCode == EStdKeyRightArrow)) - { - if (!(aKeyEvent.iModifiers & EModifierShift)) + aRetCode = EKeyWasNotConsumed; + TBool used = EFalse; + + // only arrow keys are potentially handled + if ( ( aKeyEvent.iScanCode == EStdKeyLeftArrow + || aKeyEvent.iScanCode == EStdKeyRightArrow ) + && iInputCapabilities.FepAwareTextEditor() ) + { + TInt inputMode = PluginInputMode(); + TBool isArabicFingerHwr = ( inputMode == EPluginInputModeFingerHwr && + GetInputLanguageFromSharedDataInterface() == ELangArabic ); + TCursorSelection currentEditorSelection( 0, 0 ); + + iInputCapabilities.FepAwareTextEditor()-> + GetCursorSelectionForFep( currentEditorSelection ); + + if ( !IsMfneEditor() && ( inputMode == EPluginInputModeItut || + inputMode == EPluginInputModeFSQ || + inputMode == EPluginInputModePortraitFSQ || + isArabicFingerHwr ) + && currentEditorSelection.Length() != 0 ) + { + used = ETrue; + + if ( !( aKeyEvent.iModifiers & EModifierShift ) ) { TKeyEvent ccpuStart = aKeyEvent; ccpuStart.iModifiers |= EModifierShift; ccpuStart.iModifiers |= EModifierRightShift; - CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode); - + CCoeEnv::Static()->SimulateKeyEventL( ccpuStart, aEventCode ); aRetCode = EKeyWasConsumed; - return ETrue; - } - else - { - aRetCode = EKeyWasNotConsumed; - return ETrue; } - } - } - aRetCode = EKeyWasNotConsumed; - return EFalse; + } + } + + return used; } #else // !RD_SCALABLE_UI_V2 @@ -19897,7 +20001,31 @@ } else { - + //Handle Fn key and consider long press case + if( EStdKeyRightFunc == aKeyEvent.iScanCode ) + { + switch(aEventCode) + { + case EEventKeyDown: + ActivateFnkeyPressMonitor(); + break; + case EEventKeyUp: + { + if(!iFnKeypressMonitor->IsActive()) + { + //when long pressing event occurrs, + //event has been already handled in HandleFnKeyPressMonitorCallback() + return EKeyWasConsumed; + } + //when short pressing event occurs, + //only deactive fn Key press monitor and normal event handle flow will work + DeactivateFnkeyPressMonitor(); + } + break; + default: + break; + } + } ret = iFnKeyManager->HandleFnKeyEventL( aKeyEvent, aEventCode, iInputCapabilities ) ; } @@ -20679,7 +20807,25 @@ } return EFalse; } - +void CAknFepManager::ChangeMfneAmPm() + { + //trigger when touch at "AM" or "PM" in ICF + if (iInputCapabilities.FepAwareTextEditor() && IsMfneEditor() ) + { + MObjectProvider* mop = iInputCapabilities.ObjectProvider(); + if ( mop && iInputCapabilities.FepAwareTextEditor() ) + { + CAknExtendedInputCapabilities* extendedInputCapabilities = + mop->MopGetObject( extendedInputCapabilities ); + if ( extendedInputCapabilities->Capabilities() && CAknExtendedInputCapabilities::EInputEditorAmPm )// if support AM/PM toggle + { + extendedInputCapabilities->ReportEventL( + CAknExtendedInputCapabilities::MAknEventObserver::EChangeAmPm, NULL); + } + } + } + } + //------------------------------------------------------------------- // @@ -20853,7 +20999,8 @@ // temporary solution for Entering key on virtual QWERTY not working // like enter on virtual ITU-T or on external keyboard if ( iOptionsMenuBar && !( iFepPluginManager && - iFepPluginManager->CurrentPluginInputMode() == EPluginInputModeFSQ ) ) + ( iFepPluginManager->CurrentPluginInputMode() == EPluginInputModeFSQ || + iFepPluginManager->CurrentPluginInputMode() == EPluginInputModePortraitFSQ ) ) ) { iOptionsMenuBar->StopDisplayingMenuBar(); iOptionsMenuBar = NULL; @@ -21078,6 +21225,75 @@ // --------------------------------------------------------------------------- +// CAknFepManager::HandleFnKeyPressMonitorCallback +// Handle fnkey press monitor callback +// static function +// --------------------------------------------------------------------------- +// +TInt CAknFepManager::HandleFnKeyPressMonitorCallback(TAny* aObj) + { + TRAPD(err, static_cast(aObj)->HandleFnKeyPressMonitor()); + if (err) + { + static_cast(aObj)->CleanUpFep(); + return KErrDied; + } + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CAknFepManager::HandleFnKeyPressMonitor +// Handle fnkey press monitor callback +// --------------------------------------------------------------------------- +// +void CAknFepManager::HandleFnKeyPressMonitor() + { + DeactivateFnkeyPressMonitor(); + + //if previous state of fn key is EFnKeyNone or EFnKeyNext, EFnKeyLock will be set; + //otherwise, if previous state is EFnKeyLock, EFnKeyNone will be set. + switch(iFnKeyManager->FnKeyState()) + { + case CAknFepFnKeyManager::EFnKeyPressed: + case CAknFepFnKeyManager::EFnKeyPressedAgain: + iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyLock); + break; + case CAknFepFnKeyManager::EFnKeyDown: + iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone); + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CAknFepManager::ActivateFnkeyPressMonitor +// Activate Fnkey press Monitor +// --------------------------------------------------------------------------- +// +void CAknFepManager::ActivateFnkeyPressMonitor() + { + if( iFnKeypressMonitor ) + { + iFnKeypressMonitor->Start(KFnKeyLongPressTimeout, KFnKeyLongPressTimeout, + TCallBack(HandleFnKeyPressMonitorCallback, this)); + } + } + +// --------------------------------------------------------------------------- +// CAknFepManager::DeactivateFnkeyPressMonitor +// Deactivate Fnkey press Monitor +// --------------------------------------------------------------------------- +// +void CAknFepManager::DeactivateFnkeyPressMonitor() + { + if( iFnKeypressMonitor && iFnKeypressMonitor->IsActive()) + { + iFnKeypressMonitor->Cancel(); + } + } + +// --------------------------------------------------------------------------- // LOCAL METHODS // // --------------------------------------------------------------------------- diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepPluginManager.cpp --- a/fep/aknfep/src/AknFepPluginManager.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepPluginManager.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -288,6 +288,10 @@ iAvkonRepository = CRepository::NewL( KCRUidAvkon ); iConnectAo = new (ELeave)CConnectAo(this); + + // iPortraitFSQEnabled indicates whether portrait FSQ feature is enabled. + iPortraitFSQEnabled = FeatureManager::FeatureSupported( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ); } // ----------------------------------------------------------------------------- @@ -489,8 +493,13 @@ case ESignalKeyEvent: { TPtr ptr( const_cast(pBuf.Ptr()), pBuf.Length(), pBuf.Length() ); - if(iFepMan.InputMode() == ELatin && (iPluginInputMode == EPluginInputModeVkb || - iPluginInputMode == EPluginInputModeFSQ)) + + // If input mode is latin and Vkb or FSQ (landscape or portrait), + // data case is adjusted. + if( iFepMan.InputMode() == ELatin && + ( iPluginInputMode == EPluginInputModeVkb || + iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode == EPluginInputModePortraitFSQ ) ) { AdjustDataCase( ptr ); } @@ -505,7 +514,12 @@ break; case ESignalHwNotifySctPopup: iFepMan.LaunchSpecialCharacterTableL( 0,ETrue );//possible? - break; + break; + case ESignalChangeAmPm: + { + iFepMan.ChangeMfneAmPm(); + } + break; case ESignalSetAppEditorCursor: { TInt8 *ptrData = (TInt8* )(pBuf.Ptr()); @@ -534,9 +548,10 @@ break; } iLaunchMenu = ETrue; - if (PluginInputMode() == EPluginInputModeItut || - PluginInputMode() == EPluginInputModeFSQ || - PluginInputMode() == EPluginInputModeFingerHwr) + if ( PluginInputMode() == EPluginInputModeItut || + PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModeFingerHwr || + PluginInputMode() == EPluginInputModePortraitFSQ ) { SetMenuState(); } @@ -598,7 +613,9 @@ subrange); } SyncIndicatorWithPluginRangeL(); - if ( PluginInputMode() == EPluginInputModeFSQ ) + // If input mode is FSQ, update indicator accordingly. + if ( PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModePortraitFSQ ) { UpdateFSQIndicator(); } @@ -862,6 +879,36 @@ } // ----------------------------------------------------------------------------- +// CAknFepPluginManager::ClearDestroyedEditorPointer +// Set the editor pointer to NULL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CAknFepPluginManager::ClearDestroyedEditorPointer() + { + iEdwin = NULL; + } + +// ----------------------------------------------------------------------------- +// CAknFepPluginManager::EdwinState +// Get the editor state +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CAknEdwinState* CAknFepPluginManager::EdwinState() + { + CAknEdwinState* edwinState( NULL ); + if ( iEdwin && iEdwin->Extension1()) + { + // Get the editor state + edwinState = static_cast( + iEdwin->Extension1()->State( KNullUid )); + } + + return edwinState; + } + +// ----------------------------------------------------------------------------- // CAknFepPluginManager::HandleEventsFromFepL // Handle events from FEP // (other items were commented in a header). @@ -912,6 +959,7 @@ if( iFepMan.FepAwareTextEditor() ) { iMfne = NULL; + iEdwin = NULL; if ( !aEventData ) { RemoveLastFocusedWinFromOpenList(); @@ -983,7 +1031,9 @@ case EPluginUpdateIndicator: { UpdateITUTIndicator(); - if ( PluginInputMode() == EPluginInputModeFSQ ) + // Update indicator for FSQ (landscape or portrait). + if ( PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModePortraitFSQ ) { UpdateFSQIndicator(); } @@ -1050,7 +1100,8 @@ } else { - defaultMode = EPluginInputModeItut; + // Use the last used portrait input mode. + defaultMode = iSharedData.PluginPortraitInputMode(); } } else @@ -1061,7 +1112,8 @@ } else { - defaultMode = EPluginInputModeItut; + // Use the last used portrait input mode. + defaultMode = iSharedData.PluginPortraitInputMode(); } } TryChangePluginInputModeByModeL(defaultMode, @@ -1185,8 +1237,11 @@ CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; // For portrait only mode, need to disable FSQ. - TBool disableFSQ = iDefaultOrientation == CAknAppUiBase::EAppUiOrientationPortrait - || ( !landscape && !iAvkonAppUi->OrientationCanBeChanged() ); + TBool disableFSQ = iDefaultOrientation == CAknAppUiBase::EAppUiOrientationPortrait + || ( !iSharedData.AutoRotateEnabled() + && !landscape + && !iAvkonAppUi->OrientationCanBeChanged() ); + if ( disableFSQ ) { iPenInputServer.SetDisabledLayout( EPluginInputModeFSQ ); @@ -1203,30 +1258,64 @@ } } - TBool disableITUT = - ( iDefaultOrientation == CAknAppUiBase::EAppUiOrientationLandscape || - ( landscape && !iAvkonAppUi->OrientationCanBeChanged() ) ) ; + // Both ITU-T and portrait FSQ are handled here. Because getting and setting + // disabled layout separately caused issues. + TBool disablePortraitInputMode = + iDefaultOrientation == CAknAppUiBase::EAppUiOrientationLandscape + || ( !iSharedData.AutoRotateEnabled() + && landscape + && !iAvkonAppUi->OrientationCanBeChanged() ); + - if( disableITUT ) - { - //disable V-ITUT, and if current aSuggestMode is EPluginInputModeItut, replace it with EPluginInputModeFSQ; - iPenInputServer.SetDisabledLayout( EPluginInputModeItut ); - if( aSuggestMode == EPluginInputModeItut ) - { - aSuggestMode = EPluginInputModeFSQ; - } - } + if ( disablePortraitInputMode ) + { + // Disable V-ITUT and portrait FSQ, and if current aSuggestMode is + // EPluginInputModeItut or EPluginInputModePortraitFSQ, replace it with + // EPluginInputModeFSQ. + iPenInputServer.SetDisabledLayout( + EPluginInputModeItut | EPluginInputModePortraitFSQ ); + if( aSuggestMode == EPluginInputModeItut || + aSuggestMode == EPluginInputModePortraitFSQ ) + { + aSuggestMode = EPluginInputModeFSQ; + } + } else - { - // if V-ITUT had been disabled before, enable it now; - TInt disableMode = iPenInputServer.DisabledLayout(); - if( disableMode & EPluginInputModeItut ) - { - iPenInputServer.SetDisabledLayout( -1 );//reset - iPenInputServer.SetDisabledLayout( disableMode & ~EPluginInputModeItut ); - } - } - + { + // if V-ITUT had been disabled before, enable it now; + TInt disableMode = iPenInputServer.DisabledLayout(); + if ( ( disableMode & EPluginInputModeItut ) || + ( disableMode & EPluginInputModePortraitFSQ ) ) + { + iPenInputServer.SetDisabledLayout( -1 ); // Reset + TInt enableMode( 0 ); + if ( disableMode & EPluginInputModeItut ) + { + enableMode |= EPluginInputModeItut; + } + if ( disableMode & EPluginInputModePortraitFSQ ) + { + enableMode |= EPluginInputModePortraitFSQ; + } + iPenInputServer.SetDisabledLayout( disableMode & ~enableMode ); + } + } + + if(aSuggestMode == EPluginInputModeFingerHwr + && iSharedData.InputTextLanguage() == ELangArabic) + { + if(IsEditorSupportSplitIme()) + { + if(landscape) + { + aSuggestMode = EPluginInputModeFSQ; + } + else + { + aSuggestMode = iSharedData.PluginPortraitInputMode(); + } + } + } if ( aSuggestMode == EPluginInputModeFSQ) { @@ -1236,7 +1325,7 @@ if (disableFSQ && (aSuggestMode != EPluginInputModeFingerHwr)) { iPluginInputMode = tempInputMode; - aSuggestMode = EPluginInputModeItut; + aSuggestMode = iSharedData.PluginPortraitInputMode(); } else { @@ -1347,6 +1436,15 @@ { //do not remember application set input mode iSharedData.SetPluginInputMode(iPluginInputMode); + + // Refresh landscape value + CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation( size ); + landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; + // Remember portrait input mode. + if ( !landscape ) + { + iSharedData.SetPluginPortraitInputMode( iPluginInputMode ); + } } if (CurrentFepInputUI()) @@ -1359,11 +1457,11 @@ iFepMan.UpdateCbaL( NULL ); } + // inform edwin that Touch Input is opened. if ( iFepMan.EditorState() ) { - iFepMan.EditorState()->SetFlags( - iFepMan.EditorState()->Flags() | EAknEditorFlagTouchInputModeOpened ); - } + SetEdwinFlagsByUiStatus( ETrue ); + } // Notify application touch window state NotifyAppUiImeTouchWndStateL( ETrue ); @@ -1447,11 +1545,8 @@ iFepMan.UiInterface()->TouchPaneSetInputMethodIconActivated(EFalse); - if ( iFepMan.EditorState() ) - { - iFepMan.EditorState()->SetFlags( - iFepMan.EditorState()->Flags() & ~EAknEditorFlagTouchInputModeOpened ); - } + // inform edwin that Touch Input is closed. + SetEdwinFlagsByUiStatus( EFalse ); if ( prePluginInputMode == EPluginInputModeVkb ) { @@ -1479,19 +1574,20 @@ { //Change for finger support of MFNE editor, it is a requirement for Tube InformMfneUiStatusL( EFalse ); + SetAknEdwinFlags( iEdwin, EAknEditorFlagHideTextView, EFalse ); iPenInputServer.ClearServerEvent(); - if(iFocuschangedForSpellEditor) - { - iFocuschangedForSpellEditor = EFalse; - //disable the redrawing, it will be redrawn in - //iCurrentPluginInputFepUI->HandleCommandL(ECmdPeninputDisableLayoutDrawing,ETrue); - return; //don't close the UI if this is caused by removing spell editor - } - else - { - iCurrentPluginInputFepUI->CloseUI(); - } + if(iFocuschangedForSpellEditor) + { + iFocuschangedForSpellEditor = EFalse; + //disable the redrawing, it will be redrawn in + //iCurrentPluginInputFepUI->HandleCommandL(ECmdPeninputDisableLayoutDrawing,ETrue); + return; //don't close the UI if this is caused by removing spell editor + } + else + { + iCurrentPluginInputFepUI->CloseUI(); + } if( aResetState ) { iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputWindowClose); @@ -1506,12 +1602,27 @@ } } } - + + // iITISettingDialogOpen = ETrue: ITI setting dialog is opened. + // iOrientationChanged = ETrue: Phone is forcibly rotated. + // iSharedData.AutoRotateEnabled() = ETrue: Sensor is on. + // ITI setting dialog should be close by restoring orientation. + // Known case: + // When sensor is off, ITI setting dialog is opened on FSQ, + // and then sensor is set to on, back to ITI setting dialog, + // ITI setting dialog should be closed and Virtual ITU-T should be launched. + if ( iITISettingDialogOpen && iSharedData.AutoRotateEnabled() && iOrientationChanged) + { + iITISettingDialogOpen = EFalse; + } + + // The orientation should not be restored if ITI setting dialog is opened. + // Otherwise, the orientation should be restored. if ( (iPluginInputMode == EPluginInputModeFSQ || (iPluginInputMode == EPluginInputModeFingerHwr - && iSharedData.InputTextLanguage() == ELangArabic)) && iOrientationChanged - && !iITISettingDialogOpen ) - { - // This TRAP_IGNORE is essential , never delete it + && iSharedData.InputTextLanguage() == ELangArabic)) && iOrientationChanged + && !iITISettingDialogOpen ) + { + // This TRAP_IGNORE is essential , never delete it TRAP_IGNORE( iAvkonAppUi->SetOrientationL( (CAknAppUiBase::TAppUiOrientation)iDefaultOrientation ) ); iOrientationChanged = EFalse; } @@ -1548,7 +1659,8 @@ TInt preInputMode = iPluginInputMode; if ( iSharedData.AutoRotateEnabled() && - ( preInputMode == EPluginInputModeFSQ || preInputMode == EPluginInputModeItut ) ) + ( preInputMode == EPluginInputModeFSQ || preInputMode == EPluginInputModeItut || + preInputMode == EPluginInputModePortraitFSQ ) ) { // Calculate current input mode by orientation. // even though peninputserver is brought to backgroud, @@ -1560,7 +1672,7 @@ TPixelsTwipsAndRotation size; CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); iPluginInputMode = ( size.iPixelSize.iWidth < size.iPixelSize.iHeight ) ? - EPluginInputModeItut : EPluginInputModeFSQ; + iSharedData.PluginPortraitInputMode() : EPluginInputModeFSQ; } if ( !iPenInputServer.IsForeground() ) @@ -1571,8 +1683,9 @@ TBool setResChange = EFalse; if ( preInputMode == EPluginInputModeItut || - preInputMode == EPluginInputModeFSQ || - preInputMode == EPluginInputModeFingerHwr ) + preInputMode == EPluginInputModeFSQ || + preInputMode == EPluginInputModePortraitFSQ || + preInputMode == EPluginInputModeFingerHwr ) { setResChange = ETrue; iPenInputServer.SetResourceChange(ETrue); @@ -1582,7 +1695,9 @@ TBool needToChangeInputMode = ETrue; if ( iSharedData.AutoRotateEnabled() && - ( preInputMode == EPluginInputModeFSQ || preInputMode == EPluginInputModeItut ) ) + ( preInputMode == EPluginInputModeFSQ || + preInputMode == EPluginInputModePortraitFSQ || + preInputMode == EPluginInputModeItut ) ) { if ( IsSpellVisible() ) { @@ -1724,44 +1839,34 @@ break; case EPenInputCmdVITUT: { - //Here calling this function is to reset menu state when the focus change caused by - //the screen orientation, in the normal circumstance the foucus change should not - //occur while the screen orientation is handling. So directly resetting menu state - //to avoid the above case, preconditon is that the option menu must be closed. - ResetMenuState(); - ClosePluginInputModeL(ETrue); - iFepMan.TryCloseUiL(); - TryChangePluginInputModeByModeL(EPluginInputModeItut, - EPenInputOpenManually, - ERangeInvalid); + ProcessChangingInputModeCmdL(EPluginInputModeItut); } break; case EPeninputCmdFSQ: + // "Edit portrait" menu - switch to portrait FSQ + case EPeninputCmdPortraitEditor: { - //Here calling this function is to reset menu state when the focus change caused by - //the screen orientation, in the normal circumstance the foucus change should not - //occur while the screen orientation is handling. So directly resetting menu state - //to avoid the above case, preconditon is that the option menu must be closed. - ResetMenuState(); - ClosePluginInputModeL(ETrue); - iFepMan.TryCloseUiL(); - TryChangePluginInputModeByModeL(EPluginInputModeFSQ, - EPenInputOpenManually, - ERangeInvalid); + if ( iPortraitFSQEnabled ) + { + ProcessChangingInputModeCmdL(EPluginInputModePortraitFSQ); + } + else + { + ProcessChangingInputModeCmdL(EPluginInputModeFSQ); + } + } + + break; + // "Edit landscape" menu - switch to landscape FSQ + case EPeninputCmdLandscapeEditor: + + { + ProcessChangingInputModeCmdL(EPluginInputModeFSQ); } break; case EPeninputCmdHwr: { - //Here calling this function is to reset menu state when the focus change caused by - //the screen orientation, in the normal circumstance the foucus change should not - //occur while the screen orientation is handling. So directly resetting menu state - //to avoid the above case, preconditon is that the option menu must be closed. - ResetMenuState(); - ClosePluginInputModeL(ETrue); - iFepMan.TryCloseUiL(); - TryChangePluginInputModeByModeL( EPluginInputModeFingerHwr, - EPenInputOpenManually, - ERangeInvalid ); + ProcessChangingInputModeCmdL(EPluginInputModeFingerHwr); } break; case EFepInputCmdHelp: @@ -2036,9 +2141,10 @@ } //For Preview bubble - if (!(iPluginInputMode == EPluginInputModeVkb || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr )) + if ( ! (iPluginInputMode == EPluginInputModeVkb || + iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode == EPluginInputModeFingerHwr || + iPluginInputMode == EPluginInputModePortraitFSQ ) ) { if(!(iPluginInputMode == EPluginInputModeItut && (iSharedData.InputTextLanguage() == ELangPrcChinese || @@ -2081,9 +2187,11 @@ } } - if (iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeVkb || - iPluginInputMode == EPluginInputModeFSQ ) + // Add Insert Symbol for valid input modes. + if ( iPluginInputMode == EPluginInputModeItut || + iPluginInputMode == EPluginInputModeVkb || + iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode == EPluginInputModePortraitFSQ ) { TInt index = 0; if (isLanuchSCT && aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index)) @@ -2113,26 +2221,120 @@ TInt disabledInputMode = iPenInputServer.DisabledLayout(); TInt curInputMode = iLangMan.CurrentImePlugin()->CurrentMode(); TBool isChinese = iFepMan.IsChineseInputLanguage(); - - if ( !isChinese && ( curInputMode != EPluginInputModeFSQ ) - && !( disabledInputMode & EPluginInputModeFSQ )) - { - aMenuPane->SetItemDimmed( EPeninputCmdFSQ, EFalse ); - } + TBool isKorean = iFepMan.IsKoreanInputLanguage(); + // similar with chinese layout, there is a switching button,so when writing language is korean + // no need to insert 'Qwerty' or 'Alphabet keypad' item into option menu - if ( !isChinese && ( curInputMode != EPluginInputModeItut ) - && !( disabledInputMode & EPluginInputModeItut )) - { - aMenuPane->SetItemDimmed(EPenInputCmdVITUT, EFalse); - } - - if ( FeatureManager::FeatureSupported( KFeatureIdArabicHandwritingRecognitionInput ) - &&iFepMan.IsArabicInputLanguage() - && ( curInputMode != EPluginInputModeFingerHwr ) - && !( disabledInputMode & EPluginInputModeFingerHwr )) - { - aMenuPane->SetItemDimmed( EPeninputCmdHwr, EFalse ); - } + /* US2/US4/US5 + 1. Orientation sensor off + + 1-1. Portrait orientation + If currently ITU-T mode + “QWERTY keyboard?-> Port fsq + “Edit landscape?-> Land fsq + + If currently Portrait FSQ mode + “Alphanumeric keypad? + “Edit landscape?-> Land fsq + + 1-2. Landscape orientation + “Alphanumeric keypad? + “Edit portrait?- Port fsq + + 2. Orientation sensor on + + 2-1.Portrait orientation + If currently ITU-T mode + “QWERTY keyboard?-> Port fsq + + If currently Portrait FSQ mode + “Alphanumeric keypad? + + 2-2. Landscape orientation + --- No input switch menu +*/ + + // Get the current phone's orientation + TPixelsTwipsAndRotation size; + CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); + TBool isPortrait = size.iPixelSize.iWidth < size.iPixelSize.iHeight; + + // "QWERTY keyboard" - EPeninputCmdFSQ menu + if ( iPortraitFSQEnabled ) + { + // "QWERTY keyboard" - EPeninputCmdFSQ menu is shown in these conditions + // if portrait FSQ feature flag is enabled + // 1) Non-Chinese language + // 2) Current input mode is not portrait FSQ and also the mode is not disabled + // 3) Current orientation is portrait + if ( !isKorean && !isChinese + && ( curInputMode != EPluginInputModePortraitFSQ ) + && !( disabledInputMode & EPluginInputModePortraitFSQ ) + && isPortrait ) + { + aMenuPane->SetItemDimmed( EPeninputCmdFSQ, EFalse ); + } + + } + else + { + if ( !isKorean && !isChinese && ( curInputMode != EPluginInputModeFSQ ) + && !( disabledInputMode & EPluginInputModeFSQ ) + && FeatureManager::FeatureSupported( KFeatureIdVirtualFullscrQwertyInput ) ) + { + aMenuPane->SetItemDimmed( EPeninputCmdFSQ, EFalse ); + } + } + + // "Alphanumeric keypad" - EPenInputCmdVITUT menu is shown in these conditions. + // 1) Non-Chinese language + // 2) Current input mode is not ITU-T and also the mode is not disabled + // 3) ITU-T feature flag is enabled + if ( !isKorean && !isChinese + && ( curInputMode != EPluginInputModeItut ) + && !( disabledInputMode & EPluginInputModeItut ) + && FeatureManager::FeatureSupported( KFeatureIdVirtualItutInput ) ) + { + aMenuPane->SetItemDimmed(EPenInputCmdVITUT, EFalse); + } + // "Edit portrait" - EPeninputCmdPortraitEditor menu is shown in these conditions. + // 1) Portrait FSQ feature flag is enabled + // 2) Non-Chinese language + // 3) Current input mode is not portrait FSQ and also the mode is not disabled + // 4) Current orientation is landscape + if ( iPortraitFSQEnabled + && !isKorean && !isChinese + && ( curInputMode != EPluginInputModePortraitFSQ ) + && !( disabledInputMode & EPluginInputModePortraitFSQ ) + && !isPortrait ) + { + aMenuPane->SetItemDimmed(EPeninputCmdPortraitEditor, EFalse); + } + + // "Edit landscape" - EPeninputCmdLandscapeEditor menu is shown in these conditions. + // 1) Portrait FSQ feature flag is enabled + // This menu needed only when the feature is turned on. + // 2) Landscape FSQ feature flag is enabled + // 3) Non-Chinese language + // 4) Current input mode is not landscape FSQ and also the mode is not disabled + // 5) Current orientation is portrait + if ( iPortraitFSQEnabled + && FeatureManager::FeatureSupported( KFeatureIdVirtualFullscrQwertyInput ) + && !isKorean && !isChinese + && ( curInputMode != EPluginInputModeFSQ ) + && !( disabledInputMode & EPluginInputModeFSQ ) + && isPortrait ) + { + aMenuPane->SetItemDimmed(EPeninputCmdLandscapeEditor, EFalse); + } + + if ( FeatureManager::FeatureSupported( KFeatureIdArabicHandwritingRecognitionInput ) + &&iFepMan.IsArabicInputLanguage() + && ( curInputMode != EPluginInputModeFingerHwr ) + && !( disabledInputMode & EPluginInputModeFingerHwr )) + { + aMenuPane->SetItemDimmed( EPeninputCmdHwr, EFalse ); + } // check if this is the arabic finger hwr TBool isArabicFingerHwr = (iPluginInputMode == EPluginInputModeFingerHwr @@ -2188,15 +2390,31 @@ //Show number mode menu item. if(iFepMan.InputMode() == ENumber || iFepMan.InputMode() == ENativeNumber) { - if(iSharedData.DefaultArabicNumberMode()) + CAknEdwinState* editorState = iFepMan.EditorState(); + TUint permittedInputModes; + if( editorState ) { - aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse); + permittedInputModes= editorState->PermittedInputModes(); } else { - aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse); + permittedInputModes = EAknEditorNumericInputMode; + } + TBool IsOnlyNumericPermitted = !(permittedInputModes + &(EAknEditorTextInputMode | EAknEditorSecretAlphaInputMode)); + if(IsOnlyNumericPermitted) + { + if(iSharedData.DefaultArabicNumberMode()) + { + aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse); + } + else + { + aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse); + } } } + // add the writing speed menu index = 0; if(aMenuPane->MenuItemExists(EPenInputCmdWritingSpeed, index)) @@ -2251,12 +2469,16 @@ return; } - if( !iLaunchMenu && IsGlobalNotesApp(focusAppId)) - - { - if( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr) + // if pen ui is being opened on a non-global editor, which popped by capserver or notify server, + // and also other global notes from capserver or notify server pop up at the moment, + // pen ui should be dimmed as the definitino of dim feature. + // Set bClose = EFalse is used to prevent from closing pen ui later. + if( !iLaunchMenu && IsGlobalNotesApp(focusAppId) && !IsInGlobleNoteEditor() ) + { + if ( iPluginInputMode == EPluginInputModeItut || + iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode == EPluginInputModeFingerHwr || + iPluginInputMode == EPluginInputModePortraitFSQ ) { bClose = EFalse; } @@ -2269,9 +2491,10 @@ IsGlobalNotesApp(appId) && !iFepMan.IsFepAwareTextEditor()) { - if( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr) + if ( iPluginInputMode == EPluginInputModeItut || + iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode == EPluginInputModeFingerHwr || + iPluginInputMode == EPluginInputModePortraitFSQ ) { ClosePluginInputUiL(ETrue); if(iPenInputSvrConnected ) //lost foreground @@ -2314,8 +2537,9 @@ { iLaunchSCTInSpell = EFalse; #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS - if ( PluginInputMode() == EPluginInputModeFSQ - && iSharedData.ThemeEffectsEnabled()) + if ( ( PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModePortraitFSQ ) + && iSharedData.ThemeEffectsEnabled() ) { User::After(1);//waiting for menu cancel effect } @@ -2346,9 +2570,11 @@ iAvkonRepository->Get( KAknAvkonAdaptiveSearchEnabled, enableAdaptiveSearch ); if ( enableAdaptiveSearch ) { - if(!(iInMenu && ( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode ==EPluginInputModeFingerHwr))) + if ( !(iInMenu && + ( iPluginInputMode == EPluginInputModeItut || + iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode ==EPluginInputModeFingerHwr || + iPluginInputMode == EPluginInputModePortraitFSQ ) ) ) { ClosePluginInputModeL(ETrue); if(iPenInputSvrConnected ) //lost foreground @@ -2364,7 +2590,7 @@ TPluginInputMode inputMode = (TPluginInputMode)iSharedData.PluginInputMode(); if ((inputMode == EPluginInputModeFSc || inputMode == EPluginInputModeHwr || inputMode == EPluginInputModeFingerHwr) && - iFepMan.IsSupportsSecretText()) + iFepMan.IsSupportsSecretText()) { openMode = EPenInputOpenManually; } @@ -2387,9 +2613,10 @@ iAvkonRepository->Get( KAknAvkonAdaptiveSearchEnabled, enableAdaptiveSearch ); if ( enableAdaptiveSearch ) { - if(iInMenu && ( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr)) + if ( iInMenu && ( iPluginInputMode == EPluginInputModeItut || + iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode == EPluginInputModeFingerHwr || + iPluginInputMode == EPluginInputModePortraitFSQ ) ) { //iPenInputServer.DimUiLayout(ETrue); //dim the ui return; @@ -2405,9 +2632,10 @@ if ( !enableAdaptiveSearch ) { - if(iInMenu && ( iPluginInputMode == EPluginInputModeItut || - iPluginInputMode == EPluginInputModeFSQ || - iPluginInputMode == EPluginInputModeFingerHwr)) + if( iInMenu && ( iPluginInputMode == EPluginInputModeItut || + iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode == EPluginInputModeFingerHwr || + iPluginInputMode == EPluginInputModePortraitFSQ ) ) { //iPenInputServer.DimUiLayout(ETrue); //dim the ui return; @@ -3122,10 +3350,11 @@ TBool previousSCT = isLanuchSCT; TInt inputmode = PluginInputMode(); - if (R_AVKON_PENINPUT_OPTION_MENU_BAR == aResourceId && - (inputmode == EPluginInputModeItut || - inputmode == EPluginInputModeVkb || - inputmode == EPluginInputModeFSQ)) + if ( R_AVKON_PENINPUT_OPTION_MENU_BAR == aResourceId && + ( inputmode == EPluginInputModeItut || + inputmode == EPluginInputModeVkb || + inputmode == EPluginInputModeFSQ || + inputmode == EPluginInputModePortraitFSQ ) ) { isLanuchSCT = EFalse; iCurPermitModes = iFepMan.PermittedModes(); @@ -3817,6 +4046,10 @@ { TInt fepDisableLayoouts = 0; TInt disableLayouts = iPenInputServer.DisabledLayout(); + // Get the current phone orientation. + TPixelsTwipsAndRotation size; + CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); + TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; switch(aSuggestMode) { @@ -3833,7 +4066,12 @@ ((aSuggestMode == EPluginInputModeFingerHwr && iSharedData.InputTextLanguage() != ELangArabic)))) { - aSuggestMode = EPluginInputModeItut; + // If full screen portrait QWERTY feature is enabled, use it + // instead of ITU-T. + aSuggestMode = iSharedData.PluginPortraitInputMode(); + + // If portrait FSQ or ITU-T is disabled, use landscape FSQ. + // If they are disabled, most likely the orientation is landscape. if ((disableLayouts & aSuggestMode)) { aSuggestMode = EPluginInputModeFSQ; @@ -3849,16 +4087,14 @@ // So we use FSQ for Landscape mode and ITUT for Portrait instead. if( FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay )) { - TPixelsTwipsAndRotation size; - CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); - TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; if ( landscape ) // LandScape { aSuggestMode = EPluginInputModeFSQ; } else // Portrait { - aSuggestMode = EPluginInputModeItut; + // Use the last used portrait input mode. + aSuggestMode = iSharedData.PluginPortraitInputMode(); } } } @@ -3867,11 +4103,14 @@ { if ((disableLayouts & aSuggestMode)) { - aSuggestMode = EPluginInputModeItut; + // Use the last used portrait input mode. + aSuggestMode = iSharedData.PluginPortraitInputMode(); } } break; + // If ITU-T or portrait FSQ are disabled, use landscape FSQ. case EPluginInputModeItut: + case EPluginInputModePortraitFSQ: { if ((disableLayouts & aSuggestMode)) { @@ -3881,12 +4120,27 @@ break; default: { - aSuggestMode = EPluginInputModeItut; - if ((disableLayouts & aSuggestMode)) - { - aSuggestMode = EPluginInputModeFSQ; - } - } + // Landscape FSQ is used in landscape orientation. + if ( landscape ) + { + aSuggestMode = EPluginInputModeFSQ; + } + // If the current orientation is portrait, use the last used portrait input mode. + else + { + aSuggestMode = iSharedData.PluginPortraitInputMode(); + + // If the suggested mode is EPluginInputModeNone or disabled, use + // EPluginInputModeFSQ. + // Note: If the suggested mode is landscape FSQ and it it also disabled, + // still we use landscape FSQ because there is no choice. + if ( ( aSuggestMode == EPluginInputModeNone ) || + ( disableLayouts & aSuggestMode ) ) + { + aSuggestMode = EPluginInputModeFSQ; + } + } + } break; } @@ -4062,9 +4316,10 @@ else { HideSpellEditor(); - if (PluginInputMode() == EPluginInputModeFSQ || - PluginInputMode() == EPluginInputModeVkb || - PluginInputMode() == EPluginInputModeFingerHwr) + if ( PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModeVkb || + PluginInputMode() == EPluginInputModeFingerHwr || + PluginInputMode() == EPluginInputModePortraitFSQ ) { iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCharacterPreview, iFepMan.FepShowVkbPreviewStatus()); @@ -4109,7 +4364,8 @@ iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, iCaseMan.CurrentCase()); if ( PluginInputMode() == EPluginInputModeFSQ || - PluginInputMode() == EPluginInputModeFingerHwr) + PluginInputMode() == EPluginInputModeFingerHwr || + PluginInputMode() == EPluginInputModePortraitFSQ ) { SetPromptText( aCleanContent ); } @@ -4145,7 +4401,8 @@ iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputDimArrowKeys, enableArrowBtn); - if ( PluginInputMode() == EPluginInputModeFSQ ) + if ( PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModePortraitFSQ ) { iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputDimEnterKey, iFepMan.IsFindPaneEditor() ); @@ -4170,13 +4427,16 @@ { iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputWindowOpen, aOpenMode); } - if(PluginInputMode() == EPluginInputModeItut - || PluginInputMode() == EPluginInputModeFSQ - || PluginInputMode() == EPluginInputModeFingerHwr) + if ( PluginInputMode() == EPluginInputModeItut + || PluginInputMode() == EPluginInputModeFSQ + || PluginInputMode() == EPluginInputModeFingerHwr + || PluginInputMode() == EPluginInputModePortraitFSQ ) { iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputInEditWordQueryDlg, iIsInEditWordQueryDlg); } - if ( PluginInputMode() == EPluginInputModeFSQ ) + // For both landscape portrait FSQ mode, update FSQ indicator. + if ( PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModePortraitFSQ ) { UpdateFSQIndicator(); } @@ -4627,7 +4887,9 @@ void CAknFepPluginManager::UpdateFSQIndicator() { - if ( EPluginInputModeFSQ != PluginInputMode() ) + // If it is not either portrait or landscape FSQ, return. + if ( !( EPluginInputModeFSQ == PluginInputMode() || + EPluginInputModePortraitFSQ == PluginInputMode() ) ) { return; } @@ -4800,7 +5062,15 @@ { editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE; } - } + } + else if (FeatureManager::FeatureSupported(KFeatureIdKorean)) + { + // Use the special sct resource file for Korean variant. + if (!editorSCTResId || editorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG) + { + editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN; + } + } else if (!editorSCTResId) { editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG; @@ -5118,7 +5388,8 @@ TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, iCaseMan.CurrentCase())); UpdateITUTIndicator(); - if ( PluginInputMode() == EPluginInputModeFSQ ) + if ( PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModePortraitFSQ ) { UpdateFSQIndicator(); } @@ -5188,6 +5459,7 @@ break; case EPluginInputModeVkb: case EPluginInputModeFSQ: + case EPluginInputModePortraitFSQ: { context.iContext = KVQWERTY_HLP_MAIN_VIEW; } @@ -5243,9 +5515,10 @@ return; } - if (!(PluginInputMode() == EPluginInputModeItut || - PluginInputMode() == EPluginInputModeFSQ || - PluginInputMode() == EPluginInputModeFingerHwr)) + if ( ! ( PluginInputMode() == EPluginInputModeItut || + PluginInputMode() == EPluginInputModeFSQ || + PluginInputMode() == EPluginInputModeFingerHwr || + PluginInputMode() == EPluginInputModePortraitFSQ ) ) { return; } @@ -5362,6 +5635,66 @@ } #endif // RD_SCALABLE_UI_V2 +// ----------------------------------------------------------------------------- +// Update editor state according to current ui state +// ----------------------------------------------------------------------------- +// +void CAknFepPluginManager::SetEdwinFlagsByUiStatus( TBool aOpened ) + { + MCoeFepAwareTextEditor* edwin( iFepMan.FepAwareTextEditor() ); + + TInt uiStatusFlags( EAknEditorFlagTouchInputModeOpened + | EAknEditorFlagHideTextView ); + + if ( aOpened ) + { + // if another editor gets focus, remove flags from previous editor. + if ( iEdwin != edwin ) + { + SetAknEdwinFlags( iEdwin, uiStatusFlags, EFalse ); + } + + // set flags to current focused editor + SetAknEdwinFlags( edwin, uiStatusFlags, ETrue ); + + //save reference to focused editor + iEdwin = edwin; + } + else + { + SetAknEdwinFlags( edwin, uiStatusFlags, EFalse ); + iEdwin = NULL; + } + } + +// ----------------------------------------------------------------------------- +// Update state flags of specified editor +// ----------------------------------------------------------------------------- +// +void CAknFepPluginManager::SetAknEdwinFlags( MCoeFepAwareTextEditor* aEdwin, + TInt aFlags, TBool aSet ) + { + if ( aEdwin && aEdwin->Extension1() ) + { + CAknEdwinState* edwinState ( static_cast( + aEdwin->Extension1()->State( KNullUid ) ) ); + if ( edwinState ) + { + TInt edwinFlags( edwinState->Flags() ); + if ( aSet ) + { + edwinFlags |= aFlags; + } + else + { + edwinFlags &= ~aFlags; + } + + edwinState->SetFlags( edwinFlags ); + } + } + } + void CAknFepPluginManager::InformMfneUiStatusL( TBool aOpened ) { if ( iMfne && ( iMfneChanged || !aOpened )) @@ -5422,9 +5755,10 @@ } //if it's in global notes, show it. - if(EPluginInputModeItut == PluginInputMode() || - EPluginInputModeFSQ == PluginInputMode() || - EPluginInputModeFingerHwr == PluginInputMode()) + if ( EPluginInputModeItut == PluginInputMode() || + EPluginInputModeFSQ == PluginInputMode() || + EPluginInputModeFingerHwr == PluginInputMode() || + EPluginInputModePortraitFSQ == PluginInputMode() ) { if(iInGlobleNoteEditor && iPenInputSvrConnected) { @@ -5674,7 +6008,8 @@ TBool CAknFepPluginManager::IsSupportITIOnFSQ() { #ifdef RD_INTELLIGENT_TEXT_INPUT - if ( iPluginInputMode == EPluginInputModeFSQ + if ( ( iPluginInputMode == EPluginInputModeFSQ || + iPluginInputMode == EPluginInputModePortraitFSQ ) // Exclude non Latin mode && iFepMan.InputMode() == ELatin // Exclude accent range @@ -6076,6 +6411,50 @@ TRAP_IGNORE(ActivatePenInputL()); } +// ----------------------------------------------------------------------------- +// Handling the menu cmd for changing the input mode +// ----------------------------------------------------------------------------- +// +void CAknFepPluginManager::ProcessChangingInputModeCmdL(TInt aInputMode) + { + // Save iCurEditor and iCurMFNECap to temp variable the curEditor + // and CurMFNECap respectively before calling ResetMenuState + // since this function will reset iCurEditor + // but later TryChangePluginInputModeByModeL() will use this as + // an flag to identify whether the mode to be opened is split one. + MCoeFepAwareTextEditor* savedCurEditor = iCurEditor; + TUint savedCurMFNECap = iCurMFNECap; + + + //Here calling this function is to reset menu state when the focus change + // caused by the screen orientation, in the normal circumstance the foucus + // change should not occur while the screen orientation is handling. + // So directly resetting menu state to avoid the above case, + // preconditon is that the option menu must be closed. + + // Reset the menu state to clear iInMenu to process focus change message + // following funciton will set iCurEditor to NULL + ResetMenuState(EFalse); + ClosePluginInputModeL(ETrue); + iFepMan.TryCloseUiL(); + + // we have to resore iCurEditor's value which was saved before calling + // ResetMenuState since the iCurEditor will be used as a falg to identify + // whether the the mode to be opened is split one. + // if it would be NULL, TryChangePluginInputModeByModeL will first open + // the Normal FSQ/VITUT, and then after a focus change + // [the menu is really dismissed], + // the correct Split FSQ/VITT will be opened, so the flicker will be seen. + iCurEditor = savedCurEditor; + iCurMFNECap = savedCurMFNECap; + + TryChangePluginInputModeByModeL((TPluginInputMode)aInputMode, + EPenInputOpenManually, + ERangeInvalid); + iCurMFNECap = 0; + iCurEditor = NULL; + } + CConnectAo::CConnectAo(CAknFepPluginManager* aClient) : CActive(CActive::EPriorityStandard), iClient(aClient) diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepSharedDataInterface.cpp --- a/fep/aknfep/src/AknFepSharedDataInterface.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepSharedDataInterface.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -45,6 +45,7 @@ #include // KAknQwertyInputModeActive #include //Pen related settings #include // KCRUidSensorSettings +#include // Feature Manager // TODO: include CommonengineInternalCRKeys.h const TUid KCRUidCommonEngineKeys = {0x1020503B}; @@ -359,6 +360,32 @@ void CAknFepSharedDataInterface::SetPluginInputMode(TInt aDevice) { + // Check validity of the input mode to be set. + if ( aDevice == EPluginInputModeItut ) + { + __ASSERT_DEBUG( FeatureManager::FeatureSupported( + KFeatureIdVirtualItutInput ), + User::Panic( _L( "Wrong input mode - ITU-T" ), __LINE__ ) ); + } + else if ( aDevice == EPluginInputModeFSQ ) + { + __ASSERT_DEBUG( FeatureManager::FeatureSupported( + KFeatureIdVirtualFullscrQwertyInput ), + User::Panic( _L( "Wrong input mode - Landscape FSQ" ), + __LINE__ ) ); + } + else if ( aDevice == EPluginInputModePortraitFSQ ) + { + __ASSERT_DEBUG( FeatureManager::FeatureSupported( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ), + User::Panic( _L( "Wrong input mode - Portrait FSQ" ), + __LINE__ ) ); + } + else + { + // Do nothing. + } + if (iAknFepRepository) { iAknFepRepository->Set(KAknFepLastUsedInput, aDevice); @@ -1891,4 +1918,94 @@ } #endif +/** + * Get the last used plugin input mode for portrait orientation + * + * @since 5.2 + * @return Value of KAknFepLastUsedPortraitInput setting. + */ +TPluginInputMode CAknFepSharedDataInterface::PluginPortraitInputMode() const + { + TInt cenRepValue( 0 ); + if ( iAknFepRepository ) + { + iAknFepRepository->Get( KAknFepLastUsedPortraitInput, cenRepValue ); + } + + TPluginInputMode lastUsedPortraitInputMode = + static_cast( cenRepValue ); + + // Check portrait FSQ and ITU-T feature are enabled. + TBool isPortraitFSQEnabled = FeatureManager::FeatureSupported( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ); + TBool isITUTEnabled = FeatureManager::FeatureSupported( + KFeatureIdVirtualItutInput ); + + // If both ITU-T and portrait FSQ features are enabled, use the saved + // portrait input mode. + if ( isITUTEnabled && isPortraitFSQEnabled ) + { + // If the saved portrait input mode is not valid, use the default + // value, EPluginInputModeItut. + if ( ! ( lastUsedPortraitInputMode == EPluginInputModeItut || + lastUsedPortraitInputMode == EPluginInputModePortraitFSQ ) ) + { + lastUsedPortraitInputMode = EPluginInputModeItut; + } + } + // If only ITU-T feature is enabled, use the mode. + else if ( isITUTEnabled ) + { + lastUsedPortraitInputMode = EPluginInputModeItut; + } + // If only portrait FSQ feature is enabled, use the mode. + else if ( isPortraitFSQEnabled ) + { + lastUsedPortraitInputMode = EPluginInputModePortraitFSQ; + } + // If none of the features are enabled, EPluginInputModeNone is assigned + // for exception handling. + else + { + lastUsedPortraitInputMode = EPluginInputModeNone; + } + + return lastUsedPortraitInputMode; + } + +/** + * Replaces the last used plugin input mode for portrait orientation + * + * @since 5.2 + * @return Replace value of KAknFepLastUsedPortraitInput setting. + */ +void CAknFepSharedDataInterface::SetPluginPortraitInputMode( + TPluginInputMode aLastUsedPortraitInputMode ) + { + // Check validity of the input mode to be set. The input mode is not + // valid if, + // i) The input mode is not neither ITU-T nor portrait FSQ. + if ( !( aLastUsedPortraitInputMode == EPluginInputModeItut || + aLastUsedPortraitInputMode == EPluginInputModePortraitFSQ ) || + // ii) The input mode is ITU-T but the feature is disabled. + ( aLastUsedPortraitInputMode == EPluginInputModeItut && + !FeatureManager::FeatureSupported( KFeatureIdVirtualItutInput ) ) || + // iii) The input mode is portrait FSQ but the feature is disabled. + ( aLastUsedPortraitInputMode == EPluginInputModePortraitFSQ && + !FeatureManager::FeatureSupported( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ) ) ) + { + __ASSERT_DEBUG( 0, + User::Panic( _L( "Wrong portrait input mode" ), __LINE__ ) ); + // Return without saving the value if the portrait input is invalid. + return; + } + + if ( iAknFepRepository ) + { + TInt err = iAknFepRepository->Set( KAknFepLastUsedPortraitInput, + static_cast( aLastUsedPortraitInputMode ) ); + } + } + // End of File diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -265,14 +265,20 @@ { shiftedCase= EPtiCaseLower; } - + + TBool portraitFSQ = FeatureManager::FeatureSupported( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ) + && fepMan->PluginUIManager() + && fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModePortraitFSQ; + // For addition of ITI features. // When FSQ is opened wiht ITI features enabled, // after pressing keys, don't need to re-set current text case by editor's text or FN key state. // Because FSQ's case doesn't obey editor's case and there is no fn key on FSQ. if ( fepMan->PluginUIManager() - && fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModeFSQ - && fepMan->WesternPredictive() ) + && ( fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModeFSQ + || portraitFSQ ) + && fepMan->WesternPredictive() ) { return; } diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -128,22 +128,25 @@ fepMan->NewCharacterL(aChr); fepMan->CommitInlineEditL(); - if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) - { - fepMan->LaunchSpecialCharacterTableL(); - return ETrue; - } + if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT()) + { + fepMan->LaunchSpecialCharacterTableL(); + return ETrue; + } } - else if (fepMan->EditSubmenuInUse()) - { - aLength = ELongKeyPress; - } + else if (fepMan->EditSubmenuInUse()) + { + aLength = ELongKeyPress; + } } } // Implementation for the Vietnamese back deletion if (aKey == EKeyBackspace) { + // Key looping should be cancelled as pressing backspace key + toneMgr->StopKeyLooping(); + TBuf<2> newText; // Get the last character from the current editor TText prevChar = fepMan->PreviousChar(); @@ -155,11 +158,11 @@ ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); fepMan->NewCharacterL(newText); fepMan->CommitInlineEditL(); - // Stop looping for backspace operation - if( toneMgr->IsLooping() ) - { - toneMgr->StopToneMarkLooping(); - } + // Stop looping for backspace operation + if( toneMgr->IsLooping() ) + { + toneMgr->StopToneMarkLooping(); + } return ETrue; } else @@ -177,65 +180,79 @@ } } - if( toneMgr->IsKeyLooping( aKey ) ) + if( aLength == EShortKeyPress ) { - if( toneMgr->ToneMarkIndex() != KErrNotFound ) + if( toneMgr->IsKeyLooping( aKey ) ) { - // Get current tone mark - TText toneVowel; - if( toneMgr->GetLoopingToneMarkVowel( toneVowel ) ) + if( toneMgr->ToneMarkIndex() != KErrNotFound ) { - // remove two previous chars - ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); - ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); - - TBuf aChr; - aChr.Append(toneVowel); + // Get current tone mark + TText toneVowel; + if( toneMgr->GetLoopingToneMarkVowel( toneVowel ) ) + { + // remove two previous chars + ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); + ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); + + TBuf aChr; + aChr.Append(toneVowel); + + // Update inline character(s) + fepMan->CancelInlineEdit(); + fepMan->NewCharacterL(aChr); + + toneMgr->SetLoopingCombined( ETrue ); + bHandled = ETrue; + } - // Update inline character(s) - fepMan->CancelInlineEdit(); - fepMan->NewCharacterL(aChr); + // Reset the engine timer so that we can get timer expired message + // We send the * key, and clear it in the next loop + ptiEng->ClearCurrentWord(); + ptiEng->AppendKeyPress((TPtiKey)EPtiKeyStar); + } + else + { + if( toneMgr->IsLoopingCombined() ) + { + // remove tone mark + TBuf<2> newText; + // Get the last character from the current editor + TText prevChar = fepMan->PreviousChar(); + + // Judge if the last character needs to be converted + if ( NeedsVietnameseBkDelSupport(prevChar, newText) ) + { + // Delete the prev character and send the new character to editor + ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); + fepMan->NewCharacterL(newText); + fepMan->CommitInlineEditL(); + } - toneMgr->SetLoopingCombined( ETrue ); - bHandled = ETrue; + toneMgr->SetLoopingCombined( EFalse ); + } } - - // Reset the engine timer so that we can get timer expired message - // We send the * key, and clear it in the next loop - ptiEng->ClearCurrentWord(); - ptiEng->AppendKeyPress((TPtiKey)EPtiKeyStar); } else { - if( toneMgr->IsLoopingCombined() ) + // Key looping is not supported with Backspace key + // Otherwise the process of deleting a2222 is wrong + if ( aKey != EKeyBackspace ) { - // remove tone mark - TBuf<2> newText; - // Get the last character from the current editor - TText prevChar = fepMan->PreviousChar(); - - // Judge if the last character needs to be converted - if ( NeedsVietnameseBkDelSupport(prevChar, newText) ) - { - // Delete the prev character and send the new character to editor - ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); - fepMan->NewCharacterL(newText); - fepMan->CommitInlineEditL(); - } - - toneMgr->SetLoopingCombined( EFalse ); + toneMgr->StartKeyLooping( aKey ); } } } else { - toneMgr->StartKeyLooping( aKey ); + // Key looping should be cancelled as long pressing key + // Otherwise a22 can not be inputted by press a, long press 2 and long press 2. + toneMgr->StopKeyLooping(); } if(!bHandled && toneMgr->IsLooping()) - { - toneMgr->StopToneMarkLooping(); - } + { + toneMgr->StopToneMarkLooping(); + } return bHandled ? ETrue : TAknFepInputStateInitialMultitapBase::HandleKeyL(aKey, aLength); } diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepUiInputStateQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateQwerty.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepUiInputStateQwerty.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -1196,8 +1196,11 @@ } } // Disable UI framewroks's qwerty iCode conversion for simulated event. - numKey.iModifiers |= EModifierSpecial; - if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric())) + numKey.iModifiers |= EModifierSpecial; + + //as the editor is a Java number editor, we did not simulate the number key event + if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()) + && !fepMan->IsSpecialNumericEditor() ) { CCoeEnv::Static()->SimulateKeyEventL(numKey, EEventKey); #ifdef RD_INTELLIGENT_TEXT_INPUT diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/AknFepUiManagerKorean.cpp --- a/fep/aknfep/src/AknFepUiManagerKorean.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/AknFepUiManagerKorean.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -219,14 +219,17 @@ { switch(iMode) { - case ELatin: - { + case EHangul: iFepUiState = TAknFepInputStateQwertyKorean(this); - break; - } + break; + case ELatin: + case ENumber: + case ENativeNumber: + iFepUiState = TAknFepInputStateQwerty(this); + break; default: - AknFepPanic(EAknFepPanicBadInputState); - break; + AknFepPanic(EAknFepPanicBadInputState); + break; } break; } diff -r b1ea1642412e -r ac7e4d1d9209 fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp --- a/fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -24,7 +24,9 @@ #include #include #include -#include +#include + +const TInt KMaxPtiTextBufSize = 255; TAknFepInputStateQwertyKorean::TAknFepInputStateQwertyKorean( MAknFepUIManagerStateInterface* aOwner) @@ -39,42 +41,113 @@ { } -TBool TAknFepInputStateQwertyKorean::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/) - { -// LOG2("KO.IS.QWERTY.HandleKeyL %d,%d",aKey,aLength); - CPtiEngine& ptiEngine(*(iOwner->PtiEngine())); - MAknFepManagerUIInterface& fepMan(*(iOwner->FepMan())); - - TPtrC text(ptiEngine.AppendKeyPress((TPtiKey)aKey)); - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append(text[jj]); - fepMan.NewCharacterL(chr); - } - return ETrue; +TBool TAknFepInputStateQwertyKorean::HandleKeyL(TInt aKey, TKeyPressLength aLength) + { + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + CPtiEngine* ptiengine = iOwner->PtiEngine(); + TBool ret = ETrue; + + switch( aKey ) + { + case EKeyDelete: + case EStdKeyDelete: + case EKeyBackspace: + case EStdKeyBackspace: + { + if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) + { + TPtrC newText = ptiengine->DeleteKeyPress(); + if( newText.Length() > 0 ) + { + fepMan->UpdateInlineEditL(newText, newText.Length()); + } + else + { + fepMan->CancelInlineEdit(); + ptiengine->ClearCurrentWord(); + } + } + else + { + ret = EFalse; + } + } + break; + case EStdKeyEnter: + case EStdKeySpace: + case EStdKeyTab: + case EStdKeyLeftArrow: + case EStdKeyRightArrow: + case EStdKeyDownArrow: + case EStdKeyUpArrow: + { + fepMan->CommitInlineEditL(); + ptiengine->CommitCurrentWord(); + ret = EFalse; + } + break; + default: + { + //normal character handled here + if ( EShortKeyPress == aLength ) + { + if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) + { + // start inline edit + ptiengine->ClearCurrentWord(); + fepMan->StartInlineEditL(); + fepMan->SetInlineEditingCursorVisibilityL(ETrue); + } + + TPtrC aText = ptiengine->AppendKeyPress((TPtiKey)aKey); + if( aText.Length() > 0 ) + { + fepMan->UpdateInlineEditL(aText, aText.Length()); + if( aText.Length() >= KMaxPtiTextBufSize ) + { + // force commit + fepMan->CommitInlineEditL(); + ptiengine->CommitCurrentWord(); + } + } + } + else // long press + { + if (!fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) + { + return ETrue; + } + + //delete last input text + TPtrC text = ptiengine->DeleteKeyPress(); + if( text.Length() >0 ) + { + fepMan->UpdateInlineEditL(text, text.Length()); + } + + // add new text + TPtiTextCase previousCase = ptiengine->Case(); + switch ( previousCase ) + { + case EPtiCaseLower: + case EPtiCaseUpper: + ptiengine->SetCase( EPtiCaseFnLower ); + break; + default: + break; + } + + TPtrC newText = ptiengine->AppendKeyPress((TPtiKey)aKey); + if( newText.Length() >0 ) + { + fepMan->UpdateInlineEditL(newText, newText.Length()); + } + ptiengine->SetCase( previousCase ); + fepMan->CommitInlineEditL(); + ptiengine->ClearCurrentWord(); + } + } + break; + } + return ret; } - -void TAknFepInputStateQwertyKorean::KeyTimerExpired() - { -// LOG1("KO.IS.QWERTY.KeyTimerExpired %d",iData); - CPtiEngine& ptiEngine(*(iOwner->PtiEngine())); - MAknFepManagerUIInterface& fepMan(*(iOwner->FepMan())); - - TPtrC text(ptiEngine.CurrentWord()); - TBuf<1> chr; - for (TInt jj = 0; jj < text.Length(); jj++) - { - chr.Zero(); - chr.Append(text[jj]); - TRAP_IGNORE( fepMan.NewCharacterL(chr) ); - } - - //TRAPD(err, fepMan.CommitInlineEditL()) - TRAP_IGNORE( fepMan.CommitInlineEditL() ) - } - -//fepMan.StartInlineEditL(text); -//iFepMan.StartInlineEditL() -//virtual void SetCursorSelectionL(const TCursorSelection& aCurSel, TBool aSyncCursor) = 0; diff -r b1ea1642412e -r ac7e4d1d9209 inputmethods_plat/aknfep_definitions_api/inc/AknFepGlobalEnums.h --- a/inputmethods_plat/aknfep_definitions_api/inc/AknFepGlobalEnums.h Thu Jul 15 19:01:13 2010 +0300 +++ b/inputmethods_plat/aknfep_definitions_api/inc/AknFepGlobalEnums.h Thu Aug 19 10:15:25 2010 +0300 @@ -173,7 +173,9 @@ EPluginInputModeFSc = 16, // new one EPluginInputModeMiniItut = 32, EPluginInputModeFingerHwr = 64, - EPluginInputModeAll = 127 // EPluginInputModeHwr | ... | EPluginInputModeFingerHwr| + EPluginInputModePortraitFSQ = 128, // For portrait FSQ + // EPluginInputModeHwr | ... | EPluginInputModePortraitFSQ + EPluginInputModeAll = 255 }; #define KLatinToDevanagariDigitsDelta 0x0936 diff -r b1ea1642412e -r ac7e4d1d9209 inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h --- a/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h Thu Jul 15 19:01:13 2010 +0300 +++ b/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h Thu Aug 19 10:15:25 2010 +0300 @@ -368,6 +368,19 @@ * 0 is for latin number and 1 is for native number. */ const TUint32 KAknFepDefaultArabicNumberMode = 0x00000025; + +/** + * This key is used for storing the last used input mode in portrait orientation. + * With adding portrait FSQ, users have two choices for portrait input mode, + * ITU-T and portrait FSQ. The last used input mode in portrait orientation is + * kept to have the input mode if the phone changes the orientation to landscape + * and back to portrait. + * + * Only EPluginInputModeItut(8) and EPluginInputModePortraitFSQ(128) are valid, + * and the default value is EPluginInputModeItut. + */ +const TUint32 KAknFepLastUsedPortraitInput = 0x00000026; + #endif // End of file diff -r b1ea1642412e -r ac7e4d1d9209 inputmethods_plat/pen_input_server_api/inc/peninputcmd.h --- a/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h Thu Jul 15 19:01:13 2010 +0300 +++ b/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h Thu Aug 19 10:15:25 2010 +0300 @@ -153,6 +153,7 @@ ESignalDeleteLastInput, ESignalArabicSCTChar, ESignalDeactivateSprite, + ESignalChangeAmPm,//notify mfne editor to toggle AM or PM ESignalUserEventBase = 2000 }; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/group/bld.inf --- a/textinput/group/bld.inf Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/group/bld.inf Thu Aug 19 10:15:25 2010 +0300 @@ -50,5 +50,6 @@ #include "../peninputhwrfscn/group/bld.inf" #include "../peninputvkbkr/group/bld.inf" #include "../peninputfingerhwr/group/bld.inf" +#include "../peninputfingerhwrar/group/bld.inf" #include "../peninputsplititut/group/bld.inf" #include "../peninputsplitqwerty/group/bld.inf" diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc --- a/textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc Thu Aug 19 10:15:25 2010 +0300 @@ -313,4 +313,108 @@ // r:5.0 // #define qtn_tin_option_menu_arabic_wdic "Recognition with dictionary" + +// d:Text in Handwriting input setting +// d:Label's text for handwriting input setting in device view +// l:list_single_large_graphic_pane_t1 +// r:TB9.2 +#define qtn_cp_folder_handwriting_input "Handwriting input settings" + +// d:Text in Handwriting input setting +// d:It is title text in handwriting input setting view +// l:title_pane_t2/opt9 +// r:TB9.2 +#define qtn_cp_title_handwriting_input "Handwriting input settings" + +// d:Text in Handwriting input setting +// d:It is caption text for handwriting input settings in general settings +// l:title_pane_t2/opt9 +// r:TB9.2 +#define qtn_gen_settings_handwriting_input "Handwriting input settings" + +// d:Text in Handwriting input setting +// d:Setting name for handwriting input +// l:list_setting_pane_t1 +// r:TB9.2 +#define qtn_as_settings_simple_hwr "Handwriting input" + +// d:Text in Handwriting input setting +// d:Handwriting input can be actived +// l:list_set_graphic_pane_t1 +// r:TB9.2 +#define qtn_ads_settings_enable_simple_hwr "On" + +// d:Text in Handwriting input setting +// d:Handwriting input can not be actived +// l:list_set_graphic_pane_t1 +// r:TB9.2 +#define qtn_ads_settings_disable_simple_hwr "Off" + + +// d:It is text for selecting the fuzzy pinyin input settings +// l:list_setting_pane_t1 +// r:9.2 +// +#define qtn_tin_settings_fuzzy_pinyin "Fuzzy Pinyin" + + +// d:It is text for showing fuzzy pinyin value in input settings +// l:list_set_graphic_pane_t1 +// r:9.2 +// +#define qtn_tin_settings_fuzzy_pinyin_no_setting "No setting" + + +// d:It is text for selecting the import contacts in input settings +// l:list_setting_pane_t1 +// r:9.2 +// +#define qtn_tin_settings_import_contacts_name "Import contacts name of Phonebook" + + +// d:It is text for showing the import date in input settings +// l:list_set_graphic_pane_t1 +// r:9.2 +// +#define qtn_tin_settings_import_contacts_name_time "Import date: %U" + + +// d:It is text for showing not import in input settings +// l:list_set_graphic_pane_t1 +// r:9.2 +// +#define qtn_tin_settings_import_contacts_name_not_import_yet "Not imported" + +// d:It is text for softkey to stop import dialog +// l:control_pane_t2/opt7 +// r:9.2 +// +#define qtn_tin_settings_import_contacts_name_stop "stop" + +// d:It is note text for succeed import contacts +// l:popup_note_window/opt2 +// r:9.2 +// +#define qtn_tin_settings_import_contacts_name_note "%0N contact names have been imported." + +// d:It is text for no phonebook contacts when import. +// l:popup_note_window/opt2 +// r:9.2 +// +#define qtn_tin_settings_import_contacts_name_empty "No contact in Phonebook." + +// d:It is text for showing the import process. +// l:popup_note_wait_window +// r:9.2 +// +#define qtn_tin_settings_import_contacts_name_wait "Importing, please wait...\n(%0N/%1N)" + + +// d:text display when we can't access the phonebook data +// l:popup_note_window/opt2 +// r:9.2 +// +#define qtn_tin_settings_import_contacts_name_error_access "Can't access phonebook data" + + // End Of File diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h --- a/textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h Thu Aug 19 10:15:25 2010 +0300 @@ -196,12 +196,51 @@ void UpdateCursor(TBool aOnFlag,const CFbsBitmap* aCursorBmp,const TRect& aPos); void SetPopupArea(const TRect& aRect, TBool aFlag); void UpdateICFArea(const CFbsBitmap* aBmp,const TPoint& aPos); - void UpdateChangedArea(const CFbsBitmap* aBmp,const TRect& aRect,TBool aFlag); - void UpdateBubble(const CFbsBitmap* aBmp,const CFbsBitmap* aMaskBmp,const TRect& aPos,TBool aFlag); + + /** + * Update the bubble area list + * + * @since S60 v5.0 + * @param aCtrl the Ctrl's address + * @param aBmp the bubble bitmap's address + * @param aRect the bubble rect + * @param aFlag ETrue means add bubble area and + * EFalse means remove bubble area + * @return void + */ + void UpdateChangedArea( const TUint32 aCtrl, + const CFbsBitmap* aBmp, const TRect& aRect, TBool aFlag ); + + /** + * Update the bubble area list + * + * @since S60 v5.0 + * @param aCtrl the Ctrl's address + * @param aBmp the bubble bitmap's address + * @param aMaskBmp the bubble mask bitmap's address + * @param aPos the bubble rect + * @param aFlag ETrue means add bubble area and + * EFalse means remove bubble area + * @return void + */ + void UpdateBubble( const TUint32 aCtrl, + const CFbsBitmap* aBmp, const CFbsBitmap* aMaskBmp, + const TRect& aPos, TBool aFlag ); + void Clean(); void HandleNGASpecificSignal(TInt aEventType, const TDesC& aEventData); void LiftUpPriority(); + + /** + * Update the cursor color + * + * @since S60 v5.0 + * @param none + * @return void + */ + void SetCursorColor(); + public: // Functions from base classes. /** @@ -302,6 +341,12 @@ CFbsBitmap* iChangedBmp; RPointerArray iBubblesArea; RPointerArray iBubblesMaskArea; + + /** + * An array of the Controls' addresses + */ + RArray iBubblesCtrl; + RArray iBubblesPos; TPoint iCursorPos; @@ -335,6 +380,11 @@ TBool iNotUpdating; CCursorWindow* iCursorWnd; + /** + * The cursor's color + */ + TRgb iCursorColor; + friend class CCursorWindow; }; class CInternalBkCtrl : public CCoeControl diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputarc/src/peninputanim/peninputanim.cpp --- a/textinput/peninputarc/src/peninputanim/peninputanim.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputarc/src/peninputanim/peninputanim.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -1051,7 +1051,7 @@ // void CPeninputAnim::StartTimer() { - if ( iIsActive ) + if ( iIsActive && !iFlushTimer->IsActive()) { iFlushTimer->Start( KFlushTimerPeriod, diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -66,6 +66,8 @@ EXPORT_C CBubbleCtrl::~CBubbleCtrl() { + Close(); + if ( iText ) delete iText; @@ -228,12 +230,14 @@ { struct SData { + TUint32 ctrl; TBool flag; TRect pos; CFbsBitmap* bmp; CFbsBitmap* mask; } data; + data.ctrl = (TUint32)this; data.flag = ETrue; data.pos = Rect(); data.bmp = iBitmap; @@ -313,11 +317,13 @@ { struct SData { + TUint32 ctrl; TBool flag; TRect pos; CFbsBitmap* bmp; } data; + data.ctrl = (TUint32)this; data.flag = EFalse; data.pos = Rect(); data.bmp = iBitmap; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -46,6 +46,10 @@ #include "peninputlayoutsmiley.h" #include + +#include +#include + const TInt KParagraphSeperator = 0x2029; const TInt KSecretUpdateTimer = 1000000; // 1s const TInt KSecretInstantShowTimer = 100000; // 100ms @@ -1049,6 +1053,7 @@ } TFontSpec fontSpec; + fontSpec = aFont->FontSpecInTwips(); fontSpec.iHeight = aFont->HeightInPixels(); CFont* font; iCoeEnv->ScreenDevice()->ReleaseFont(CONST_CAST(CFont*, iFont)); @@ -1067,6 +1072,7 @@ iCharFormat.iFontSpec.iHeight = iCoeEnv->ScreenDevice()->VerticalPixelsToTwips(iFontHeight); iCharFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal); iCharFormat.iFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap); + iCharFormat.iFontSpec.iTypeface = iFont->FontSpecInTwips().iTypeface; iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, iRichText->DocumentLength()); if( InlineStateOn() || AutoCompletionStateOn() ) @@ -1981,6 +1987,19 @@ iCursorSel = TCursorSelection(cursorPos+iPromptTextLen, iCursorSel.iAnchorPos); AdjustFepCursorPosForPromptText( ETrue ); + + TAmPmName amName(EAm); + TAmPmName pmName(EPm); + TInt offset = iMfneIcfData->Find(amName)!= KErrNotFound? + iMfneIcfData->Find(amName):iMfneIcfData->Find(pmName); + //if current is 12-hour format and touch on correct position + if(offset != KErrNotFound && + iCursorSel.LowerPos()-iPromptTextLen>= offset && + iCursorSel.LowerPos()-iPromptTextLen<= offset+amName.Length()) + { + UiLayout()->SignalOwner(ESignalChangeAmPm); + } + return this; } diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -1081,10 +1081,13 @@ { struct SData { + TUint32 ctrl; TBool flag; CFbsBitmap* bmp; TRect pos; } data; + + data.ctrl = (TUint32)this; data.flag = aFlag; data.bmp = Keyboard()->Bitmap();//aFlag ? Keyboard()->iBitmap : 0; data.pos = Rect(); diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputarc/src/peninputserverapp/peninputserver.cpp --- a/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -57,6 +57,11 @@ const TInt KWsSessionFlushPerioid = 50000;//50ms const TInt KInvalidValue = -1; +// Layout UID for portrait FSQ. Used for distinguish between +// landscape and portrait FSQ for EPluginInputModeFSQ, which +// is used for both orientation in Pen Input server side code. +const TInt KPenInputSrvPrtFsqUiId = 0x20026837; + enum TActivationFlag { @@ -443,7 +448,13 @@ } // we should not be able to activate and show pen ui if this mode is disabled currently - if(iUiLayout->PenInputType() & DisabledByOrientation()) + TInt inputType = iUiLayout->PenInputType(); + if( inputType == EPluginInputModeFSQ && iLayoutId.iUid == KPenInputSrvPrtFsqUiId ) + { + inputType = EPluginInputModePortraitFSQ; + } + if( inputType & DisabledByOrientation() ) + { // we have activate the animation otherwise we will see the penui but not reponse // when clicking on it in the case we rotating the screen quickly and continously @@ -559,7 +570,12 @@ // [[[ temporary solution for Virtual keyboard becomes corrupted after several rotations // we should not be able to activate and show pen ui if this mode is disabled currently - if(iUiLayout->PenInputType() & DisabledByOrientation()) + TInt inputType = iUiLayout->PenInputType(); + if( inputType == EPluginInputModeFSQ && iLayoutId.iUid == KPenInputSrvPrtFsqUiId ) + { + inputType = EPluginInputModePortraitFSQ; + } + if( inputType & DisabledByOrientation() ) { // we have activate the animation otherwise we will see the penui but not reponse // when clicking on it in the case we rotating the screen quickly and continously @@ -2108,6 +2124,9 @@ // void CPeninputServer::HandleResourceChange(TInt aType) { + // Update the cursor color when resource is changed + iPenUiCtrl->SetCursorColor(); + #ifdef FIX_FOR_NGA // iEnablePriorityChangeOnOriChange will be set to be EFalse, if some dialog in FEP end were opened and // not close after rotation for example: Symbol Table, Writing Language list and Match Dialog on ITI @@ -2121,7 +2140,13 @@ TBool needToLiftUp = EFalse; TInt inputMode = 0; inputMode = iUiLayout->PenInputType(); - if(inputMode == EPluginInputModeItut) + + // If input mode is either ITU-T or portrait FSQ, and if orientation + // is changed to landscape, highest priority is given to Pen UI to avoid + // flickering problem while drawing landscape FSQ layout. + if( inputMode == EPluginInputModeItut || + ( inputMode == EPluginInputModeFSQ && + iLayoutId.iUid == KPenInputSrvPrtFsqUiId ) ) { if(!isPortrait) { @@ -2155,20 +2180,28 @@ } } #endif - if(iUiLayout && !(iUiLayout->PenInputType() & DisabledByOrientation()) ) + if( iUiLayout ) { - //hide the layout if it's already shown - - if ( iActive ) + TInt inputType = iUiLayout->PenInputType(); + if( inputType == EPluginInputModeFSQ && iLayoutId.iUid == KPenInputSrvPrtFsqUiId ) + { + inputType = EPluginInputModePortraitFSQ; + } + if( !( inputType & DisabledByOrientation() ) ) { - iUiLayout->OnActivate(); - } + //hide the layout if it's already shown + + if ( iActive ) + { + iUiLayout->OnActivate(); + } - iUiLayout->OnResourceChange(aType); + iUiLayout->OnResourceChange(aType); - if(iUseWindowCtrl) - { - iPenUiCtrl->DrawNow(); + if(iUseWindowCtrl) + { + iPenUiCtrl->DrawNow(); + } } //show the layout if it's active @@ -2280,7 +2313,16 @@ return; } - if(iActive && !iPrevActive && inputMode != EPluginInputModeFSQ && iBackgroudDefaultOri == CAknAppUiBase::EAppUiOrientationUnspecified ) + // Both landscape and portrait FSQs are handled as EPluginInputModeFSQ + // in Pen Input server. iLayoutId can be used to check it's landscape or + // portrait. + TBool isLandscapeFSQ = + ( inputMode == EPluginInputModeFSQ && + iLayoutId.iUid != KPenInputSrvPrtFsqUiId ) + ? ETrue : EFalse; + + if ( iActive && !iPrevActive && !isLandscapeFSQ && + iBackgroudDefaultOri == CAknAppUiBase::EAppUiOrientationUnspecified ) { #ifdef FIX_FOR_NGA if(inputMode == EPluginInputModeFingerHwr) @@ -2893,7 +2935,14 @@ } if( size.iPixelSize.iWidth > size.iPixelSize.iHeight ) { - return disabled |= EPluginInputModeItut; + // Portrait input modes which are ITU-T and Portrait FSQ + // should be disabled in portrait orientation. + // Note: no need to check feature flag because if it is not + // turned on, EPluginInputModePortraitFSQ will not be handled + // at all so adding it to "disabled" will take no effect. + disabled |= EPluginInputModeItut | EPluginInputModePortraitFSQ; + + return disabled; } } } diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp --- a/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -72,10 +72,10 @@ iAutoRefreshTimer->Cancel(); } delete iAutoRefreshTimer; - iPopRegion.Close(); - iBubblesArea.Close(); - iBubblesMaskArea.Close(); - iBubblesPos.Close(); + + + Clean(); + delete iCursorWnd; } @@ -104,6 +104,9 @@ //iCursorWnd->ConstructL(this); iCursorWnd->SetContainerWindowL(*this); + // Update the cursor color + SetCursorColor(); + MakeVisible( EFalse ); } @@ -123,7 +126,7 @@ gc.BitBlt(pos, iBitmap, rect); #ifdef FIX_FOR_NGA //draw bubble - for (TInt i = 0; i < iBubblesArea.Count(); ++i) + for ( TInt i = 0; i < iBubblesCtrl.Count(); ++i ) { gc.BitBlt(iBubblesPos[i].iTl, iBubblesArea[i]); } @@ -135,7 +138,7 @@ #ifdef FIX_FOR_NGA gc.BitBlt(TPoint(0, 0), iBitmap, Rect()); //draw bubble - for (TInt i = 0; i < iBubblesArea.Count(); ++i) + for ( TInt i = 0; i < iBubblesCtrl.Count(); ++i ) { gc.BitBlt(iBubblesPos[i].iTl, iBubblesArea[i]); } @@ -165,8 +168,9 @@ void CPenUiWndCtrl::Clean() { iCursorBmp = NULL; - iBubblesArea.Reset(); - iBubblesPos.Reset(); + iBubblesArea.Close(); + iBubblesCtrl.Close(); + iBubblesPos.Close(); iBubblesMaskArea.Close(); iPopRegion.Close(); iChangedBmp= NULL; @@ -193,11 +197,33 @@ iParent->DrawCursor(gc); } +// --------------------------------------------------------------------------- +// CPenUiWndCtrl::SetCursorColor +// --------------------------------------------------------------------------- +// +void CPenUiWndCtrl::SetCursorColor() + { + // Set default cursor color to black + TRgb color( KRgbBlack ); + // if the skin is enabled + if ( AknsUtils::AvkonSkinEnabled()) + { + // Get the text color under current theme + AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), + color, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG60 ); + } + + // Set the cursor color + iCursorColor = color; + } + void CPenUiWndCtrl::DrawCursor(CWindowGc& aGc) const { - aGc.SetPenColor(KRgbBlack); + aGc.SetPenColor( iCursorColor ); aGc.SetBrushStyle(CGraphicsContext::ESolidBrush); - aGc.SetBrushColor(KRgbBlack); + aGc.SetBrushColor( iCursorColor ); aGc.SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN); aGc.SetPenStyle(CGraphicsContext::ESolidPen); aGc.SetPenSize( TSize(1,1)); @@ -250,16 +276,29 @@ } iCursorWnd->SetCursorVisible(aOnFlag); } - -void CPenUiWndCtrl::UpdateBubble(const CFbsBitmap* aBmp,const CFbsBitmap* aMask, - const TRect& aPos,TBool aFlag) + +// --------------------------------------------------------------------------- +// CPenUiWndCtrl::UpdateBubble +// --------------------------------------------------------------------------- +// +void CPenUiWndCtrl::UpdateBubble( const TUint32 aCtrl, + const CFbsBitmap* aBmp, + const CFbsBitmap* aMask, + const TRect& aPos, + TBool aFlag ) { - TInt idx = iBubblesArea.Find(aBmp); + + // Check whether the Ctrl address is exist + TInt idx = iBubblesCtrl.Find( aCtrl ); + if(aFlag) { if(KErrNotFound == idx) { + + iBubblesCtrl.Append( aCtrl ); + iBubblesArea.Append(aBmp); iBubblesMaskArea.Append(aMask); iBubblesPos.Append(aPos); @@ -275,6 +314,9 @@ //remove if(idx != KErrNotFound) { + + iBubblesCtrl.Remove( idx ); + iBubblesArea.Remove(idx); iBubblesMaskArea.Remove(idx); iBubblesPos.Remove(idx); @@ -288,13 +330,20 @@ iIcfPos = aPos; Invalidate(Rect(), ETrue); } -void CPenUiWndCtrl::UpdateChangedArea(const CFbsBitmap* aBmp,const TRect& aPos,TBool aFlag) + + +// --------------------------------------------------------------------------- +// CPenUiWndCtrl::UpdateChangedArea +// --------------------------------------------------------------------------- +// +void CPenUiWndCtrl::UpdateChangedArea( const TUint32 aCtrl, + const CFbsBitmap* aBmp,const TRect& aPos,TBool aFlag) { - UpdateBubble(aBmp,0,aPos,aFlag); - return; + UpdateBubble( aCtrl, aBmp, 0, aPos, aFlag ); + return; + } - - } + void CPenUiWndCtrl::SetPopupArea(const TRect& aRect, TBool aFlag) { if(aFlag) //add pop area @@ -694,25 +743,27 @@ { struct SData { + TUint32 ctrl; TBool flag; TRect pos; CFbsBitmap* bmp; CFbsBitmap* mask; } data; data = * (reinterpret_cast( const_cast( aEventData.Ptr() ))); - UpdateBubble(data.bmp,data.mask,data.pos,data.flag); + UpdateBubble( data.ctrl, data.bmp, data.mask, data.pos, data.flag ); } break; case ESignalUpdateChangedArea: { struct SData { + TUint32 ctrl; TBool flag; CFbsBitmap* bmp; TRect pos; } data; data = * (reinterpret_cast( const_cast( aEventData.Ptr() ))); - UpdateChangedArea(data.bmp,data.pos,data.flag); + UpdateChangedArea( data.ctrl, data.bmp, data.pos, data.flag ); } break; case ESignalRegisterBkControl: diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputcommonctrls/loc/peninputcommonctrls.loc --- a/textinput/peninputcommonctrls/loc/peninputcommonctrls.loc Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputcommonctrls/loc/peninputcommonctrls.loc Thu Aug 19 10:15:25 2010 +0300 @@ -30,16 +30,16 @@ //r: 5.0 #define qtn_input_switcher_fs_qwerty "Full Screen Qwerty" -//d:Text in touch input mode swither list -//d:portrait touch input method (full sreen qwerty or ITU-T) +//d:Text in touch input mode switcher list +//d:Portrait full sreen qwerty touch input method //l:list_single_pane_t1_cp2 -//r: 5.0 +//r: 5.2 #define qtn_tin_option_menu_portrait_editor "Edit portrait" -//d:Text in touch input mode swither list -//d:landscape full sreen qwerty touch input method +//d:Text in touch input mode switcher list +//d:Landscape full sreen qwerty touch input method //l:list_single_pane_t1_cp2 -//r: 5.0 +//r: 5.2 #define qtn_tin_option_menu_landscape_editor "Edit landscape" //d:Text in touch input mode swither list diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp --- a/textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -37,6 +37,8 @@ const TInt KDisplayTextLen = KMaxItemTextLength + KAknBidiExtraSpacePerLine; +const TInt KTextRectMargin = 4; + EXPORT_C CFepLayoutScrollableList* CFepLayoutScrollableList::NewL(CFepUiLayout* aUiLayout, TInt aControlId, TSize aItemSize, @@ -500,6 +502,14 @@ AknBidiTextUtils::ConvertToVisualAndClip(item->iText, buf, *iFont, itemRect.Width(), itemRect.Width()); } + + if ( itemRect.Height() - font->FontMaxHeight() < KTextRectMargin ) + { + // Make sure the height of the area for drawing text is larger than + // the max height of font by 4 pixels at least. + // The piece of code is used to avoid clipping some characters, like 'g'. + itemRect.SetHeight( font->FontMaxHeight() + KTextRectMargin ); + } gc->DrawText(buf, itemRect, baseLine, iAlign); gc->DiscardFont(); } @@ -608,7 +618,7 @@ EXPORT_C void CFepLayoutScrollableList::HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl, - const TDesC& aEventData) + const TDesC& /*aEventData*/) { if( aEventType == EEventButtonUp ) { diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h --- a/textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h Thu Aug 19 10:15:25 2010 +0300 @@ -335,6 +335,15 @@ IMPORT_C void CPeninputLayoutWindowExt::SetTextAlignmentL( TInt aAlignment ); + /** + * Unlatch the dead key for all kinds of vkb layout + * + * @since S60 v5.0 + * @param none + * @return void + */ + void CancelDeadKey(); + protected: /** diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp --- a/textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -490,7 +490,57 @@ return ETrue; } } - + +// --------------------------------------------------------------------------- +// CPeninputLayoutWindowExt::CancelDeadKey +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CPeninputLayoutWindowExt::CancelDeadKey() + { + // Get the dead key status + TInt latchedFlag = CPeninputDataConverter::AnyToInt( + iLayoutContext->RequestData( EAkninputDataTypeLatchedSet )); + // If the DeadKey is latched, cancel it + if ( latchedFlag ) + { + RPointerArray vkbListInfo; + RPointerArray keyInfoList; + + // Get the vkb layout list supportted by current writing language + vkbListInfo = iVkbLayout->VkbLayoutInfoList(); + TInt vkbListNum = vkbListInfo.Count(); + + CVirtualKey* pKey; + TBool deadKeyChange = EFalse; + + // Find the latched DeadKey in all kinds of vkb layout + // which supportted by current writing language + for ( TInt i = 0; i < vkbListNum && !deadKeyChange ; i++ ) + { + // Get the key info list in one vkb layout + keyInfoList = vkbListInfo[i]->KeyInfoList(); + TInt keyListNum = keyInfoList.Count(); + for ( TInt j = 0; j < keyListNum && !deadKeyChange ; j++ ) + { + pKey = keyInfoList[j]->Key(); + // If the Dead key is latched + if ( pKey->Latched()) + { + // Unlatch the DeadKey + pKey->SetLatched( EFalse ); + + // Set the DeadKey state + iLayoutContext->SetData( + EAkninputDataTypeLatchedSet, &deadKeyChange ); + + deadKeyChange = ETrue; + } + } + } + } + } + // --------------------------------------------------------------------------- // CPeninputLayoutWindowExt::ChangeInputLanguageL // (other items were commented in a header) @@ -518,6 +568,9 @@ if ( found ) { + // Remove the dead key's latched status + CancelDeadKey(); + // Store language iLayoutContext->SetData( EPeninputDataTypeInputLanguage, &aLangID ); @@ -820,45 +873,10 @@ // EXPORT_C void CPeninputLayoutWindowExt::ChangeVkbLayout( TInt aVkbLayoutId ) { - TInt latchedFlag = CPeninputDataConverter::AnyToInt( - iLayoutContext->RequestData(EAkninputDataTypeLatchedSet)); - // If the DeadKey is latched, cancel it and then change the VKB layout - if(latchedFlag) - { - RPointerArray vkbListInfo; - RPointerArray keyInfoList; - - vkbListInfo = iVkbLayout->VkbLayoutInfoList(); - TInt vkbListNum = vkbListInfo.Count(); - - CVirtualKey* pKey; - TBool deadKeyChange = EFalse; - // Find the latched DeadKey in all the Vkb layout - for(TInt i = 0; i < vkbListNum; i++) - { - // Get key info list in one VKB layout - keyInfoList = vkbListInfo[i]->KeyInfoList(); - TInt keyListNum = keyInfoList.Count(); - for(TInt j = 0; j < keyListNum; j++) - { - pKey = keyInfoList[j]->Key(); - if(pKey->Latched()) - { - // Unlatch the DeadKey - pKey->SetLatched(EFalse); - - // Set the DeadKey state - iLayoutContext->SetData(EAkninputDataTypeLatchedSet, &deadKeyChange); - deadKeyChange = ETrue; - break; - } - } - if(deadKeyChange) - { - break; - } - } - } + + // Remove the dead key's latched status + CancelDeadKey(); + TInt curVkbId = CPeninputDataConverter::AnyToInt ( iLayoutContext->RequestData( EPeninputDataTypeVkbLayout ) ); diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss --- a/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss Thu Aug 19 10:15:25 2010 +0300 @@ -1322,4 +1322,4 @@ scancode = 0x266B; } }; - } \ No newline at end of file + } diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/group/iconlist.txt --- a/textinput/peninputfingerhwrar/group/iconlist.txt Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/group/iconlist.txt Thu Aug 19 10:15:25 2010 +0300 @@ -64,4 +64,3 @@ -c8,8 qgn_indi_input_hwr_arabic_symbol_table.svg -c8,8 qgn_indi_input_hwr_arabic_writing_area.svg -c8,8 qgn_indi_input_arabic_backspace.svg --c8,8 qgn_indi_input_enter.svg \ No newline at end of file diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp --- a/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp Thu Aug 19 10:15:25 2010 +0300 @@ -43,6 +43,7 @@ SOURCE hbufcarrayar.cpp SOURCE peninputfingerhwrarwritingwnd.cpp SOURCE peninputfingerhwrarnumsymboltable.cpp +SOURCE peninputfingerhwarvkbutility.cpp USERINCLUDE ../inc diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/inc/peninputfingerhwarvkbutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwarvkbutility.h Thu Aug 19 10:15:25 2010 +0300 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2010 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: Implementation of virtual key ctrl utility for arabic hwr. +* +*/ + + +#ifndef C_PENINPUTFINGERHWARVKBUTILITY_H +#define C_PENINPUTFINGERHWARVKBUTILITY_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class TResourceReader; +class CVirtualKeyboard; +class CVirtualKey; + +// CLASS DECLARATION + +/** + * The virtual key board utility which implement a set of funtions: + * 1. create the virutal key + * 2. load virutal key image + * 3. load the virtual keys + * + * @lib peninputfingerhwrar.lib + * @since S60 v5.0 + */ + +class PeninputFingerHwrArVkbUtility + { +public: + /** + * Load VKB image + * + */ + static void LoadVkbKeyImageL(CVirtualKeyboard& aVkbCtrl, TInt aResId, const TSize& aKeySize); + + /** + * Load virutal Key and set key rects. + * + */ + static void LoadVirtualKeypadKeyL(CVirtualKeyboard& aVkbCtrl, const TInt aResId, const RArray& aCellRects); + + /** + * create a new virtual key + * + */ + static CVirtualKey* CreateVkbKeyL(TResourceReader& aReader, const TRect& aKeyRect); + + /** + * update the virtal key + * + */ + static void UpdateVkbKeyL( CVirtualKey* aVirtualKey, TResourceReader& aReader, const TRect& aKeyRect ); + }; + +#endif // C_PENINPUTFINGERHWARVKBUTILITY_H + +// End Of File diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h Thu Aug 19 10:15:25 2010 +0300 @@ -137,14 +137,6 @@ */ TInt PrimaryRange(); - /** - * Get current range - * - * @since Symbian TB9.2 - * @return Current range. - */ - TFingerHwrRange CurrentRange(); - /** * Set case @@ -456,11 +448,6 @@ RArray iPermittedRanges; /** - * Current range - */ - TFingerHwrRange iCurrentRange; - - /** * Permitted range in int format */ TInt iIntRange; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h Thu Aug 19 10:15:25 2010 +0300 @@ -153,6 +153,13 @@ */ TInt IcfTextHeight(); + /** + * get indicator bubble rect. + * + * @since Symbian TB9.2 + * @return bubble rect. + */ + TRect IndicatorBubbleRect(); public: //buttons /** @@ -492,6 +499,11 @@ TInt iIcfTextAlignment; CFont* iIcfFont; + /** + * Msg indicator bubble. + */ + TRect iRectIndicatorBubble; + /** * Candidate laf */ diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h Thu Aug 19 10:15:25 2010 +0300 @@ -30,8 +30,6 @@ class CPeninputFingerHwrArDataStore; class CRepository; class CPeninputFingerHwrArWnd; -class CPeninputFingerHwrArCallBack; - // class DECLARATIONS /** @@ -511,19 +509,12 @@ */ CRepository* iRepositorySetting; - /** - * repository object. - */ -// CRepository* iCommonEngineRepository; - /** * Check if the stroke of drawing the character on the * HWR box is started */ TBool iIsStrokeOfDrawingCharacerStarted; - CPeninputFingerHwrArCallBack* iCallBack; - /** * Check if the editor is MFNE */ diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h Thu Aug 19 10:15:25 2010 +0300 @@ -100,8 +100,7 @@ * sizechanged * */ - void SizeChanged(const TRect aVirtualKeypadRect, const RArray aBtnRects, - const TInt aKeypadRow, const TInt aKeypadCol, TBool aIsLandscape = ETrue); + void SizeChanged(const TRect& aVirtualKeypadRect); /** * Load VKB image @@ -122,12 +121,6 @@ inline CVirtualKeyboard* KeyPad(){return iNumKeypad;} /** - * Navigate page - * - */ - void UpdateNumSymbolTable(TInt aNumSctType = ENumSCTLatin); - - /** * Construct from resource * This funciton will be called when the resource has changed for example skin was changed */ @@ -140,7 +133,7 @@ * @param aNumMapping a string contains numbers and related char. max length is 16. * @return none */ - void SetNumericMapping( const TDesC& aNumMapping ); + void UpdateTableSymbol( const TDesC& aNumMapping ); /* * set arabic number mode. @@ -149,6 +142,14 @@ * @return none. */ void SetNativeNumMode(const TBool aIsNativeNumMode); + + /** + * Update the virtual keys rect. + * @since s60 5.2. + * @param aCellRects keypad cell rects. + * @return None. + */ + void UpdateAllVirtualKeysRect(const RArray & aCellRects); protected: //virtuals from CControlGroup (CFepUiBaseCtrl) /** @@ -207,20 +208,6 @@ */ void CreateVirtualKeypadL(); - /** - * create a new virtual key - * - */ - CVirtualKey* CreateVkbKeyL(TResourceReader& aReader, const TRect aKeyRect); - - /** - * update the virtal key - * - */ - void UpdateVkbKeyL( CVirtualKey* aVirtualKey, TResourceReader& aReader, - const TRect aKeyRect ); - void OnActivate(); - /** * Update the virtual key feedback * @@ -231,7 +218,14 @@ * Draw group control */ void Draw(); - + +private: + /** + * Refresh the symbol table + * + */ + void RefreshNumSymbolTable(); + /** * Load background from resource * @@ -242,6 +236,13 @@ * map latin number to arabic number. */ TInt16 MapLatinNumAccordingToNumMode(TInt16 aUnicode); + + /** + * Generate the char talbe according to the aNumMapping + * + */ + HBufC* GenerateCharTable(const TDesC& aNumMapping); + private: /** * multipage viritual keyboard @@ -254,12 +255,6 @@ */ TBool iPopupVisible; - /** - * store the layout mode - */ - TBool iIsLandscape; - - TInt iCurrentNumSCTType; /* * Default number mode. */ diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h Thu Aug 19 10:15:25 2010 +0300 @@ -100,7 +100,7 @@ * sizechanged * */ - void SizeChanged(const TRect aVirtualKeypadRect, const RArray aBtnRects, + void SizeChanged(const TRect aVirtualKeypadRect, const RArray & aBtnRects, const TInt aKeypadRow, const TInt aKeypadCol, TBool aIsLandscape = ETrue); /** @@ -223,20 +223,6 @@ */ void MoveIconButton( CAknFepCtrlEventButton* aButton, const TRect& aRect, TInt aXPadding=0, TInt aYPadding=0, TBool aReloadImages=ETrue ); - - /** - * create a new virtual key - * - */ - CVirtualKey* CreateVkbKeyL(TResourceReader& aReader, const TRect aKeyRect); - - /** - * update the virtal key - * - */ - void UpdateVkbKeyL( CVirtualKey* aVirtualKey, TResourceReader& aReader, - const TRect aKeyRect ); - void OnActivate(); /** * Show the visible page button diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h Thu Aug 19 10:15:25 2010 +0300 @@ -504,7 +504,8 @@ * @param aCellRects rects of virtual keys. * @return None */ - void LoadNumSymbolVirtualKeysL( const TInt aResId, const RArray& aCellRects ); + void LoadNumSymbolVirtualKeysL( const TInt aResId, + const RArray& aCellRects, TBool aReload = ETrue ); /** * relayout full ui, reset all controls position. diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -0,0 +1,197 @@ +/* +* Copyright (c) 2010 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: Implementation of virtual key ctrl utility for arabic hwr. +* +*/ + +// INCLUDE +#include +#include +#include + +#include "peninputfingerhwarvkbutility.h" +#include "peninputlayoutvkb.h" +#include "peninputpluginutils.h" +#include "hbufcarrayar.h" +#include "peninputfingerhwrarstoreconstants.h" + +// --------------------------------------------------------------------------- +// Load virtual keys image +// --------------------------------------------------------------------------- +// +void PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(CVirtualKeyboard& aVkbCtrl, const TInt aResId, const RArray& aCellRects) + { + aVkbCtrl.SetResourceId(aResId); + + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); + + // construct keys + TInt resKeyCount = reader.ReadInt16(); + TInt existsKeyCount = aVkbCtrl.KeyArray().Count(); + TInt rectCount = aCellRects.Count(); + + for ( TInt i = 0; i < resKeyCount; i++ ) + { + if ( i < existsKeyCount ) + { + CVirtualKey* vk = aVkbCtrl.KeyArray()[i]; + UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] ); + } + else + { + CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] ); + CleanupStack::PushL( vk ); + aVkbCtrl.AddKeyL( vk ); + + CleanupStack::Pop( vk ); + } + } + + CleanupStack::PopAndDestroy( 1 ); // reader + + aVkbCtrl.Draw(); + aVkbCtrl.UpdateArea( aVkbCtrl.Rect() ); + } + +// --------------------------------------------------------------------------- +// Create the virtual key +// --------------------------------------------------------------------------- +// +CVirtualKey* PeninputFingerHwrArVkbUtility::CreateVkbKeyL(TResourceReader& aReader,const TRect& aKeyRect) + { + CHBufCArray* keytexts = CHBufCArray::NewL(); + CleanupStack::PushL( keytexts ); + + for ( TInt i = 0; i <= EPosLast; i++ ) + { + HBufC* unicode = aReader.ReadHBufCL(); + keytexts->Array().AppendL( unicode ); + } + + TInt keyscancode = aReader.ReadInt16(); + + HBufC* text = keytexts->Array()[0]; + + CVirtualKey* vk = NULL; + if ( text ) + { + vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 ); + } + else + { + vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 ); + } + + CleanupStack::PopAndDestroy( keytexts ); //keytexts + + + TRect innerrect = aKeyRect; + innerrect.Shrink( TSize(10, 10) ); + vk->SetInnerRect( innerrect ); + + return vk; + } + +// --------------------------------------------------------------------------- +// Load virtual keys image +// --------------------------------------------------------------------------- +// +void PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(CVirtualKeyboard& aVkbCtrl, TInt aResId, const TSize& aKeySize) + { + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); + + TPtrC bmpFileName = reader.ReadTPtrC(); + TInt32 imgMajorSkinId = reader.ReadInt32(); + TAknsItemID id; + + TSize keySize = aKeySize; + + for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 ) + { + // Get the image ids and mask ids from resource + TInt bmpId = reader.ReadInt16(); + TInt bmpMskId = reader.ReadInt16(); + + // read skin item id + const TInt skinitemid = reader.ReadInt16(); + id.Set( TInt( imgMajorSkinId ), skinitemid ); + + if ( bmpId != KInvalidImg ) + { + CFbsBitmap* bmp = NULL; + CFbsBitmap* maskbmp = NULL; + + if ( bmpMskId != KInvalidImg ) + { + AknsUtils::CreateIconL( AknsUtils::SkinInstance(), + id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId ); + + // set maskbmp and size + AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved ); + aVkbCtrl.SetNonIrregularKeyBitmapL(TVirtualKeyBmpType(EKeyBmpNormal + index + 1 ),maskbmp); + } + else + { + AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id, + bmp, bmpFileName, bmpId ); + } + // set bmp and size + AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved ); + aVkbCtrl.SetNonIrregularKeyBitmapL(TVirtualKeyBmpType( EKeyBmpNormal + index ),bmp); + } + } + // Pop and destroy reader + CleanupStack::PopAndDestroy( 1 ); + } + +// --------------------------------------------------------------------------- +// update virtual key info. +// --------------------------------------------------------------------------- +// +void PeninputFingerHwrArVkbUtility::UpdateVkbKeyL(CVirtualKey* aVirtualKey, TResourceReader& aReader, const TRect& aKeyRect) + { + CHBufCArray* keytexts = CHBufCArray::NewL(); + CleanupStack::PushL( keytexts ); + + for ( TInt i = 0; i <= EPosLast; i++ ) + { + HBufC* unicode = aReader.ReadHBufCL(); + keytexts->Array().AppendL( unicode ); + } + + TInt keyscancode = aReader.ReadInt16(); + + HBufC* text = keytexts->Array()[0]; + if ( text ) + { + aVirtualKey->SetKeyData( *text ); + } + else + { + aVirtualKey->SetKeyData( KNullDesC ); + } + + aVirtualKey->SetKeyScancode( keyscancode ); + + CleanupStack::PopAndDestroy( keytexts ); //keytexts + + aVirtualKey->SetRect(aKeyRect); + TRect innerrect = aKeyRect; + innerrect.Shrink( TSize(2,2) ); + aVirtualKey->SetInnerRect( innerrect ); + } + +// End Of File diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include //USER INCLUDE #include "peninputfingerhwrarlayout.h" @@ -72,7 +73,6 @@ delete iRepositoryFep; delete iCommonEngineRepository; -// delete iTriggerStr; delete iHwrEngine; delete iUserDefinedResource; @@ -157,6 +157,10 @@ { iPermittedRanges.Append( ERangeNative ); } + if ( aPermittedRanges & ERangeNativeNumber ) + { + iPermittedRanges.Append( ERangeNativeNumber ); + } if ( aPermittedRanges & ERangeEnglish ) { iPermittedRanges.Append( ERangeEnglish ); @@ -199,15 +203,6 @@ } // ---------------------------------------------------------------------------- -// get current range -// ---------------------------------------------------------------------------- -// -TFingerHwrRange CPeninputFingerHwrArDataStore::CurrentRange() - { - return iCurrentRange; - } - -// ---------------------------------------------------------------------------- // Set case // ---------------------------------------------------------------------------- // @@ -705,7 +700,7 @@ // TBool CPeninputFingerHwrArDataStore::IsNumberOnlyMode() { - if(PrimaryRange() == ERangeNumber) + if(PrimaryRange() == ERangeNumber || PrimaryRange() == ERangeNativeNumber) { return ETrue; } diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -16,11 +16,13 @@ */ -//FEP INCLUDES +//SYSTEM INCLUDES #include #include #include #include +#include + #include "ptidefs.h" //USER INCLUDES @@ -367,6 +369,13 @@ aRecognitionRange.iSubRange = EPtiRangeNumber; } break; + case ERangeNativeNumber: + { + //convert to ERangeNumber to let engine recognize both native number + //and latin number. + aRecognitionRange.iSubRange = EPtiRangeNumber; + } + break; default: break; } diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -156,6 +156,18 @@ // get font for text iIcfFont = const_cast(AknLayoutUtils::FontFromId(icfTextLineLayoutRow1.iFont, NULL)); + + //indicator bubble. +#ifdef ARABIC_LAF + if(iIsLandscape) + { + iRectIndicatorBubble.SetRect(543,17,624,41); + } + else + { + iRectIndicatorBubble.SetRect(263,17,344,41); + } +#endif } // --------------------------------------------------------------------------- @@ -1082,6 +1094,14 @@ return iIcfTextHeight; } +// --------------------------------------------------------------------------- +// get indicator bubble rect. +// --------------------------------------------------------------------------- +// +TRect CPeninputFingerHwrArLafManager::IndicatorBubbleRect() + { + return iRectIndicatorBubble; + } // --------------------------------------------------------------------------- // get inner padding of buttons. diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -49,46 +49,6 @@ const TInt16 KEmotionKeyMark = 0xFFFE; -class CPeninputFingerHwrArCallBack : public CActive - { - friend class CPeninputFingerHwrArLayout; -public: - void IssueRequestL(); -private: - CPeninputFingerHwrArCallBack(CPeninputFingerHwrArLayout* aHwrArLayout); - void RunL(); - void DoCancel(); -private: - CPeninputFingerHwrArLayout* iHwrArLayout; - }; - -CPeninputFingerHwrArCallBack::CPeninputFingerHwrArCallBack(CPeninputFingerHwrArLayout* aHwrArLayout) - :CActive(EPriorityHigh) - { - CActiveScheduler::Add(this); - iHwrArLayout = aHwrArLayout; - } -void CPeninputFingerHwrArCallBack::IssueRequestL() - { - if(!IsActive()) - { - iStatus=KRequestPending; - SetActive(); - TRequestStatus *pS=(&iStatus); - - User::RequestComplete(pS,0); - } - } -void CPeninputFingerHwrArCallBack::RunL() - { - iHwrArLayout->CallBackL(); - } - -void CPeninputFingerHwrArCallBack::DoCancel() - { - - } - // ============================ MEMBER FUNCTIONS ============================= // --------------------------------------------------------------------------- @@ -141,9 +101,7 @@ //retrieve the settings LoadAndPublishDefaultL(); - - //iCallBack = new (ELeave) CPeninputFingerHwrArCallBack(this); - + //set screen layout extent SetRect( TRect( TPoint( 0, 0 ), ScreenSize() ) ); } @@ -627,17 +585,7 @@ iRepositorySetting->Get( KSettingsPenInputLang, newValue ); iDataStore->SetLanguageL( newValue ); - -// TInt displayLang = 0; -// iCommonEngineRepository->Get(KGSDisplayTxtLang,displayLang); -// if(displayLang == ELangArabic) -// { -// iHwrWnd->SetNativeNumMode(ETrue); -// } -// else -// { -// iHwrWnd->SetNativeNumMode(EFalse); -// } + iHwrWnd->SetNativeNumMode(iDataStore->IsNativeNumMode()); } @@ -674,8 +622,6 @@ delete iStateMgr; delete iGSRepositoryWatcher; delete iRepositorySetting; -// delete iCommonEngineRepository; - //delete iCallBack; } // --------------------------------------------------------------------------- @@ -932,7 +878,6 @@ // void CPeninputFingerHwrArLayout::OnHwrStrokeStartedL() { - //iCallBack->IssueRequestL(); iHwrWnd->HideIndicator(); // The default candidate cell is not highlight diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -41,8 +41,9 @@ #include "peninputfingerhwrarstoreconstants.h" #include "peninputlayoutvkb.h" #include "peninputfingerhwrarnumsymboltable.h" +#include "peninputfingerhwarvkbutility.h" - +const TUint16 KInvalidChar = 0xFFFF; // --------------------------------------------------------------------------- // Symbian Constructor // --------------------------------------------------------------------------- @@ -99,9 +100,25 @@ { CapturePointer( ETrue ); iPopupVisible = ETrue; - iCurrentNumSCTType = ENumSCTLatin; - UiLayout()->LockArea(UiLayout()->Rect(),this); - UpdateNumSymbolTable(ENumSCTLatin); + UiLayout()->LockArea(UiLayout()->Rect(),this); + // signal server to add the pop area + if(UiLayout()->NotDrawToLayoutDevice()) + { + struct SData + { + TRect rr; + TBool flag; + } data; + + data.rr = iNumKeypad->Rect(); + data.flag = ETrue; + TPtrC ptrForAdd; + ptrForAdd.Set(reinterpret_cast(&data),sizeof(data)/sizeof(TUint16)); + + UiLayout()->SignalOwner(ESignalPopupArea,ptrForAdd); + } + + RefreshNumSymbolTable();; } // --------------------------------------------------------------------------- @@ -112,6 +129,22 @@ { CapturePointer( EFalse ); iPopupVisible = EFalse; + // signal server to remove the pop area + if(UiLayout()->NotDrawToLayoutDevice()) + { + struct SData + { + TRect rr; + TBool flag; + } data; + + data.rr = iNumKeypad->Rect(); + data.flag = EFalse; + TPtrC ptrForRemove; + ptrForRemove.Set(reinterpret_cast(&data),sizeof(data)/sizeof(TUint16)); + + UiLayout()->SignalOwner(ESignalPopupArea,ptrForRemove); + } UiLayout()->UnLockArea(UiLayout()->Rect(),this); } @@ -210,15 +243,10 @@ // SizeChanged // --------------------------------------------------------------------------- // -void CPeninputArabicFingerHwrNumSymbolTable::SizeChanged( - const TRect aVirtualKeypadRect, const RArray /*aBtnRects*/, - const TInt /*aKeypadRow*/, const TInt /*aKeypadCol*/, TBool aIsLandscape) +void CPeninputArabicFingerHwrNumSymbolTable::SizeChanged(const TRect& aVirtualKeypadRect) { - iIsLandscape = aIsLandscape; - // relayout the virtual key pad iNumKeypad->SetRect(aVirtualKeypadRect); - } // --------------------------------------------------------------------------- @@ -247,11 +275,6 @@ iNumKeypad->SetDrawOpaqueBackground( EFalse ); } -void CPeninputArabicFingerHwrNumSymbolTable::OnActivate() - { - CControlGroup::OnActivate(); - } - // --------------------------------------------------------------------------- // Read control's background info. // --------------------------------------------------------------------------- @@ -339,53 +362,7 @@ // void CPeninputArabicFingerHwrNumSymbolTable::LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize) { - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); - - TPtrC bmpFileName = reader.ReadTPtrC(); - TInt32 imgMajorSkinId = reader.ReadInt32(); - TAknsItemID id; - - TSize keySize = aKeySize; - - for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 ) - { - // Get the image ids and mask ids from resource - TInt bmpId = reader.ReadInt16(); - TInt bmpMskId = reader.ReadInt16(); - - // read skin item id - const TInt skinitemid = reader.ReadInt16(); - id.Set( TInt( imgMajorSkinId ), skinitemid ); - - if ( bmpId != KInvalidImg ) - { - CFbsBitmap* bmp = NULL; - CFbsBitmap* maskbmp = NULL; - - if ( bmpMskId != KInvalidImg ) - { - AknsUtils::CreateIconL( AknsUtils::SkinInstance(), - id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId ); - - // set maskbmp and size - AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved ); - iNumKeypad->SetNonIrregularKeyBitmapL( - TVirtualKeyBmpType( EKeyBmpNormal + index + 1 ), maskbmp ); - } - else - { - AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id, - bmp, bmpFileName, bmpId ); - } - // set bmp and size - AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved ); - iNumKeypad->SetNonIrregularKeyBitmapL( - TVirtualKeyBmpType( EKeyBmpNormal + index ), bmp ); - } - } - // Pop and destroy reader - CleanupStack::PopAndDestroy( 1 ); + PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(*iNumKeypad,aResId,aKeySize); } // --------------------------------------------------------------------------- @@ -394,124 +371,57 @@ // void CPeninputArabicFingerHwrNumSymbolTable::LoadVirtualKeypadKeyL(const TInt aResId, const RArray& aCellRects) { - iNumKeypad->SetResourceId(aResId); - - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); - - // construct keys - TInt resKeyCount = reader.ReadInt16(); - TInt existsKeyCount = iNumKeypad->KeyArray().Count(); - TInt rectCount = aCellRects.Count(); - - for ( TInt i = 0; i < resKeyCount; i++ ) - { - if ( i < existsKeyCount ) - { - CVirtualKey* vk = iNumKeypad->KeyArray()[i]; - UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] ); - } - else - { - CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] ); - CleanupStack::PushL( vk ); - iNumKeypad->AddKeyL( vk ); - - CleanupStack::Pop( vk ); - } - } - - CleanupStack::PopAndDestroy( 1 ); // reader - - iNumKeypad->Draw(); - iNumKeypad->UpdateArea( iNumKeypad->Rect() ); + PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(*iNumKeypad,aResId,aCellRects); } // --------------------------------------------------------------------------- -// create virtual key. -// --------------------------------------------------------------------------- -// -CVirtualKey* CPeninputArabicFingerHwrNumSymbolTable::CreateVkbKeyL( TResourceReader& aReader, - const TRect aKeyRect ) - { - CHBufCArray* keytexts = CHBufCArray::NewL(); - CleanupStack::PushL( keytexts ); - - for ( TInt i = 0; i <= EPosLast; i++ ) - { - HBufC* unicode = aReader.ReadHBufCL(); - keytexts->Array().AppendL( unicode ); - } - - TInt keyscancode = aReader.ReadInt16(); - - HBufC* text = keytexts->Array()[0]; - - CVirtualKey* vk = NULL; - if ( text ) - { - vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 ); - } - else - { - vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 ); - } - - CleanupStack::PopAndDestroy( keytexts ); //keytexts - - - TRect innerrect = aKeyRect; - innerrect.Shrink( TSize(10, 10) ); - vk->SetInnerRect( innerrect ); - - return vk; - } - -// --------------------------------------------------------------------------- -// update virtual key info. -// --------------------------------------------------------------------------- -// -void CPeninputArabicFingerHwrNumSymbolTable::UpdateVkbKeyL( CVirtualKey* aVirtualKey, - TResourceReader& aReader, const TRect aKeyRect ) - { - CHBufCArray* keytexts = CHBufCArray::NewL(); - CleanupStack::PushL( keytexts ); - - for ( TInt i = 0; i <= EPosLast; i++ ) - { - HBufC* unicode = aReader.ReadHBufCL(); - keytexts->Array().AppendL( unicode ); - } - - TInt keyscancode = aReader.ReadInt16(); - - HBufC* text = keytexts->Array()[0]; - if ( text ) - { - aVirtualKey->SetKeyData( *text ); - } - else - { - aVirtualKey->SetKeyData( KNullDesC ); - } - - aVirtualKey->SetKeyScancode( keyscancode ); - - CleanupStack::PopAndDestroy( keytexts ); //keytexts - - aVirtualKey->SetRect(aKeyRect); - TRect innerrect = aKeyRect; - innerrect.Shrink( TSize(10,10) ); - aVirtualKey->SetInnerRect( innerrect ); - } - -// --------------------------------------------------------------------------- // accept editor's number mapping restriction. // --------------------------------------------------------------------------- // -void CPeninputArabicFingerHwrNumSymbolTable::SetNumericMapping( const TDesC& aNumMapping ) +void CPeninputArabicFingerHwrNumSymbolTable::UpdateTableSymbol( const TDesC& aNumMapping ) { - //format of aNumMapping is "0123456789******" + HBufC* charTable = GenerateCharTable(aNumMapping); + if(charTable) + { + TInt charTalbeCount = charTable->Length(); + + //numberpad + TInt keyCount = iNumKeypad->KeyArray().Count(); + for ( TInt i = 0; i < keyCount; i++ ) + { + CVirtualKey* vk = iNumKeypad->KeyArray()[i]; + + if(i < charTalbeCount && (*charTable)[i] != KInvalidChar) + { + TBuf<1> keydata; + TUint16 keyCode = (*charTable)[i]; + keydata.Append(keyCode); + vk->SetKeyData(keydata); + vk->SetKeyScancode(keyCode); + vk->SetDimmed( EFalse ); + } + else + { + vk->SetKeyData( KNullDesC ); + vk->SetKeyScancode( KInvalidChar ); + vk->SetDimmed( EFalse ); + } + } + + delete charTable; + + //sync feedback + UpdateAllVirtualKeysFeedback(); + } + } + +// --------------------------------------------------------------------------- +// Get reordered char table for key pad to render them +// --------------------------------------------------------------------------- +// +HBufC* CPeninputArabicFingerHwrNumSymbolTable::GenerateCharTable(const TDesC& aNumMapping) + { + //format of aNumMapping is "0123456789******" //char offset in aNumMapping //cell 0 using aNumMapping[KNumOffsets[0]] @@ -523,49 +433,36 @@ 14, 7, 8, 9, 15, 10, 0, 11 }; - - TInt maxMappingItemCount = sizeof(KNumOffsets)/sizeof(TInt); + TInt tableSize = sizeof(KNumOffsets)/sizeof(TInt); TInt mappingItemCount = aNumMapping.Length(); - //numberpad - TInt keyCount = iNumKeypad->KeyArray().Count(); - for ( TInt i = 0; i < keyCount; i++ ) - { - CVirtualKey* vk = iNumKeypad->KeyArray()[i]; - - TInt offset = ( i < maxMappingItemCount ) ? KNumOffsets[i] : -1; - - if ( offset > -1 && offset < mappingItemCount ) - { - TUint16 unicode = aNumMapping[offset]; - TUint16 mappedCode = MapLatinNumAccordingToNumMode(unicode); - TBuf<1> keydata; - keydata.Append(mappedCode); - vk->SetKeyData(keydata); - vk->SetKeyScancode( mappedCode); - vk->SetDimmed( EFalse ); - } - else - { - vk->SetKeyData( KNullDesC ); - vk->SetKeyScancode( 0xFFFF ); - vk->SetDimmed( EFalse ); - } - } + HBufC* reorderedCharTable = HBufC::New(mappingItemCount +1); + if(reorderedCharTable) + { + for(TInt i = 0; i < tableSize; i++) + { + if(KNumOffsets[i] < mappingItemCount) + { + TUint16 unicode = aNumMapping[KNumOffsets[i]]; + TUint16 mappedCode = MapLatinNumAccordingToNumMode(unicode); + reorderedCharTable->Des().Append(mappedCode); + } + else + { + reorderedCharTable->Des().Append(KInvalidChar); + } + } + } - - //sync feedback - UpdateAllVirtualKeysFeedback(); - } - + return reorderedCharTable; + } + // --------------------------------------------------------------------------- // Navigate the symbol page // --------------------------------------------------------------------------- // -void CPeninputArabicFingerHwrNumSymbolTable::UpdateNumSymbolTable( TInt aNumSctType) - { - - iCurrentNumSCTType = aNumSctType; +void CPeninputArabicFingerHwrNumSymbolTable::RefreshNumSymbolTable() + { // Draw the symbol table Draw(); @@ -582,7 +479,7 @@ // void CPeninputArabicFingerHwrNumSymbolTable::UpdateAllVirtualKeysFeedback() { - //update sctpad keys + //update numpad keys TInt keyCount = iNumKeypad->KeyArray().Count(); for ( TInt i = 0; i < keyCount; i++ ) { @@ -593,6 +490,30 @@ } // --------------------------------------------------------------------------- +// update rect of all virtual keys. +// --------------------------------------------------------------------------- +// +void CPeninputArabicFingerHwrNumSymbolTable::UpdateAllVirtualKeysRect(const RArray & aCellRects) + { + //update numpad keys rect + TInt keyCount = iNumKeypad->KeyArray().Count(); + TInt rectCount = aCellRects.Count(); + if(keyCount != rectCount) + { + return; + } + for ( TInt i = 0; i < keyCount; i++ ) + { + CVirtualKey* vk = iNumKeypad->KeyArray()[i]; + TRect rect = aCellRects[i%rectCount]; + vk->SetRect(aCellRects[i%rectCount]); + TRect innerrect = rect; + innerrect.Shrink( TSize(10,10) ); + vk->SetInnerRect( innerrect ); + } + } + +// --------------------------------------------------------------------------- // Draw new content to the screen // --------------------------------------------------------------------------- // diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -41,7 +41,7 @@ #include "peninputfingerhwrarstoreconstants.h" #include "peninputfingerhwrarmultipagevkb.h" #include "peninputfingerhwrarsymboltable.h" - +#include "peninputfingerhwarvkbutility.h" //CONST DEFINATION const TInt KSymbolButtonInnerPadding = 6; @@ -216,14 +216,16 @@ // --------------------------------------------------------------------------- // void CPeninputArabicFingerHwrSymbolTable::SizeChanged( - const TRect aVirtualKeypadRect, const RArray aBtnRects, + const TRect aVirtualKeypadRect, const RArray & aBtnRects, const TInt aKeypadRow, const TInt aKeypadCol, TBool aIsLandscape) { + ASSERT(aBtnRects.Count() > 0); + iIsLandscape = aIsLandscape; // relayout the button - TRect pageBtnRect(aBtnRects[0]); - + TRect pageBtnRect = aBtnRects[0]; + if(aIsLandscape) { i2Page1Btn->Hide(EFalse); @@ -253,7 +255,7 @@ iMutiPageKeypad->UpdatePaging(aKeypadRow,aKeypadCol); } - + // --------------------------------------------------------------------------- // create symbol table keypad. // --------------------------------------------------------------------------- @@ -330,11 +332,6 @@ aButton->SizeChanged( aRect, rcInner, aReloadImages ); } -void CPeninputArabicFingerHwrSymbolTable::OnActivate() - { - CControlGroup::OnActivate(); - } - // --------------------------------------------------------------------------- // Read control's background info. // --------------------------------------------------------------------------- @@ -422,53 +419,7 @@ // void CPeninputArabicFingerHwrSymbolTable::LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize) { - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); - - TPtrC bmpFileName = reader.ReadTPtrC(); - TInt32 imgMajorSkinId = reader.ReadInt32(); - TAknsItemID id; - - TSize keySize = aKeySize; - - for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 ) - { - // Get the image ids and mask ids from resource - TInt bmpId = reader.ReadInt16(); - TInt bmpMskId = reader.ReadInt16(); - - // read skin item id - const TInt skinitemid = reader.ReadInt16(); - id.Set( TInt( imgMajorSkinId ), skinitemid ); - - if ( bmpId != KInvalidImg ) - { - CFbsBitmap* bmp = NULL; - CFbsBitmap* maskbmp = NULL; - - if ( bmpMskId != KInvalidImg ) - { - AknsUtils::CreateIconL( AknsUtils::SkinInstance(), - id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId ); - - // set maskbmp and size - AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved ); - iMutiPageKeypad->SetNonIrregularKeyBitmapL( - TVirtualKeyBmpType( EKeyBmpNormal + index + 1 ), maskbmp ); - } - else - { - AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id, - bmp, bmpFileName, bmpId ); - } - // set bmp and size - AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved ); - iMutiPageKeypad->SetNonIrregularKeyBitmapL( - TVirtualKeyBmpType( EKeyBmpNormal + index ), bmp ); - } - } - // Pop and destroy reader - CleanupStack::PopAndDestroy( 1 ); + PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(*iMutiPageKeypad,aResId,aKeySize); } // --------------------------------------------------------------------------- @@ -477,118 +428,10 @@ // void CPeninputArabicFingerHwrSymbolTable::LoadVirtualKeypadKeyL(const TInt aResId, const RArray& aCellRects) { - iMutiPageKeypad->SetResourceId(aResId); - - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); - - // construct keys - TInt resKeyCount = reader.ReadInt16(); - TInt existsKeyCount = iMutiPageKeypad->KeyArray().Count(); - TInt rectCount = aCellRects.Count(); - - for ( TInt i = 0; i < resKeyCount; i++ ) - { - if ( i < existsKeyCount ) - { - CVirtualKey* vk = iMutiPageKeypad->KeyArray()[i]; - UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] ); - } - else - { - CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] ); - CleanupStack::PushL( vk ); - iMutiPageKeypad->AddKeyL( vk ); - - CleanupStack::Pop( vk ); - } - } - - CleanupStack::PopAndDestroy( 1 ); // reader - - iMutiPageKeypad->Draw(); - iMutiPageKeypad->UpdateArea( iMutiPageKeypad->Rect() ); + PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(*iMutiPageKeypad,aResId,aCellRects); } // --------------------------------------------------------------------------- -// create virtual key. -// --------------------------------------------------------------------------- -// -CVirtualKey* CPeninputArabicFingerHwrSymbolTable::CreateVkbKeyL( TResourceReader& aReader, - const TRect aKeyRect ) - { - CHBufCArray* keytexts = CHBufCArray::NewL(); - CleanupStack::PushL( keytexts ); - - for ( TInt i = 0; i <= EPosLast; i++ ) - { - HBufC* unicode = aReader.ReadHBufCL(); - keytexts->Array().AppendL( unicode ); - } - - TInt keyscancode = aReader.ReadInt16(); - - HBufC* text = keytexts->Array()[0]; - - CVirtualKey* vk = NULL; - if ( text ) - { - vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 ); - } - else - { - vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 ); - } - - CleanupStack::PopAndDestroy( keytexts ); //keytexts - - - TRect innerrect = aKeyRect; - innerrect.Shrink( TSize(2, 2) ); - vk->SetInnerRect( innerrect ); - - return vk; - } - -// --------------------------------------------------------------------------- -// update virtual key info. -// --------------------------------------------------------------------------- -// -void CPeninputArabicFingerHwrSymbolTable::UpdateVkbKeyL( CVirtualKey* aVirtualKey, - TResourceReader& aReader, const TRect aKeyRect ) - { - CHBufCArray* keytexts = CHBufCArray::NewL(); - CleanupStack::PushL( keytexts ); - - for ( TInt i = 0; i <= EPosLast; i++ ) - { - HBufC* unicode = aReader.ReadHBufCL(); - keytexts->Array().AppendL( unicode ); - } - - TInt keyscancode = aReader.ReadInt16(); - - HBufC* text = keytexts->Array()[0]; - if ( text ) - { - aVirtualKey->SetKeyData( *text ); - } - else - { - aVirtualKey->SetKeyData( KNullDesC ); - } - - aVirtualKey->SetKeyScancode( keyscancode ); - - CleanupStack::PopAndDestroy( keytexts ); //keytexts - - aVirtualKey->SetRect(aKeyRect); - TRect innerrect = aKeyRect; - innerrect.Shrink( TSize(2,2) ); - aVirtualKey->SetInnerRect( innerrect ); - } - -// --------------------------------------------------------------------------- // Navigate the symbol page // --------------------------------------------------------------------------- // @@ -691,17 +534,14 @@ { if(AbleToDraw()) { - //Draw button area background. -// DrawOpaqueMaskBackground( Rect() ); -// DrawOpaqueMaskBackground(); DrawOpaqueMaskBackground(iMutiPageKeypad->Rect()); if( BackgroundBmp() && BackgroundBmp()->SizeInPixels() != Rect().Size() ) { AknIconUtils::SetSize(BackgroundBmp(), Rect().Size(), EAspectRatioNotPreserved); } - // draw background -// DrawBackground(); + // draw background DrawBackground(iMutiPageKeypad->Rect()); + // draw group CControlGroup::Draw(); diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -87,7 +87,7 @@ CPeninputFingerHwrArWnd::~CPeninputFingerHwrArWnd() { #ifdef RD_TACTILE_FEEDBACK - if(UiLayout()) + if(UiLayout() && iWritingBox) { UiLayout()->DeRegisterFeedbackArea(reinterpret_cast(iWritingBox), iWritingBox->Rect()); @@ -352,7 +352,10 @@ { if ( aInfo.Length() > 0 ) { - iContextField->ShowBubble( aInfo, iContextField->MsgBubbleCtrl()->Rect() ); + TRect rect(iLafManager->IndicatorBubbleRect()); + iContextField->MsgBubbleCtrl()->SetRect(rect); +// iContextField->ShowBubble( aInfo, iContextField->MsgBubbleCtrl()->Rect()); + iContextField->ShowBubble( aInfo, rect); } else { @@ -619,6 +622,7 @@ KAknsIIDQsnFrInputPreviewMiddle, KAknsIIDQsnFrInputPreviewSideR ); iContextField->SetMsgBubbleCtrlSize( TSize( bubbleLineLayout.iW,bubbleLineLayout.iH ) ); + iContextField->MsgBubbleCtrl()->SetTextL(KNullDesC); iContextField->SetLineSeparatorAfterPrompt(ETrue); @@ -821,7 +825,7 @@ // --------------------------------------------------------------------------- // void CPeninputFingerHwrArWnd::LoadNumSymbolVirtualKeysL( const TInt aResId, - const RArray& aCellRects ) + const RArray& aCellRects, TBool aReload) { TAknTextLineLayout txtlayout = iLafManager->NumpadKeyTxtLayout(); iNumSymbolTable->KeyPad()->SetTextLineLayout( txtlayout ); @@ -829,8 +833,14 @@ TInt fontid = txtlayout.FontId(); const CFont* font = AknLayoutUtils::FontFromId( fontid ); iNumSymbolTable->KeyPad()->SetFont( font ); - - iNumSymbolTable->LoadVirtualKeypadKeyL(aResId,aCellRects); + if(aReload) + { + iNumSymbolTable->LoadVirtualKeypadKeyL(aResId,aCellRects); + } + else + { + iNumSymbolTable->UpdateAllVirtualKeysRect(aCellRects); + } } // --------------------------------------------------------------------------- @@ -943,7 +953,7 @@ iLafManager->GetNumVirtualKeyRects( numrects ); // load keys - LoadNumSymbolVirtualKeysL(R_FINGER_HWR_NUMPAD, numrects); + LoadNumSymbolVirtualKeysL(R_FINGER_HWR_NUMPAD, numrects,EFalse); CleanupStack::PopAndDestroy();//rects @@ -954,9 +964,7 @@ rect = iLafManager->CtrlRect(iNumSymbolTable->ControlId()); iNumSymbolTable->SetRect(rect); - iNumSymbolTable->SizeChanged(iLafManager->GetVirtualNumKeyRect(), - iLafManager->GetSymBtnArray(), numpadrows, numpadcols, - iLafManager->IsLandscape()); + iNumSymbolTable->SizeChanged(iLafManager->GetVirtualNumKeyRect()); } @@ -1484,7 +1492,7 @@ // void CPeninputFingerHwrArWnd::SetNumericMapping( const TDesC& aNumMapping ) { - iNumSymbolTable->SetNumericMapping(aNumMapping); + iNumSymbolTable->UpdateTableSymbol(aNumMapping); } // --------------------------------------------------------------------------- // set native number mode on or off. diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericitut/group/peninputgenericitut.mmp --- a/textinput/peninputgenericitut/group/peninputgenericitut.mmp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericitut/group/peninputgenericitut.mmp Thu Aug 19 10:15:25 2010 +0300 @@ -122,5 +122,6 @@ LIBRARY bitgdi.lib LIBRARY commonengine.lib LIBRARY centralrepository.lib +LIBRARY featmgr.lib // End Of File diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h --- a/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h Thu Aug 19 10:15:25 2010 +0300 @@ -301,7 +301,14 @@ // resource id for generic itut resource file TInt iCommonResId; - RArray iConfigResIds; + /** + * resource id for current input language + */ + TInt iConfigResId; + /** + * resource id for special controls in Chinese/Korean variant + */ + TInt iSpecialResId; TInt iAvkonResId; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp --- a/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -34,6 +34,7 @@ #include #include #include +#include #include "peninputgenericitutdatamgr.h" #include "peninputgenericitutlayoutcontext.h" @@ -100,13 +101,18 @@ CCoeEnv::Static()->DeleteResourceFile(iAvkonResId); CCoeEnv::Static()->DeleteResourceFile(iCommonResId); - - // Remove all resource files from control environment - for (TInt i=0; i< iConfigResIds.Count(); i++) + + // Remove the resource file of current input language + if ( iConfigResId ) { - CCoeEnv::Static()->DeleteResourceFile(iConfigResIds[i]); + CCoeEnv::Static()->DeleteResourceFile( iConfigResId ); } - iConfigResIds.Close(); + + // Remove the resource file of some special controls + if ( iSpecialResId ) + { + CCoeEnv::Static()->DeleteResourceFile( iSpecialResId ); + } ClearChnCandidates(EItutCandidates); ClearChnCandidates(EItutPuncCandidates); @@ -120,7 +126,6 @@ void CGenericItutDataMgr::ConstructL() { - // initialize layout info of controls and layout ReadLafInfo(); @@ -153,7 +158,33 @@ iMenuItemList.Append( item ); reader.ReadInt32(); // extension link } - CleanupStack::PopAndDestroy(); //reader + CleanupStack::PopAndDestroy(); //reader + + // There are some special controls in Chinese and Korean VITUT, + // and these controls are hidden when changing to other input language, + // so related resource file should be in control environment at all times. + // Otherwise crash happens when reading resource for them sometime. + // For example: If writing language is Chinese, enters spell mode, + // then switches theme, crash happens. + if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) || + FeatureManager::FeatureSupported( KFeatureIdKorean ) ) + { + TFileName resourceFilename( KConfigResourceFile ) ; + if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) ) + { + // Chinese variant + resourceFilename.Append( ResFileExtByScriptIdx( EChnExt ) ); + } + else + { + // Korean variant + resourceFilename.Append( ResFileExtByScriptIdx( EHangulExt ) ); + } + resourceFilename.Append(KResourceFileExtName); + + BaflUtils::NearestLanguageFile( coeEnv->FsSession(), resourceFilename ); + iSpecialResId = coeEnv->AddResourceFileL( resourceFilename ); + } } CGenericItutDataMgr::TMenuItem* CGenericItutDataMgr::GetMenuItem(TInt aCommand) @@ -1167,21 +1198,19 @@ CCoeEnv* coeEnv = CCoeEnv::Static(); - TFileName resourceConfigName(iResourceFilename); - BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resourceConfigName); - // Do not delete resource file from control environment if changing language. - // Otherwise crash happens if switching theme. For example:If writing language - // is Chinese, enters spell mode, then switches theme, crash happens. - TInt configResId = coeEnv->AddResourceFileL(resourceConfigName); - if ( iConfigResIds.Find(configResId) == KErrNotFound) + // Remove the resource file of previous input language. + // The previous resource file should be removed first, + // Because there are some same keypad ids in the resource file + // of latin, Cyrillic, and etc. + if ( iConfigResId ) { - iConfigResIds.Append( configResId ); + coeEnv->DeleteResourceFile( iConfigResId ); } - else - { - // Remove resource file to ensure the resource file is added only one time. - coeEnv->DeleteResourceFile( configResId ); - } + + // Add the resource file of current input language + TFileName resourceConfigName( iResourceFilename ); + BaflUtils::NearestLanguageFile( coeEnv->FsSession(), resourceConfigName ); + iConfigResId = coeEnv->AddResourceFileL( resourceConfigName ); if (IsChinese()) { diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp --- a/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -325,6 +325,14 @@ TInt CGenericItutUiLayout::SizeChanged(const TAny* /*pData*/) { + + // For avoiding that NULL pointer is called + // add UiMgr() and CurrentState() condition + if( !( UiMgr() && UiMgr()->CurrentState())) + { + return KErrBadHandle; + } + TBool overLap = UiMgr()->CurrentState()->StateType() == CGenericItutUiMgrBase::EStateMatchSelection ? ETrue: EFalse; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericitut/srcdata/peninputitutconfig_korean.rss --- a/textinput/peninputgenericitut/srcdata/peninputitutconfig_korean.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericitut/srcdata/peninputitutconfig_korean.rss Thu Aug 19 10:15:25 2010 +0300 @@ -16,7 +16,10 @@ */ // RESOURCE IDENTIFIER -NAME ITUW +// The name should not be the same as ITUW, Otherwise the keypad id of +// r_finger_input_keypad_korean is the same as the keypad id in latin, +// then crash occurs if switching writing language. +NAME ITUK #include diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/group/peninputgenericvkb.mmp --- a/textinput/peninputgenericvkb/group/peninputgenericvkb.mmp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/group/peninputgenericvkb.mmp Thu Aug 19 10:15:25 2010 +0300 @@ -134,3 +134,4 @@ LIBRARY aknskins.lib LIBRARY fbscli.lib LIBRARY estor.lib +LIBRARY featdiscovery.lib diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h --- a/textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h Thu Aug 19 10:15:25 2010 +0300 @@ -233,6 +233,7 @@ */ static CPeninputGenericVkbLayoutImp* NewL( TAny* aInitParams ); static CPeninputGenericVkbLayoutImp* NewFsqL( TAny* aInitParams ); + static CPeninputGenericVkbLayoutImp* NewPrtFsqL( TAny* aInitParams ); /** * Destructor diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h --- a/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h Thu Aug 19 10:15:25 2010 +0300 @@ -731,6 +731,11 @@ * Indicates whether range button short press is handled. */ TBool iHandleRangeShortPress; + + /** + * Indicates whether US rsc file exist or not + */ + TBool iUSRscFileExist; private: CFepLayoutScrollableList* iCandidateList; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp --- a/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include // for CFeatureDiscovery // User includes #include "peninputgenericvkblafdatamgr.h" @@ -1036,53 +1037,92 @@ aDataInfo.iClientRect = rect; aDataInfo.iQwtRect = aParentWndRect; - TInt v1, v2; + TInt v1, v2, gridLayoutVariant; switch ( aLayoutType ) { case ELayout10x3: { v1 = 0; v2 = 0; + gridLayoutVariant = 1; break; } case ELayout11x3: { v1 = 1; v2 = 2; + gridLayoutVariant = 1; break; } case ELayout11x4: { v1 = 1; v2 = 3; + gridLayoutVariant = 2; break; } default: { v1 = 0; v2 = 0; + gridLayoutVariant = 1; } } - // Bottom pane rect - linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine(); - layoutrect.LayoutRect( aParentWndRect, linelayout ); - rectBottomWin = layoutrect.Rect(); - - // ICF pane rect - linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(0).LayoutLine(); - layoutrect.LayoutRect( aParentWndRect, linelayout ); - rectICFpane = layoutrect.Rect(); - - // ICF bg pane rect - linelayout = AknLayoutScalable_Avkon::bg_icf_pane(0).LayoutLine(); - layoutrect.LayoutRect( rectICFpane, linelayout ); - rectICFBg = layoutrect.Rect(); - - // ICF area rect - linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(0).LayoutLine(); - layoutrect.LayoutRect( rectICFBg, linelayout ); - rectICF = layoutrect.Rect(); + // Landscape info is set if i) portrait FSQ feature is not enabled (landscape FSQ) + // or ii) portrait FSQ feature is enabled and the current orientation is landscape. + // Note: Feature Manager is fading out and CFeatureDiscovery is recommended to use. + TBool isPortraitFSQEnabled = EFalse; + TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ) ); + + if ( !isPortraitFSQEnabled || + ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) ) + { + // Bottom pane rect + linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine(); + layoutrect.LayoutRect( aParentWndRect, linelayout ); + rectBottomWin = layoutrect.Rect(); + + // ICF pane rect + linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(0).LayoutLine(); + layoutrect.LayoutRect( aParentWndRect, linelayout ); + rectICFpane = layoutrect.Rect(); + + // ICF bg pane rect + linelayout = AknLayoutScalable_Avkon::bg_icf_pane(0).LayoutLine(); + layoutrect.LayoutRect( rectICFpane, linelayout ); + rectICFBg = layoutrect.Rect(); + + // ICF area rect + linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(0).LayoutLine(); + layoutrect.LayoutRect( rectICFBg, linelayout ); + rectICF = layoutrect.Rect(); + } + // Portrait info is set if portrait FSQ feature is enabled the current orientation + // is portrait. + else + { + // Bottom pane rect + linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(gridLayoutVariant).LayoutLine(); + layoutrect.LayoutRect( aParentWndRect, linelayout ); + rectBottomWin = layoutrect.Rect(); + + // ICF pane rect + linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(1).LayoutLine(); + layoutrect.LayoutRect( aParentWndRect, linelayout ); + rectICFpane = layoutrect.Rect(); + + // ICF bg pane rect + linelayout = AknLayoutScalable_Avkon::bg_icf_pane(1).LayoutLine(); + layoutrect.LayoutRect( rectICFpane, linelayout ); + rectICFBg = layoutrect.Rect(); + + // ICF area rect + linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(1).LayoutLine(); + layoutrect.LayoutRect( rectICFBg, linelayout ); + rectICF = layoutrect.Rect(); + } aDataInfo.iICF.iRect = rectICF; cellText = AknLayoutScalable_Avkon::list_vkb_icf_pane_t1(0, 0, 0).LayoutLine(); @@ -1124,96 +1164,249 @@ linelayout = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(v1).LayoutLine(); keypadRect.LayoutRect( rectBottomWin, linelayout ); - // key pane rect - linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(v2).LayoutLine(); - keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); - - // key cell rect - linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(v2).LayoutLine(); - keycellRect.LayoutRect( keypaneRect.Rect(), linelayout ); + if ( !isPortraitFSQEnabled || + ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) ) + { + // key pane rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(v2).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); - // key label rect - linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine(); - keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout ); - - // pic3pane rect - linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(v2).LayoutLine(); - pic3paneRect.LayoutRect( keypaneRect.Rect(), linelayout ); + // key cell rect + linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(v2).LayoutLine(); + keycellRect.LayoutRect( keypaneRect.Rect(), linelayout ); + + // key label rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine(); + keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout ); + + // pic3pane rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(v2).LayoutLine(); + pic3paneRect.LayoutRect( keypaneRect.Rect(), linelayout ); + + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine(); + layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout ); + pic3pLeftWidth = layoutrect.Rect().Width(); - linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine(); - layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout ); - pic3pLeftWidth = layoutrect.Rect().Width(); - - linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine(); - layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout ); - pic3pRightWidth = layoutrect.Rect().Width(); + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine(); + layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout ); + pic3pRightWidth = layoutrect.Rect().Width(); + + TRect rectXPane = keypaneRect.Rect(); + rect = keycellRect.Rect(); + rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); + TRect rectXBorder = rect; + rect = keylabelRect.Rect(); + rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); + TRect rectXInner = rect; + rect = pic3paneRect.Rect(); + rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); + TRect rect3PicPane = rect; + rectXPane.Move( - rectXPane.iTl ); + + rect = keypadRect.Rect(); + rect.Move( - base.iX, - base.iY ); + TRect rectOfKeypad = rect; + TRect rectOfButtons = rectOfKeypad; + rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); + rectOfButtons.iTl.iY += rectOfKeypad.Height(); + + TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8; + TInt dx = rectOfButtons.iTl.iX; + TInt dy = rectOfButtons.iTl.iY; + + aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); - TRect rectXPane = keypaneRect.Rect(); - rect = keycellRect.Rect(); - rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); - TRect rectXBorder = rect; - rect = keylabelRect.Rect(); - rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); - TRect rectXInner = rect; - rect = pic3paneRect.Rect(); - rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); - TRect rect3PicPane = rect; - rectXPane.Move( - rectXPane.iTl ); + aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); - rect = keypadRect.Rect(); - rect.Move( - base.iX, - base.iY ); - TRect rectOfKeypad = rect; - TRect rectOfButtons = rectOfKeypad; - rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); - rectOfButtons.iTl.iY += rectOfKeypad.Height(); + TInt expand = spaceBtnWidth - rectXPane.Width(); + aDataInfo.iSpaceButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iSpaceButton.iRect.Resize( expand, 0 ); + aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + aDataInfo.iSpaceButton.iInnerRect.Resize( expand, 0 ); + aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy ); + aDataInfo.iSpaceButtonEx.iIconsFrameRect.Resize( expand, 0 ); + aDataInfo.iSpaceButtonEx.iMiddleIconRect = + aDataInfo.iSpaceButtonEx.iIconsFrameRect; + aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth; + aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth; + dx += spaceBtnWidth; + + aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); - TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8; - TInt dx = rectOfButtons.iTl.iX; - TInt dy = rectOfButtons.iTl.iY; - - aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - dx += rectXPane.Width(); + aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + } + else + { + TAknLayoutRect shiftRect, spaceRect, clearRect; + TAknLayoutRect bottomRowRect; + + // Second row of buttons (CLOSE, MULTIRANGE, LEFT, RIGHT, OPTIONS, ENTER) + // keypane v=15, keycell v=8, keylabel v=8 - aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - dx += rectXPane.Width(); + // key pane rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine(); + bottomRowRect.LayoutRect( keypadRect.Rect(), linelayout ); + + // key cell rect + linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(8).LayoutLine(); + keycellRect.LayoutRect( bottomRowRect.Rect(), linelayout ); + + // key label rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(8).LayoutLine(); + keylabelRect.LayoutRect( bottomRowRect.Rect(), linelayout ); + + TRect rectXPane = bottomRowRect.Rect(); + rect = keycellRect.Rect(); + rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); + TRect rectXBorder = rect; + rect = keylabelRect.Rect(); + rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); + TRect rectXInner = rect; + rectXPane.Move( - rectXPane.iTl ); + + rect = keypadRect.Rect(); + rect.Move( - base.iX, - base.iY ); + TRect rectOfKeypad = rect; + TRect rectOfButtons = rectOfKeypad; + rectOfKeypad.iBr.iY -= ( bottomRowRect.Rect().Height() ); + rectOfButtons.iTl.iY += rectOfKeypad.Height(); + + TInt dx = rectOfButtons.iTl.iX; + TInt dy = rectOfButtons.iTl.iY; - aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - dx += rectXPane.Width(); - - aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - dx += rectXPane.Width(); + // CLOSE (15) + aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + // MULTIRANGE (15) + aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + // LEFT (15) + aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + // RIGHT (15) + aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + // OPTIONS (15) + aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + // ENTER (15) + aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - TInt expand = spaceBtnWidth - rectXPane.Width(); - aDataInfo.iSpaceButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iSpaceButton.iRect.Resize( expand, 0 ); - aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - aDataInfo.iSpaceButton.iInnerRect.Resize( expand, 0 ); - aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy ); - aDataInfo.iSpaceButtonEx.iIconsFrameRect.Resize( expand, 0 ); - aDataInfo.iSpaceButtonEx.iMiddleIconRect = - aDataInfo.iSpaceButtonEx.iIconsFrameRect; - aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth; - aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth; - dx += spaceBtnWidth; + // First row of buttons (SHIFT, SPACE, CLEAR) + + // SHIFT (keypane v=4, keycell v=4, keylabel v=4) + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine(); + shiftRect.LayoutRect( keypadRect.Rect(), linelayout ); + + // key cell rect + linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(4).LayoutLine(); + keycellRect.LayoutRect( shiftRect.Rect(), linelayout ); + + // key label rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(4).LayoutLine(); + keylabelRect.LayoutRect( shiftRect.Rect(), linelayout ); + + rectXPane = shiftRect.Rect(); + rect = keycellRect.Rect(); + rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); + rectXBorder = rect; + rect = keylabelRect.Rect(); + rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); + rectXInner = rect; + rectXPane.Move( - rectXPane.iTl ); + + // Update the height to account for the second row + rectOfButtons.iTl.iY -= shiftRect.Rect().Height(); + + dx = rectOfButtons.iTl.iX; + dy = rectOfButtons.iTl.iY; - aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - dx += rectXPane.Width(); - - aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - dx += rectXPane.Width(); - - aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); - dx += rectXPane.Width(); - - aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy ); - aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + dx += rectXPane.Width(); + + // SPACE (keypane v=8, keycell v=5, keylabel v=5, pic3pane v=5) + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(8).LayoutLine(); + spaceRect.LayoutRect( keypadRect.Rect(), linelayout ); + + // key cell rect + linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(5).LayoutLine(); + keycellRect.LayoutRect( spaceRect.Rect(), linelayout ); + + // key label rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(5).LayoutLine(); + keylabelRect.LayoutRect( spaceRect.Rect(), linelayout ); + + // pic3pane rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(5).LayoutLine(); + pic3paneRect.LayoutRect( spaceRect.Rect(), linelayout ); + + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine(); + layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout ); + pic3pLeftWidth = layoutrect.Rect().Width(); + + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine(); + layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout ); + pic3pRightWidth = layoutrect.Rect().Width(); + + TRect rectSpacePane = spaceRect.Rect(); + rect = keycellRect.Rect(); + rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY ); + TRect rectSpaceBorder = rect; + rect = keylabelRect.Rect(); + rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY ); + TRect rectSpaceInner = rect; + rect = pic3paneRect.Rect(); + rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY ); + TRect rect3PicPane = rect; + rectSpacePane.Move( - rectSpacePane.iTl ); + + aDataInfo.iSpaceButton.iRect = OffsetRect( rectSpaceBorder, dx, dy ); + aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectSpaceInner, dx, dy ); + aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy ); + aDataInfo.iSpaceButtonEx.iMiddleIconRect = aDataInfo.iSpaceButtonEx.iIconsFrameRect; + aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth; + aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth; + dx += rectSpacePane.Width(); + + // CLEAR (keypane v=4, keycell v=4, keylabel v=4) + aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy ); + aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); + } // preview popup window TAknWindowLineLayout previewWnd, previewWndInner; @@ -1455,7 +1648,7 @@ TAknWindowLineLayout wndLayout; TAknWindowLineLayout linelayout; TAknLayoutRect layoutrect, keypaneRect, keycellRect, keylabelRect; - TRect rectBottomWin, rectVkbCtrl; + TRect rectBottomWin, rectBottomWin11x4, rectVkbCtrl; TPoint base; TAknWindowLineLayout keypad, cellpane; @@ -1467,15 +1660,37 @@ TAknLayoutText keyTextLayout; TAknTextLineLayout keyText; TRect keyRect; + + TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation(); + // -----------------------Landscape Mode-------------------------- appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine(); wndLayout = AknLayoutScalable_Avkon::main_fep_vtchi_ss_pane(0).LayoutLine(); wndRect.LayoutRect(appWnd.Rect(), wndLayout); // Bottom pane rect - linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine(); + // Landscape info is read if i) portrait FSQ feature is not enabled (landscape FSQ) + // or ii) portrait FSQ feature is enabled and the current orientation is landscape. + // Portrait info is set if portrait FSQ feature is enabled the current orientation + // is portrait. + TBool isPortraitFSQEnabled = EFalse; + TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ) ); + linelayout = ( !isPortraitFSQEnabled || + ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) ) + ? AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine() + : AknLayoutScalable_Avkon::popup_fep_vkbss_window(1).LayoutLine(); + layoutrect.LayoutRect( wndRect.Rect(), linelayout ); rectBottomWin = layoutrect.Rect(); base = wndRect.Rect().iTl; + + if( !isLandscape ) + { + linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(2).LayoutLine(); + layoutrect.LayoutRect( wndRect.Rect(), linelayout ); + rectBottomWin11x4 = layoutrect.Rect(); + } + // ==================10x3==================== // top pane and bottom pane GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout10x3, 0, *dataInfo ); @@ -1489,11 +1704,36 @@ keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(0).LayoutLine(); keypadRect.LayoutRect( rectBottomWin, keypad ); - linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine(); - keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + TInt functionKeyRowsHeight = 0; + + if ( !isPortraitFSQEnabled || + ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) ) + { + // In landscape mode, there is only one function key row, and the height + // of this row is identical to all the other rows + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + } + else + { + // In portrait mode, there are two function key rows + // First row is represented as variety 4 (SHIFT, SPACE, CLEAR) + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, + // OPTIONS, ENTER) + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + // Reset keypane rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + } rectVkbCtrl = keypadRect.Rect(); - rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height(); + rectVkbCtrl.iBr.iY -= functionKeyRowsHeight; dataInfo->iKeypad.iKaypadRect = rectVkbCtrl; linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(0).LayoutLine(); @@ -1548,7 +1788,6 @@ // Candidate list's parent Layout window is ITUT window TPeninputCandidateListLayoutData candidateListLAF; TAknWindowLineLayout parentWnd; - TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation(); // Add tooltip box laf data for ITI features. TPeninputTooltipBoxLayoutData tooltipBoxLAF; if ( isLandscape ) @@ -1561,8 +1800,19 @@ tooltipBoxLAF = ReadLafForTooltipBox( wndRect.Rect() ); dataInfo->iTooltipBox = tooltipBoxLAF; } - - + + // if portrait FSQ feature is enabled and the current orientation is portrait. + if ( isPortraitFSQEnabled && !isLandscape ) + { + parentWnd = AknLayoutScalable_Apps::popup_vitu2_window( 0 ).LayoutLine(); + TAknLayoutRect parentRectLayout; + parentRectLayout.LayoutRect( appWnd.Rect(), parentWnd ); + candidateListLAF = ReadLafForCandidateList( parentRectLayout.Rect() ); + dataInfo->iCandidateList = candidateListLAF; + tooltipBoxLAF = ReadLafForTooltipBox( wndRect.Rect() ); + dataInfo->iTooltipBox = tooltipBoxLAF; + } + iLayoutDataInfo.AppendL( dataInfo ); // ==================11x3==================== @@ -1609,11 +1859,36 @@ keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine(); keypadRect.LayoutRect( rectBottomWin, keypad ); - linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine(); - keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); - - rectVkbCtrl = keypadRect.Rect(); - rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height(); + functionKeyRowsHeight = 0; + + if ( !isPortraitFSQEnabled || + ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) ) + { + // In landscape mode, there is only one function key row, and the height + // of this row is identical to all the other rows + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + } + else + { + // In portrait mode, there are two function key rows + // First row is represented as variety 4 (SHIFT, SPACE, CLEAR) + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, + // OPTIONS, ENTER) + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + // Reset keypane rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + } + + rectVkbCtrl = keypadRect.Rect(); + rectVkbCtrl.iBr.iY -= functionKeyRowsHeight; dataInfo->iKeypad.iKaypadRect = rectVkbCtrl; linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(2).LayoutLine(); @@ -1667,6 +1942,14 @@ dataInfo->iTooltipBox = tooltipBoxLAF; } + // if portrait FSQ feature is enabled and the current orientation is portrait. + if ( isPortraitFSQEnabled && !isLandscape ) + { + // Add candate list laf data for ITI features + dataInfo->iCandidateList = candidateListLAF; + // Add tooltip box laf data for ITI features. + dataInfo->iTooltipBox = tooltipBoxLAF; + } iLayoutDataInfo.AppendL( dataInfo ); @@ -1711,13 +1994,45 @@ dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL ); keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine(); - keypadRect.LayoutRect( rectBottomWin, keypad ); + if( isLandscape ) + { + keypadRect.LayoutRect( rectBottomWin, keypad ); + } + else + { + keypadRect.LayoutRect( rectBottomWin11x4, keypad ); + } - linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine(); - keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); - - rectVkbCtrl = keypadRect.Rect(); - rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height(); + functionKeyRowsHeight = 0; + + if ( !isPortraitFSQEnabled || + ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) ) + { + // In landscape mode, there is only one function key row, and the height + // of this row is identical to all the other rows + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + } + else + { + // In portrait mode, there are two function key rows + // First row is represented as variety 4 (SHIFT, SPACE, CLEAR) + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, + // OPTIONS, ENTER) + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + functionKeyRowsHeight += keypaneRect.Rect().Height(); + // Reset keypane rect + linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine(); + keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); + } + + rectVkbCtrl = keypadRect.Rect(); + rectVkbCtrl.iBr.iY -= functionKeyRowsHeight; dataInfo->iKeypad.iKaypadRect = rectVkbCtrl; linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(3).LayoutLine(); @@ -1771,7 +2086,15 @@ dataInfo->iTooltipBox = tooltipBoxLAF; } - + // if portrait FSQ feature is enabled and the current orientation is portrait. + if ( isPortraitFSQEnabled && !isLandscape ) + { + // Add candate list laf data for ITI features + dataInfo->iCandidateList = candidateListLAF; + // Add tooltip box laf data for ITI features. + dataInfo->iTooltipBox = tooltipBoxLAF; + } + iLayoutDataInfo.AppendL( dataInfo ); } @@ -1783,26 +2106,63 @@ TPeninputCandidateListLayoutData CPeninputLafDataFSQ:: ReadLafForCandidateList( const TRect& aRect ) { - // candidate list - TAknWindowLineLayout candidateList - = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 ) - .LayoutLine(); - TAknLayoutRect candidateListRect; - candidateListRect.LayoutRect( aRect, candidateList ); - - // list pane, its parent is candidate list - TAknWindowLineLayout listpane - = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 ) - .LayoutLine(); TAknLayoutRect listpaneRect; - listpaneRect.LayoutRect( candidateListRect.Rect(), listpane ); + TAknLayoutRect scrollRect; + TAknLayoutRect candidateListRect; + TAknWindowLineLayout listpane; + TAknWindowLineLayout scrollpane; + TAknWindowLineLayout candidateList; - // scroll pane, its parent is candidate list - TAknWindowLineLayout scrollpane - = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 ) - .LayoutLine(); - TAknLayoutRect scrollRect; - scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane ); + // If portrait FSQ feature is enabled. + TBool isPortraitFSQEnabled = EFalse; + TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ) ); + + if ( isPortraitFSQEnabled ) + { + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + // candidate list + candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 ).LayoutLine(); + candidateListRect.LayoutRect( aRect, candidateList ); + + // list pane, its parent is candidate list + listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 ).LayoutLine(); + listpaneRect.LayoutRect( candidateListRect.Rect(), listpane ); + + // scroll pane, its parent is candidate list + scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 ).LayoutLine(); + scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane ); + } + else + { + // candidate list + candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 2 ).LayoutLine(); + candidateListRect.LayoutRect( aRect, candidateList ); + + // list pane, its parent is candidate list + listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 0 ).LayoutLine(); + listpaneRect.LayoutRect( candidateListRect.Rect(), listpane ); + + // scroll pane, its parent is candidate list + scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 0 ).LayoutLine(); + scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane ); + } + } + else + { + // candidate list + candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 ).LayoutLine(); + candidateListRect.LayoutRect( aRect, candidateList ); + + // list pane, its parent is candidate list + listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 ).LayoutLine(); + listpaneRect.LayoutRect( candidateListRect.Rect(), listpane ); + + // scroll pane, its parent is candidate list + scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 ).LayoutLine(); + scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane ); + } // Item pane, its parent is list pane TAknWindowLineLayout itemPane diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp --- a/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -71,6 +71,11 @@ return self; } +// --------------------------------------------------------------------------- +// CPeninputGenericVkbLayoutImp::NewFsqL +// Entry point for landscape FSQ. +// --------------------------------------------------------------------------- +// CPeninputGenericVkbLayoutImp* CPeninputGenericVkbLayoutImp::NewFsqL( TAny* /*aInitParams*/ ) { @@ -84,6 +89,23 @@ } // --------------------------------------------------------------------------- +// CPeninputGenericVkbLayoutImp::NewPrtFsqL +// Entry point for portrait FSQ. +// --------------------------------------------------------------------------- +// +CPeninputGenericVkbLayoutImp* CPeninputGenericVkbLayoutImp::NewPrtFsqL( + TAny* /*aInitParams*/ ) + { + CPeninputGenericVkbLayoutImp* self = new ( ELeave ) + CPeninputGenericVkbLayoutImp(); + CleanupStack::PushL( self ); + self->Construct( ETrue ); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- // CPeninputGenericVkbLayoutImp::~CPeninputGenericVkbLayoutImp // (other items were commented in a header) // --------------------------------------------------------------------------- diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/src/peninputgenericvkbproxy.cpp --- a/textinput/peninputgenericvkb/src/peninputgenericvkbproxy.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/src/peninputgenericvkbproxy.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -32,7 +32,9 @@ IMPLEMENTATION_PROXY_ENTRY( 0x10282359, CPeninputGenericVkbLayoutImp::NewL ), IMPLEMENTATION_PROXY_ENTRY( 0x2001114D, - CPeninputGenericVkbLayoutImp::NewFsqL ) + CPeninputGenericVkbLayoutImp::NewFsqL ), + IMPLEMENTATION_PROXY_ENTRY( 0x20026837, + CPeninputGenericVkbLayoutImp::NewPrtFsqL ) }; // -------------------------------------------------------------------------- diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp --- a/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -37,7 +37,7 @@ #include #include #include - +#include #include #include #include @@ -95,7 +95,8 @@ iPopupSet(EFalse), iLafMgr(NULL), iFirstConstruct(ETrue), - iIndiWithText( EFalse ) + iIndiWithText( EFalse ), + iUSRscFileExist( EFalse ) { } @@ -140,6 +141,20 @@ iLafMgr->SetInputModeL(TPluginInputMode (iLayoutContext->LayoutType())); CPeninputLayoutWindowExt::ConstructL(); + // Save whether American rsc file exist or not + TBuf usUSRscFileName; + usUSRscFileName= KConfigurationResourceFile(); + usUSRscFileName.AppendNum( ELangAmerican ); + usUSRscFileName.Append( KResourceFileExtName ); + + RFs fileSession; + User::LeaveIfError( fileSession.Connect() ); + CleanupClosePushL( fileSession ); + if ( BaflUtils::FileExists( fileSession , usUSRscFileName )) + { + iUSRscFileExist = ETrue; + } + CleanupStack::PopAndDestroy( 1 ); // For addition of ITI features, add a candidate list in vkb window CreateCandidateListL(); } @@ -458,8 +473,12 @@ file.Close(); aLangID = ELangCanadianFrench; } - } + // If US Rsc file exist, use it instead of English rsc file + if(( aLangID == ELangEnglish ) && ( iUSRscFileExist )) + { + aLangID = ELangAmerican; + } iResourceFilename.Zero(); // Generate resource file name according to language id iResourceFilename = KConfigurationResourceFile(); diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/srcdata/10282358.rss --- a/textinput/peninputgenericvkb/srcdata/10282358.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/srcdata/10282358.rss Thu Aug 19 10:15:25 2010 +0300 @@ -44,6 +44,15 @@ // Info for CImplementation1 IMPLEMENTATION_INFO { + implementation_uid = 0x20026837; + version_no = 1; + display_name = "Portrait QWERTY Keypad"; + default_data = "1||16||33||37||42||50||57||54||93||94||96"; // Supported language + opaque_data= "16||33||37||42||50||57||54||93||94||96"; // Prefered lanaguage + }, + // Info for CImplementation1 + IMPLEMENTATION_INFO + { implementation_uid = 0x2001114D; version_no = 1; display_name = "Generic FSQ Implementation version 1"; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_01.rss --- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_01.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_01.rss Thu Aug 19 10:15:25 2010 +0300 @@ -1051,8 +1051,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0022>; - scancode=0x0022; + unicode=<0x0026>; + scancode=0x0026; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -1164,8 +1164,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0026>; - scancode=0x0026; + unicode=<0x0022>; + scancode=0x0022; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -1353,8 +1353,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x00A2>; - scancode=0x00A2; + unicode=<0x20AA>; + scancode=0x20AA; beginrow=2; begincolumn=8; highlightbmpindex=0; @@ -1362,8 +1362,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x20AA>; - scancode=0x20AA; + unicode=<0x00A2>; + scancode=0x00A2; beginrow=2; begincolumn=9; highlightbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_10.rss --- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_10.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_10.rss Thu Aug 19 10:15:25 2010 +0300 @@ -463,8 +463,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -685,8 +685,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0027>; + scancode=0x0027; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -757,8 +757,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x002C>; + scancode=0x002C; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -766,8 +766,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; + unicode=<0x002E>; + scancode=0x002E; beginrow=2; begincolumn=8; highlightbmpindex=0; @@ -775,8 +775,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0021>; - scancode=0x0021; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -2734,8 +2734,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0070>; - scancode=0x0070; + unicode=<0x002A>; + scancode=0x002A; beginrow=0; begincolumn=4; highlightbmpindex=0; @@ -2761,8 +2761,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003B>; - scancode=0x003B; + unicode=<0x0026>; + scancode=0x0026; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -2779,8 +2779,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0025>; + scancode=0x0025; beginrow=0; begincolumn=9; highlightbmpindex=0; @@ -2824,8 +2824,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0077>; - scancode=0x0077; + unicode=<0x0070>; + scancode=0x0070; beginrow=1; begincolumn=4; highlightbmpindex=0; @@ -2833,8 +2833,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; + unicode=<0x0021>; + scancode=0x0021; beginrow=1; begincolumn=5; highlightbmpindex=0; @@ -2842,8 +2842,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x005F>; - scancode=0x005F; + unicode=<0x0024>; + scancode=0x0024; beginrow=1; begincolumn=6; highlightbmpindex=0; @@ -2869,8 +2869,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0021>; - scancode=0x0021; + unicode=<0x005F>; + scancode=0x005F; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -2914,8 +2914,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002A>; - scancode=0x002A; + unicode=<0x0077>; + scancode=0x0077; beginrow=2; begincolumn=4; highlightbmpindex=0; @@ -2923,8 +2923,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0040>; - scancode=0x0040; + unicode=<0x002D>; + scancode=0x002D; beginrow=2; begincolumn=5; highlightbmpindex=0; @@ -2932,8 +2932,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x003D>; + scancode=0x003D; beginrow=2; begincolumn=6; highlightbmpindex=0; @@ -2941,26 +2941,26 @@ }, PENINPUT_LAYOUT_UNIT_KEY { + unicode=<0x003F>; + scancode=0x003F; + beginrow=2; + begincolumn=7; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { unicode=<0x005C>; scancode=0x005C; beginrow=2; - begincolumn=7; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0027>; - scancode=0x0027; - beginrow=2; begincolumn=8; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0022>; - scancode=0x0022; + unicode=<0x002F>; + scancode=0x002F; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -3046,8 +3046,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x007E>; - scancode=0x007E; + unicode=<0x003B>; + scancode=0x003B; beginrow=0; begincolumn=4; highlightbmpindex=0; @@ -3055,8 +3055,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x005E>; - scancode=0x005E; + unicode=<0x201E>; + scancode=0x201E; beginrow=0; begincolumn=5; highlightbmpindex=0; @@ -3064,8 +3064,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0060>; - scancode=0x0060; + unicode=<0x201D>; + scancode=0x201D; beginrow=0; begincolumn=6; highlightbmpindex=0; @@ -3073,8 +3073,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0026>; - scancode=0x0026; + unicode=<0x005F>; + scancode=0x005F; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -3082,8 +3082,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003D>; - scancode=0x003D; + unicode=<0x003C>; + scancode=0x003C; beginrow=0; begincolumn=8; highlightbmpindex=0; @@ -3091,8 +3091,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x00BF>; - scancode=0x00BF; + unicode=<0x003E>; + scancode=0x003E; beginrow=0; begincolumn=9; highlightbmpindex=0; @@ -3136,8 +3136,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0025>; - scancode=0x0025; + unicode=<0x005E>; + scancode=0x005E; beginrow=1; begincolumn=4; highlightbmpindex=0; @@ -3145,8 +3145,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x005B>; - scancode=0x005B; + unicode=<0x0060>; + scancode=0x0060; beginrow=1; begincolumn=5; highlightbmpindex=0; @@ -3154,8 +3154,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x005D>; - scancode=0x005D; + unicode=<0x00B4>; + scancode=0x00B4; beginrow=1; begincolumn=6; highlightbmpindex=0; @@ -3163,8 +3163,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x201E>; - scancode=0x201E; + unicode=<0x007E>; + scancode=0x007E; beginrow=1; begincolumn=7; highlightbmpindex=0; @@ -3172,8 +3172,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x201D>; - scancode=0x201D; + unicode=<0x0027>; + scancode=0x0027; beginrow=1; begincolumn=8; highlightbmpindex=0; @@ -3181,8 +3181,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x00A1>; - scancode=0x00A1; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -3226,8 +3226,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0045>; - scancode=0x0045; + unicode=<0x007B>; + scancode=0x007B; beginrow=2; begincolumn=4; highlightbmpindex=0; @@ -3235,8 +3235,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x20AC>; - scancode=0x20AC; + unicode=<0x007D>; + scancode=0x007D; beginrow=2; begincolumn=5; highlightbmpindex=0; @@ -3244,8 +3244,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x00A3>; - scancode=0x00A3; + unicode=<0x005B>; + scancode=0x005B; beginrow=2; begincolumn=6; highlightbmpindex=0; @@ -3253,8 +3253,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0024>; - scancode=0x0024; + unicode=<0x005D>; + scancode=0x005D; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -3262,18 +3262,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { + unicode=<0x007C>; + scancode=0x007C; + beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { unicode=<0x00A2>; scancode=0x00A2; beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x20AA>; - scancode=0x20AA; - beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_18.rss --- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_18.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_18.rss Thu Aug 19 10:15:25 2010 +0300 @@ -463,8 +463,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -685,8 +685,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -757,8 +757,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x003F>; + scancode=0x003F; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -766,18 +766,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; - beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0021>; scancode=0x0021; beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_39.rss --- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_39.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_39.rss Thu Aug 19 10:15:25 2010 +0300 @@ -463,8 +463,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -685,8 +685,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -757,8 +757,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x003F>; + scancode=0x003F; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -766,18 +766,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; - beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0021>; scancode=0x0021; beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_42.rss --- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_42.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_42.rss Thu Aug 19 10:15:25 2010 +0300 @@ -291,8 +291,8 @@ { PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002C>; - scancode=0x002C; + unicode=<0x044F>; + scancode=0x044F; beginrow=0; begincolumn=0; highlightbmpindex=0; @@ -300,8 +300,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0443>; - scancode=0x0443; + unicode=<0x0432>; + scancode=0x0432; beginrow=0; begincolumn=1; highlightbmpindex=0; @@ -318,8 +318,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0438>; - scancode=0x0438; + unicode=<0x0440>; + scancode=0x0440; beginrow=0; begincolumn=3; highlightbmpindex=0; @@ -327,8 +327,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0448>; - scancode=0x0448; + unicode=<0x0442>; + scancode=0x0442; beginrow=0; begincolumn=4; highlightbmpindex=0; @@ -336,8 +336,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0449>; - scancode=0x0449; + unicode=<0x044A>; + scancode=0x044A; beginrow=0; begincolumn=5; highlightbmpindex=0; @@ -345,8 +345,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x043A>; - scancode=0x043A; + unicode=<0x0443>; + scancode=0x0443; beginrow=0; begincolumn=6; highlightbmpindex=0; @@ -354,8 +354,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0441>; - scancode=0x0441; + unicode=<0x0438>; + scancode=0x0438; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -363,8 +363,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0434>; - scancode=0x0434; + unicode=<0x043E>; + scancode=0x043E; beginrow=0; begincolumn=8; highlightbmpindex=0; @@ -372,8 +372,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0437>; - scancode=0x0437; + unicode=<0x043F>; + scancode=0x043F; beginrow=0; begincolumn=9; highlightbmpindex=0; @@ -381,8 +381,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0446>; - scancode=0x0446; + unicode=<0x0447>; + scancode=0x0447; beginrow=0; begincolumn=10; highlightbmpindex=0; @@ -390,35 +390,35 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x044C>; - scancode=0x044C; - beginrow=1; - begincolumn=0; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x044F>; - scancode=0x044F; - beginrow=1; - begincolumn=1; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0430>; scancode=0x0430; beginrow=1; + begincolumn=0; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0441>; + scancode=0x0441; + beginrow=1; + begincolumn=1; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0434>; + scancode=0x0434; + beginrow=1; begincolumn=2; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x043E>; - scancode=0x043E; + unicode=<0x0444>; + scancode=0x0444; beginrow=1; begincolumn=3; highlightbmpindex=0; @@ -426,108 +426,9 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0436>; - scancode=0x0436; - beginrow=1; - begincolumn=4; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0433>; scancode=0x0433; beginrow=1; - begincolumn=5; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0442>; - scancode=0x0442; - beginrow=1; - begincolumn=6; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x043D>; - scancode=0x043D; - beginrow=1; - begincolumn=7; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0432>; - scancode=0x0432; - beginrow=1; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x043C>; - scancode=0x043C; - beginrow=1; - begincolumn=9; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0447>; - scancode=0x0447; - beginrow=1; - begincolumn=10; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x044E>; - scancode=0x044E; - beginrow=2; - begincolumn=0; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0439>; - scancode=0x0439; - beginrow=2; - begincolumn=1; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x044A>; - scancode=0x044A; - beginrow=2; - begincolumn=2; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x044D>; - scancode=0x044D; - beginrow=2; - begincolumn=3; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0444>; - scancode=0x0444; - beginrow=2; begincolumn=4; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -536,25 +437,25 @@ { unicode=<0x0445>; scancode=0x0445; - beginrow=2; + beginrow=1; begincolumn=5; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x043F>; - scancode=0x043F; - beginrow=2; + unicode=<0x0439>; + scancode=0x0439; + beginrow=1; begincolumn=6; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0440>; - scancode=0x0440; - beginrow=2; + unicode=<0x043A>; + scancode=0x043A; + beginrow=1; begincolumn=7; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -563,8 +464,62 @@ { unicode=<0x043B>; scancode=0x043B; + beginrow=1; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x044E>; + scancode=0x044E; + beginrow=1; + begincolumn=9; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0040>; + scancode=0x0040; + beginrow=1; + begincolumn=10; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0437>; + scancode=0x0437; beginrow=2; - begincolumn=8; + begincolumn=0; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x044C>; + scancode=0x044C; + beginrow=2; + begincolumn=1; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0446>; + scancode=0x0446; + beginrow=2; + begincolumn=2; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0436>; + scancode=0x0436; + beginrow=2; + begincolumn=3; highlightbmpindex=0; highlightmaskbmpindex=0; }, @@ -573,6 +528,51 @@ unicode=<0x0431>; scancode=0x0431; beginrow=2; + begincolumn=4; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x043D>; + scancode=0x043D; + beginrow=2; + begincolumn=5; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x043C>; + scancode=0x043C; + beginrow=2; + begincolumn=6; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0448>; + scancode=0x0448; + beginrow=2; + begincolumn=7; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0449>; + scancode=0x0449; + beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002C>; + scancode=0x002C; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -630,8 +630,8 @@ { PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x044B>; - scancode=0x044B; + unicode=<0x042F>; + scancode=0x042F; beginrow=0; begincolumn=0; highlightbmpindex=0; @@ -639,8 +639,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0423>; - scancode=0x0423; + unicode=<0x0412>; + scancode=0x0412; beginrow=0; begincolumn=1; highlightbmpindex=0; @@ -657,8 +657,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0418>; - scancode=0x0418; + unicode=<0x0420>; + scancode=0x0420; beginrow=0; begincolumn=3; highlightbmpindex=0; @@ -666,8 +666,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0428>; - scancode=0x0428; + unicode=<0x0422>; + scancode=0x0422; beginrow=0; begincolumn=4; highlightbmpindex=0; @@ -675,8 +675,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0429>; - scancode=0x0429; + unicode=<0x042A>; + scancode=0x042A; beginrow=0; begincolumn=5; highlightbmpindex=0; @@ -684,8 +684,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x041A>; - scancode=0x041A; + unicode=<0x0423>; + scancode=0x0423; beginrow=0; begincolumn=6; highlightbmpindex=0; @@ -693,8 +693,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0421>; - scancode=0x0421; + unicode=<0x0418>; + scancode=0x0418; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -702,8 +702,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0414>; - scancode=0x0414; + unicode=<0x041E>; + scancode=0x041E; beginrow=0; begincolumn=8; highlightbmpindex=0; @@ -711,8 +711,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0417>; - scancode=0x0417; + unicode=<0x041F>; + scancode=0x041F; beginrow=0; begincolumn=9; highlightbmpindex=0; @@ -720,8 +720,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0426>; - scancode=0x0426; + unicode=<0x0427>; + scancode=0x0427; beginrow=0; begincolumn=10; highlightbmpindex=0; @@ -729,35 +729,35 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x042C>; - scancode=0x042C; - beginrow=1; - begincolumn=0; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x042F>; - scancode=0x042F; - beginrow=1; - begincolumn=1; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0410>; scancode=0x0410; beginrow=1; + begincolumn=0; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0421>; + scancode=0x0421; + beginrow=1; + begincolumn=1; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0414>; + scancode=0x0414; + beginrow=1; begincolumn=2; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x041E>; - scancode=0x041E; + unicode=<0x0424>; + scancode=0x0424; beginrow=1; begincolumn=3; highlightbmpindex=0; @@ -765,108 +765,9 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0416>; - scancode=0x0416; - beginrow=1; - begincolumn=4; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0413>; scancode=0x0413; beginrow=1; - begincolumn=5; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0422>; - scancode=0x0422; - beginrow=1; - begincolumn=6; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x041D>; - scancode=0x041D; - beginrow=1; - begincolumn=7; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0412>; - scancode=0x0412; - beginrow=1; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x041C>; - scancode=0x041C; - beginrow=1; - begincolumn=9; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0427>; - scancode=0x0427; - beginrow=1; - begincolumn=10; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x042E>; - scancode=0x042E; - beginrow=2; - begincolumn=0; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0419>; - scancode=0x0419; - beginrow=2; - begincolumn=1; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x042A>; - scancode=0x042A; - beginrow=2; - begincolumn=2; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x042D>; - scancode=0x042D; - beginrow=2; - begincolumn=3; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0424>; - scancode=0x0424; - beginrow=2; begincolumn=4; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -875,25 +776,25 @@ { unicode=<0x0425>; scancode=0x0425; - beginrow=2; + beginrow=1; begincolumn=5; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x041F>; - scancode=0x041F; - beginrow=2; + unicode=<0x0419>; + scancode=0x0419; + beginrow=1; begincolumn=6; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0420>; - scancode=0x0420; - beginrow=2; + unicode=<0x041A>; + scancode=0x041A; + beginrow=1; begincolumn=7; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -902,8 +803,62 @@ { unicode=<0x041B>; scancode=0x041B; + beginrow=1; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x042E>; + scancode=0x042E; + beginrow=1; + begincolumn=9; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=1; + begincolumn=10; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0417>; + scancode=0x0417; beginrow=2; - begincolumn=8; + begincolumn=0; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x042C>; + scancode=0x042C; + beginrow=2; + begincolumn=1; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0426>; + scancode=0x0426; + beginrow=2; + begincolumn=2; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0416>; + scancode=0x0416; + beginrow=2; + begincolumn=3; highlightbmpindex=0; highlightmaskbmpindex=0; }, @@ -912,7 +867,43 @@ unicode=<0x0411>; scancode=0x0411; beginrow=2; - begincolumn=9; + begincolumn=4; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x041D>; + scancode=0x041D; + beginrow=2; + begincolumn=5; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x041C>; + scancode=0x041C; + beginrow=2; + begincolumn=6; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0428>; + scancode=0x0428; + beginrow=2; + begincolumn=7; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0429>; + scancode=0x0429; + beginrow=2; + begincolumn=8; highlightbmpindex=0; highlightmaskbmpindex=0; }, @@ -921,6 +912,15 @@ unicode=<0x003F>; scancode=0x003F; beginrow=2; + begincolumn=9; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0021>; + scancode=0x0021; + beginrow=2; begincolumn=10; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_59.rss --- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_59.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_59.rss Thu Aug 19 10:15:25 2010 +0300 @@ -431,8 +431,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -650,8 +650,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -722,8 +722,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x003F>; + scancode=0x003F; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -731,18 +731,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; - beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0021>; scancode=0x0021; beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_70.rss --- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_70.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_70.rss Thu Aug 19 10:15:25 2010 +0300 @@ -431,8 +431,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -650,8 +650,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -722,8 +722,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x003F>; + scancode=0x003F; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -731,18 +731,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; - beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0021>; scancode=0x0021; beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp --- a/textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -133,14 +133,23 @@ } iCurrentState = newstate; - if(DataMgr()->IsUpdate()) - { - DataMgr()->SetUpdate(EFalse); - CSplitItutUiLayout* itutLayout = - static_cast( LayoutContext()->UiLayout() ); - itutLayout->SizeChanged( NULL ); - } - iCurrentState->OnEntryL(); + if ( DataMgr()->IsUpdate() ) + { + DataMgr()->SetUpdate( EFalse ); + CSplitItutUiLayout* itutLayout = + static_cast( LayoutContext()->UiLayout() ); + itutLayout->SizeChanged( NULL ); + + iCurrentState->OnEntryL(); + + //redraw layout immediately to minimize flicker + itutLayout->DisableLayoutDrawing( EFalse ); + itutLayout->Draw(); + } + else + { + iCurrentState->OnEntryL(); + } } // --------------------------------------------------------------------------- diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h --- a/textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h Thu Aug 19 10:15:25 2010 +0300 @@ -113,6 +113,13 @@ */ virtual ~CPeninputSplitQwertyLayout(); + /** + * Check if ITI is enabled. + * + * @return ETrue if ITI is enabled. + */ + inline TBool IsEnableITI() const; + public: // From base class CPeninputCommonLayout /** @@ -277,5 +284,12 @@ TBool iITIEnabled; }; +/** +* Check if ITI is enabled. +*/ +inline TBool CPeninputSplitQwertyLayout::IsEnableITI() const + { + return iITIEnabled; + } #endif // C_PENINPUTSPLITQWERTYLAYOUT_H diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h --- a/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h Thu Aug 19 10:15:25 2010 +0300 @@ -291,6 +291,14 @@ TBool HandleVirtualKeyUpEvent( TInt aEventType, CFepUiBaseCtrl* aCtrl, const TDesC& aEventData ); + /** + * Submit dead key + * + * @param abuf Dead key buffer + * @return None + */ + void SubmitDeadKeyL( const TDesC& abuf ); + /* * Set dead key * diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp --- a/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -62,6 +62,8 @@ // Constants const TInt KPeninputVkbWndInvalidIndex = -1; const TInt KInvalidImg = -1 ; +const TInt KKeyCodeSize = 1; +const TInt KKeyDouble = 2; _LIT( KVkbWindowResourceFile, "z:\\resource\\plugins\\peninputssqwin.rsc" ); _LIT( KConfigurationResourceFile, "z:\\resource\\plugins\\peninputssqwinconfiginfo_" ); @@ -550,7 +552,9 @@ break; case EEventVirtualKeyUnLatched: { - UiLayout()->SignalOwner( ESignalKeyEvent, iNewDeadKeyBuf ); + // Sumbit Deadkey + TRAP_IGNORE( SubmitDeadKeyL( iNewDeadKeyBuf ) ); + TBool deadKeyChange = EFalse; iLayoutContext->SetData( EAkninputDataTypeLatchedSet, &deadKeyChange ); iNewDeadKeyBuf = KNullDesC; @@ -578,13 +582,21 @@ TInt latchedFlag = IntContext( EAkninputDataTypeLatchedSet ); if ( latchedFlag ) { - TInt length = aEventData.Length() + iNewDeadKeyBuf.Length(); - HBufC* newCharBuf = HBufC::New( length ); - if ( newCharBuf ) + HBufC* newCharBuf = HBufC::New( KKeyDouble * iNewDeadKeyBuf.Length() + + aEventData.Length() ); + if( newCharBuf ) { + CPeninputSplitQwertyLayout* layout + = static_cast( UiLayout() ); + if( layout->IsEnableITI() ) + { + // If ITI is open, double same keys should be send for one dead key, + // core will handle them as one key. + newCharBuf->Des().Append( iNewDeadKeyBuf ); + } newCharBuf->Des().Append( iNewDeadKeyBuf ); newCharBuf->Des().Append( aEventData ); - } + } UnLatchDeadKey( iNewDeadKeyBuf ); @@ -599,6 +611,7 @@ } iNewDeadKeyBuf = KNullDesC; delete newCharBuf; + newCharBuf = NULL; } } break; @@ -776,10 +789,11 @@ iOldDeadKeyBuf = iNewDeadKeyBuf; iNewDeadKeyBuf = deadKey; - // When type another DeadKey, submit the previous one. - UiLayout()->SignalOwner( ESignalKeyEvent, iOldDeadKeyBuf ); + // Submit old Deadkey + TRAP_IGNORE( SubmitDeadKeyL( iOldDeadKeyBuf ) ); + // Unlatch the previous DeadKey - UnLatchDeadKey(iOldDeadKeyBuf); + UnLatchDeadKey( iOldDeadKeyBuf ); } else { @@ -796,6 +810,31 @@ } // --------------------------------------------------------------------------- +// Submit dead key +// --------------------------------------------------------------------------- +// +void CPeninputSplitQwertyWindow::SubmitDeadKeyL( const TDesC& abuf ) + { + HBufC* newCharBuf = HBufC::NewL( KKeyDouble * abuf.Length() ); + if( newCharBuf ) + { + CPeninputSplitQwertyLayout* layout + = static_cast( UiLayout() ); + if( layout->IsEnableITI() ) + { + // If ITI is open, double same keys should be send for one dead key, + // core will handle them as one key. + newCharBuf->Des().Append( abuf ); + } + newCharBuf->Des().Append( abuf ); + + // Submit DeadKey + UiLayout()->SignalOwner( ESignalKeyEvent, *newCharBuf ); + delete newCharBuf; + newCharBuf = NULL; + } + } +// --------------------------------------------------------------------------- // Handle virtual key up event // --------------------------------------------------------------------------- // @@ -1682,14 +1721,39 @@ // TBool CPeninputSplitQwertyWindow::HandleDeadKeyL( TInt aEventType, const TDesC& aEventData ) - { + { // Set DeadKey to unlatched state TBool deadKeyChange = EFalse; iLayoutContext->SetData( EAkninputDataTypeLatchedSet, &deadKeyChange ); UnLatchDeadKey( iNewDeadKeyBuf ); + // Handle dead key when ITI is enable + CPeninputSplitQwertyLayout* layout + = static_cast( UiLayout() ); + if ( layout->IsEnableITI() ) + { + TBuf buf; + TKeyEvent* event = (TKeyEvent*) aEventData.Ptr(); + buf.Append( event->iCode ); + + HBufC* newCharBuf = HBufC::NewL( iNewDeadKeyBuf.Length() + buf.Length() ); + if( newCharBuf ) + { + newCharBuf->Des().Append( iNewDeadKeyBuf ); + newCharBuf->Des().Append( buf ); + + // Submit DeadKey + Key at the same time + UiLayout()->SignalOwner(ESignalKeyEvent,*newCharBuf); + + delete newCharBuf; + newCharBuf = NULL; + } + + return ETrue; + } + // Get the accent char - HBufC* newCharBuf = HBufC::NewL( 1 ); + HBufC* newCharBuf = HBufC::NewL( KKeyCodeSize ); TBool handled = HandleAccentCharEvent( aEventType, aEventData, @@ -1702,13 +1766,15 @@ UiLayout()->SignalOwner( ESignalKeyEvent, *newCharBuf ); iNewDeadKeyBuf = KNullDesC; delete newCharBuf; + newCharBuf = NULL; return ETrue; } delete newCharBuf; + newCharBuf = NULL; return EFalse; - } + } // -------------------------------------------------------------------------- // Handle resource of button(base on language direction) diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_01.rss --- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_01.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_01.rss Thu Aug 19 10:15:25 2010 +0300 @@ -1051,8 +1051,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0022>; - scancode=0x0022; + unicode=<0x0026>; + scancode=0x0026; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -1164,8 +1164,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0026>; - scancode=0x0026; + unicode=<0x0022>; + scancode=0x0022; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -1353,8 +1353,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x00A2>; - scancode=0x00A2; + unicode=<0x20AA>; + scancode=0x20AA; beginrow=2; begincolumn=8; highlightbmpindex=0; @@ -1362,8 +1362,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x20AA>; - scancode=0x20AA; + unicode=<0x00A2>; + scancode=0x00A2; beginrow=2; begincolumn=9; highlightbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_10.rss --- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_10.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_10.rss Thu Aug 19 10:15:25 2010 +0300 @@ -463,8 +463,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -685,8 +685,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0027>; + scancode=0x0027; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -757,8 +757,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x002C>; + scancode=0x002C; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -766,8 +766,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; + unicode=<0x002E>; + scancode=0x002E; beginrow=2; begincolumn=8; highlightbmpindex=0; @@ -775,8 +775,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0021>; - scancode=0x0021; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -2734,8 +2734,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0070>; - scancode=0x0070; + unicode=<0x002A>; + scancode=0x002A; beginrow=0; begincolumn=4; highlightbmpindex=0; @@ -2761,8 +2761,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003B>; - scancode=0x003B; + unicode=<0x0026>; + scancode=0x0026; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -2779,8 +2779,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0025>; + scancode=0x0025; beginrow=0; begincolumn=9; highlightbmpindex=0; @@ -2824,8 +2824,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0077>; - scancode=0x0077; + unicode=<0x0070>; + scancode=0x0070; beginrow=1; begincolumn=4; highlightbmpindex=0; @@ -2833,8 +2833,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; + unicode=<0x0021>; + scancode=0x0021; beginrow=1; begincolumn=5; highlightbmpindex=0; @@ -2842,8 +2842,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x005F>; - scancode=0x005F; + unicode=<0x0024>; + scancode=0x0024; beginrow=1; begincolumn=6; highlightbmpindex=0; @@ -2869,8 +2869,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0021>; - scancode=0x0021; + unicode=<0x005F>; + scancode=0x005F; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -2914,8 +2914,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002A>; - scancode=0x002A; + unicode=<0x0077>; + scancode=0x0077; beginrow=2; begincolumn=4; highlightbmpindex=0; @@ -2923,8 +2923,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0040>; - scancode=0x0040; + unicode=<0x002D>; + scancode=0x002D; beginrow=2; begincolumn=5; highlightbmpindex=0; @@ -2932,8 +2932,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x003D>; + scancode=0x003D; beginrow=2; begincolumn=6; highlightbmpindex=0; @@ -2941,26 +2941,26 @@ }, PENINPUT_LAYOUT_UNIT_KEY { + unicode=<0x003F>; + scancode=0x003F; + beginrow=2; + begincolumn=7; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { unicode=<0x005C>; scancode=0x005C; beginrow=2; - begincolumn=7; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0027>; - scancode=0x0027; - beginrow=2; begincolumn=8; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0022>; - scancode=0x0022; + unicode=<0x002F>; + scancode=0x002F; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -3046,8 +3046,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x007E>; - scancode=0x007E; + unicode=<0x003B>; + scancode=0x003B; beginrow=0; begincolumn=4; highlightbmpindex=0; @@ -3055,8 +3055,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x005E>; - scancode=0x005E; + unicode=<0x201E>; + scancode=0x201E; beginrow=0; begincolumn=5; highlightbmpindex=0; @@ -3064,8 +3064,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0060>; - scancode=0x0060; + unicode=<0x201D>; + scancode=0x201D; beginrow=0; begincolumn=6; highlightbmpindex=0; @@ -3073,8 +3073,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0026>; - scancode=0x0026; + unicode=<0x005F>; + scancode=0x005F; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -3082,8 +3082,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003D>; - scancode=0x003D; + unicode=<0x003C>; + scancode=0x003C; beginrow=0; begincolumn=8; highlightbmpindex=0; @@ -3091,8 +3091,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x00BF>; - scancode=0x00BF; + unicode=<0x003E>; + scancode=0x003E; beginrow=0; begincolumn=9; highlightbmpindex=0; @@ -3136,8 +3136,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0025>; - scancode=0x0025; + unicode=<0x005E>; + scancode=0x005E; beginrow=1; begincolumn=4; highlightbmpindex=0; @@ -3145,8 +3145,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x005B>; - scancode=0x005B; + unicode=<0x0060>; + scancode=0x0060; beginrow=1; begincolumn=5; highlightbmpindex=0; @@ -3154,8 +3154,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x005D>; - scancode=0x005D; + unicode=<0x00B4>; + scancode=0x00B4; beginrow=1; begincolumn=6; highlightbmpindex=0; @@ -3163,8 +3163,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x201E>; - scancode=0x201E; + unicode=<0x007E>; + scancode=0x007E; beginrow=1; begincolumn=7; highlightbmpindex=0; @@ -3172,8 +3172,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x201D>; - scancode=0x201D; + unicode=<0x0027>; + scancode=0x0027; beginrow=1; begincolumn=8; highlightbmpindex=0; @@ -3181,8 +3181,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x00A1>; - scancode=0x00A1; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -3226,8 +3226,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0045>; - scancode=0x0045; + unicode=<0x007B>; + scancode=0x007B; beginrow=2; begincolumn=4; highlightbmpindex=0; @@ -3235,8 +3235,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x20AC>; - scancode=0x20AC; + unicode=<0x007D>; + scancode=0x007D; beginrow=2; begincolumn=5; highlightbmpindex=0; @@ -3244,8 +3244,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x00A3>; - scancode=0x00A3; + unicode=<0x005B>; + scancode=0x005B; beginrow=2; begincolumn=6; highlightbmpindex=0; @@ -3253,8 +3253,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0024>; - scancode=0x0024; + unicode=<0x005D>; + scancode=0x005D; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -3262,18 +3262,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { + unicode=<0x007C>; + scancode=0x007C; + beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { unicode=<0x00A2>; scancode=0x00A2; beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x20AA>; - scancode=0x20AA; - beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_18.rss --- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_18.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_18.rss Thu Aug 19 10:15:25 2010 +0300 @@ -463,8 +463,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -685,8 +685,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -757,8 +757,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x003F>; + scancode=0x003F; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -766,18 +766,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; - beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0021>; scancode=0x0021; beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_39.rss --- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_39.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_39.rss Thu Aug 19 10:15:25 2010 +0300 @@ -463,8 +463,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -685,8 +685,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -757,8 +757,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x003F>; + scancode=0x003F; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -766,18 +766,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; - beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0021>; scancode=0x0021; beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_42.rss --- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_42.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_42.rss Thu Aug 19 10:15:25 2010 +0300 @@ -291,8 +291,8 @@ { PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002C>; - scancode=0x002C; + unicode=<0x044F>; + scancode=0x044F; beginrow=0; begincolumn=0; highlightbmpindex=0; @@ -300,8 +300,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0443>; - scancode=0x0443; + unicode=<0x0432>; + scancode=0x0432; beginrow=0; begincolumn=1; highlightbmpindex=0; @@ -318,8 +318,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0438>; - scancode=0x0438; + unicode=<0x0440>; + scancode=0x0440; beginrow=0; begincolumn=3; highlightbmpindex=0; @@ -327,8 +327,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0448>; - scancode=0x0448; + unicode=<0x0442>; + scancode=0x0442; beginrow=0; begincolumn=4; highlightbmpindex=0; @@ -336,8 +336,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0449>; - scancode=0x0449; + unicode=<0x044A>; + scancode=0x044A; beginrow=0; begincolumn=5; highlightbmpindex=0; @@ -345,8 +345,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x043A>; - scancode=0x043A; + unicode=<0x0443>; + scancode=0x0443; beginrow=0; begincolumn=6; highlightbmpindex=0; @@ -354,8 +354,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0441>; - scancode=0x0441; + unicode=<0x0438>; + scancode=0x0438; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -363,8 +363,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0434>; - scancode=0x0434; + unicode=<0x043E>; + scancode=0x043E; beginrow=0; begincolumn=8; highlightbmpindex=0; @@ -372,8 +372,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0437>; - scancode=0x0437; + unicode=<0x043F>; + scancode=0x043F; beginrow=0; begincolumn=9; highlightbmpindex=0; @@ -381,8 +381,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0446>; - scancode=0x0446; + unicode=<0x0447>; + scancode=0x0447; beginrow=0; begincolumn=10; highlightbmpindex=0; @@ -390,35 +390,35 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x044C>; - scancode=0x044C; - beginrow=1; - begincolumn=0; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x044F>; - scancode=0x044F; - beginrow=1; - begincolumn=1; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0430>; scancode=0x0430; beginrow=1; + begincolumn=0; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0441>; + scancode=0x0441; + beginrow=1; + begincolumn=1; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0434>; + scancode=0x0434; + beginrow=1; begincolumn=2; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x043E>; - scancode=0x043E; + unicode=<0x0444>; + scancode=0x0444; beginrow=1; begincolumn=3; highlightbmpindex=0; @@ -426,108 +426,9 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0436>; - scancode=0x0436; - beginrow=1; - begincolumn=4; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0433>; scancode=0x0433; beginrow=1; - begincolumn=5; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0442>; - scancode=0x0442; - beginrow=1; - begincolumn=6; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x043D>; - scancode=0x043D; - beginrow=1; - begincolumn=7; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0432>; - scancode=0x0432; - beginrow=1; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x043C>; - scancode=0x043C; - beginrow=1; - begincolumn=9; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0447>; - scancode=0x0447; - beginrow=1; - begincolumn=10; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x044E>; - scancode=0x044E; - beginrow=2; - begincolumn=0; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0439>; - scancode=0x0439; - beginrow=2; - begincolumn=1; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x044A>; - scancode=0x044A; - beginrow=2; - begincolumn=2; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x044D>; - scancode=0x044D; - beginrow=2; - begincolumn=3; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0444>; - scancode=0x0444; - beginrow=2; begincolumn=4; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -536,25 +437,25 @@ { unicode=<0x0445>; scancode=0x0445; - beginrow=2; + beginrow=1; begincolumn=5; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x043F>; - scancode=0x043F; - beginrow=2; + unicode=<0x0439>; + scancode=0x0439; + beginrow=1; begincolumn=6; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0440>; - scancode=0x0440; - beginrow=2; + unicode=<0x043A>; + scancode=0x043A; + beginrow=1; begincolumn=7; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -563,8 +464,62 @@ { unicode=<0x043B>; scancode=0x043B; + beginrow=1; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x044E>; + scancode=0x044E; + beginrow=1; + begincolumn=9; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0040>; + scancode=0x0040; + beginrow=1; + begincolumn=10; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0437>; + scancode=0x0437; beginrow=2; - begincolumn=8; + begincolumn=0; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x044C>; + scancode=0x044C; + beginrow=2; + begincolumn=1; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0446>; + scancode=0x0446; + beginrow=2; + begincolumn=2; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0436>; + scancode=0x0436; + beginrow=2; + begincolumn=3; highlightbmpindex=0; highlightmaskbmpindex=0; }, @@ -573,6 +528,51 @@ unicode=<0x0431>; scancode=0x0431; beginrow=2; + begincolumn=4; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x043D>; + scancode=0x043D; + beginrow=2; + begincolumn=5; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x043C>; + scancode=0x043C; + beginrow=2; + begincolumn=6; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0448>; + scancode=0x0448; + beginrow=2; + begincolumn=7; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0449>; + scancode=0x0449; + beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002C>; + scancode=0x002C; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -630,8 +630,8 @@ { PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x044B>; - scancode=0x044B; + unicode=<0x042F>; + scancode=0x042F; beginrow=0; begincolumn=0; highlightbmpindex=0; @@ -639,8 +639,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0423>; - scancode=0x0423; + unicode=<0x0412>; + scancode=0x0412; beginrow=0; begincolumn=1; highlightbmpindex=0; @@ -657,8 +657,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0418>; - scancode=0x0418; + unicode=<0x0420>; + scancode=0x0420; beginrow=0; begincolumn=3; highlightbmpindex=0; @@ -666,8 +666,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0428>; - scancode=0x0428; + unicode=<0x0422>; + scancode=0x0422; beginrow=0; begincolumn=4; highlightbmpindex=0; @@ -675,8 +675,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0429>; - scancode=0x0429; + unicode=<0x042A>; + scancode=0x042A; beginrow=0; begincolumn=5; highlightbmpindex=0; @@ -684,8 +684,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x041A>; - scancode=0x041A; + unicode=<0x0423>; + scancode=0x0423; beginrow=0; begincolumn=6; highlightbmpindex=0; @@ -693,8 +693,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0421>; - scancode=0x0421; + unicode=<0x0418>; + scancode=0x0418; beginrow=0; begincolumn=7; highlightbmpindex=0; @@ -702,8 +702,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0414>; - scancode=0x0414; + unicode=<0x041E>; + scancode=0x041E; beginrow=0; begincolumn=8; highlightbmpindex=0; @@ -711,8 +711,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0417>; - scancode=0x0417; + unicode=<0x041F>; + scancode=0x041F; beginrow=0; begincolumn=9; highlightbmpindex=0; @@ -720,8 +720,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0426>; - scancode=0x0426; + unicode=<0x0427>; + scancode=0x0427; beginrow=0; begincolumn=10; highlightbmpindex=0; @@ -729,35 +729,35 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x042C>; - scancode=0x042C; - beginrow=1; - begincolumn=0; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x042F>; - scancode=0x042F; - beginrow=1; - begincolumn=1; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0410>; scancode=0x0410; beginrow=1; + begincolumn=0; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0421>; + scancode=0x0421; + beginrow=1; + begincolumn=1; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0414>; + scancode=0x0414; + beginrow=1; begincolumn=2; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x041E>; - scancode=0x041E; + unicode=<0x0424>; + scancode=0x0424; beginrow=1; begincolumn=3; highlightbmpindex=0; @@ -765,108 +765,9 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0416>; - scancode=0x0416; - beginrow=1; - begincolumn=4; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0413>; scancode=0x0413; beginrow=1; - begincolumn=5; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0422>; - scancode=0x0422; - beginrow=1; - begincolumn=6; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x041D>; - scancode=0x041D; - beginrow=1; - begincolumn=7; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0412>; - scancode=0x0412; - beginrow=1; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x041C>; - scancode=0x041C; - beginrow=1; - begincolumn=9; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0427>; - scancode=0x0427; - beginrow=1; - begincolumn=10; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x042E>; - scancode=0x042E; - beginrow=2; - begincolumn=0; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0419>; - scancode=0x0419; - beginrow=2; - begincolumn=1; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x042A>; - scancode=0x042A; - beginrow=2; - begincolumn=2; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x042D>; - scancode=0x042D; - beginrow=2; - begincolumn=3; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { - unicode=<0x0424>; - scancode=0x0424; - beginrow=2; begincolumn=4; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -875,25 +776,25 @@ { unicode=<0x0425>; scancode=0x0425; - beginrow=2; + beginrow=1; begincolumn=5; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x041F>; - scancode=0x041F; - beginrow=2; + unicode=<0x0419>; + scancode=0x0419; + beginrow=1; begincolumn=6; highlightbmpindex=0; highlightmaskbmpindex=0; }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x0420>; - scancode=0x0420; - beginrow=2; + unicode=<0x041A>; + scancode=0x041A; + beginrow=1; begincolumn=7; highlightbmpindex=0; highlightmaskbmpindex=0; @@ -902,8 +803,62 @@ { unicode=<0x041B>; scancode=0x041B; + beginrow=1; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x042E>; + scancode=0x042E; + beginrow=1; + begincolumn=9; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=1; + begincolumn=10; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0417>; + scancode=0x0417; beginrow=2; - begincolumn=8; + begincolumn=0; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x042C>; + scancode=0x042C; + beginrow=2; + begincolumn=1; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0426>; + scancode=0x0426; + beginrow=2; + begincolumn=2; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0416>; + scancode=0x0416; + beginrow=2; + begincolumn=3; highlightbmpindex=0; highlightmaskbmpindex=0; }, @@ -912,7 +867,43 @@ unicode=<0x0411>; scancode=0x0411; beginrow=2; - begincolumn=9; + begincolumn=4; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x041D>; + scancode=0x041D; + beginrow=2; + begincolumn=5; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x041C>; + scancode=0x041C; + beginrow=2; + begincolumn=6; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0428>; + scancode=0x0428; + beginrow=2; + begincolumn=7; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0429>; + scancode=0x0429; + beginrow=2; + begincolumn=8; highlightbmpindex=0; highlightmaskbmpindex=0; }, @@ -921,6 +912,15 @@ unicode=<0x003F>; scancode=0x003F; beginrow=2; + begincolumn=9; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x0021>; + scancode=0x0021; + beginrow=2; begincolumn=10; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_59.rss --- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_59.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_59.rss Thu Aug 19 10:15:25 2010 +0300 @@ -431,8 +431,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -650,8 +650,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -722,8 +722,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x003F>; + scancode=0x003F; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -731,18 +731,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; - beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0021>; scancode=0x0021; beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_70.rss --- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_70.rss Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_70.rss Thu Aug 19 10:15:25 2010 +0300 @@ -431,8 +431,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x003F>; - scancode=0x003F; + unicode=<0x0040>; + scancode=0x0040; beginrow=2; begincolumn=9; highlightbmpindex=0; @@ -650,8 +650,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002F>; - scancode=0x002F; + unicode=<0x0022>; + scancode=0x0022; beginrow=1; begincolumn=9; highlightbmpindex=0; @@ -722,8 +722,8 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002B>; - scancode=0x002B; + unicode=<0x003F>; + scancode=0x003F; beginrow=2; begincolumn=7; highlightbmpindex=0; @@ -731,18 +731,18 @@ }, PENINPUT_LAYOUT_UNIT_KEY { - unicode=<0x002D>; - scancode=0x002D; - beginrow=2; - begincolumn=8; - highlightbmpindex=0; - highlightmaskbmpindex=0; - }, - PENINPUT_LAYOUT_UNIT_KEY - { unicode=<0x0021>; scancode=0x0021; beginrow=2; + begincolumn=8; + highlightbmpindex=0; + highlightmaskbmpindex=0; + }, + PENINPUT_LAYOUT_UNIT_KEY + { + unicode=<0x002F>; + scancode=0x002F; + beginrow=2; begincolumn=9; highlightbmpindex=0; highlightmaskbmpindex=0; diff -r b1ea1642412e -r ac7e4d1d9209 textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp --- a/textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp Thu Jul 15 19:01:13 2010 +0300 +++ b/textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp Thu Aug 19 10:15:25 2010 +0300 @@ -490,6 +490,13 @@ else { iVkbCtrl->SetIrregularKeyBoard(EFalse); + + + //Add Skin id to Vkb Control for 9 piece picture. + iVkbCtrl->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal ); + iVkbCtrl->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonFrPressed ); + iVkbCtrl->SetKeySkinId( EKeyBmpDim, KAknsIIDQsnFrKeypadButtonFrInactive ); + iVkbLayout->SetNonIrregularResourceId(R_AKN_FEP_VKB_NONIRREGULAR_BITMAP); iVkbLayout->ConstructFromNonIrregularResourceL(); } @@ -621,8 +628,7 @@ x = 0; y = 0; } - - + for ( TInt i = 0; i < count; i++ ) { controlID = controlList[i]->ControlID(); @@ -687,7 +693,9 @@ TRAP_IGNORE(SetRangeBarSizeL(x, y)); } } - } + } + + RootControl()->Draw(); } void CPeninputVkbKrWindow::DoCaseChange( TInt aNewCase ) @@ -1195,7 +1203,6 @@ { iTableUpButton->Hide(EFalse); iTableUpButton->SizeChanged( exRect, inRect, ETrue ); - iTableUpButton->Draw(); } iLafMgr->GetButtonRect( @@ -1258,7 +1265,6 @@ { iTablePageLabel->Hide(EFalse); iTablePageLabel->SizeChanged( exRect, inRect, ETrue ); - iTablePageLabel->Draw(); } iLafMgr->GetButtonRect( @@ -1275,7 +1281,6 @@ { iTableDownButton->Hide(EFalse); iTableDownButton->SizeChanged( exRect, inRect, ETrue ); - iTableDownButton->Draw(); } TRect updateArea; @@ -1471,7 +1476,7 @@ buf.Format(_L("%d/%d"),SymbolTableUtil::FindIndex(vkbLayoutToUpdate)+1,KMaxSymbolTable); //iTablePageLabel->SetCaptionL(buf); iTablePageLabel->SetTextL(buf); - iTablePageLabel->Draw(); + RootControl()->Draw(); } }