# HG changeset patch # User andy simpson # Date 1287758307 -3600 # Node ID 9eb76adaa71f6a080f69539b089db694a821c1bd # Parent 8152b1f1763a1ee7d25edc7971481e833cc49176# Parent 315ee003fe388131cc7152c8756cdef18b9ee7cb re-merge work-a-round for sf_refhw rom boot system error diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/group/AknFepUiAvkonPlugin.mmp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlCandidatePane.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlContainerChinese.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUIAvkonCtrlPinyinPopup.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/aknfepuilayoutdatamgr.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -79,15 +79,7 @@ { 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 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlCandidatePane.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlContainerChinese.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlInputPane.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlPinyinPopup.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -131,6 +131,18 @@ void CAknFepUIAvkonImpl::DeleteDialogs() { + // If there is no dialog displayed, do not need delete the dialog, + // but set all dialog pointer to null and return + if( !CEikonEnv::Static()->EikAppUi()->IsDisplayingMenuOrDialog()) + { + iDialog = NULL; + iCharMapDialog = NULL; + iListQueryDialog = NULL; + iTextQueryDialog = NULL; + iPredictiveSettingDialog = NULL; + return; + } + if(iDialog) { delete iDialog; @@ -332,13 +344,12 @@ TInt commandId; if (version == KAknCbaVersion) { - TUint32 shortCommandId = reader.ReadUint16(); - TUint32 longCommandId = reader.ReadUint16(); - commandId = (longCommandId << 16) | shortCommandId; + commandId = reader.ReadInt16(); + reader.ReadInt16(); //long press id } else { - commandId = TInt(TUint(reader.ReadUint16())); + commandId =reader.ReadInt16(); } TPtrC text=reader.ReadTPtrC(); reader.ReadTPtrC(); // bmp filename diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuictrleepcontrol.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuictrlpinyineep.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/aknfepuilayoutdatamgr.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/UiPlugins/AknFepUiInterface/inc/AknFepUiCtrlContainerChinese.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/conf/aknfep.confml Binary file fep/aknfep/conf/aknfep.confml has changed diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/conf/aknfep_101F876D.crml Binary file fep/aknfep/conf/aknfep_101F876D.crml has changed diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/group/AknFep.mmp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/group/Iconlist.txt diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/group/bld.inf diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepLanguageManager.h --- a/fep/aknfep/inc/AknFepLanguageManager.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepLanguageManager.h Fri Oct 22 15:38:27 2010 +0100 @@ -89,7 +89,6 @@ CAknFepCaseManager* aCaseMan, CAknFepSharedDataInterface* aSharedData = NULL ); - /** * Destructor. * @@ -262,7 +261,7 @@ * @since S60 v3.2 */ TBool iIsSplitView; - + /** * Shared data manager */ diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepManager.h --- a/fep/aknfep/inc/AknFepManager.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepManager.h Fri Oct 22 15:38:27 2010 +0100 @@ -267,7 +267,11 @@ /* Flag to set decide when to set multiple observer for FEP. Set this flag whenever a FEP aware dialog is launched */ EExtendedFlagFepAwareDialogLaunched =0x00000020, /* Flag to specify that pointer event type EDrag has happened */ - EExtendedFlagPointerEventTypeEDrag =0x00000040 + EExtendedFlagPointerEventTypeEDrag =0x00000040, + /* Flag to specify that Fn key will be set as lock mode when long press occurs*/ + EExtendedFlagFnKeyNeedLockMode =0x00000080, + /* Flag to specify point in editor when EFlagNoMatches flag is set*/ + EExtendedFlagPointInNoMatchEditor =0x00000100 }; //public constants @@ -913,6 +917,11 @@ void HandleChangeInFocusForSettingFep(); + /** + * Returns initial rectangle used for the top-left point of split candidate. + */ + TRect InitRectForSplitCandL(); + private: /** diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepManagerUIInterface.h --- a/fep/aknfep/inc/AknFepManagerUIInterface.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepManagerUIInterface.h Fri Oct 22 15:38:27 2010 +0100 @@ -401,13 +401,6 @@ * 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 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepPluginManager.h --- a/fep/aknfep/inc/AknFepPluginManager.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepPluginManager.h Fri Oct 22 15:38:27 2010 +0100 @@ -319,6 +319,8 @@ */ void SetCursorSelectionL(const TCursorSelection& aCurSel, TBool aSyncCursor); + void VietSyncToneMarkerL(const TDesC& aEditorContent, const TCursorSelection& aCursorPos); + HBufC* GetNumberKeymapResource(TInt aCaseMode); HBufC* DoGetNumberKeymapResourceL(TInt aCaseMode); diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepSharedDataInterface.h --- a/fep/aknfep/inc/AknFepSharedDataInterface.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepSharedDataInterface.h Fri Oct 22 15:38:27 2010 +0100 @@ -584,6 +584,7 @@ * @param Replace value of KAknFepLastUsedPortraitInput value. */ void SetPluginPortraitInputMode( TPluginInputMode aLastUsedPortraitInputMode ); + private: /** * C++ Constructor diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUIInputStateEntryMiniQwertyCangJie.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStateBase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStateChineseBase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStateEntryQwertyWesternPredictive.h --- a/fep/aknfep/inc/AknFepUiInputStateEntryQwertyWesternPredictive.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepUiInputStateEntryQwertyWesternPredictive.h Fri Oct 22 15:38:27 2010 +0100 @@ -93,6 +93,7 @@ * @param aLength The key press length. */ TBool HandleNaviKeysL(TInt aKey, TKeyPressLength aLength); + private: /** @@ -111,6 +112,7 @@ * @Return ETrue : yes it is on the key; EFalse : No it is not on the Key */ TBool MapAgainst(TInt aKey, TInt aMode, TInt16 aAgainst, TInt aCase) const; + }; #endif //__AKN_FEP_UI_INPUT_STATE_ENTRY_QWERTY_WESTERN_PREDICTIVE_H__ diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStatePredictiveInputMiniQwertyChinesePhrase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h --- a/fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h Fri Oct 22 15:38:27 2010 +0100 @@ -38,7 +38,9 @@ private: virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength); - + + void KeyTimerExpired(); + private: }; diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiManagerBase.h --- a/fep/aknfep/inc/AknFepUiManagerBase.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepUiManagerBase.h Fri Oct 22 15:38:27 2010 +0100 @@ -442,7 +442,8 @@ * @since 3.2 */ virtual TBool RollbackPreviousCharL(); - + + /** * Check whether the character mapped on given key * @param aKey The scancode of the key to be checked. @@ -453,6 +454,7 @@ */ TBool MapAgainst(TInt aKey, TInt aMode, TInt16 aAgainst, TInt aCase) const; + #endif //RD_INTELLIGENT_TEXT_INPUT #endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__ diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/AknFepUiManagerChinese.h --- a/fep/aknfep/inc/AknFepUiManagerChinese.h Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/inc/AknFepUiManagerChinese.h Fri Oct 22 15:38:27 2010 +0100 @@ -274,8 +274,8 @@ * @since 2.6 */ void ConstructL(TLanguage aLanguage); - - /** + + /** * Tell whether this key mapped valid zhuyin, pinyin, or cangjie symbol */ TBool IsValidChineseInputSymbol(TInt aKey, TPtiEngineInputMode aMode) const; @@ -285,6 +285,7 @@ */ TBool IsValidChineseToneMarkKey(TInt aKey, TPtiEngineInputMode aMode) const; + private: // Data TAknFepInputStateChineseBase iFepUiState; MAknFepUICtrlContainerChinese* iContainerPane; diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/aknfepuiinputstateminiqwertystrokephrase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/inc/aknfepuiinputstateminiqwertyzhuyinphrase.h diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp --- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -539,9 +539,13 @@ // Not derived from edwin if ( aPermittedMode == EAknEditorNumericInputMode ) { - // Only number range is supported in Korean Variant - iPermittedRange = ERangeNumber; + if ( SupportNativeNumberRange() ) + { + iPermittedRange = ERangeNativeNumber; + } + iPermittedRange |= ERangeNumber; } + else if ( aPermittedMode & EAknEditorTextInputMode ) { // Derived from edwin and EAknEditorTextInputMode diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp --- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -295,6 +295,7 @@ + sizeof(TInt) // for langcode + sizeof(TInt)*( itemArray->Count() ) // For the size of each item + sumSize// For all of char data + + 4*sizeof(TInt) // For the Rect ); TPtr8 buf8Ptr = buf8->Des(); RDesWriteStream writeStream; @@ -309,6 +310,12 @@ writeStream.WriteInt32L( (*itemArray)[i].Size() ); writeStream.WriteL( (*itemArray)[i].Ptr(), (*itemArray)[i].Length() ); } + + writeStream.WriteInt32L( candidatelist->iRect.iTl.iX); + writeStream.WriteInt32L( candidatelist->iRect.iTl.iY ); + writeStream.WriteInt32L( candidatelist->iRect.iBr.iX); + writeStream.WriteInt32L( candidatelist->iRect.iBr.iY ); + writeStream.CommitL(); CleanupStack::PopAndDestroy( &writeStream ); SendCommandToServer( aCommandId, buf8Ptr ); diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanagerbase.cpp --- a/fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanagerbase.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanagerbase.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -220,10 +220,11 @@ RArray sizeArray; for (TInt i = 0; i < count; i++) { - TInt size = (*listArray)[i].Size(); + TInt size = (*listArray)[i].Size(); sizeArray.Append(size); transferSize += size + sizeof(TInt); } + transferSize += 4 * sizeof( TInt ); HBufC8* buf = HBufC8::NewLC(transferSize); TPtr8 bufPtr = buf->Des(); @@ -242,14 +243,19 @@ const TUint16* piData = (*listArray)[i].Ptr(); writeStream.WriteL(piData, sizeArray[i] / 2); } - + + writeStream.WriteInt32L( pCanData->iRect.iTl.iX ); + writeStream.WriteInt32L( pCanData->iRect.iTl.iY ); + writeStream.WriteInt32L( pCanData->iRect.iBr.iX ); + writeStream.WriteInt32L( pCanData->iRect.iBr.iY ); + writeStream.CommitL(); SendCommandToServer( aCommandId, bufPtr ); sizeArray.Close(); - CleanupStack::PopAndDestroy(&writeStream); - CleanupStack::PopAndDestroy(buf); + CleanupStack::PopAndDestroy(&writeStream); + CleanupStack::PopAndDestroy(buf); } break; diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepKeyCatcher.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepManager.cpp --- a/fep/aknfep/src/AknFepManager.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepManager.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -239,6 +239,9 @@ // The passwd timeout is same as defined on CEikSecretEditor. const TInt KSyncPasswdTimeout = 1000000; +// The offset to show underline +const TInt KUnderlineHeight = 4; + #ifdef RD_SCALABLE_UI_V2 TUid AppUidFromWndGroupId(TInt aWndGrpId); extern TUid GetCurAppUid(); @@ -3129,7 +3132,7 @@ { 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. @@ -3540,6 +3543,32 @@ HandleChangeInFocus(); } +// ----------------------------------------------------------------------------- +// CAknFepManager::InitRectForSplitCandL +// Returns initial rectangle used for the top-left point of split candidate. +// ----------------------------------------------------------------------------- +// +TRect CAknFepManager::InitRectForSplitCandL() + { + // Popup Position was not right for RTL + TInt documentOffset = iLanguageCapabilities.iRightToLeftLanguage ? + 0 : iPtiEngine->CurrentWord().Length(); + + // Determine the place where to spawn the candidate popup. + TPoint inlineEditorTl; + TPoint inlineEditorBr; + TInt height; + TInt ascent; + GetScreenCoordinatesL( inlineEditorTl, height, ascent, documentOffset ); + GetScreenCoordinatesL( inlineEditorBr, height, ascent ); + + // move 4 pixeles down to show underline when pops up candidate. + inlineEditorTl.iY += KUnderlineHeight; + inlineEditorBr.iY += KUnderlineHeight; + + return TRect( inlineEditorTl, inlineEditorBr ); + } + void CAknFepManager::HandleDestructionOfFocusedItem() { if (iInputCapabilities.FepAwareTextEditor()) @@ -3897,21 +3926,27 @@ if( IsFlagSet( EFlagInsideInlineEditingTransaction ) ) { if (IsFeatureSupportedJapanese()) - { - TryCloseUiL(); - } - else - { -#ifdef RD_INTELLIGENT_TEXT_INPUT - iPtiEngine->CommitCurrentWord(); - CommitInlineEditL(); - TryCloseUiL(); + { + TryCloseUiL(); + } + else + { +#ifdef RD_INTELLIGENT_TEXT_INPUT + iPtiEngine->CommitCurrentWord(); + CommitInlineEditL(); + TryCloseUiL(); #else - CommitInlineEditL(); -#endif - } - } + CommitInlineEditL(); +#endif + } + } + + // The flag should be removed when touch input is not launched. + if ( IsExtendedFlagSet( EExtendedFlagPointInNoMatchEditor ) ) + { + ClearExtendedFlag( EExtendedFlagPointInNoMatchEditor ); + } break; case CAknExtendedInputCapabilities::MAknEventObserver::EControlContentUpdatedInternally: SendEventsToPluginManL( EPluginSyncFepAwareText, EPluginSyncAll ); @@ -3921,6 +3956,8 @@ // to be displayed. LaunchStylusCcpuMenuL(iClickPoint); break; + default: + break; } } @@ -4251,9 +4288,7 @@ // Edit mode menu commands //The soft CBA event from touch screen. case EAknSoftkeyCancel: - // case (TUint16)EAknSoftkeyCancel: case EAknSoftkeySelect: - // case (TUint16)EAknSoftkeySelect: currentFepUI = FepUI(); if (currentFepUI) currentFepUI->HandleCommandL( aCommandId ); @@ -6426,6 +6461,14 @@ 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) ) @@ -7034,6 +7077,38 @@ void CAknFepManager::HandlePointerEventInInlineTextL(TPointerEvent::TType /*aType*/, TUint /*aModifiers*/, TInt /*aPositionInInlineText*/) { + if( iFepPluginManager && iLangMan && iLangMan->IsSplitView() ) + { + switch ( iFepPluginManager->PluginInputMode() ) + { + case EPluginInputModeFSQ: + //case EPluginInputModePortraitFSQ: + { + if ( iExactWordPopupContent ) + { + iExactWordPopupContent->HidePopUp(); + } + + iFepPluginManager->HandleServerEventL( ESignalShowCandidate ); + } + break; + case EPluginInputModeItut: + { + if( IsExtendedFlagSet( EExtendedFlagPointInNoMatchEditor ) ) + { + ClearExtendedFlag( EExtendedFlagPointInNoMatchEditor ); + iFepPluginManager->HandleServerEventL( ESignalEnterSpellMode ); + } + else + { + iFepPluginManager->EnterMatchSelectionState(); + } + } + break; + default: + break; + } + } } void CAknFepManager::GetFormatOfFepInlineText(TCharFormat& aFormat, @@ -10005,8 +10080,7 @@ } else { - if(IsKoreanInputLanguage( ) && !IsQwerty() && - IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) + if(IsKoreanInputLanguage( ) && IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) { showCursor = EFalse; } @@ -10680,13 +10754,12 @@ // 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 - | EAknEditorHangulInputMode ) ) + EAknEditorHiraganaInputMode)) { iPermittedInputModes |= EAknEditorTextInputMode; } @@ -10697,13 +10770,12 @@ if ( !(defaultInputMode & (EAknEditorTextInputMode | EAknEditorNumericInputMode))) { - if ( defaultInputMode & ( EAknEditorKatakanaInputMode | + if (defaultInputMode & (EAknEditorKatakanaInputMode | EAknEditorHalfWidthTextInputMode| EAknEditorFullWidthTextInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | - EAknEditorHiraganaInputMode - | EAknEditorHangulInputMode ) ) + EAknEditorHiraganaInputMode)) { defaultInputMode = EAknEditorTextInputMode; } @@ -10791,7 +10863,7 @@ { if (IsKoreanInputLanguage()) { - if( iMode == EAknEditorNullInputMode ) + if(iMode == EHangul || iMode == ENumber || iMode == EAknEditorNullInputMode ) { SetWesternPredictive(EFalse); TryChangeModeL(EHangul); @@ -10807,12 +10879,6 @@ 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) @@ -11423,7 +11489,7 @@ } break; case EHangul: - editorMode = EAknEditorHangulInputMode; + editorMode = EAknEditorTextInputMode; break; default: if (IsFeatureSupportedJapanese()) @@ -12296,30 +12362,31 @@ } if (!iLanguageCapabilities.iLocalInputLanguageInUse) - { - switch (iSharedDataInterface->InputTextLanguage()) - { - case ELangPrcChinese: - { - iSharedDataInterface->SetInputMode(EPinyin); - SetFlag(EFlagNewSharedDataInputMode); - break; - } + { + switch (iSharedDataInterface->InputTextLanguage()) + { + case ELangPrcChinese: + { + iSharedDataInterface->SetInputMode(EPinyin); + SetFlag(EFlagNewSharedDataInputMode); + break; + } case ELangTaiwanChinese: - { - iSharedDataInterface->SetInputMode(EZhuyin); - SetFlag(EFlagNewSharedDataInputMode); - break; - } - case ELangHongKongChinese: - { - iSharedDataInterface->SetInputMode(EStroke); - SetFlag(EFlagNewSharedDataInputMode); - break; - } - default: - break; - } + { + iSharedDataInterface->SetInputMode(EZhuyin); + SetFlag(EFlagNewSharedDataInputMode); + break; + } + case ELangHongKongChinese: + { + iSharedDataInterface->SetInputMode(EStroke); + iSharedDataInterface->SetCangJieMode(ECangJieNormal); + SetFlag(EFlagNewSharedDataInputMode); + break; + } + default: + break; + } } SetHashKeyStyle(); @@ -13864,16 +13931,6 @@ } } } - - 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) @@ -13908,12 +13965,7 @@ 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; @@ -15228,26 +15280,6 @@ { 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); @@ -15601,24 +15633,7 @@ // we have text selected - set cursor to start/end of current selection TTmDocPosSpec newPos; aResponse = NavigateFromSelectionL( currentEditorSelection, naviEvent, newPos ); - - // 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 ( aCode != EKeyBackspace && WesternPredictive() ) { if (CursorInsideWord()) { @@ -18390,14 +18405,6 @@ 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 @@ -18417,7 +18424,10 @@ { currentEditorSCTResId = charMap; } - if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == 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) ) { TBool isEmpty = ETrue; TRAP_IGNORE(isEmpty = GetSctLengthL(charMap)); @@ -18531,7 +18541,7 @@ { SetStopProcessFocus(ETrue, EFalse); iFepPluginManager->SetMenuState(); - } + } else if (!iFepPluginManager->IsGlobleNotes()) { iFepPluginManager->ClosePluginInputUiL( ETrue ); @@ -18589,9 +18599,10 @@ iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ || iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) + { SetStopProcessFocus(EFalse); - } + } else { HandleChangeInFocus(); @@ -18969,9 +18980,11 @@ } void CAknFepManager::HandlePointerEventL(const TPointerEvent& aPointerEvent) { - if (IsFlagSet(CAknFepManager::EFlagNoMatches)) - { - ClearFlag(CAknFepManager::EFlagNoMatches); + if ( IsFlagSet( CAknFepManager::EFlagNoMatches ) ) + { + // Set this flag to launch spell mode on split itut + SetExtendedFlag( EExtendedFlagPointInNoMatchEditor ); + ClearFlag(CAknFepManager::EFlagNoMatches); } if(aPointerEvent.iType == TPointerEvent::EDrag) @@ -20007,7 +20020,19 @@ switch(aEventCode) { case EEventKeyDown: - ActivateFnkeyPressMonitor(); + { + //if current state of fn key is EFnKeyNone or EFnKeyNext..., EFnKeyLock will be set; + //otherwise, EFnKeyNone will be set. + if ( iFnKeyManager->FnKeyState() == CAknFepFnKeyManager::EFnKeyLock ) + { + ClearExtendedFlag( EExtendedFlagFnKeyNeedLockMode ); + } + else + { + SetExtendedFlag( EExtendedFlagFnKeyNeedLockMode ); + } + ActivateFnkeyPressMonitor(); + } break; case EEventKeyUp: { @@ -20015,6 +20040,10 @@ { //when long pressing event occurrs, //event has been already handled in HandleFnKeyPressMonitorCallback() + if ( !IsExtendedFlagSet ( EExtendedFlagFnKeyNeedLockMode )) + { + iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone); + } return EKeyWasConsumed; } //when short pressing event occurs, @@ -21248,21 +21277,10 @@ // 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; + DeactivateFnkeyPressMonitor(); + if (IsExtendedFlagSet ( EExtendedFlagFnKeyNeedLockMode ) ) + { + iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyLock); } } @@ -21274,7 +21292,11 @@ void CAknFepManager::ActivateFnkeyPressMonitor() { if( iFnKeypressMonitor ) - { + { + if ( iFnKeypressMonitor->IsActive() ) + { + iFnKeypressMonitor->Cancel(); + } iFnKeypressMonitor->Start(KFnKeyLongPressTimeout, KFnKeyLongPressTimeout, TCallBack(HandleFnKeyPressMonitorCallback, this)); } diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepPluginManager.cpp --- a/fep/aknfep/src/AknFepPluginManager.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepPluginManager.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -60,6 +60,7 @@ #include #include #include +#include // User includes #include "AknFepManagerInterface.h" // MAknFepManagerInterface @@ -316,10 +317,7 @@ if( !iPenInputSvrConnected || !iPenInputServer.IsVisible() || iPenInputServer.IsDimmed() ) { if( iFepMan.FepAwareTextEditor() ) - { - // Enable transition effect when close pen ui - // by pressing close button. - iPenInputServer.EnableGfxTransEffect( ETrue ); + { iPreferredUiMode = ETrue; TryChangePluginInputModeByModeL((TPluginInputMode)(iSharedData.PluginInputMode()), EPenInputOpenManually, @@ -577,8 +575,6 @@ } break; case ESignalLayoutClosed: - // Enable transition effect when close pen ui by pressing close button. - iPenInputServer.EnableGfxTransEffect( ETrue ); if(iPluginInputMode == EPluginInputModeItut) { iFepMan.PtiEngine()->CancelTimerActivity(); @@ -678,17 +674,21 @@ TInt activeIdx = 0; CDesCArray* candidates = new (ELeave) CDesCArrayFlat ( KDefaultCandidateArraySize ); - CleanupStack::PushL( candidates ); - iFepMan.GetCandidatesL(*candidates, activeIdx); - - TFepITICandidateList candidateListData; - candidateListData.iItemArray = candidates; - candidateListData.iActiveIndex - = ( candidates->Count() >= 2 ) ? 1 : activeIdx; - candidateListData.iLangCode = iFepMan.CurrentInputLangCode(); - - ShowCandidateListL( candidateListData ); - CleanupStack::PopAndDestroy( candidates ); + CleanupStack::PushL( candidates ); + iFepMan.GetCandidatesL(*candidates, activeIdx); + + TFepITICandidateList candidateListData; + candidateListData.iItemArray = candidates; + candidateListData.iActiveIndex + = ( candidates->Count() >= 2 ) ? 1 : activeIdx; + candidateListData.iLangCode = iFepMan.CurrentInputLangCode(); + if ( iLangMan.IsSplitView() ) + { + candidateListData.iRect = iFepMan.InitRectForSplitCandL(); + } + + ShowCandidateListL( candidateListData ); + CleanupStack::PopAndDestroy( candidates ); } break; @@ -923,7 +923,7 @@ return edwinState; } - + // ----------------------------------------------------------------------------- // CAknFepPluginManager::HandleEventsFromFepL // Handle events from FEP @@ -1332,21 +1332,6 @@ } } - if(aSuggestMode == EPluginInputModeFingerHwr - && iSharedData.InputTextLanguage() == ELangArabic) - { - if(IsEditorSupportSplitIme()) - { - if(landscape) - { - aSuggestMode = EPluginInputModeFSQ; - } - else - { - aSuggestMode = iSharedData.PluginPortraitInputMode(); - } - } - } if ( aSuggestMode == EPluginInputModeFSQ) { @@ -1496,6 +1481,15 @@ // Notify application touch window state NotifyAppUiImeTouchWndStateL( ETrue ); + if (iPluginInputMode == EPluginInputModeItut) + { + RProperty::Set( KPSUidAknFep, KAknFepVirtualKeyboardType, EPtiKeyboard12Key ); + if(iFepMan.PtiEngine()) + { + iFepMan.PtiEngine()->SetKeyboardType(EPtiKeyboard12Key); + } + iFepMan.SetQwertyMode( EFalse ); + } rtn = ETrue; } @@ -1886,7 +1880,6 @@ ProcessChangingInputModeCmdL(EPluginInputModeFSQ); } } - break; // "Edit landscape" menu - switch to landscape FSQ case EPeninputCmdLandscapeEditor: @@ -2252,9 +2245,6 @@ TInt disabledInputMode = iPenInputServer.DisabledLayout(); TInt curInputMode = iLangMan.CurrentImePlugin()->CurrentMode(); TBool isChinese = iFepMan.IsChineseInputLanguage(); - 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 /* US2/US4/US5 1. Orientation sensor off @@ -2298,7 +2288,7 @@ // 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 + if ( !isChinese && ( curInputMode != EPluginInputModePortraitFSQ ) && !( disabledInputMode & EPluginInputModePortraitFSQ ) && isPortrait ) @@ -2309,7 +2299,7 @@ } else { - if ( !isKorean && !isChinese && ( curInputMode != EPluginInputModeFSQ ) + if ( !isChinese && ( curInputMode != EPluginInputModeFSQ ) && !( disabledInputMode & EPluginInputModeFSQ ) && FeatureManager::FeatureSupported( KFeatureIdVirtualFullscrQwertyInput ) ) { @@ -2321,7 +2311,7 @@ // 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 + if ( !isChinese && ( curInputMode != EPluginInputModeItut ) && !( disabledInputMode & EPluginInputModeItut ) && FeatureManager::FeatureSupported( KFeatureIdVirtualItutInput ) ) @@ -2334,7 +2324,7 @@ // 3) Current input mode is not portrait FSQ and also the mode is not disabled // 4) Current orientation is landscape if ( iPortraitFSQEnabled - && !isKorean && !isChinese + && !isChinese && ( curInputMode != EPluginInputModePortraitFSQ ) && !( disabledInputMode & EPluginInputModePortraitFSQ ) && !isPortrait ) @@ -2351,7 +2341,7 @@ // 5) Current orientation is portrait if ( iPortraitFSQEnabled && FeatureManager::FeatureSupported( KFeatureIdVirtualFullscrQwertyInput ) - && !isKorean && !isChinese + && !isChinese && ( curInputMode != EPluginInputModeFSQ ) && !( disabledInputMode & EPluginInputModeFSQ ) && isPortrait ) @@ -2421,31 +2411,15 @@ //Show number mode menu item. if(iFepMan.InputMode() == ENumber || iFepMan.InputMode() == ENativeNumber) { - CAknEdwinState* editorState = iFepMan.EditorState(); - TUint permittedInputModes; - if( editorState ) + if(iSharedData.DefaultArabicNumberMode()) { - permittedInputModes= editorState->PermittedInputModes(); + aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse); } else { - permittedInputModes = EAknEditorNumericInputMode; - } - TBool IsOnlyNumericPermitted = !(permittedInputModes - &(EAknEditorTextInputMode | EAknEditorSecretAlphaInputMode)); - if(IsOnlyNumericPermitted) - { - if(iSharedData.DefaultArabicNumberMode()) - { - aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse); - } - else - { - aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse); - } + aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse); } } - // add the writing speed menu index = 0; if(aMenuPane->MenuItemExists(EPenInputCmdWritingSpeed, index)) @@ -2500,11 +2474,8 @@ return; } - // 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( !iLaunchMenu && IsGlobalNotesApp(focusAppId)) + { if ( iPluginInputMode == EPluginInputModeItut || iPluginInputMode == EPluginInputModeFSQ || @@ -2727,6 +2698,11 @@ icfData.iCmd = EPeninputICFInitial; icfData.iText.Set(*iLastEditorContentBuf); icfData.iCurSel = iCurSelPre; + // special case for vietnamese, we need en/disable tone marker + // when the text in editor changes, + // by checking whether the character before insertion point is vowel or not + VietSyncToneMarkerL(*iLastEditorContentBuf, icfData.iCurSel); + if ( iFepMan.IsFlagSet(CAknFepManager::EFlagNoMatches) ) { icfData.iFlag = EFepICFDataInlineNoMatch; @@ -2850,16 +2826,16 @@ HBufC* currentEditorContentBuf = HBufC::NewLC( editContentLen ); TPtr16 currentEditorContent = currentEditorContentBuf->Des(); edit->GetEditorContentForFep( currentEditorContent, 0, editContentLen ); - + // special case for vietnamese, we need en/disable tone marker + // when the text in editor changes, + // by checking whether the character before insertion point is vowel or not + VietSyncToneMarkerL(currentEditorContent, icfData.iCurSel); + if (SetSyncIcfDataL( icfData, lastEditorContent, currentEditorContent)) { iCurrentPluginInputFepUI->HandleCommandL (ECmdPenInputSendEditorTextAndCurPos, reinterpret_cast(&icfData)); - if ( icfData.iMidPos >= 0 ) - { - // icfData.iMidPos >= 0 means the text which will be sent to ICF is inline text. - iFepMan.TryPopExactWordInICFL(); - } + iFepMan.TryPopExactWordInICFL(); } if ( secretEditor ) @@ -2879,6 +2855,36 @@ iPreDocumentLengthForFep = editContentLen; } +void CAknFepPluginManager::VietSyncToneMarkerL( + const TDesC& aEditorContent, const TCursorSelection& aCursorPos) + { + if(ELangVietnamese != iLangMan.InputLanguage()) + { + return; + } + + TBool bEnable = EFalse; + TInt low = aCursorPos.LowerPos(); + + if(low > 0) + { + ASSERT(aEditorContent.Length() >= low); + TBuf<1> buf = aEditorContent.Mid(low - 1, 1); + TBuf<1> vowel; + TInt cnt = sizeof(VietVowelList) / sizeof(VietVowelList[0]); + + for(TInt i = 0; !bEnable && i < cnt; ++i) + { + const TText* text = &VietVowelList[i]; + vowel.SetLength(0); + vowel.Append(text, 1); + bEnable = (buf.Compare(vowel) == 0); + } + } + + iCurrentPluginInputFepUI->HandleCommandL(ECmdPeninputVietSyncToneMarker, bEnable); + } + TBool CAknFepPluginManager::SetSyncIcfDataL( TFepInputContextFieldData& aIcfData, const TDesC& aLastEditorContent, const TDesC& aCurrentEditorContent ) @@ -4819,15 +4825,19 @@ } void CAknFepPluginManager::SendMatchListCmd(const RArray& aList) - { + { TFepITICandidateList list; list.iActiveIndex = 0; list.iItemArray2 = &aList; list.iLangCode = iFepMan.CurrentInputLangCode(); + if ( iLangMan.IsSplitView() ) + { + TRAP_IGNORE( list.iRect = iFepMan.InitRectForSplitCandL() ); + } TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchList, reinterpret_cast(&list))); - } + } TBool CAknFepPluginManager::GetIndicatorImgID(const TInt IndicatorUID,TInt &aImage, TInt &aMask) { @@ -5097,15 +5107,7 @@ { 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; @@ -5984,8 +5986,7 @@ } TInt flags = editorState->Flags(); - return ( flags & EAknEditorFlagAvkonSecretEditor ) == EAknEditorFlagAvkonSecretEditor; - + return ( flags & EEikEdwinAvkonDisableCursor ) == EEikEdwinAvkonDisableCursor; } // --------------------------------------------------------------------------- @@ -6082,6 +6083,7 @@ // Change to input mode to EPtiEngineQwertyPredictive, after that // qwerty keymapping can be got iFepMan.PtiEngine()->SetInputMode( EPtiEngineQwertyPredictive ); + iFepMan.PtiEngine()->SetKeyboardType(EPtiKeyboardQwerty4x12); // Find scancode by keycode from qwerty keymapping TInt retKey = keymapping->KeyForCharacter( aKeyCode ); // Restore the old input mode @@ -6174,7 +6176,7 @@ if ( oldInputMode != EPtiEngineQwertyPredictive ) { // if current input mode isn't EPtiEngineQwertyPredictive, - // current input mode has been set to EPtiEngineQwertyPredictive temporarily before, + // current input mode is set to EPtiEngineQwertyPredictive temporarily before, // now we need to restore it, // because state machine is responsible for changing it practically. iFepMan.PtiEngine()->SetInputMode( oldInputMode ); diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyCangJie.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUIInputStatePredictiveInputMiniQwertyChinesePhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateBase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateCandidateQwertyBaseChinesePhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateChineseBase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateEntryQwertyBaseChinesePhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -47,7 +47,6 @@ static const TInt KKeyMappingsLength = 63; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // TAknFepInputStateEntryQwertyWesternPredictive:: @@ -606,8 +605,6 @@ // Framework will handle the key event. return EFalse; } - - // use ptiengine's api to tell whether a character mapped on a given key. TBool TAknFepInputStateEntryQwertyWesternPredictive::MapAgainst(TInt aKey, TInt aMode, TInt16 aAgainst, TInt aCase) const { @@ -624,8 +621,6 @@ } return EFalse; } - - // Get Scancode from a given character and tell the case at the same time. TInt TAknFepInputStateEntryQwertyWesternPredictive::ScanCodeForCharacter( TUint aChar, TPtiTextCase& aCase ) { diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateEntryWesternPredictive.cpp --- a/fep/aknfep/src/AknFepUiInputStateEntryWesternPredictive.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepUiInputStateEntryWesternPredictive.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -778,6 +778,17 @@ MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); iIsLastWord = ETrue; + +#ifdef RD_SCALABLE_UI_V2 + // Because this function is a callback function of ptixt9core, + // this function is called when gets last candidate, but for virtual intput, + // cba should not be updated. + if ( fepMan && fepMan->PluginUIManager() + && fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModeItut ) + { + return; + } +#endif if (iMatchState != EWordMatchAfterLast) { diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateInitialChineseGenericQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialChineseGenericQwerty.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepUiInputStateInitialChineseGenericQwerty.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -117,7 +117,6 @@ } return number; } - TBool TAknFepInputStateInitialChineseGenericQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength) { CPtiEngine* ptiengine = iOwner->PtiEngine(); @@ -320,11 +319,6 @@ return response; } -//-------------------------------------------------------------------------- -// The gate to decide whether it is a character is whether it has valid mapping -// If return ETrue, the key will pass to ptiengine. -//-------------------------------------------------------------------------- -// TBool TAknFepInputStateInitialChineseGenericQwerty::IsCharacter(TInt aKey) { TBool response = EFalse; @@ -340,8 +334,6 @@ response = ETrue; } } - - // exception Z might has no mapping but need to put into ptiengine. if(!response && aKey == EPtiKeyQwertyZ) { response = ETrue; diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateInitialKoreanMultitap.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStatePredictiveCandidateMiniQwertyChinesePhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStatePredictiveInputQwertyChinesePhrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiInputStateQwerty.cpp --- a/fep/aknfep/src/AknFepUiInputStateQwerty.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepUiInputStateQwerty.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -698,6 +698,7 @@ CPtiQwertyKeyMappings* maps = static_cast(lang->GetQwertyKeymappings()); + maps->SetKeyboardType(ptiengine->KeyboardType()); TBool keyNotMapToNumeric(ETrue); #ifdef RD_INTELLIGENT_TEXT_INPUT if(maps) @@ -1196,11 +1197,8 @@ } } // Disable UI framewroks's qwerty iCode conversion for simulated event. - 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() ) + numKey.iModifiers |= EModifierSpecial; + if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric())) { CCoeEnv::Static()->SimulateKeyEventL(numKey, EEventKey); #ifdef RD_INTELLIGENT_TEXT_INPUT diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiManagerBase.cpp --- a/fep/aknfep/src/AknFepUiManagerBase.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepUiManagerBase.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -1022,7 +1022,6 @@ { return iFepMan->ZhuyinAnalyser(); } - TBool CAknFepUIManagerBase::MapAgainst(TInt aKey, TInt aMode, TInt16 aAgainst, TInt aCase) const { if(iPtiEngine) @@ -1037,4 +1036,5 @@ } return EFalse; } + // End of file diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiManagerChinese.cpp --- a/fep/aknfep/src/AknFepUiManagerChinese.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepUiManagerChinese.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -133,7 +133,6 @@ const TInt16 KStrokeUnicode = 0x2461; const TInt16 KZhuyinIndicator = 0x2462; const TInt16 KPinyinIndicator = 0x2460; -//const TInt16 KStrokeIndicator = 0x2461; const TInt16 KCanjieIndicator = 0x2463; const TInt16 KChineseTone1 = 0x02c9; const TInt16 KChineseTone2 = 0x02ca; diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/AknFepUiManagerKorean.cpp --- a/fep/aknfep/src/AknFepUiManagerKorean.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/AknFepUiManagerKorean.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -219,17 +219,14 @@ { switch(iMode) { - case EHangul: + case ELatin: + { iFepUiState = TAknFepInputStateQwertyKorean(this); - break; - case ELatin: - case ENumber: - case ENativeNumber: - iFepUiState = TAknFepInputStateQwerty(this); - break; + break; + } default: - AknFepPanic(EAknFepPanicBadInputState); - break; + AknFepPanic(EAknFepPanicBadInputState); + break; } break; } diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/aknfepuiinputminiqwertypinyinphrasebase.cpp --- a/fep/aknfep/src/aknfepuiinputminiqwertypinyinphrasebase.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/aknfepuiinputminiqwertypinyinphrasebase.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -1306,7 +1306,6 @@ uiContainer->SetControlInVisible( EFalse ); } } - //------------------------------------------------------------------------------- // Purpose: to adjust the scancode to make pinyin works // Pinyin symbol inheritantly accepts A-Z, any input out of this range will make it crash. @@ -1327,6 +1326,7 @@ } } } + // --------------------------------------------------------------------------- // TAknFepInputMiniQwertyPinyinPhraseBase::GetShowKeystroke //Handle horizontal navigation. @@ -1701,7 +1701,6 @@ } GetShowKeystroke(aKey, keystroke); - //Add this condition to avoid crash in case keystroke is empty. if(keystroke.Length() == 0) { diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/aknfepuiinputminiqwertystrokephrasebase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/aknfepuiinputstateminiqwertystrokephrase.cpp diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp --- a/fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -513,7 +513,7 @@ fepMan->NewTextL( currentText ); fepMan->CommitInlineEditL(); } - + if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) { fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); diff -r 315ee003fe38 -r 9eb76adaa71f fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp --- a/fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -24,9 +24,7 @@ #include #include #include -#include - -const TInt KMaxPtiTextBufSize = 255; +#include TAknFepInputStateQwertyKorean::TAknFepInputStateQwertyKorean( MAknFepUIManagerStateInterface* aOwner) @@ -41,113 +39,42 @@ { } -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; +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; } + +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 315ee003fe38 -r 9eb76adaa71f inputmethods_plat/aknfep_pen_support_api/inc/aknfeppeninputenums.h --- a/inputmethods_plat/aknfep_pen_support_api/inc/aknfeppeninputenums.h Fri Sep 17 17:26:50 2010 +0100 +++ b/inputmethods_plat/aknfep_pen_support_api/inc/aknfeppeninputenums.h Fri Oct 22 15:38:27 2010 +0100 @@ -177,12 +177,14 @@ ECmdPenInputHideCandidateList, ECmdPeninputITIStatus, ECmdPeninputSpellLanguageMode, - ECmdPeninputSpellICFDisplayContent, - ECmdPenInputDimEnterKey, + ECmdPeninputSpellICFDisplayContent, + ECmdPenInputDimEnterKey, ECmdPeninputEnableOwnBitmap, - ECmdPeninputDisableLayoutDrawing, - ECmdPeninputArabicNumModeChanged, + ECmdPeninputDisableLayoutDrawing, + ECmdPeninputArabicNumModeChanged, ECmdPeninputEnalbeLayoutReDrawWhenActive, + ECmdPeninputVietSyncToneMarker, + ECmdPeninputSelectServerCandidate, ECmdPenInputImeCmdBase = 2000 }; @@ -235,7 +237,19 @@ //Abc ECaseText = 4, //aBC - ECaseInverseText = 8 + ECaseInverseText = 8, + // Paging 1/1 for number & special characters + ECaseNumberSpecialPaging11 = 0x10, + // Paging 1/2 for number & special characters + ECaseNumberSpecialPaging12 = 0x20, + // Paging 2/2 for number & special characters + ECaseNumberSpecialPaging22 = 0x40, + // Paging 1/1 for number & special characters + ECaseNumberSpecialPagingArabic11 = 0x80, + // Paging 1/2 for number & special characters + ECaseNumberSpecialPagingArabic12 = 0x100, + // Paging 2/2 for number & special characters + ECaseNumberSpecialPagingArabic22 = 0x200 }; diff -r 315ee003fe38 -r 9eb76adaa71f inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h --- a/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h Fri Sep 17 17:26:50 2010 +0100 +++ b/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h Fri Oct 22 15:38:27 2010 +0100 @@ -380,47 +380,6 @@ * and the default value is EPluginInputModeItut. */ const TUint32 KAknFepLastUsedPortraitInput = 0x00000026; - -/** - * following keys are used for tap accuracy enhancement, default input mode - */ -const TUint32 KAknFepTapAccuracyDefaultButtonExtMargins = 0x27; -const TUint32 KAknFepTapAccuracyDefaultKeyCtrlExtMargins = 0x28; -const TUint32 KAknFepTapAccuracyDefaultPointerMoveMaxMovement = 0x29; -const TUint32 KAknFepTapAccuracyDefaultPointerMoveTimeout = 0x2a; -const TUint32 KAknFepTapAccuracyDefaultPointerUpMaxMovement = 0x2b; -const TUint32 KAknFepTapAccuracyDefaultPointerUpTimeout = 0x2c; - -/** - * following keys are used for tap accuracy enhancement, FSQ - */ -const TUint32 KAknFepTapAccuracyFsqButtonExtMargins = 0x2d; -const TUint32 KAknFepTapAccuracyFsqKeyCtrlExtMargins = 0x2e; -const TUint32 KAknFepTapAccuracyFsqPointerMoveMaxMovement = 0x2f; -const TUint32 KAknFepTapAccuracyFsqPointerMoveTimeout = 0x30; -const TUint32 KAknFepTapAccuracyFsqPointerUpMaxMovement = 0x31; -const TUint32 KAknFepTapAccuracyFsqPointerUpTimeout = 0x32; - -/** - * following keys are used for tap accuracy enhancement, Portrait FSQ - */ -const TUint32 KAknFepTapAccuracyPFsqButtonExtMargins = 0x33; -const TUint32 KAknFepTapAccuracyPFsqKeyCtrlExtMargins = 0x34; -const TUint32 KAknFepTapAccuracyPFsqPointerMoveMaxMovement = 0x35; -const TUint32 KAknFepTapAccuracyPFsqPointerMoveTimeout = 0x36; -const TUint32 KAknFepTapAccuracyPFsqPointerUpMaxMovement = 0x37; -const TUint32 KAknFepTapAccuracyPFsqPointerUpTimeout = 0x38; - -/** - * following keys are used for tap accuracy enhancement, Finger HWR - */ -const TUint32 KAknFepTapAccuracyFhwrButtonExtMargins = 0x39; -const TUint32 KAknFepTapAccuracyFhwrKeyCtrlExtMargins = 0x3a; -const TUint32 KAknFepTapAccuracyFhwrPointerMoveMaxMovement = 0x3b; -const TUint32 KAknFepTapAccuracyFhwrPointerMoveTimeout = 0x3c; -const TUint32 KAknFepTapAccuracyFhwrPointerUpMaxMovement = 0x3d; -const TUint32 KAknFepTapAccuracyFhwrPointerUpTimeout = 0x3e; - #endif // End of file diff -r 315ee003fe38 -r 9eb76adaa71f inputmethods_plat/pen_input_server_api/inc/peninputclient.h --- a/inputmethods_plat/pen_input_server_api/inc/peninputclient.h Fri Sep 17 17:26:50 2010 +0100 +++ b/inputmethods_plat/pen_input_server_api/inc/peninputclient.h Fri Oct 22 15:38:27 2010 +0100 @@ -428,7 +428,6 @@ IMPORT_C TInt ConnectAsyc(TRequestStatus& aStatus); IMPORT_C void SetDataQueryPopped(TBool aFlag); IMPORT_C void EnablePriorityChangeOnOriChange(TBool aEnabled); - IMPORT_C void EnableGfxTransEffect( TBool aEnable ); private: // Data /** * The singleton client to the input server diff -r 315ee003fe38 -r 9eb76adaa71f inputmethods_plat/pen_input_server_api/inc/peninputcmd.h --- a/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h Fri Sep 17 17:26:50 2010 +0100 +++ b/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h Fri Oct 22 15:38:27 2010 +0100 @@ -75,7 +75,6 @@ EPeninputOpLastCommand , EPeninputOpRequestDSAState, EPeninputOpChangeFeedbackType, - EPeninputOpUpdatePointerSuppressor, EPeninputUserCmdBase = 1000 }; @@ -113,7 +112,8 @@ ESignalDisableUpdating, ESignalDrawBackground, ESignalEnableLayoutRedrawWhenActive, - ESignalUpdatePointerSuppressor, + ESignalShowServerCandidate, + ESignalHideServerCandidate, ESignalFepEventBase = 1500, //Event base for Fep. All fep event //is re-directed to Fep. ESignalKeyEvent = 1501, //hwr recongition selection event. diff -r 315ee003fe38 -r 9eb76adaa71f inputmethods_plat/pen_input_server_api/inc/peninputcmdparam.h --- a/inputmethods_plat/pen_input_server_api/inc/peninputcmdparam.h Fri Sep 17 17:26:50 2010 +0100 +++ b/inputmethods_plat/pen_input_server_api/inc/peninputcmdparam.h Fri Oct 22 15:38:27 2010 +0100 @@ -63,6 +63,21 @@ EAppMessageTypeChangeMsg /* Teleca change begin, 9.09.2009 ssal */ }; + +/** + * The command type of choice canidate list item . + */ +enum TPeninputCandItemCommand + { + ECandItemCmdNone, + ECandItemCmdGetNextPage, + ECandItemCmdGetPage, + ECandItemCmdExisted, + ECandItemCmdItemSelected, + ECandItemCmdEnterSpellMode, + ECandItemCmdArrowUp, + ECandItemCmdArrowDown + }; //structure for input context field data struct TFepInputContextFieldData @@ -140,6 +155,7 @@ }; TInt iActiveIndex; TInt iLangCode; + TRect iRect; }; class CPtiEngine; @@ -162,4 +178,23 @@ TPtrC iICFText; TPtrC iPromptText; }; + +/** + * Pen input server candidate data + */ +struct TPeninputCandidateData + { + // The alienment of text in candidate + TInt iAlign; + // The init rect used for the top-left point of candidate + TRect iInitRect; + // Enable spell functionality of candidate + TBool iSpellEnabled; + // Enable minimal text width when calculates item width. + TBool iTextWidthEnabled; + // The contents to be shown in candidate + CDesCArray* iItemArray; + // The default index + TInt iActiveIndex; + }; #endif diff -r 315ee003fe38 -r 9eb76adaa71f inputmethods_pub/ptiengine_iti_api/inc/PtiDefs.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/group/bld.inf --- a/textinput/group/bld.inf Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/group/bld.inf Fri Oct 22 15:38:27 2010 +0100 @@ -50,6 +50,5 @@ #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 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/bwins/peninputClientU.DEF --- a/textinput/peninputarc/bwins/peninputClientU.DEF Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/bwins/peninputClientU.DEF Fri Oct 22 15:38:27 2010 +0100 @@ -64,5 +64,4 @@ ?ConnectAsyc@RPeninputServer@@QAEHAAVTRequestStatus@@@Z @ 63 NONAME ; int RPeninputServer::ConnectAsyc(class TRequestStatus &) ?SetDataQueryPopped@RPeninputServer@@QAEXH@Z @ 64 NONAME ; void RPeninputServer::SetDataQueryPopped(int) ?EnablePriorityChangeOnOriChange@RPeninputServer@@QAEXH@Z @ 65 NONAME ; void RPeninputServer::EnablePriorityChangeOnOriChange(int) - ?EnableGfxTransEffect@RPeninputServer@@QAEXH@Z @ 66 NONAME ; void RPeninputServer::EnableGfxTransEffect(int) diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/eabi/peninputClientU.DEF --- a/textinput/peninputarc/eabi/peninputClientU.DEF Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/eabi/peninputClientU.DEF Fri Oct 22 15:38:27 2010 +0100 @@ -73,5 +73,4 @@ _ZN15RPeninputServer11ConnectAsycER14TRequestStatus @ 72 NONAME _ZN15RPeninputServer18SetDataQueryPoppedEi @ 73 NONAME _ZN15RPeninputServer31EnablePriorityChangeOnOriChangeEi @ 74 NONAME - _ZN15RPeninputServer20EnableGfxTransEffectEi @ 75 NONAME diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/group/bld.inf --- a/textinput/peninputarc/group/bld.inf Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/group/bld.inf Fri Oct 22 15:38:27 2010 +0100 @@ -148,4 +148,11 @@ OPTION SOURCES -c8,8 qgn_prop_cp_dev_pen.svg END +PRJ_EXTENSIONS +START EXTENSION s60/mifconv +OPTION TARGETFILE peninputserver.mif +OPTION HEADERFILE peninputserver.mbg +OPTION SOURCEFILE ../src/peninputserverapp/iconlist.txt +END + // End of file diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc --- a/textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc Fri Oct 22 15:38:27 2010 +0100 @@ -313,108 +313,4 @@ // 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayout.h --- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayout.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayout.h Fri Oct 22 15:38:27 2010 +0100 @@ -567,7 +567,7 @@ /** * Get extra response area of virtual key controls. * - * @since Symbian^3 + * since Symbian^3 * @param aMargins output the margins around the original response area. */ void GetKeyExtResponseArea( TMargins& aMargins ); @@ -575,11 +575,10 @@ /** * Get extra response area of button controls. * - * @since Symbian^3 + * since Symbian^3 * @param aMargins output the margins around the original response area. */ void GetButtonExtResponseArea( TMargins& aMargins ); - protected: /** * Constructor @@ -647,13 +646,13 @@ void SendEditorTextAndCursorPosL(TUint8* aData); void SetSelfBmpDeviceFlag(TBool aFlag); - /** - * Load tap accuracy enhancement settings according to the specified input mode. - * - * @since Symbian^3 - * @param alayoutType specifies the input mode(refer to TPluginInputMode) of this layout. - */ - void LoadTapAccuracySettingsL( TInt alayoutType ); + /** + * Load tap accuracy enhancement settings according to the specified input mode. + * + * since Symbian^3 + * @param aInputMode specifies the input mode(refer to TPluginInputMode) of this layout. + */ + void LoadTapAccuracySettings( TInt aInputMode ); private: NONSHARABLE_CLASS( CFepUiLayoutExt) : public CBase @@ -675,26 +674,6 @@ TBool iDisableDrawing; /** - * PointerMove event suppressor parameter: max movement(in pixel) - */ - TSize iPointerMoveSuppressMaxMovement; - - /** - * PointerMove event suppressor parameter: timeout(in microsecond) - */ - TInt iPointerMoveSuppressTimeout; - - /** - * PointerUp event suppressor parameter: max movement(in pixel) - */ - TSize iPointerUpSuppressMaxMovement; - - /** - * PointerUp event suppressor parameter: timeout(in microsecond) - */ - TInt iPointerUpSuppressTimeout; - - /** * extra response area of virtual key controls */ TMargins iKeyExtResponseMargins; @@ -703,8 +682,6 @@ * extra response area of virtual button controls */ TMargins iButtonExtResponseMargins; - - }; private: diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbubblectrl.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutmultilineicf.h --- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutmultilineicf.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutmultilineicf.h Fri Oct 22 15:38:27 2010 +0100 @@ -506,13 +506,19 @@ inline TBool TextSelectionOn(); - void SetInlineStateL(TBool aInline, + /** + * @return ETrue if redraw is required. + */ + TBool SetInlineStateL(TBool aInline, TInt aStartPos = 0, TInt aEndPos = 0, TBool aNoMatchState = EFalse, const TDesC& aNoMatchText = KNullDesC); - void SetAutoCompleteStateL(TBool aAutoComplete, + /** + * @return ETrue if redraw is required. + */ + TBool SetAutoCompleteStateL(TBool aAutoComplete, TInt aStartPos = 0, TInt aMidPos = 0, TInt aEndPos = 0); @@ -562,13 +568,22 @@ TBool IsTextPosValid(TInt aPos); - void UpdateTextL(const TFepInputContextFieldData& aData); + /** + * @return ETrue if text was updated. + */ + TBool UpdateTextL(const TFepInputContextFieldData& aData); static TInt UpdateSecretTextL(TAny* aEditArea); - void SetSelectionL(TCursorSelection aCurSel); + /** + * @return ETrue if redraw is required. + */ + TBool SetSelectionL(TCursorSelection aCurSel); - void UpdateNoMatchTextL(TInt aPos, const TDesC& aNoMatchText, TBool aNoMatchState); + /** + * @return ETrue if text was modified. + */ + TBool UpdateNoMatchTextL(TInt aPos, const TDesC& aNoMatchText, TBool aNoMatchState); void RemoveOverlappedCtrlIfNeeded(); @@ -604,11 +619,19 @@ void ResetApplyFont(); - void TryDisplayMaxTextL(TInt aCursorPos); + /** + * Scrolls text so that cursor becomes visible. + * + * @return ETrue if text was scrolled. + */ + TBool TryDisplayMaxTextL(TInt aCursorPos); TBool MoveCursorL( const TPoint& aPt, TInt& aCursorPos ); - void ResetViewHeightL(); + /** + * @return ETrue if redraw is required. + */ + TBool ResetViewHeightL(); void SetMfneTextL(const TFepInputContextFieldData& aData); @@ -624,7 +647,7 @@ TBool HighlightOverlapWithBubble( const TRect& aRect ); - void AdjustSelectionL( const TCursorSelection& aCurSel ); + TBool AdjustSelectionL( const TCursorSelection& aCurSel ); void ApplyLineSpaceFormatL( TInt aLineHeight ); void CalcPromptTextRectL(); diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvirtualkeyctrl.h --- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvirtualkeyctrl.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvirtualkeyctrl.h Fri Oct 22 15:38:27 2010 +0100 @@ -174,7 +174,7 @@ * * @since S60 V5.0 */ - void DrawKeyText(CFbsBitGc* aGc); + void DrawKeyText(CFbsBitGc* aGc, const TRect& aRect); /** * Redraw and update the key diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.inl diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputtapsettingmanager.h --- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputtapsettingmanager.h Fri Sep 17 17:26:50 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,203 +0,0 @@ -/* -* 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: header file of peninput ui layout -* -*/ - - -#ifndef PENINPUTTAPSETTINGMANAGER_H -#define PENINPUTTAPSETTINGMANAGER_H - -#include -#include -#include - -NONSHARABLE_CLASS(CPeninputTapSettingManager) : public CBase - { -public: //constructors - /** - * Symbian constructor. - * - * @since Symbian^3 - * @return Pointer to created object - */ - static CPeninputTapSettingManager* NewL(); - - /** - * Symbian constructor. - * - * @since Symbian^3 - * @return Pointer to created object - */ - static CPeninputTapSettingManager* NewLC(); - - /* - * Standard c++ destructor. - * @since Symbian^3 - */ - virtual ~CPeninputTapSettingManager(); - -public: - /** - * Load all parameters of tap accuracy enhancement for specified layout. - * - * @since Symbian^3 - * @param aLayoutType layout type, refer to TPluginInputMode - * @return none - */ - void Load( TInt aLayoutType ); - - /** - * Load all parameters of tap accuracy enhancement for specified layout. - * - * @since Symbian^3 - * @param aLayoutType layout type, refer to TPluginInputMode - * @param aFileName path name of configuration file - * @return none - */ - void Load( TInt aLayoutType, const TDesC& aFileName ); - - /** - * Get configuration of PointerMove event suppressor. - * - * @since Symbian^3 - * @param aMaxMovement output max movement of PointerMove event - * @param aTimeout output timeout(in microsecond) of PointerMove event - * @return none - */ - void GetPointerMoveSuppressor( TSize& aMaxMovement, TInt& aTimeout ); - - /** - * Get configuration of PointerUp event suppressor. - * - * @since Symbian^3 - * @param aMaxMovement output max movement of PointerUp event - * @param aTimeout output timeout(in microsecond) of PointerUp event - * @return none - */ - void GetPointerUpSuppressor( TSize& aMaxMovement, TInt& aTimeout ); - - /** - * Get extra response area of virtual key controls. - * - * @since Symbian^3 - * @param aMargins output the margins around the original response area. - * @return none - */ - void GetKeyExtResponseArea( TMargins& aMargins ); - - /** - * Get extra response area of button controls. - * - * @since Symbian^3 - * @param aMargins output the margins around the original response area. - * @return none - */ - void GetButtonExtResponseArea( TMargins& aMargins ); - -private: - /** - * C++ constructor - * - * @since Symbian^3 - * @return None - */ - CPeninputTapSettingManager(); - - /** - * Symbian second-phase constructor - * - * @since Symbian^3 - * @return None - */ - void ConstructL(); -private: - /** - * Load all parameters of tap accuracy enhancement for specified layout. - * - * @since Symbian^3 - * @param aLayoutType layout type, refer to TPluginInputMode - * @return none - */ - void LoadFromRepositoryL( TInt aLayoutType ); - - /** - * Load all parameters of tap accuracy enhancement for specified layout - * - * @since Symbian^3 - * @param aLayoutType layout type, refer to TPluginInputMode - * @param aFileName path name of configuration file - * @return none - */ - void LoadFromFileL( TInt aLayoutType, const TDesC& aFileName ); - - /** - * Load default parameters - * - * @since Symbian^3 - * @return none - */ - void LoadDefault(); - - /** - * parse a TPoint from a comma separated values string. - * - * @since Symbian^3 - * @return number of values in aText - */ - TInt ParsePoints( TPoint& aPoint, const TDesC& aText ); - - /** - * parse a TMargins from a comma separated values string. - * - * @since Symbian^3 - * @param aMargins output parse result - * @param aText source string - * @return number of values in aText - */ - TInt ParseMargins( TMargins& aMargins, const TDesC& aText ); - -private: - /** - * max movement of PointerMove event - */ - TSize iPointerMoveMaxMovement; - - /** - * timeout of PointerMove event, microsecond - */ - TInt iPointerMoveTimeout; - - /** - * max movement of PointerUp event - */ - TSize iPointerUpMaxMovement; - - /** - * timeout of PointerUp event, microsecond - */ - TInt iPointerUpTimeout; - - /** - * extra response area of virtual key controls - */ - TMargins iKeyMargins; - - /** - * extra response area of button controls - */ - TMargins iButtonMargins; - }; - -#endif // PENINPUTTAPSETTINGMANAGER_H diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/peninputanimclientobj.h --- a/textinput/peninputarc/inc/pensrvcliinc/peninputanimclientobj.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/peninputanimclientobj.h Fri Oct 22 15:38:27 2010 +0100 @@ -231,16 +231,6 @@ * @return ETrue if command added successfully. */ TBool SetDiscreetPopArea(const TRect& aArea); - - /** - * Update parameters of pointer event suppressor. - * - * @since Symbian^3 - * @param aParameters parameters of pointer event suppressor - * @return none - */ - void UpdatePointerEventSuppressor( const TPointerEventSuppressorParameters& aParameters ); - private: /** * Default constructor. diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/peninputanimcommand.h --- a/textinput/peninputarc/inc/pensrvcliinc/peninputanimcommand.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/peninputanimcommand.h Fri Oct 22 15:38:27 2010 +0100 @@ -494,37 +494,6 @@ private: TRect iArea; }; - -//class TAnimUpdatePointerEventSuppressorCmd -/** - * Class for handling pointer event suppressor command - * - * - * @since Symbian^3 - */ -class TAnimUpdatePointerEventSuppressorCmd : public TAnimCmd - { -public: - /** - * Default constructor - * @param aAnim The animation cliet which executes the command - * @param aParameters parameters of pointer event suppressor - */ - TAnimUpdatePointerEventSuppressorCmd( RPeninputAnim& aAnim, - const TPointerEventSuppressorParameters& aParameters ); - - /** - * Execute the command - * - * @since Symbian^3 - * @return ETrue if command has been executed successfully. - */ - virtual TBool ExecuteAnimCommand() const; - -private: - TPointerEventSuppressorParameters iParameters; - }; - #include "peninputanimcommand.inl" #endif //C_CPENINPUTANIM_CMD_H diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/peninputclientimpl.h --- a/textinput/peninputarc/inc/pensrvcliinc/peninputclientimpl.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/peninputclientimpl.h Fri Oct 22 15:38:27 2010 +0100 @@ -468,15 +468,6 @@ TBool ServerReady(); void OnServerStarted(TInt aErr); - /** - * Enable or disable transition effect. - * - * @since Symbian^3 - * @param aEnable, ETrue: enable transition effect - * EFalse: disable transition effect. - */ - void EnableGfxTransEffect( TBool aEnable ); - private: /** * Constructor diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/peninputclientserver.h --- a/textinput/peninputarc/inc/pensrvcliinc/peninputclientserver.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/peninputclientserver.h Fri Oct 22 15:38:27 2010 +0100 @@ -89,8 +89,7 @@ EPeninputRequestDimResChangeLayout, EPeninputRequestSupportInputMode, EPeninputRequestSetInputLanguage, - EPeninputEnablePriorityChangeOnOriChange, - EPeninputRequestEnableGfxTransEffect + EPeninputEnablePriorityChangeOnOriChange }; //server error code diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/peninputcmdparamext.h --- a/textinput/peninputarc/inc/pensrvcliinc/peninputcmdparamext.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/peninputcmdparamext.h Fri Oct 22 15:38:27 2010 +0100 @@ -45,19 +45,4 @@ // see MAnimSpriteFunctions::UpdateMember TBool iFullUpdateFlag; }; - -/** - * parameters for pointer event suppressor - */ -struct TPointerEventSuppressorParameters - { - TBool iMoveEventSuppressEnabled; - TSize iMoveEventMaxMovement; - TInt iMoveEventTimeout; - - TBool iUpEventSuppressEnabled; - TSize iUpEventMaxMovement; - TInt iUpEventTimeout; - }; - #endif //_PENINPUTPARAM_EXT_H diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/peninputserver.h --- a/textinput/peninputarc/inc/pensrvcliinc/peninputserver.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/peninputserver.h Fri Oct 22 15:38:27 2010 +0100 @@ -42,6 +42,9 @@ class CInternalBkCtrl; class CKeyRotator; class CPenInputCrpServiceClient; +class CPenUiCandidateWnd; +class MPenUiWndEventObserver; + // panic code enum TPeninputServerPanic { @@ -288,6 +291,13 @@ * @return a CSharableSession instance */ CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; + + /** + * Return pen ui layout + * + * @since Symbian^3 + */ + inline MPenUiLayoutBase* PenUiLayout() const; public: // From MRawEventHandler /** @@ -693,15 +703,6 @@ void CheckSessionValidL(CPeninputServerSession* aSession1, CPeninputServerSession* aSession2) const; - /** - * Update parameters of pointer event suppressor. - * - * @since Symbian^3 - * @param aData parameters of pointer event suppressor - * @return none - */ - void UpdatePointerEventSuppressor( const TDesC& aData ); - public: TInt DisabledByDSA(); TInt DisabledByDSAFromAnim(); @@ -991,9 +992,31 @@ TRect iDiscreetPopArea; TBool iEnablePriorityChangeOnOriChange; TBool iIsLayoutReDrawAllowWhenActive; + + /** + * Pen ui candidate window. + * + * Owned. + */ + CPenUiCandidateWnd* iCandidateWnd; + + /** + * Pen ui window event observer. + * + * Owned. + */ + MPenUiWndEventObserver* iObserver; }; /** +* Return pen ui layout +*/ +inline MPenUiLayoutBase* CPeninputServer::PenUiLayout() const + { + return iUiLayout; + } + +/** * Class CEventQueue * Event message queue. It's an active object. * diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/peninputsrvobserver.h --- a/textinput/peninputarc/inc/pensrvcliinc/peninputsrvobserver.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/peninputsrvobserver.h Fri Oct 22 15:38:27 2010 +0100 @@ -104,7 +104,17 @@ */ TInt RunError(TInt aError); private: - virtual TBool HandleServerEventL(TInt aEventId); + virtual TBool HandleServerEventL(TInt aEventId); + + /** + * Stop the server + * + * @since Symbian^3 + * + * @param none + * @return void + */ + void HandleServerTerminatedL(); public: /** diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/penpointereventsuppressor.h --- a/textinput/peninputarc/inc/pensrvcliinc/penpointereventsuppressor.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/penpointereventsuppressor.h Fri Oct 22 15:38:27 2010 +0100 @@ -85,9 +85,8 @@ * @param aPointerEvent the pointer event which may need to be suppressed. * @return ETrue if the pointer event should be suppressed, or EFalse if it should be handled. */ - - TBool SuppressPointerEvent( TPointerEvent& aPointerEvent ); - + TBool SuppressPointerEvent( TPointerEvent& aPointerEvent ); + /** * Set the maximum time period that drag events should be * ignored during a pointer interaction. @@ -111,23 +110,23 @@ */ void SetMinInterDragInterval(TTimeIntervalMicroSeconds aInterval); - /** - * Set the maximum pointer movement for up events. - * All up events within maximum movement and timeout are moved to the down position. - * - * @since Symbian^3 - * @param aMaxDownUpMove maximum movement(in pixel) of up event - */ - void SetMaxDownUpMove( TSize aMaxDownUpMove ); - - /** - * Set the maximum time between up and down events. - * All up events within maximum movement and timeout are moved to the down position. - * - * @since Symbian^3 - * @param aDuration time between down and up events. - */ - void SetMaxDownUpDuration( TTimeIntervalMicroSeconds aDuration ); + /** + * Set the maximum pointer movement for up events. + * All up events within maximum movement and timeout are moved to the down position. + * + * @since Symbian^3 + * @param aMaxDownUpMove maximum movement(in pixel) of up event + */ + void SetMaxDownUpMove( TSize aMaxDownUpMove ); + + /** + * Set the maximum time between up and down events. + * All up events within maximum movement and timeout are moved to the down position. + * + * @since Symbian^3 + * @param aDuration time between down and up events. + */ + void SetMaxDownUpDuration( TTimeIntervalMicroSeconds aDuration ); private: CPenPointerEventSuppressor(); @@ -141,18 +140,18 @@ TBool iTap; TTime iLastEventTime; - - /** - * The maximum pointer movement for up events. - * All up events within maximum movement and timeout are moved to the down position. - */ - TSize iMaxDownUpMove; + /** + * The maximum pointer movement for up events. + * All up events within maximum movement and timeout are moved to the down position. + */ + TSize iMaxDownUpMove; + + /** + * The maximum time between up and down events. + * All up events within maximum movement and timeout are moved to the down position. + */ + TTimeIntervalMicroSeconds iMaxDownUpDuration; - /** - * The maximum time between up and down events. - * All up events within maximum movement and timeout are moved to the down position. - */ - TTimeIntervalMicroSeconds iMaxDownUpDuration; - }; + }; #endif diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/penuicandidatewnd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/inc/pensrvcliinc/penuicandidatewnd.h Fri Oct 22 15:38:27 2010 +0100 @@ -0,0 +1,688 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef PENUICANDIDATEWND_H +#define PENUICANDIDATEWND_H + +#include +#include +#include + +class MPenUiWndEventObserver; + +/** + * The constant for max text length of + * choice list item title. + */ +const TInt KMaxItemTextLength = 100; + +/** + * CPenUiCandidateWnd + * + * CCoeControl based class used for candidate list + * + */ +class CPenUiCandidateWnd : public CCoeControl + { +public: + /** + * Store LAF data for candidate list + */ + class TPenUiCandidateLafData + { + public: + TSize iItemSize; + TInt iHorMargin; + TInt iVerMargin; + TSize iNaviSize; + TSize iNaviInnerSize; + TAknTextLineLayout iTextLine; + TAknTextLineLayout iPageTextLine; + const CFont* iFont; + }; + + /** + * Choice list item data structure. + */ + class TPenUiCandidateItem + { + public: + /* + * Command of choice list item. + */ + TInt iCommand; + /* + * Title of choice list item. + */ + TBuf iText; + }; + + /** + * Two-phased constructor. + * + * @since symbian^3 + * @param aServer the pointer to the owner of the control + * @return Pointer to CPenUiCandidateWnd's instance + */ + static CPenUiCandidateWnd* NewL( MPenUiWndEventObserver* aObserver ); + + /** + * Two-phased constructor. + * + * @since symbian^3 + * @param aServer the pointer to the owner of the control + * @return Pointer to CPenUiCandidateWnd's instance + */ + static CPenUiCandidateWnd* NewLC( MPenUiWndEventObserver* aObserver ); + + /** + * Destructor + */ + ~CPenUiCandidateWnd(); + + /** + * Handle raw events of pen input. + * + * @since Symbian^3 + * @param aEventData The event data. + * @return ETrue if layout has processed the event, otherwise EFalse + */ + TBool HandleRawEventL( const TAny* aEventData ); + + /** + * Set window priority. + * + * @since Symbian^3 + * @param aPriority the priority of candidate + * @return None + */ + inline void SetPriority( TInt aPriority ); + + /** + * Set the alienment of text in candidate. + * + * @since Symbian^3 + * @param aAlign The alignment to be used. + * @return None + */ + inline void SetAlign( CGraphicsContext::TTextAlign aAlign ); + + /** + * Set the init rect used for the top-left point of candidate. + * + * @since Symbian^3 + * @param aInitRect The initial rect used for the top-left position + * of candidate. + * @return None + */ + inline void SetInitRect( const TRect& aInitRect ); + + /** + * Enable spell functionality of candidate + * + * @since Symbian^3 + * @param aSpellEnabled ETrue: enable spell; + * EFalse: disable spell. + * @return None + */ + inline void EnableSpell( TBool aSpellEnabled ); + + /** + * Enable minimal text width when calculates item width. + * + * @since Symbian^3 + * @param aTextWidthEnabled ETrue: enable text line; + * EFalse: disable text line. + * @return None + */ + inline void EnableTextWidth( TBool aTextWidthEnabled ); + + /** + * Show candidate list + * + * @since Symbain^3 + * @param aItemArray, the contents to be shown + * @param aActiveIndex, the default index + * @return None + */ + void ShowCandidateListL( const CDesCArray* aItemArray, TInt aActiveIndex ); + + /** + * Hide candidate list + * + * @since Symbian^3 + * @return None + */ + void HideCandidateList(); + +// From CCoeControl + /** + * Handles a change to the control's resources. + * + * @since symbian^3 + * @param aType, a message UID value. + * @return None + */ + void HandleResourceChange( TInt aType ); + +private: + + /** + * C++ Default Constructor + */ + CPenUiCandidateWnd( MPenUiWndEventObserver* aObserver ); + + /** + * 2nd phase constructor. + * + * @since Symbain^3 + * @return None + */ + void ConstructL(); + + /** + * Set all kinds of frame ids + * + * @since Symbain^3 + * @param aBgFrId, background frame id; + * @param aNaviFrId, normal navi button frame id; + * @param aNaviActiveFrId, pressed navi button frame id; + * @param aNaviDimFrId, dimmed navi button frame id; + * @param aItemActiveFrId, heightligh item frame id; + * @return None + */ + void SetImgFrId( TAknsItemID aBgFrId, + TAknsItemID aNaviFrId, + TAknsItemID aNaviActiveFrId, + TAknsItemID aNaviDimFrId, + TAknsItemID aItemActiveFrId ); + + /** + * Construct candidate list from resource. + * + * @return None + */ + void ConstructFromResourceL(); + + /** + * Construct up / down arrow buttons from resource. + * + * @since Symbain^3 + * @param aReader: the resource reader; + * @param aUpDown, ETrue, construct up button; + * EFalse, construct down button; + * @return None + */ + void ConstructPageInfoFromResourceL( TResourceReader& aReader, TBool aUpDown ); + + + /** + * Read LAF data for candidate list + * + * @since Symbian^3 + * @return None + */ + void ReadLafInfo(); + + /** + * Set size for bitmaps + * + * @since Symbian^3 + * @return None + */ + void SetBitmapSize(); + + /** + * Create mask bitmap for dimmed icons + * + * @since Symbian^3 + * @param aDimmedMask, store the generated mask bitmap for dimmed icons. + * @param aMask. the source bitmap + * @return None + */ + void CreateDimmedMaskL( CFbsBitmap*& aDimmedMask, + const CFbsBitmap* aMask ); + + /** + * Capture all poninters of full screen when candidate list is opened. + * + * @since Symbain^3 + * @param aFlag, ETrue: capture all pointers of full screen. + * EFalse: don't capture all pointers of full screen. + * @return None + */ + void SetCapturePointer( TBool aFlag ); + + /** + * Get page info and transfer it to descritor. + * + * @since Symbian^3 + * @return None. + */ + void GetPageInfoBufL(); + + /** + * Set the text item array to candidate list + * + * @since Symbian^3 + * @param aItemArray: The text item array to be shown. + * @return None + */ + void SetItemArrayL( const CDesCArray* aItemArray ); + + /** + * Add spell item + * + * @since Symbian^3 + * @return None + */ + void AddSpellItemL(); + + /** + * Calculate the displaying rect of candidate. + * + * @since Symbian^3 + * @return None + */ + void ReCalcLayout(); + + /** + * Return the dynamical width for displaying text. + * + * @since Symbian^3 + * @return The fittable width of candidate. + */ + TInt WidthToFitText(); + + /** + * Return the rect to fit the screen size. + * + * @since Symbian^3 + * @param aRect: the source rect to be checked + * @return the rect of fittable to screen size + */ + TRect RectToFitScreen( const TRect& aRect ); + + /** + * Draw each item. + * + * @since Symbian^3 + * @param aGc: the pointer of window gc + * @param aIndex: the index of the item to be drawn. + * @return None + */ + void DrawItem( CWindowGc* aGc, TInt aIndex ) const; + + /** + * Draw page down / up arrow button. + * + * @since Symbian^3 + * @param aGc: the pointer of window gc + * @param aUpDown: ETrue, the up arrow button, + * EFalse, the down arrow button + * @return None + */ + void DrawPageButton( CWindowGc* aGc, TBool aUpDown ) const; + + /** + * Draw page into text. + * + * @since Symbian^3 + * @param aGc: the pointer of window gc + * @return None + */ + void DrawPageInfo( CWindowGc* aGc ) const; + + /** + * Handle pointer down event + * + * @since Symbian^3 + * @param aPoint The point position relative the layout + * @return None. + */ + void HandlePointerDownEvent(const TPoint& aPoint); + + /** + * Handle pointer move event + * + * @since Symbian^3 + * @param aPoint The point position relative the layout + * @return None. + */ + void HandlePointerMoveEvent(const TPoint& aPoint); + + /** + * Handle pointer up event + * + * @since Symbian^3 + * @return None. + */ + void HandlePointerUpEventL(); + + /** + * Check pointer area of pointer event + * + * @param aPoint The point position relative the layout + * @return None. + */ + void CheckPointerEvent(const TPoint& aPoint); + + /** + * Return the index of pointed text item. + * + * @since symbian^3 + * @param aPoint, the position of pointer down. + * @return the index of the pointed text item. + */ + TInt ItemIndexByPoint( const TPoint& aPoint ); + + /** + * Report item selected event to ui layout + * + * @since Symbian^3 + * @return None. + */ + void ReportItemSelectedEventL(); + + /** + * Delete all bitmaps. + * + * @since Symbian^3 + * @return None. + */ + void DeleteAllBitmaps(); + + /** + * Handle skin change. + * + * @since Symbian^3 + * @return None. + */ + void HandleSkinChangeL(); + + // From CCoeControl + /** + * Responds to changes to the size and position of the contents of this control. + * + * @since Symbian^3 + * @return None + */ + void SizeChanged(); + + /** + * Draw candidate control. + * + * @since Symbian^3 + * @param aRect: the rect to be drawn. + * @return None + */ + void Draw( const TRect& aRect ) const; + +private: + /** + * The alignment of text in candidate list + * + */ + CGraphicsContext::TTextAlign iAlign; + + /** + * The initial rect for the top-left point + * + */ + TRect iInitRect; + + /** + * If enabling the spell functionality + * + */ + TBool iSpellEnabled; + + /** + * If enabling text width + * + */ + TBool iTextWidthEnabled; + + /** + * Store Laf Data. + * + */ + CPenUiCandidateWnd::TPenUiCandidateLafData iLafData; + + /** + * Store the item list. + * + */ + RPointerArray iItemList; + + /** + * Background frame id. + * + */ + TAknsItemID iBgFrId; + + /** + * Hilight frame id. + * + */ + TAknsItemID iItemActiveFrId; + + /** + * Navi buttons normal frame id. + * + */ + TAknsItemID iNaviFrId; + + /** + * Navi buttons pressed frame id. + * + */ + TAknsItemID iNaviActiveFrId; + + /** + * Navi buttons dim frame id. + * + */ + TAknsItemID iNaviDimFrId; + + /** + * The width of text area + * + */ + TInt iItemWidth; + + /** + * The rect of list pane + * + */ + TRect iListRect; + + /** + * The rect of scroll pane + * + */ + TRect iScrollRect; + + /** + * The rect of up arrow button + * + */ + TRect iPageUpRect; + + /** + * The rect of down arrow button + * + */ + TRect iPageDownRect; + + /** + * The rect of each item. + * + */ + RArray iItemRects; + + /** + * The size of separator line. + * + */ + TSize iSeparatorSize; + + /** + * The index of current page. + * + */ + TInt iCurrentPage; + + /** + * The number of total page. + * + */ + TInt iTotalPages; + + /** + * The index of focused item. + * + */ + TInt iFocusItem; + + /** + * The text of page info + * + * Owned + */ + HBufC* iPageInfo; + + /** + * The area type of pointer + * + */ + TInt iPointerArea; + + /** + * If navi buttons need to be shown + * + */ + TBool iNaviBtnShown; + + /** + * The bitmap of page up button. + * + * Owned. + */ + CFbsBitmap* iPageUpBmp; + + /** + * The mask bitmap of page up button. + * + * Owned. + */ + CFbsBitmap* iPageUpBmpMask; + + /** + * The mask bitmap of dimmed page up button. + * + * Owned. + */ + CFbsBitmap* iPageUpDimBmpMask; + + /** + * The mask bitmap of dimmed page down button. + * + * Owned. + */ + CFbsBitmap* iPageDownBmp; + + /** + * The bitmap of page down button. + * + * Owned. + */ + CFbsBitmap* iPageDownBmpMask; + + /** + * The mask bitmap of page down button. + * + * Owned. + */ + CFbsBitmap* iPageDownDimBmpMask; + + /** + * The bitmap of separator. + * + * Owned. + */ + CFbsBitmap* iSeperationBmp; + + /** + * The mask bitmap of separator. + * + * Owned. + */ + CFbsBitmap* iSeperationMaskBmp; + + /** + * The observer of the control + * + * Now own + */ + MPenUiWndEventObserver* iObserver; + }; + + +/** +* Set window priority. +*/ +inline void CPenUiCandidateWnd::SetPriority( TInt aPriority ) + { + Window().SetOrdinalPosition( 0, aPriority ); + } + +/** +* Set the alienment of text in candidate. +*/ +inline void CPenUiCandidateWnd::SetAlign(CGraphicsContext::TTextAlign aAlign) + { + iAlign = aAlign; + } + +/** +* Set the init rect used for the top-left point of candidate. +*/ +inline void CPenUiCandidateWnd::SetInitRect( const TRect& aInitRect ) + { + iInitRect = aInitRect; + } + +/** +* Enable spell functionality of candidate +*/ +inline void CPenUiCandidateWnd::EnableSpell( TBool aSpellEnabled ) + { + iSpellEnabled = aSpellEnabled; + } + +/** +* Enable minimal text width when calculates item width. +*/ +inline void CPenUiCandidateWnd::EnableTextWidth( TBool aTextWidthEnabled ) + { + iTextWidthEnabled = aTextWidthEnabled; + } + +#endif //R_RPENINPUTANIM_H + +// End of File diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h --- a/textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h Fri Oct 22 15:38:27 2010 +0100 @@ -196,37 +196,8 @@ 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); - - /** - * 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 UpdateChangedArea(const CFbsBitmap* aBmp,const TRect& aRect,TBool aFlag); + void UpdateBubble(const CFbsBitmap* aBmp,const CFbsBitmap* aMaskBmp,const TRect& aPos,TBool aFlag); void Clean(); void HandleNGASpecificSignal(TInt aEventType, const TDesC& aEventData); @@ -241,18 +212,6 @@ */ void SetCursorColor(); - /** - * Enable or disable transition effect. - * - * @since Symbian^3 - * @param aEnableGfxTransEffect, ETrue: enable transition effect - * EFalse: disable transition effect. - */ - inline void EnableGfxTransEffect( TBool aEnableGfxTransEffect ) - { - iEnableGfxTransEffect = aEnableGfxTransEffect; - }; - public: // Functions from base classes. /** @@ -353,12 +312,6 @@ CFbsBitmap* iChangedBmp; RPointerArray iBubblesArea; RPointerArray iBubblesMaskArea; - - /** - * An array of the Controls' addresses - */ - RArray iBubblesCtrl; - RArray iBubblesPos; TPoint iCursorPos; @@ -397,12 +350,6 @@ */ TRgb iCursorColor; - - /** - * If transition effect is enabled. - */ - TBool iEnableGfxTransEffect; - friend class CCursorWindow; }; class CInternalBkCtrl : public CCoeControl diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/penuiwndeventhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/inc/pensrvcliinc/penuiwndeventhandler.h Fri Oct 22 15:38:27 2010 +0100 @@ -0,0 +1,100 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef PENUIWNDEVENTHANDLER_H_ +#define PENUIWNDEVENTHANDLER_H_ + +#include "penuiwndeventobserver.h" + +class CPeninputServer; + +/** + * CPenUiWndEventHandler + * + * The pen ui window event handler + * + */ +class CPenUiWndEventHandler : public CBase, public MPenUiWndEventObserver + { +public: + /** + * Two-phased constructor. + * + * @since symbian^3 + * @param aServer the pointer to the owner of the control + * @return Pointer to CPenUiCandidateWnd's instance + */ + static CPenUiWndEventHandler* NewL( CPeninputServer* aServer ); + + /** + * Two-phased constructor. + * + * @since symbian^3 + * @param aServer the pointer to the owner of the control + * @return Pointer to CPenUiCandidateWnd's instance + */ + static CPenUiWndEventHandler* NewLC( CPeninputServer* aServer ); + + /** + * Destructor + */ + ~CPenUiWndEventHandler(); + +// From MPenUiWndEventObserver + /** + * Signal owner that there is an event + * + * @since symbian^3 + * @param aEventType The event type + * @param aEventData The event data + */ + virtual void SignalOwner( TInt aEventType, const TDesC& aEventData ); + + /** + * Handle layout command event. + * + * @since symbian^3 + * @param aCmd Command Id. + * @param aData Data for command. + */ + virtual void HandleCommand( TInt aCmd, TUint8* aData ); + +private: + + /** + * C++ Default Constructor + */ + CPenUiWndEventHandler( CPeninputServer* aServer ); + + /** + * 2nd phase constructor. + * + * @since Symbain^3 + * @return None + */ + void ConstructL(); + +private: + /** + * The owner of the control + * + * Now own + */ + CPeninputServer* iServer; + }; + +#endif /* PENUIWNDEVENTHANDLER_H_ */ diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/penuiwndeventobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/inc/pensrvcliinc/penuiwndeventobserver.h Fri Oct 22 15:38:27 2010 +0100 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef PENUIWNDEVENTOBSERVER_H_ +#define PENUIWNDEVENTOBSERVER_H_ + +/** + * MPenUiWndEventObserver + * + * The observer to handle pen ui window event + * + */ +class MPenUiWndEventObserver + { +public: + /** + * Signal owner that there is an event + * + * @since symbian^3 + * @param aEventType The event type + * @param aEventData The event data + */ + virtual void SignalOwner( TInt aEventType, const TDesC& aEventData ) = 0; + + /** + * Handle layout command event. + * + * @since symbian^3 + * @param aCmd Command Id. + * @param aData Data for command. + */ + virtual void HandleCommand( TInt aCmd, TUint8* aData ) = 0; + }; + +#endif /* PENUIWNDEVENTOBSERVER_H_ */ diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/inc/pensrvcliinc/rpeninputanim.h --- a/textinput/peninputarc/inc/pensrvcliinc/rpeninputanim.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/inc/pensrvcliinc/rpeninputanim.h Fri Oct 22 15:38:27 2010 +0100 @@ -186,16 +186,6 @@ void GetDSAState(TBool& aState); void SetDiscreeptPop(const TRect& aArea); - - /** - * Update parameters of pointer event suppressor. - * - * @since Symbian^3 - * @param aParameters parameters of pointer event suppressor - * @return none - */ - void UpdatePointerEventSuppressor( const TPointerEventSuppressorParameters& aParameters ); - private: /** diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/rom/peninputarc.iby --- a/textinput/peninputarc/rom/peninputarc.iby Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/rom/peninputarc.iby Fri Oct 22 15:38:27 2010 +0100 @@ -36,6 +36,7 @@ S60_APP_AIF_RSC(peninputserver) data = \EPOC32\DATA\Z\resource\apps\peninputserver.RSC "resource\apps\peninputserver.rsc" +data = \EPOC32\DATA\Z\resource\apps\peninputserver.mif "resource\apps\peninputserver.mif" ECOM_PLUGIN(gspeninputplugin.dll, gspeninputplugin.rsc) ECOM_PLUGIN(2000B5E7.dll, 2000B5E7.rss) diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputanim/peninputanim.cpp --- a/textinput/peninputarc/src/peninputanim/peninputanim.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputanim/peninputanim.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -142,6 +142,13 @@ iFunctions->RegisterForNotifications(EDirectScreenAccess); iPointerEventSuppressor = CPenPointerEventSuppressor::NewL(); + + //Setup pointer event suppressor with the parameters provided by UE. + //hard code is used here to minimize code changes + iPointerEventSuppressor->SetMaxTapMove( TSize( 10, 10 ) ); + iPointerEventSuppressor->SetMaxTapDuration( 400000 ); + iPointerEventSuppressor->SetMaxDownUpMove( TSize( 40 , 40 ) ); + iPointerEventSuppressor->SetMaxDownUpDuration( 400000 ); } @@ -300,7 +307,7 @@ default: { return EFalse; - } + } } } @@ -704,18 +711,6 @@ SetDiscreeptPop(area); } break; - case EPeninputOpUpdatePointerSuppressor: - { - TPointerEventSuppressorParameters parameters; - TPckg msgData( parameters ); - msg->ReadL( KMsgSlot1, msgData ); - - iPointerEventSuppressor->SetMaxTapMove( parameters.iMoveEventMaxMovement ); - iPointerEventSuppressor->SetMaxTapDuration( parameters.iMoveEventTimeout ); - iPointerEventSuppressor->SetMaxDownUpMove( parameters.iUpEventMaxMovement ); - iPointerEventSuppressor->SetMaxDownUpDuration( parameters.iUpEventTimeout ); - } - break; default: // unsupported opcode, panic the client { @@ -1072,7 +1067,7 @@ // void CPeninputAnim::StartTimer() { - if ( iIsActive && !iFlushTimer->IsActive()) + if ( iIsActive && !iFlushTimer->IsActive() ) { iFlushTimer->Start( KFlushTimerPeriod, diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputanim/penpointereventsuppressor.cpp --- a/textinput/peninputarc/src/peninputanim/penpointereventsuppressor.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputanim/penpointereventsuppressor.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -21,6 +21,7 @@ const TInt KPenPointerEventSuppressorDefaultMinInterDragInterval = 0; const TInt KPenPointerEventSuppressorDefaultMovement = 6; + const TInt KPenPointerEventSuppressorDefaultMaxDownUpDuration = 400000; // 0.4 seconds const TInt KPenPointerEventSuppressorDefaultDownUpMovement = 7; @@ -48,6 +49,7 @@ iMaxDownUpMove.iHeight = KPenPointerEventSuppressorDefaultDownUpMovement; } + TBool CPenPointerEventSuppressor::SuppressPointerEvent( TPointerEvent& aPointerEvent ) { switch ( aPointerEvent.iType ) @@ -94,17 +96,18 @@ break; } case TPointerEvent::EButton1Up: - { - TTime now; - now.HomeTime(); - TPoint delta = aPointerEvent.iPosition - iDownPos; - if ( now.MicroSecondsFrom( iDownTime ) < iMaxDownUpDuration - && Abs( delta.iX ) < iMaxDownUpMove.iWidth - && Abs( delta.iY ) < iMaxDownUpMove.iHeight ) - { + { + TTime now; + now.HomeTime(); + TPoint delta = aPointerEvent.iPosition - iDownPos; + if ( now.MicroSecondsFrom( iDownTime ) < iMaxDownUpDuration + && Abs( delta.iX ) < iMaxDownUpMove.iWidth + && Abs( delta.iY ) < iMaxDownUpMove.iHeight ) + { //within maximum movement and timeout, so move to position of down aPointerEvent.iPosition = iDownPos; - } + } + iTap = EFalse; break; } @@ -135,6 +138,7 @@ iMinInterDragInterval = aInterval; } + void CPenPointerEventSuppressor::SetMaxDownUpMove( TSize aMaxDownUpMove ) { iMaxDownUpMove = aMaxDownUpMove; @@ -144,3 +148,4 @@ { iMaxDownUpDuration = aDuration; } + diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputclient/penclientimpl.cpp --- a/textinput/peninputarc/src/peninputclient/penclientimpl.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputclient/penclientimpl.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -1262,6 +1262,15 @@ if(iStatus.Int() < 0) { + + // the pen input server has been terminated, so there is no need to post message again + // just notify the handler the message of ESignalServerExit + if ( iStatus.Int() == KErrServerTerminated ) + { + HandleServerTerminatedL(); + return; + } + //check server status RThread srvThread; TInt err = srvThread.Open(iSrvThreadId); @@ -1274,9 +1283,7 @@ } if(err != KErrNone || exitReason != 0) //server has exited { - iServerExit = ETrue; - iPeninputServer->HandleServerExit(); - iHandler->HandleServerEventL(ESignalServerExit); + HandleServerTerminatedL(); return; } } @@ -1301,6 +1308,26 @@ } // --------------------------------------------------------------------------- +// CPeninputServerObserver::HandleServerTerminatedL() +// --------------------------------------------------------------------------- +// +void CPeninputServerObserver::HandleServerTerminatedL() + { + iServerExit = ETrue; + + if ( iPeninputServer ) + { + iPeninputServer->HandleServerExit(); + } + + if ( iHandler ) + { + iHandler->HandleServerEventL( ESignalServerExit ); + } + + } + +// --------------------------------------------------------------------------- // CPeninputServerObserver::RunError // --------------------------------------------------------------------------- // @@ -1542,18 +1569,6 @@ User::RequestComplete(iPendingRequest, aErr); } -// --------------------------------------------------------------------------- -// Enable or disable transition effect. -// --------------------------------------------------------------------------- -// -void RPeninputServerImpl::EnableGfxTransEffect( TBool aEnable) - { - TPckg msg( aEnable ); - TIpcArgs arg; - arg.Set( KMsgSlot0, &msg ); - SendReceive(EPeninputRequestEnableGfxTransEffect, arg ); - } - CWaitingServerAo::CWaitingServerAo(RPeninputServerImpl* aClient) : CActive(CActive::EPriorityStandard), iClient(aClient) diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputclient/peninputclient.cpp --- a/textinput/peninputarc/src/peninputclient/peninputclient.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputclient/peninputclient.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -509,18 +509,5 @@ { iSingletonServer->EnablePriorityChangeOnOriChange(aEnabled); } - -// --------------------------------------------------------------------------- -// Enable or disable transition effect. -// --------------------------------------------------------------------------- -// -EXPORT_C void RPeninputServer::EnableGfxTransEffect( TBool aEnable ) - { - if ( iSingletonServer ) - { - iSingletonServer->EnableGfxTransEffect( aEnable ); - } - } - //end of class RPeninputServer // End of File diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -66,8 +66,6 @@ EXPORT_C CBubbleCtrl::~CBubbleCtrl() { - Close(); - if ( iText ) delete iText; @@ -230,14 +228,12 @@ { 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; @@ -317,13 +313,11 @@ { 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbutton.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbutton.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbutton.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -59,7 +59,7 @@ CFepUiBaseCtrl::BaseConstructL(); //tap accuracy enhancement - if ( FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay ) ) + if( FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay )) { TMargins margins; UiLayout()->GetButtonExtResponseArea( margins ); diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcontrol.mmp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcontrol.mmp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcontrol.mmp Fri Oct 22 15:38:27 2010 +0100 @@ -58,7 +58,6 @@ SOURCE peninputfloatctrl.cpp SOURCE peninputfloatbubble.cpp SOURCE peninputaknvkbpreviewbubblerenderer.cpp -SOURCE peninputtapsettingmanager.cpp userinclude ../../inc/peninputlayoutcontrolinc diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -643,9 +643,11 @@ iLeadingEdge = icfdata.iLeadingEdge; + TInt draw = icfdata.iCmd == EPeninputICFSetCurSel ? 0 : 1; + if (icfdata.iFlag != EFepICFDataInlineNoMatch && iNoMatchState) { - UpdateNoMatchTextL(iPreInlineEndPos, KNullDesC, EFalse); + draw += UpdateNoMatchTextL(iPreInlineEndPos, KNullDesC, EFalse); } switch (icfdata.iCmd) @@ -683,7 +685,7 @@ RecalcualteTextPositionL(); //SetMsgBubbleRect(); SetMsgBubbleRectAccordingToLanguage(); - Draw(); +// Draw(); } break; case EPeninputICFReplace: @@ -744,13 +746,13 @@ } } - UpdateTextL(icfdata); + draw += UpdateTextL(icfdata); // Need to set selection visible before set selection for textview SetCursorSelVisibility( icfdata.iCursorSelVisible ); - SetSelectionL(icfdata.iCurSel); - ResetViewHeightL(); + draw += SetSelectionL(icfdata.iCurSel); + draw += ResetViewHeightL(); if (icfdata.iMidPos == 0) { @@ -759,13 +761,13 @@ // set to inline state if (icfdata.iText.Locate(KParagraphSeperator) == KErrNotFound) { - SetAutoCompleteStateL(EFalse); + draw += SetAutoCompleteStateL(EFalse); icfdata.iFlag == EFepICFDataInlineNoMatch ? - SetInlineStateL(ETrue, icfdata.iStartPos, - icfdata.iCurSel.iCursorPos, - ETrue, icfdata.iText) : - SetInlineStateL(ETrue, icfdata.iStartPos, - icfdata.iCurSel.iCursorPos); + draw += SetInlineStateL( ETrue, icfdata.iStartPos, + icfdata.iCurSel.iCursorPos, + ETrue, icfdata.iText) : + draw += SetInlineStateL(ETrue, icfdata.iStartPos, + icfdata.iCurSel.iCursorPos); } } else if (icfdata.iMidPos > 0) @@ -773,7 +775,7 @@ // auto complete state // Q: does insertion point need to be shown when auto complete? // on the assumption that insertion point do not shown - SetAutoCompleteStateL( ETrue, icfdata.iStartPos, + draw += SetAutoCompleteStateL( ETrue, icfdata.iStartPos, icfdata.iStartPos + icfdata.iText.Length() - icfdata.iMidPos, icfdata.iCurSel.iCursorPos ); } @@ -781,47 +783,52 @@ { // icfdata.iMidPos < 0, normal state // - SetInlineStateL(EFalse, icfdata.iStartPos, icfdata.iCurSel.iCursorPos); - SetAutoCompleteStateL(EFalse); - + draw += SetInlineStateL(EFalse, icfdata.iStartPos, icfdata.iCurSel.iCursorPos); + draw += SetAutoCompleteStateL(EFalse); } // after inline adjust, cusor position may be updated if( bScroll ) { - TryDisplayMaxTextL(iCursorSel.iCursorPos); + draw += TryDisplayMaxTextL(iCursorSel.iCursorPos); } - - iTextView->DrawL(iViewRect); - //if(iMsgBubble) -// iMsgBubble->Draw(); iInsertionPoint->SetVisible( EFalse ); SetCursorVisible(icfdata.iCursorVisibility); - if (AbleToDraw()) + if ( AbleToDraw() ) { - UpdateAreaImmed(Rect(),EFalse); + if(draw > 0) + { + iTextView->DrawL(iViewRect); + } + + UpdateAreaImmed(iViewRect,EFalse); } } -void CFepLayoutMultiLineIcfEditor::SetSelectionL(TCursorSelection aCurSel) +TBool CFepLayoutMultiLineIcfEditor::SetSelectionL(TCursorSelection aCurSel) { + TBool changed = EFalse; + if ( !IsTextPosValid(aCurSel.LowerPos()) || !IsTextPosValid(aCurSel.HigherPos()) ) { - return; + return changed; } - AdjustSelectionL( aCurSel ); + changed = AdjustSelectionL( aCurSel ); if ( iLayout->FirstLineInBand() != 0 && iLineMaxCount > 1 && iPromptTextLen > 0 && aCurSel.iCursorPos == iPromptTextLen ) { - iTextView->SetViewLineAtTopL( 1 ); + if ( iTextView->SetViewLineAtTopL( 1 ) != TPoint( 0, 0 ) ) + { + changed = ETrue; + } } - + RecalcualteTextPositionL(); if ( iCursorSel.Length() > 0 ) @@ -841,7 +848,9 @@ //SetMsgBubbleRect(); SetMsgBubbleRectAccordingToLanguage(); SetInfoBubbleRect(); - } + } + + return changed; } TBool CFepLayoutMultiLineIcfEditor::HighlightOverlapWithBubble( const TRect& aRect ) @@ -892,11 +901,11 @@ } // for secret editor -void CFepLayoutMultiLineIcfEditor::UpdateTextL(const TFepInputContextFieldData& aData) +TBool CFepLayoutMultiLineIcfEditor::UpdateTextL(const TFepInputContextFieldData& aData) { if (!iTextIsSecret) { - return; + return EFalse; } switch (aData.iCmd) @@ -915,7 +924,7 @@ iTextView->HandleInsertDeleteL ( TCursorSelection( iRichText->DocumentLength(), iPromptTextLen ), 0 ); } - break; + return ETrue; case EPeninputICFReplace: { if (iSecretTextTimer->IsActive()) @@ -961,13 +970,15 @@ aData.iText.Length()>1?KSecretInstantShowTimer:KSecretUpdateTimer, KSecretUpdateTimer, TCallBack(UpdateSecretTextL, this)); } - break; + return ETrue; case EPeninputICFSetCurSel: default: { break; } } + + return EFalse; } TInt CFepLayoutMultiLineIcfEditor::UpdateSecretTextL(TAny* aEditArea) @@ -1053,7 +1064,6 @@ } TFontSpec fontSpec; - fontSpec = aFont->FontSpecInTwips(); fontSpec.iHeight = aFont->HeightInPixels(); CFont* font; iCoeEnv->ScreenDevice()->ReleaseFont(CONST_CAST(CFont*, iFont)); @@ -1072,7 +1082,6 @@ 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() ) @@ -1333,20 +1342,21 @@ SetMsgBubbleRectAccordingToLanguage(); } -void CFepLayoutMultiLineIcfEditor::ResetViewHeightL() +TBool CFepLayoutMultiLineIcfEditor::ResetViewHeightL() { - const TInt height = iLayout->FormattedHeightInPixels(); const TInt lineCount=iLayout->NumFormattedLines(); + if ( lineCount <= 0 ) { - return; + return EFalse; } + const TInt height = iLayout->FormattedHeightInPixels(); TInt lineHeight = (height+lineCount-1) / lineCount; if ( iFormatLineHeight == lineHeight ) { - return; + return EFalse; } if ( lineHeight > iMaxIcfEditorHeight ) @@ -1380,6 +1390,8 @@ iViewRect.iBr.iY -= margin; } iTextView->SetViewRect(iViewRect); + + return ETrue; } void CFepLayoutMultiLineIcfEditor::SetMsgBubbleRectAccordingToLanguage() @@ -2512,12 +2524,12 @@ return (aPos >= 0 && aPos <= iRichText->DocumentLength()); } -void CFepLayoutMultiLineIcfEditor::UpdateNoMatchTextL(TInt aPos, const TDesC& aNoMatchText, +TBool CFepLayoutMultiLineIcfEditor::UpdateNoMatchTextL(TInt aPos, const TDesC& aNoMatchText, TBool aNoMatchState) { if ( iNoMatchState == aNoMatchState ) { - return; + return EFalse; } if (aNoMatchState) @@ -2534,7 +2546,9 @@ iRichText->DeleteL(aPos, 1); iTextView->HandleInsertDeleteL(TCursorSelection(aPos, aPos),1); SetSelectionL( TCursorSelection( aPos - 1, aPos - 1 ) ); - } + } + + return ETrue; } void CFepLayoutMultiLineIcfEditor::SetPromptTextFormatL(TInt aPromptTextLen) @@ -2643,35 +2657,53 @@ } } -void CFepLayoutMultiLineIcfEditor::SetInlineStateL(TBool aInline, +TBool CFepLayoutMultiLineIcfEditor::SetInlineStateL(TBool aInline, TInt aStartPos, TInt aEndPos, TBool aNoMatchState, const TDesC& aNoMatchText) { - if (aInline) + TInt oldState = iState; + + if ( aInline ) + { iState = CFepLayoutMultiLineIcf::EIcfInline; + } else { iState = CFepLayoutMultiLineIcf::EIcfNormal; - UpdateNoMatchTextL(iPreInlineEndPos, KNullDesC, EFalse); } + + TBool changed = ( oldState != iState ); + + if ( changed ) + { + if ( iState == CFepLayoutMultiLineIcf::EIcfNormal ) + { + UpdateNoMatchTextL(iPreInlineEndPos, KNullDesC, EFalse); + } - SetSpecialStateL(aInline, - aStartPos, - aEndPos, - iPreInlineStartPos, - iPreInlineEndPos, - EAttFontUnderline, - aNoMatchState, - aNoMatchText); + SetSpecialStateL(aInline, + aStartPos, + aEndPos, + iPreInlineStartPos, + iPreInlineEndPos, + EAttFontUnderline, + aNoMatchState, + aNoMatchText); + } + + return changed; } -void CFepLayoutMultiLineIcfEditor::SetAutoCompleteStateL(TBool aAutoComplete, +TBool CFepLayoutMultiLineIcfEditor::SetAutoCompleteStateL(TBool aAutoComplete, TInt aStartPos, TInt aMidPos, TInt aEndPos) { + // If auto is on, we need draw every time, as grey part is not making the text changed + // if we use traditional way to check change, auto part is not turn to black when grey part is there. + TBool changed = ( aAutoComplete || iAutoComplete != aAutoComplete ); iAutoComplete = aAutoComplete; if ( aAutoComplete ) @@ -2683,19 +2715,24 @@ iState = CFepLayoutMultiLineIcf::EIcfNormal; } - SetSpecialStateL(aAutoComplete, - aStartPos, - aMidPos, - iPreInlineStartPos, - iPreInlineEndPos, - EAttFontUnderline); - - SetSpecialStateL(aAutoComplete, - aMidPos, - aEndPos, - iPreAutoStartPos, - iPreAutoEndPos, - EAttColor); + if ( changed ) + { + SetSpecialStateL(aAutoComplete, + aStartPos, + aMidPos, + iPreInlineStartPos, + iPreInlineEndPos, + EAttFontUnderline); + + SetSpecialStateL(aAutoComplete, + aMidPos, + aEndPos, + iPreAutoStartPos, + iPreAutoEndPos, + EAttColor); + } + + return changed; } TAknsItemID CFepLayoutMultiLineIcfEditor::BgImgSkinId() const @@ -2831,8 +2868,10 @@ TRAP_IGNORE(SetFontL(font)); } -void CFepLayoutMultiLineIcfEditor::TryDisplayMaxTextL( TInt aCursorPos ) +TBool CFepLayoutMultiLineIcfEditor::TryDisplayMaxTextL( TInt aCursorPos ) { + TBool scrolled = EFalse; + iTextView->FinishBackgroundFormattingL(); TInt lineIndex = iLayout->GetLineNumber( aCursorPos ); @@ -2843,10 +2882,12 @@ CalculateCursorPos(cursorPt); if ( !iViewRect.Contains( cursorPt ) && ( lineIndex + 1 ) > ( iLineMaxCount - 1 ) ) { - iTextView->SetViewLineAtTopL(( lineIndex + 1 ) - ( iLineMaxCount - 1 )); - RecalcualteTextPositionL(); - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); + if ( iTextView->SetViewLineAtTopL(( lineIndex + 1 ) - ( iLineMaxCount - 1 )) != TPoint( 0, 0 ) ) + { + scrolled = ETrue; + RecalcualteTextPositionL(); + SetMsgBubbleRectAccordingToLanguage(); + } } } @@ -2860,15 +2901,18 @@ - iViewRect.iTl.iY) / iFormatLineHeight + 1; if( lineCursor < pageCount ) { - - iTextView->SetViewLineAtTopL( - lineCount - pageCount + 1 < 1 ? 1 : lineCount - pageCount + 1 ); - - RecalcualteTextPositionL(); - //SetMsgBubbleRect(); - SetMsgBubbleRectAccordingToLanguage(); + if ( iTextView->SetViewLineAtTopL( + lineCount - pageCount + 1 < 1 ? 1 : lineCount - pageCount + 1 ) + != TPoint( 0, 0 ) ) + { + scrolled = ETrue; + RecalcualteTextPositionL(); + SetMsgBubbleRectAccordingToLanguage(); + } } } + + return scrolled; } void CFepLayoutMultiLineIcfEditor::DrawIcfBackground( CFbsBitGc& /*aGc*/, const TRect& aDrawnRect, @@ -2892,14 +2936,18 @@ iRichText->Extract( aBuf, aPos + iPromptTextLen, aLength); } -void CFepLayoutMultiLineIcfEditor::AdjustSelectionL( const TCursorSelection& aCurSel ) +TBool CFepLayoutMultiLineIcfEditor::AdjustSelectionL( const TCursorSelection& aCurSel ) { if (!IsTextPosValid(aCurSel.LowerPos()) || !IsTextPosValid(aCurSel.HigherPos()) ) { - return; + return EFalse; } - + if (iCursorSel.iAnchorPos == aCurSel.iAnchorPos + && iCursorSel.iCursorPos == aCurSel.iCursorPos) + { + return EFalse; + } iCursorSel = aCurSel; if ( BelongToPromptText(aCurSel.iCursorPos) ) @@ -2917,6 +2965,8 @@ iTextView->SetSelectionL( iCursorSel ); iTextView->SetSelectionVisibilityL( iCursorSelVisible ); + + return ETrue; } void CFepLayoutMultiLineIcfEditor::ReDrawRect(const TRect& aRect) diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -106,7 +106,7 @@ BaseConstructL(); //tap accuracy enhancement - if ( FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay )) + if( FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay )) { TMargins margins; UiLayout()->GetKeyExtResponseArea( margins ); @@ -122,7 +122,7 @@ // (other items were commented in a header). // --------------------------------------------------------------------------- // -void CVirtualKeyCtrl::DrawKeyText(CFbsBitGc* aGc) +void CVirtualKeyCtrl::DrawKeyText(CFbsBitGc* aGc, const TRect& aRect) { TBool textlineset = EFalse; @@ -136,7 +136,7 @@ if (iKeyInfo->KeyUnicodes(TVirtualKeyTextPos(i)) != KNullDesC) { TAknLayoutText textLayout; - textLayout.LayoutText(GetRect(), + textLayout.LayoutText(aRect, iKeyboard->TextLineLayout(TVirtualKeyTextPos(i))); TRgb color( KRgbBlack ); // sane default for nonskinned case if ( AknsUtils::AvkonSkinEnabled() ) @@ -195,7 +195,7 @@ if (!textlineset) { TAknLayoutText textLayout; - textLayout.LayoutText(GetRect(), iKeyboard->iVKBTextLineLayout); + textLayout.LayoutText(aRect, iKeyboard->iVKBTextLineLayout); //CFbsBitGc* gc = static_cast(BitGc()); @@ -323,7 +323,8 @@ gc->SetPenColor(KRgbBlack); gc->SetBrushStyle( CGraphicsContext::ENullBrush ); //Draw text again. - DrawKeyText(gc); + + DrawKeyText(gc,GetRect()); } // --------------------------------------------------------------------------- @@ -458,7 +459,7 @@ gc->SetPenColor( KRgbBlack ); gc->SetBrushStyle( CGraphicsContext::ENullBrush ); gc->SetFaded(EFalse); - DrawKeyText(gc); + DrawKeyText(gc,Rect()); } CFbsBitGc* CVirtualKeyCtrl::GetGc() @@ -526,11 +527,6 @@ TBool bHasDrawn = EFalse; if(UiLayout()->NotDrawToLayoutDevice()) { - /*TBool ret = iKeyboard->PrepareKeyBmp(iKeyboard->HighightKeyBmp(), - iKeyboard->HighlightKeyDev(), - rect,innerrect, - iKeyboard->KeySkinId(EKeyBmpHighlight), - KAknsIIDDefault,Rect());*/ TBool ret = iKeyboard->PrepareHighlightKeyBmp(rect,innerrect,Rect()); if(ret) { @@ -588,12 +584,12 @@ gc->SetFaded(EFalse); if(UiLayout()->NotDrawToLayoutDevice()) { - DrawKeyText(Keyboard()->HighlightGc()); + DrawKeyText(Keyboard()->HighlightGc(), GetRect()); UpdateChangedArea(ETrue); } else { - DrawKeyText(gc); + DrawKeyText(gc, Rect()); } } @@ -629,7 +625,19 @@ } if(iKeyInfo->Latched()||(PointerDown()&&!iKeyInfo->IsLatchKey())) - { + { + // If some layout initializes a RootCtrl redraw operation when the key was in a highlighted state, the normal key would not be seen + // after key was returned to the normal state, that's because the layout device has been cleaned and redrawn again so when it comes to draw + // this highlighted virtual key, it just draws the bitmap on its own device, so the area the highlighted key occupied on the layout device + // is totally undrawn with the normal state key bitmap. + // So we have to redraw the normal state key first to make sure the normal key was drawn on the layout bitmap. + // [use case: Open the chinse VITUT, input some pinyin letter to bring the candidate list to the forground by clicking the virtual key ctrl + // ==> select some chinese words in the candidate list ==> then click and release the virtual key agian] + if(UiLayout()->NotDrawToLayoutDevice()) + { + DrawNormalStateKey(); + } + DrawHighlightKey(); // remove DrawBubble() into HandlePointerDownEventL() @@ -714,9 +722,15 @@ } if(UiLayout()->NotDrawToLayoutDevice()) { - //no need to draw again, just remove the highlight bitmap - UpdateChangedArea(EFalse); - Draw(); + if(!iKeyInfo->Latched()) + { + //no need to draw again, just remove the highlight bitmap + UpdateChangedArea(EFalse); + } + + // no need to draw the normal key to layout bitmap since the highlighted key bitmap is drawn in a seperate device instead of layout device + // so just notify the PEN UI to simply remove the highlighted key bitmap. It will somehow improve the performance and decrease the CPU usage + //Draw(); } else { @@ -1104,13 +1118,10 @@ { 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputlayoutcontrol/peninputtapsettingmanager.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputtapsettingmanager.cpp Fri Sep 17 17:26:50 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,385 +0,0 @@ -/* -* 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 for CFepUiLayout -* -*/ - - -#include "peninputtapsettingmanager.h" - -#include -#include -#include - -_LIT( KSeparatorComma, "," ); - -const TInt KTextBufferLength = 128; - -const TInt KDefaultMovement = 5; -const TInt KDefaultTimeout = 200000; -const TInt KDefaultMargin = 9; - -// --------------------------------------------------------------------------- -// Symbian Constructor -// --------------------------------------------------------------------------- -// -CPeninputTapSettingManager* CPeninputTapSettingManager::NewL() - { - CPeninputTapSettingManager* self = CPeninputTapSettingManager::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Symbian Constructor -// --------------------------------------------------------------------------- -// -CPeninputTapSettingManager* CPeninputTapSettingManager::NewLC() - { - CPeninputTapSettingManager* self = new ( ELeave ) CPeninputTapSettingManager(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// c++ destructor -// --------------------------------------------------------------------------- -// -CPeninputTapSettingManager::~CPeninputTapSettingManager() - { - - } - -// --------------------------------------------------------------------------- -// Load all parameters of tap accuracy enhancement for specified layout -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::Load( TInt aLayoutType ) - { - TRAPD( err, LoadFromRepositoryL( aLayoutType ) ); - if ( err != KErrNone ) - { - LoadDefault(); - } - } - -// --------------------------------------------------------------------------- -// Load all parameters of tap accuracy enhancement for specified layout -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::Load( TInt aLayoutType, const TDesC& aFileName ) - { - TRAPD( err, LoadFromFileL( aLayoutType, aFileName ) ); - if ( err != KErrNone ) - { - LoadDefault(); - } - } - -// --------------------------------------------------------------------------- -// Get configuration of PointerMove event suppressor -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::GetPointerMoveSuppressor( TSize& aMaxMovement, - TInt& aTimeout ) - { - aMaxMovement = iPointerMoveMaxMovement; - aTimeout = iPointerMoveTimeout; - } - -// --------------------------------------------------------------------------- -// Get configuration of PointerUp event suppressor -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::GetPointerUpSuppressor( TSize& aMaxMovement, - TInt& aTimeout ) - { - aMaxMovement = iPointerUpMaxMovement; - aTimeout = iPointerUpTimeout; - } - -// --------------------------------------------------------------------------- -// Get extra response area of virtual key controls. -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::GetKeyExtResponseArea( TMargins& aMargins ) - { - aMargins = iKeyMargins; - } - -// --------------------------------------------------------------------------- -// Get extra response area of button controls. -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::GetButtonExtResponseArea( TMargins& aMargins ) - { - aMargins = iButtonMargins; - } - -// --------------------------------------------------------------------------- -// C++ constructor. -// --------------------------------------------------------------------------- -// -CPeninputTapSettingManager::CPeninputTapSettingManager() - { - - } - -// --------------------------------------------------------------------------- -// Symbian second-phase constructor. -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::ConstructL() - { - } - -// --------------------------------------------------------------------------- -// Load all parameters of tap accuracy enhancement for specified layout. -// From Repository. -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::LoadFromRepositoryL( TInt aLayoutType ) - { - TUint32 uidButtonExtMargins = 0; - TUint32 uidKeyCtrlExtMargins = 0; - TUint32 uidPointerMoveMaxMove = 0; - TUint32 uidPointerMoveTimeout = 0; - TUint32 uidPointerUpMaxMove = 0; - TUint32 uidPointerUpTimeout = 0; - - switch( aLayoutType ) - { - case EPluginInputModeFSQ: - { - uidButtonExtMargins = KAknFepTapAccuracyFsqButtonExtMargins; - uidKeyCtrlExtMargins = KAknFepTapAccuracyFsqKeyCtrlExtMargins; - uidPointerMoveMaxMove = KAknFepTapAccuracyFsqPointerMoveMaxMovement; - uidPointerMoveTimeout = KAknFepTapAccuracyFsqPointerMoveTimeout; - uidPointerUpMaxMove = KAknFepTapAccuracyFsqPointerUpMaxMovement; - uidPointerUpTimeout = KAknFepTapAccuracyFsqPointerUpTimeout; - } - break; - case EPluginInputModePortraitFSQ: - { - uidButtonExtMargins = KAknFepTapAccuracyPFsqButtonExtMargins; - uidKeyCtrlExtMargins = KAknFepTapAccuracyPFsqKeyCtrlExtMargins; - uidPointerMoveMaxMove = KAknFepTapAccuracyPFsqPointerMoveMaxMovement; - uidPointerMoveTimeout = KAknFepTapAccuracyPFsqPointerMoveTimeout; - uidPointerUpMaxMove = KAknFepTapAccuracyPFsqPointerUpMaxMovement; - uidPointerUpTimeout = KAknFepTapAccuracyPFsqPointerUpTimeout; - } - break; - case EPluginInputModeFingerHwr: - { - uidButtonExtMargins = KAknFepTapAccuracyFhwrButtonExtMargins; - uidKeyCtrlExtMargins = KAknFepTapAccuracyFhwrKeyCtrlExtMargins; - uidPointerMoveMaxMove = KAknFepTapAccuracyFhwrPointerMoveMaxMovement; - uidPointerMoveTimeout = KAknFepTapAccuracyFhwrPointerMoveTimeout; - uidPointerUpMaxMove = KAknFepTapAccuracyFhwrPointerUpMaxMovement; - uidPointerUpTimeout = KAknFepTapAccuracyFhwrPointerUpTimeout; - } - break; - default: - { - uidButtonExtMargins = KAknFepTapAccuracyDefaultButtonExtMargins; - uidKeyCtrlExtMargins = KAknFepTapAccuracyDefaultKeyCtrlExtMargins; - uidPointerMoveMaxMove = KAknFepTapAccuracyDefaultPointerMoveMaxMovement; - uidPointerMoveTimeout = KAknFepTapAccuracyDefaultPointerMoveTimeout; - uidPointerUpMaxMove = KAknFepTapAccuracyDefaultPointerUpMaxMovement; - uidPointerUpTimeout = KAknFepTapAccuracyDefaultPointerUpTimeout; - } - } - - CRepository* repository = CRepository::NewL( KCRUidAknFep ); - TBuf str; - TInt num = 0; - TPoint point; - TMargins margins; - - //pointer move event - repository->Get( uidPointerMoveTimeout, num ); - repository->Get( uidPointerMoveMaxMove, str ); - ParsePoints( point, str ); - - iPointerMoveTimeout = num; - iPointerMoveMaxMovement.iWidth = point.iX; - iPointerMoveMaxMovement.iHeight = point.iY; - - //pointer up event - repository->Get( uidPointerUpTimeout, num ); - repository->Get( uidPointerUpMaxMove, str ); - ParsePoints( point, str ); - - iPointerUpTimeout = num; - iPointerUpMaxMovement.iWidth = point.iX; - iPointerUpMaxMovement.iHeight = point.iY; - - //key control - repository->Get( uidKeyCtrlExtMargins, str ); - ParseMargins( margins, str ); - iKeyMargins = margins; - - //button control - repository->Get( uidButtonExtMargins, str ); - ParseMargins( margins, str ); - iButtonMargins = margins; - - delete repository; - } - -// --------------------------------------------------------------------------- -// Load all parameters of tap accuracy enhancement for specified layout. -// From file. -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::LoadFromFileL( TInt /*aLayoutType*/, - const TDesC& /*aFileName*/ ) - { - //reserved - } - -// --------------------------------------------------------------------------- -// Load default parameters. -// --------------------------------------------------------------------------- -// -void CPeninputTapSettingManager::LoadDefault() - { - iPointerMoveMaxMovement = TSize( KDefaultMovement, KDefaultMovement ); - iPointerMoveTimeout = KDefaultTimeout; - - iPointerUpMaxMovement = TSize( KDefaultMovement, KDefaultMovement ); - iPointerUpTimeout = KDefaultTimeout; - - iKeyMargins.iTop = KDefaultMargin; - iKeyMargins.iLeft = KDefaultMargin; - iKeyMargins.iBottom = KDefaultMargin; - iKeyMargins.iRight = KDefaultMargin; - - iButtonMargins.iTop = KDefaultMargin; - iButtonMargins.iLeft = KDefaultMargin; - iButtonMargins.iBottom = KDefaultMargin; - iButtonMargins.iRight = KDefaultMargin; - } - -// --------------------------------------------------------------------------- -// parse a TPoint from a comma separated values string. -// --------------------------------------------------------------------------- -// -TInt CPeninputTapSettingManager::ParsePoints( TPoint& aPoint, const TDesC& aText ) - { - TPtrC tokenizer( aText ); - TInt pos = tokenizer.Find( KSeparatorComma ); - if ( pos == KErrNotFound ) - { - TInt value = 0; - TLex converter( tokenizer ); - TInt error = converter.Val( value ); - aPoint.iX = ( KErrNone == error ? value : 0 ); - aPoint.iY = aPoint.iX; - return 0; - } - - TInt value = 0; - - TLex converter( tokenizer.Left( pos ) ); - TInt error = converter.Val( value ); - aPoint.iX = ( KErrNone == error ? value : 0 ); - - converter = TLex( tokenizer.Mid( pos + 1 ) ); - error = converter.Val( value ); - aPoint.iY = ( KErrNone == error ? value : 0 ); - - return 0; - } - -// --------------------------------------------------------------------------- -// parse a TMargins from a comma separated values string. -// --------------------------------------------------------------------------- -// -TInt CPeninputTapSettingManager::ParseMargins( TMargins& aMargins, const TDesC& aText ) - { - RArray values; - - TPtrC tokenizer( aText ); - TInt pos = 0; - while ( pos != KErrNotFound ) - { - pos = tokenizer.Find( KSeparatorComma ); - - TPtrC substr = ( pos == KErrNotFound ) ? tokenizer : tokenizer.Left( pos ); - TInt value = 0; - TLex converter( substr ); - TInt error = converter.Val( value ); - values.Append( KErrNone == error ? value : 0 ); - - if ( pos != KErrNotFound ) - { - TPtrC right = tokenizer.Mid( pos + 1 ); - tokenizer.Set( right ); - } - } - - TInt count = values.Count(); - - //one value, applies to all sides - if( count == 1 ) - { - aMargins.iTop = values[0]; - aMargins.iLeft = values[0]; - aMargins.iBottom = values[0]; - aMargins.iRight = values[0]; - } - - //two values, first one specifies margins of top and bottom, - //the second specifies left and right. - else if( count == 2 ) - { - aMargins.iTop = values[0]; - aMargins.iLeft = values[1]; - aMargins.iBottom = values[0]; - aMargins.iRight = values[1]; - } - - //three values, first is top, second is the left and right, last is bottom. - else if( count == 3 ) - { - aMargins.iTop = values[0]; - aMargins.iLeft = values[1]; - aMargins.iBottom = values[1]; - aMargins.iRight = values[2]; - } - - //four values, specify top,left,bottom and right respectively - else if ( count >= 4 ) - { - aMargins.iTop = values[0]; - aMargins.iLeft = values[1]; - aMargins.iBottom = values[2]; - aMargins.iRight = values[3]; - } - - else - { - aMargins.iTop = 0; - aMargins.iLeft = 0; - aMargins.iBottom = 0; - aMargins.iRight = 0; - } - - values.Close(); - return count; - } - -//end of file diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputlayoutcontrol/peninputuilayout.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputuilayout.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputuilayout.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -38,7 +38,6 @@ #include #include -#include "peninputtapsettingmanager.h" // ======== MEMBER FUNCTIONS ======== @@ -90,20 +89,20 @@ iExtension->iSkinInstance = AknsUtils::SkinInstance(); iExtension->iTouchFeedbackInstance = MTouchFeedback::Instance(); iExtension->iDisableDrawing = EFalse; - - TInt inputMode = PenInputType(); - TBool isPortraitFSQEnabled = FeatureManager::FeatureSupported( - KFeatureIdFfVirtualFullscrPortraitQwertyInput ); - - //detect real type of two qwerty layout - if ( inputMode == EPluginInputModeFSQ && isPortraitFSQEnabled - && !Layout_Meta_Data::IsLandscapeOrientation() ) - { + + TInt inputMode = PenInputType(); + TBool isPortraitFSQEnabled = FeatureManager::FeatureSupported( + KFeatureIdFfVirtualFullscrPortraitQwertyInput ); + + //detect real type of two qwerty layout + if ( inputMode == EPluginInputModeFSQ && + isPortraitFSQEnabled && !Layout_Meta_Data::IsLandscapeOrientation() ) + { inputMode = EPluginInputModePortraitFSQ; - } - - //load settings of tap accuracy enhancement - LoadTapAccuracySettingsL( inputMode ); + } + + //load settings of tap accuracy enhancement + LoadTapAccuracySettings( inputMode ); } // --------------------------------------------------------------------------- @@ -493,22 +492,7 @@ iRootCtrl->OnActivate(); #ifdef RD_TACTILE_FEEDBACK iExtension->iTactileSupported = FeatureManager::FeatureSupported( KFeatureIdTactileFeedback ); -#endif // RD_TACTILE_FEEDBACK - - //update pointer event suppressor - if ( FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay ) ) - { - TPointerEventSuppressorParameters parameters; - parameters.iMoveEventMaxMovement = iExtension->iPointerMoveSuppressMaxMovement; - parameters.iMoveEventTimeout = iExtension->iPointerMoveSuppressTimeout; - parameters.iUpEventMaxMovement = iExtension->iPointerUpSuppressMaxMovement; - parameters.iUpEventTimeout = iExtension->iPointerUpSuppressTimeout; - - TPtrC data( reinterpret_cast(¶meters), - sizeof(TPointerEventSuppressorParameters) / 2 ); - - SignalOwner( ESignalUpdatePointerSuppressor, data ); - } +#endif // RD_TACTILE_FEEDBACK } // --------------------------------------------------------------------------- @@ -979,21 +963,46 @@ // Load tap accuracy enhancement settings according to the specified input mode. // --------------------------------------------------------------------------- // -void CFepUiLayout::LoadTapAccuracySettingsL( TInt alayoutType ) +void CFepUiLayout::LoadTapAccuracySettings( TInt aInputMode ) { - CPeninputTapSettingManager* manager = CPeninputTapSettingManager::NewL(); - - manager->Load( alayoutType ); - manager->GetPointerMoveSuppressor( iExtension->iPointerMoveSuppressMaxMovement, - iExtension->iPointerMoveSuppressTimeout ); - - manager->GetPointerUpSuppressor( iExtension->iPointerUpSuppressMaxMovement, - iExtension->iPointerUpSuppressTimeout ); - - manager->GetKeyExtResponseArea( iExtension->iKeyExtResponseMargins ); - manager->GetButtonExtResponseArea( iExtension->iButtonExtResponseMargins ); - - delete manager; + //config tap accuracy enhancement with the parameters provided by UE. + //hard code is used here to minimize code changes + if ( aInputMode == EPluginInputModeFSQ ) + { + iExtension->iKeyExtResponseMargins.iTop = 20; + iExtension->iKeyExtResponseMargins.iLeft = 20; + iExtension->iKeyExtResponseMargins.iBottom = 20; + iExtension->iKeyExtResponseMargins.iRight = 20; + + iExtension->iButtonExtResponseMargins.iTop = 20; + iExtension->iButtonExtResponseMargins.iLeft = 20; + iExtension->iButtonExtResponseMargins.iBottom = 20; + iExtension->iButtonExtResponseMargins.iRight = 20; + } + else if ( aInputMode == EPluginInputModePortraitFSQ ) + { + iExtension->iKeyExtResponseMargins.iTop = 11; + iExtension->iKeyExtResponseMargins.iLeft = 11; + iExtension->iKeyExtResponseMargins.iBottom = 11; + iExtension->iKeyExtResponseMargins.iRight = 11; + + iExtension->iButtonExtResponseMargins.iTop = 11; + iExtension->iButtonExtResponseMargins.iLeft = 11; + iExtension->iButtonExtResponseMargins.iBottom = 11; + iExtension->iButtonExtResponseMargins.iRight = 11; + } + else + { + iExtension->iKeyExtResponseMargins.iTop = 10; + iExtension->iKeyExtResponseMargins.iLeft = 10; + iExtension->iKeyExtResponseMargins.iBottom = 10; + iExtension->iKeyExtResponseMargins.iRight = 10; + + iExtension->iButtonExtResponseMargins.iTop = 10; + iExtension->iButtonExtResponseMargins.iLeft = 10; + iExtension->iButtonExtResponseMargins.iBottom = 10; + iExtension->iButtonExtResponseMargins.iRight = 10; + } } //end of file diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/data/peninputserver.rss --- a/textinput/peninputarc/src/peninputserverapp/data/peninputserver.rss Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputserverapp/data/peninputserver.rss Fri Oct 22 15:38:27 2010 +0100 @@ -26,11 +26,17 @@ #include #include +#include +#include +#include "peninputcommonlayout.rh" +#include + #ifdef RD_SCALABLE_UI #include #endif #include +#define AKN_SERVER_BMP "z:\\resource\\apps\\peninputserver.mbm" // CONSTANTS @@ -56,6 +62,45 @@ caption = "peninputserver"; }; } + +RESOURCE TBUF r_peninput_server_finger_spell {buf = qtn_t9_match_selection_list;} + +RESOURCE AKN_FEP_SCROLLABLE_LIST_IMAGE r_peninput_server_candidate_list + { + bmpfile = AKN_SERVER_BMP; + imgmajorskinid = EAknsMajorGeneric; + pageup = r_peninput_server_candidate_list_pageup; + pagedown = r_peninput_server_candidate_list_pagedown; + listsep = EMbmPeninputserverQgn_graf_line_primary_horizontal_dashed; + listsepmsk = EMbmPeninputserverQgn_graf_line_primary_horizontal_dashed_mask; + listspeskinid = EAknsMinorGenericQgnGrafLinePrimaryHorizontalDashed; + } + +RESOURCE AKN_FEP_COMMON_BUTTON_IMAGE r_peninput_server_candidate_list_pageup + { + bmpfile = AKN_SERVER_BMP; + imgmajorskinid = EAknsMajorGeneric; + + forground = EMbmPeninputserverQgn_indi_itut_cursor_up; + forgroundmsk = EMbmPeninputserverQgn_indi_itut_cursor_up_mask; + forgroundskinid = EAknsMinorGenericQgnIndiItutCursorUp; + } + +RESOURCE AKN_FEP_COMMON_BUTTON_IMAGE r_peninput_server_candidate_list_pagedown + { + bmpfile = AKN_SERVER_BMP; + imgmajorskinid = EAknsMajorGeneric; + + forground = EMbmPeninputserverQgn_indi_itut_cursor_down; + forgroundmsk = EMbmPeninputserverQgn_indi_itut_cursor_down_mask; + forgroundskinid = EAknsMinorGenericQgnIndiItutCursorDown; + } + +RESOURCE TBUF r_peninput_server_candidate_list_page_num + { + buf = "%0N/%1N"; + } + #endif diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/iconlist.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/src/peninputserverapp/iconlist.txt Fri Oct 22 15:38:27 2010 +0100 @@ -0,0 +1,3 @@ +-c8,8 qgn_indi_itut_cursor_up.svg +-c8,8 qgn_indi_itut_cursor_down.svg +-c8,8 qgn_graf_line_primary_horizontal_dashed.svg \ No newline at end of file diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp --- a/textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -503,21 +503,4 @@ AddAnimCommand(cmd); return ETrue; } - -// --------------------------------------------------------------------------- -// CPeninputAnimObj::UpdatePointerEventSuppressor() -// Update parameters of pointer event suppressor. -// --------------------------------------------------------------------------- -// -void CPeninputAnimObj::UpdatePointerEventSuppressor( - const TPointerEventSuppressorParameters& aParameters ) - { - TAnimUpdatePointerEventSuppressorCmd* cmd = - new TAnimUpdatePointerEventSuppressorCmd( iAnim, aParameters ); - - if ( cmd != NULL ) - { - AddAnimCommand( cmd ); - } - } //end of file diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/peninputanimcommand.cpp --- a/textinput/peninputarc/src/peninputserverapp/peninputanimcommand.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputserverapp/peninputanimcommand.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -362,17 +362,3 @@ iAnim.SetDiscreeptPop(iArea); return ETrue; } - -TAnimUpdatePointerEventSuppressorCmd::TAnimUpdatePointerEventSuppressorCmd( - RPeninputAnim& aAnim, const TPointerEventSuppressorParameters& aParameters ) - : TAnimCmd( aAnim ), iParameters( aParameters ) - { - - } - -TBool TAnimUpdatePointerEventSuppressorCmd::ExecuteAnimCommand() const - { - iAnim.UpdatePointerEventSuppressor( iParameters ); - return ETrue; - } - diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/peninputserver.cpp --- a/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -45,15 +45,20 @@ #include #include #include +#include #include "peninputcrpclient.h" #include +#include "penuicandidatewnd.h" +#include "penuiwndeventobserver.h" +#include "penuiwndeventhandler.h" //#define __WND_TEST_ // CONSTANTS const TSize KInitialPeninputSize= TSize( 10, 10 ); const TInt KMsgQueueLen = 1000; const TInt KMsgResponseQueueLen = 10; +const TInt KLiftupPriority = 10; const TInt KWsSessionFlushPerioid = 50000;//50ms const TInt KInvalidValue = -1; @@ -218,8 +223,8 @@ void CPeninputServer::ConstructL( ) { #ifdef RD_TACTILE_FEEDBACK - FeatureManager::InitializeLibL(); - iSupportFeedback = FeatureManager::FeatureSupported( KFeatureIdTactileFeedback ); + FeatureManager::InitializeLibL(); + iSupportFeedback = FeatureManager::FeatureSupported( KFeatureIdTactileFeedback ); #endif //RD_TACTILE_FEEDBACK @@ -242,24 +247,26 @@ iHardwareLayoutChangeWatcher->StartWatching(); iSoftwareLayoutChangeWatcher->StartWatching(); - RWindowGroup& rootWin = CCoeEnv::Static()->RootWin(); - rootWin.EnableFocusChangeEvents (); // For cover UI/status pane refresh problems - rootWin.EnableGroupListChangeEvents(); - rootWin.EnableReceiptOfFocus(EFalse); - rootWin.AutoForeground(EFalse); + RWindowGroup& rootWin = CCoeEnv::Static()->RootWin(); + rootWin.EnableFocusChangeEvents (); // For cover UI/status pane refresh problems + rootWin.EnableGroupListChangeEvents(); + rootWin.EnableReceiptOfFocus(EFalse); + rootWin.AutoForeground(EFalse); ConstructSpriteL(); //create animation object - iAnimObj = CPeninputAnimObj::NewL(iSpriteMember); - - iLayoutOwner = CPeninputUiLayoutOwner::NewL( *this ); - iPenUiCtrl = new(ELeave) CPenUiWndCtrl(CCoeEnv::Static()->RootWin(),iSpriteMember.iBitmap); - iInternalBackgroundCtrl = new(ELeave) CInternalBkCtrl(CCoeEnv::Static()->RootWin()); - iInternalBackgroundCtrl->ConstructL(); - iPenUiCtrl->ConstructL(); - - iCurScreenFocusedWndGrpId = GetFocusAppUid().iUid; + iAnimObj = CPeninputAnimObj::NewL(iSpriteMember); + + iLayoutOwner = CPeninputUiLayoutOwner::NewL( *this ); + iPenUiCtrl = new(ELeave) CPenUiWndCtrl(CCoeEnv::Static()->RootWin(),iSpriteMember.iBitmap); + iInternalBackgroundCtrl = new(ELeave) CInternalBkCtrl(CCoeEnv::Static()->RootWin()); + iInternalBackgroundCtrl->ConstructL(); + iPenUiCtrl->ConstructL(); + iObserver = CPenUiWndEventHandler::NewL( this ); + iCandidateWnd = CPenUiCandidateWnd::NewL( iObserver ); + + iCurScreenFocusedWndGrpId = GetFocusAppUid().iUid; #ifdef __LOG_WNDGROU__ iLogFile.Replace(CCoeEnv::Static()->FsSession(),KLogFile,EFileShareAny|EFileWrite); iLogFile.Close(); @@ -342,6 +349,8 @@ #endif // RD_TACTILE_FEEDBACK delete iPenUiCtrl; delete iInternalBackgroundCtrl; + delete iCandidateWnd; + delete iObserver; iClientProcess.Close(); iClientLayouts.Close(); @@ -783,7 +792,10 @@ RecoverButtonEventState(); iUiLayout->OnDeActivate(); if(iUseWindowCtrl) - iPenUiCtrl->OnDeactivate(); //disable non fading + { + iPenUiCtrl->OnDeactivate(); //disable non fading + iCandidateWnd->HideCandidateList(); + } } return ETrue; @@ -840,7 +852,10 @@ iForegroundUiHandler->AddDelayedCmd(); if (iUseWindowCtrl) + { iPenUiCtrl->ClosePenUi(aRotation); + iCandidateWnd->HideCandidateList(); + } //save current screen mode iCurScrMode = CCoeEnv::Static()->ScreenDevice()->CurrentScreenMode(); @@ -863,17 +878,7 @@ //message requests UI attribute is always handled. switch(aMessage.Function()) { - case EPeninputRequestEnableGfxTransEffect: - { - if( iUseWindowCtrl && iPenUiCtrl ) - { - TBool enable = EFalse; - TPckg msg( enable ); - aMessage.ReadL( 0,msg ); - iPenUiCtrl->EnableGfxTransEffect( enable ); - } - } - break; + case EPeninputRequestUiIsVisible: { TPckg msg(iActive); @@ -2025,9 +2030,34 @@ iIsLayoutReDrawAllowWhenActive = *retVal; } break; - case ESignalUpdatePointerSuppressor: - { - UpdatePointerEventSuppressor( aEventData ); + case ESignalShowServerCandidate: + { + if ( iUseWindowCtrl ) + { + // Lift the priority of candidate list window to higher + // than pen ui wnd. + TInt priority = iPenUiCtrl->WndPriority(); + iCandidateWnd->SetPriority( priority + KLiftupPriority ); + + TUint16* buf = const_cast( aEventData.Ptr() ); + TPeninputCandidateData* cmd = + reinterpret_cast< TPeninputCandidateData* >( buf ); + iCandidateWnd->SetAlign( + CGraphicsContext::TTextAlign ( cmd->iAlign ) ); + iCandidateWnd->SetInitRect( cmd->iInitRect ); + iCandidateWnd->EnableSpell( cmd->iSpellEnabled ); + iCandidateWnd->EnableTextWidth( cmd->iTextWidthEnabled ); + TRAP_IGNORE( iCandidateWnd->ShowCandidateListL( + cmd->iItemArray, cmd->iActiveIndex ) ); + } + } + break; + case ESignalHideServerCandidate: + { + if ( iUseWindowCtrl ) + { + iCandidateWnd->HideCandidateList(); + } } break; default: @@ -2140,6 +2170,9 @@ { // Update the cursor color when resource is changed iPenUiCtrl->SetCursorColor(); + + // Update candidate window when resource is changed + iCandidateWnd->HandleResourceChange( aType ); #ifdef FIX_FOR_NGA // iEnablePriorityChangeOnOriChange will be set to be EFalse, if some dialog in FEP end were opened and @@ -2491,9 +2524,14 @@ { SignalOwner( ESignalLayoutClosed, KNullDesC ); } - - TBool handled = iUiLayout ? iUiLayout->HandleEventL(ERawEvent,&aEvent) - : EFalse; + + // Candidate window handles raw event firstly. + TBool handled = iCandidateWnd->HandleRawEventL( &aEvent ); + if( !handled ) + { + handled = iUiLayout ? iUiLayout->HandleEventL( ERawEvent,&aEvent ) + : EFalse; + } if (TRawEvent::EButton1Down == aEvent.Type()) { @@ -3045,21 +3083,6 @@ iDiscreetPopArea = iAknUiSrv.GetInUseGlobalDiscreetPopupRect(); iAnimObj->SetDiscreetPopArea(iDiscreetPopArea); } - -// --------------------------------------------------------------------------- -// CPeninputServer::UpdatePointerEventSuppressor() -// Update parameters of pointer event suppressor. -// --------------------------------------------------------------------------- -// -void CPeninputServer::UpdatePointerEventSuppressor( const TDesC& aData ) - { - TUint16* buf = const_cast( aData.Ptr() ); - TPointerEventSuppressorParameters* parameters = - reinterpret_cast ( buf ); - - iAnimObj->UpdatePointerEventSuppressor( *parameters ); - } - // ======== class CEventQueue======== // // --------------------------------------------------------------------------- diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/peninputserver.mmp --- a/textinput/peninputarc/src/peninputserverapp/peninputserver.mmp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputserverapp/peninputserver.mmp Fri Oct 22 15:38:27 2010 +0100 @@ -43,6 +43,8 @@ SOURCE penuiwndctrl.cpp SOURCE keyrotator.cpp SOURCE peninputcrpclient.cpp +SOURCE penuicandidatewnd.cpp +SOURCE penuiwndeventhandler.cpp USERINCLUDE . ../../inc/pensrvcliinc @@ -63,6 +65,7 @@ LIBRARY gdi.lib LIBRARY peninputlayouteng.lib LIBRARY centralrepository.lib +LIBRARY CommonEngine.lib LIBRARY apparc.lib LIBRARY cone.lib diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/peninputserversession.cpp --- a/textinput/peninputarc/src/peninputserverapp/peninputserversession.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputserverapp/peninputserversession.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -320,7 +320,6 @@ case EPeninputRequestSupportInputMode: case EPeninputRequestSetInputLanguage: case EPeninputEnablePriorityChangeOnOriChange: - case EPeninputRequestEnableGfxTransEffect: ret = iPenInputSvr.HandleMessageL(aMessage); break; case EPeninputRequestUpdateAppInfo: diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/penuicandidatewnd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/src/peninputserverapp/penuicandidatewnd.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -0,0 +1,1452 @@ +/* +* Copyright (c) 2008-2008 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 for button base and dragbar +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "aknfeppeninputenums.h" +#include "penuicandidatewnd.h" +#include "penuiwndeventobserver.h" + +/** + * The capture type of pointing on canidate list. + */ +enum TCandWndCaptureType + { + ECandWndCapNone, + ECandWndCapItem, + ECandWndCapPageUp, + ECandWndCapPageDown, + ECandWndCapOther, + ECandWndCapOut + }; + +const TInt KInvalidBmp = -1 ; +const TInt KInvalidColorGroup = -1; + +const TInt KOnePageItemCount = 4; +const TInt KTextRectMargin = 4; +const TInt KDisplayTextLen = KMaxItemTextLength + KAknBidiExtraSpacePerLine; + +const TInt KPaneHorMarginCount = 2; +const TInt KTotalHorMarginCount = 4; + +const TInt KTransparency[256] = + { + 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, + 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, + 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 19, + 19, 19, 20, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 24, 24, + 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 29, + 30, 30, 30, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, + 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 40, 40, 40, + 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 46, + 46, 46, 47, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 50, 51, 51, + 51, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 56, + 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, + 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67, + 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 73, + 73, 73, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77 + }; + +const TInt KServerBufferSize = 8; + +const TSize KInnerRectOffset = TSize( 4, 4 ); +const TSize KHighlightInnerRectOffset = TSize( 7, 7 ); +const TSize KPageButtonInnerRectOffset = TSize( 10, 10 ); + +const TInt KSeparatorLineHeight = 2; +const TInt KSeparatorLineYOffset = -4; + +const TInt KLafLandscapeCandidateIndex = 3; +const TInt KLafPortraitCandidateIndex = 2; + +const TInt KHalfNumber = 2; +const TInt KItemSelIntSize = 2; +const TInt KPageInfoIntSize = 2; + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CPenUiCandidateWnd* CPenUiCandidateWnd::NewL( MPenUiWndEventObserver* aObserver ) + { + CPenUiCandidateWnd* self = CPenUiCandidateWnd::NewLC( aObserver ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CPenUiCandidateWnd* CPenUiCandidateWnd::NewLC( MPenUiWndEventObserver* aObserver ) + { + CPenUiCandidateWnd* self = new (ELeave) CPenUiCandidateWnd( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CPenUiCandidateWnd::~CPenUiCandidateWnd() + { + iItemRects.Close(); + iItemList.ResetAndDestroy(); + + DeleteAllBitmaps(); + + delete iPageInfo; + } + +// --------------------------------------------------------------------------- +// Handle raw events of pen input. +// --------------------------------------------------------------------------- +// +TBool CPenUiCandidateWnd::HandleRawEventL( const TAny* aEventData ) + { + if( !IsVisible() && iPointerArea == ECandWndCapNone ) + { + return EFalse; + } + + TRawEvent event = *((TRawEvent*)aEventData); + switch( event.Type() ) + { + case TRawEvent::EPointerMove: + { + TPoint point = event.Pos() - PositionRelativeToScreen(); + HandlePointerMoveEvent( point ); + return ETrue; + } + case TRawEvent::EButton1Down: + { + TPoint point = event.Pos() - PositionRelativeToScreen(); + HandlePointerDownEvent( point ); + return ETrue; + } + case TRawEvent::EButton1Up: + { + HandlePointerUpEventL(); + return ETrue; + } + default: + break; + } + return EFalse; + } + +// -------------------------------------------------------------------------- +// Show candidate list +// -------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::ShowCandidateListL( const CDesCArray* aItemArray, + TInt /*aActiveIndex*/ ) + { + // Set the current item array. + SetItemArrayL( aItemArray ); + + // Set current page to the first page + iCurrentPage = 0; + + // Calculate total page + iTotalPages = ( iItemList.Count() + KOnePageItemCount - 1) / KOnePageItemCount; + + // Set the current page info text + GetPageInfoBufL(); + + // Clear focused item by default. + iFocusItem = KErrNotFound; + + // Capture all pointers from full screen. + SetCapturePointer( ETrue ); + + // Calculate the displaying rect. + ReCalcLayout(); + + if( !IsVisible() ) + { + MakeVisible( ETrue ); + } + + DrawDeferred(); + } + +// --------------------------------------------------------------------------- +// Hide candidate list. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::HideCandidateList() + { + if ( IsVisible()) + { + MakeVisible( EFalse ); + SetCapturePointer( EFalse ); + } + } + +// --------------------------------------------------------------------------- +// Handles a change to the control's resources. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::HandleResourceChange( TInt aType ) + { + CCoeControl::HandleResourceChange( aType ); + HideCandidateList(); + switch ( aType ) + { + case KEikDynamicLayoutVariantSwitch: + { + ReadLafInfo(); + } + break; + case KAknsMessageSkinChange: + { + TRAP_IGNORE( HandleSkinChangeL() ); + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that might leave. +// --------------------------------------------------------------------------- +// +CPenUiCandidateWnd::CPenUiCandidateWnd( MPenUiWndEventObserver* aObserver ) + : iNaviBtnShown( ETrue ), + iObserver( aObserver ) + { + } + +// --------------------------------------------------------------------------- +// 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::ConstructL() + { + CreateWindowL(); + + SetImgFrId( KAknsIIDQsnFrPopupSub, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive, + KAknsIIDQsnFrList ); + + ConstructFromResourceL(); + + ReadLafInfo(); + + SetBitmapSize(); + + CreateDimmedMaskL( iPageUpDimBmpMask, iPageUpBmpMask ); + CreateDimmedMaskL( iPageDownDimBmpMask, iPageDownBmpMask ); + + ActivateL(); + + MakeVisible( EFalse ); + } + +// --------------------------------------------------------------------------- +// Set all kinds of frame ids. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::SetImgFrId( TAknsItemID aBgFrId, + TAknsItemID aNaviFrId, + TAknsItemID aNaviActiveFrId, + TAknsItemID aNaviDimFrId, + TAknsItemID aItemActiveFrId ) + { + iBgFrId = aBgFrId; + iItemActiveFrId = aItemActiveFrId; + + // Page button + iNaviFrId = aNaviFrId; + iNaviActiveFrId = aNaviActiveFrId; + iNaviDimFrId = aNaviDimFrId; + } + +// --------------------------------------------------------------------------- +// Construct candidate list from resource. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::ConstructFromResourceL() + { + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, + R_PENINPUT_SERVER_CANDIDATE_LIST ); + + // Get bitmap file name + TPtrC bmpFileName = reader.ReadTPtrC(); + + // Get major skin id + TInt imgMajorSkinId = reader.ReadInt32(); + + // Get up arrow bitmap resource id + TInt32 pageUpId = reader.ReadInt32(); + + // Get down arrow bitmap resource id + TInt32 pageDownId = reader.ReadInt32(); + + // Get seperation line bitmap id and mask id + const TInt16 bmpId = reader.ReadInt16(); + const TInt16 bmpMskId = reader.ReadInt16(); + + // Get seperation line skin item id + TAknsItemID id; + const TInt skinitemid = reader.ReadInt16(); + id.Set(TInt(imgMajorSkinId), skinitemid); + + // Get seperation line bitmap and mask bitmap + if (bmpId != KInvalidBmp) + { + if (bmpMskId != KInvalidBmp) + { + AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(), + id, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG30, + iSeperationBmp, + iSeperationMaskBmp, + bmpFileName, + bmpId, + bmpMskId, + AKN_LAF_COLOR( 0 ) ); + } + else + { + AknsUtils::CreateIconL( AknsUtils::SkinInstance(), + id, + iSeperationBmp, + bmpFileName, + bmpId ); + } + } + + CleanupStack::PopAndDestroy(); // reader + + // Construct page up button from resource + TResourceReader pageUpReader; + CCoeEnv::Static()->CreateResourceReaderLC( pageUpReader, pageUpId ); + ConstructPageInfoFromResourceL ( pageUpReader, ETrue ); + CleanupStack::PopAndDestroy(); // pageUpReader + + // Construct page down button from resource + TResourceReader pageDownReader; + CCoeEnv::Static()->CreateResourceReaderLC( pageDownReader, pageDownId ); + ConstructPageInfoFromResourceL( pageDownReader, EFalse ); + CleanupStack::PopAndDestroy(); // pageDownReader + } + +// ----------------------------------------------------------------------------- +// Construct up / down arrow buttons from resource. +// ----------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::ConstructPageInfoFromResourceL( TResourceReader& aReader, + TBool aUpDown ) + { + // Get bimap file name of arrow buttons + TPtrC bmpFileName = aReader.ReadTPtrC(); + + // Get major skin id + TInt imgMajorSkinId = aReader.ReadInt32(); + + // Get color index + TInt colorIndex = aReader.ReadInt16(); + + // Get the image ids and mask ids from resource + TInt bmpId = aReader.ReadInt16(); + TInt bmpMskId = aReader.ReadInt16(); + + // Get skin item id + const TInt skinitemid = aReader.ReadInt16(); + TAknsItemID id; + id.Set( imgMajorSkinId, skinitemid ); + + // Get bitmaps + CFbsBitmap* forgroundBmp = NULL; + CFbsBitmap* forgroundBmpMask = NULL; + if ( bmpId != KInvalidBmp ) + { + if (bmpMskId != KInvalidBmp) + { + if( colorIndex == KInvalidColorGroup ) + { + AknsUtils::CreateIconL( AknsUtils::SkinInstance(), + id, + forgroundBmp, + forgroundBmpMask, + bmpFileName, + bmpId, + bmpMskId ); + } + else + { + AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(), + id, + KAknsIIDQsnIconColors, + colorIndex, + forgroundBmp, + forgroundBmpMask, + bmpFileName, + bmpId, + bmpMskId, + AKN_LAF_COLOR( 0 ) ); + } + } + else + { + AknsUtils::CreateIconL( AknsUtils::SkinInstance(), + id, + forgroundBmp, + bmpFileName, + bmpId ); + } + } + + if ( aUpDown ) + { + iPageUpBmp = forgroundBmp; + iPageUpBmpMask = forgroundBmpMask; + } + else + { + iPageDownBmp = forgroundBmp; + iPageDownBmpMask = forgroundBmpMask; + } + } + +// --------------------------------------------------------------------------- +// Read LAF data for candidate list +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::ReadLafInfo() + { + // Screen + TRect rect, rectcn; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, rect); + TBool isLandScape = rect.Size().iWidth < rect.Size().iHeight ? EFalse : ETrue; + + TAknWindowLineLayout appWnd; + appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine(); + + TAknWindowLineLayout parentWnd; + TAknWindowLineLayout candidateList; + TAknWindowLineLayout listpane; + TAknWindowLineLayout scrollpane; + if (isLandScape) + { + parentWnd = AknLayoutScalable_Apps::popup_vitu2_window(1).LayoutLine(); + candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window + ( KLafLandscapeCandidateIndex ) + .LayoutLine(); + listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane(1).LayoutLine(); + scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane(1).LayoutLine(); + } + else + { + parentWnd = AknLayoutScalable_Apps::popup_vitu2_window(0).LayoutLine(); + candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window + ( KLafPortraitCandidateIndex ) + .LayoutLine(); + listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane(0).LayoutLine(); + scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane(0).LayoutLine(); + } + + TAknLayoutRect parentRectLayout; + parentRectLayout.LayoutRect( appWnd.Rect(), parentWnd ); + TRect parentRect = parentRectLayout.Rect(); + + // candidate list + TAknLayoutRect candidateListRect; + candidateListRect.LayoutRect( parentRect, candidateList ); + + // list pane, its parent is candidate list + TAknLayoutRect listpaneRect; + listpaneRect.LayoutRect( candidateListRect.Rect(), listpane ); + + // scroll pane, its parent is candidate list + TAknLayoutRect scrollRect; + scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane ); + + // Item pane, its parent is list pane + TAknWindowLineLayout itemPane + = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane( 0, 0, 0 ) + .LayoutLine(); + TAknLayoutRect itemPaneRect; + itemPaneRect.LayoutRect( listpaneRect.Rect(), itemPane ); + + iLafData.iHorMargin = listpaneRect.Rect().iTl.iX; + iLafData.iVerMargin = listpaneRect.Rect().iTl.iY; + iLafData.iItemSize = itemPaneRect.Rect().Size(); + + // Up button image. its parent is scroll pane + TAknWindowLineLayout arrowUpImagePane + = AknLayoutScalable_Apps::vitu2_page_scroll_pane_g1() + .LayoutLine(); + TAknLayoutRect arrowUpImageRect; + arrowUpImageRect.LayoutRect( scrollRect.Rect(), arrowUpImagePane ); + // Up button, its parent is scroll pane + TAknWindowLineLayout arrowUpPane + = AknLayoutScalable_Apps::bg_button_pane_cp023().LayoutLine(); + TAknLayoutRect arrowUpRect; + arrowUpRect.LayoutRect( scrollRect.Rect(), arrowUpPane ); + + // Down button image, its parent is scroll pane + TAknWindowLineLayout arrowDownImagePane + = AknLayoutScalable_Apps::vitu2_page_scroll_pane_g2().LayoutLine(); + TAknLayoutRect arrowDownImageRect; + arrowDownImageRect.LayoutRect( scrollRect.Rect(), arrowDownImagePane ); + + // Down button, its parent is scroll pane + TAknWindowLineLayout arrowDownPane + = AknLayoutScalable_Apps::bg_button_pane_cp024().LayoutLine(); + TAknLayoutRect arrowDownRect; + arrowDownRect.LayoutRect( scrollRect.Rect(), arrowDownPane ); + + iLafData.iNaviSize = arrowUpRect.Rect().Size(); + iLafData.iNaviInnerSize = arrowUpImageRect.Rect().Size(); + iLafData.iTextLine + = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane_t1() + .LayoutLine(); + iLafData.iPageTextLine + = AknLayoutScalable_Apps::vitu2_page_scroll_pane_t1() + .LayoutLine(); + + TAknLayoutText list_item_pane_t1_layout_text; + list_item_pane_t1_layout_text.LayoutText( itemPaneRect.Rect(), + iLafData.iTextLine ); + iLafData.iFont = list_item_pane_t1_layout_text.Font(); + } + +// --------------------------------------------------------------------------- +// Set size for bitmaps +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::SetBitmapSize() + { + if ( iPageUpBmp ) + { + AknIconUtils::SetSize( iPageUpBmp, + iLafData.iNaviSize, + EAspectRatioNotPreserved ); + } + + if ( iPageUpBmpMask ) + { + AknIconUtils::SetSize( iPageUpBmpMask, + iLafData.iNaviSize, + EAspectRatioNotPreserved ); + } + + if ( iPageDownBmp ) + { + AknIconUtils::SetSize( iPageDownBmp, + iLafData.iNaviSize, + EAspectRatioNotPreserved ); + } + + if ( iPageDownBmpMask ) + { + AknIconUtils::SetSize( iPageDownBmpMask, + iLafData.iNaviSize, + EAspectRatioNotPreserved ); + } + + if ( iPageUpDimBmpMask ) + { + AknIconUtils::SetSize( iPageUpDimBmpMask, + iLafData.iNaviSize, + EAspectRatioNotPreserved ); + } + + if ( iPageDownDimBmpMask ) + { + AknIconUtils::SetSize( iPageDownBmpMask, + iLafData.iNaviSize, + EAspectRatioNotPreserved ); + } + } + +// --------------------------------------------------------------------------- +// Create mask bitmap for dimmed icons +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::CreateDimmedMaskL( CFbsBitmap*& aDimmedMask, + const CFbsBitmap* aMask ) + { + if (aMask && aMask->DisplayMode() == EGray256 ) + { + if( NULL != aDimmedMask ) + { + delete aDimmedMask; + aDimmedMask = NULL; + } + + aDimmedMask = new (ELeave) CFbsBitmap; + User::LeaveIfError( aDimmedMask->Create( aMask->SizeInPixels(), EGray256 ) ); + CleanupStack::PushL( aDimmedMask ); + CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL( aDimmedMask ); + CleanupStack::PushL( bitmapDevice ); + CFbsBitGc* bitGc( NULL ); + User::LeaveIfError( bitmapDevice->CreateContext( bitGc ) ); + CleanupStack::PushL( bitGc ); + bitGc->SetPenStyle( CGraphicsContext::ESolidPen ); + bitGc->BitBlt( TPoint( 0, 0 ), aMask ); + aDimmedMask->LockHeap(); + TInt w = aMask->SizeInPixels().iWidth; + TInt h = aMask->SizeInPixels().iHeight; + TInt dataStride = aMask->DataStride() - w; + unsigned char* address = (unsigned char *)aDimmedMask->DataAddress(); + for ( TInt i = 0; i < h; ++i ) + { + for ( TInt j = 0; j < w; ++j ) + { + *address = KTransparency[ *address ]; + ++address; + } + address += dataStride; + } + aDimmedMask->UnlockHeap(); + CleanupStack::PopAndDestroy( bitGc ); // bitGc + CleanupStack::PopAndDestroy( bitmapDevice ); // bitmapDevice + CleanupStack::Pop( aDimmedMask ); // aDimmedMask + } + } + +// -------------------------------------------------------------------------- +// Capture all poninters of full screen when candidate list is opened. +// -------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::SetCapturePointer( TBool aFlag ) + { + if ( iObserver ) + { + TBuf buf; + buf.Append( ( const TUint16* )( &aFlag ), sizeof( TBool ) / sizeof( TUint16 ) ); + buf.Append( ( const TUint16* )( this ), sizeof( TInt ) / sizeof( TUint16 ) ); + iObserver->SignalOwner( ESignalCapturePointer, buf ); + } + } + +// --------------------------------------------------------------------------- +// Get page info and transfer it to descritor. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::GetPageInfoBufL() + { + if( NULL != iPageInfo ) + { + delete iPageInfo; + iPageInfo = NULL; + } + CArrayFix* pageNumbers = + new ( ELeave ) CArrayFixFlat( KPageInfoIntSize ); + CleanupStack::PushL( pageNumbers ); + pageNumbers->AppendL( iCurrentPage + 1 ); + pageNumbers->AppendL( iTotalPages ); + iPageInfo = StringLoader::LoadL( R_PENINPUT_SERVER_CANDIDATE_LIST_PAGE_NUM, + *pageNumbers ); + CleanupStack::PopAndDestroy( pageNumbers ); // pageNumbers + } + +// --------------------------------------------------------------------------- +// Set the text item array to candidate list. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::SetItemArrayL( const CDesCArray* aItemArray ) + { + if ( aItemArray ) + { + iItemList.ResetAndDestroy(); + for ( TInt i = 0; i < aItemArray->Count(); i++ ) + { + CPenUiCandidateWnd::TPenUiCandidateItem* item + = new (ELeave) CPenUiCandidateWnd::TPenUiCandidateItem; + item->iCommand = ECandItemCmdItemSelected; + if ( (*aItemArray)[i].Length() <= item->iText.MaxLength() ) + { + item->iText.Copy( (*aItemArray)[i] ); + } + else + { + // Given longer than maxlength, display the part of less than max + item->iText.Copy( (*aItemArray)[i].Left( item->iText.MaxLength() ) ); + } + CleanupStack::PushL(item); + iItemList.AppendL( item ); + CleanupStack::Pop( item ); // item + } + AddSpellItemL(); + } + } + +// --------------------------------------------------------------------------- +// Add spell item +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::AddSpellItemL() + { + if( iSpellEnabled && iItemList.Count() != 0 ) + { + HBufC* spellText = StringLoader::LoadLC( R_PENINPUT_SERVER_FINGER_SPELL ); + CPenUiCandidateWnd::TPenUiCandidateItem* item + = new (ELeave) CPenUiCandidateWnd::TPenUiCandidateItem; + item->iCommand = ECandItemCmdEnterSpellMode; + item->iText.Copy( *spellText ); + CleanupStack::PushL( item ); + iItemList.AppendL( item ); + CleanupStack::Pop( item ); // item + CleanupStack::PopAndDestroy( spellText ); // spellText + } + } + +// --------------------------------------------------------------------------- +// Calculate the displaying rect of candidate. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::ReCalcLayout() + { + // Dynamically adjust width + TInt width = WidthToFitText(); + + // Calculate the height of candidate + TInt height = ( KOnePageItemCount + 1 ) * iLafData.iVerMargin + + KOnePageItemCount * iLafData.iItemSize.iHeight; + + // Calulate the rect of candidate + TRect rtCtrl( iInitRect.iTl, TSize( width, height ) ); + rtCtrl = RectToFitScreen( rtCtrl ); + + SetRect( rtCtrl ); + } + +// --------------------------------------------------------------------------- +// Return the dynamical width for displaying text. +// --------------------------------------------------------------------------- +// +TInt CPenUiCandidateWnd::WidthToFitText() + { + if ( iLafData.iFont ) + { + // Calculate the maximum of width among all text to be shown + iItemWidth = iTextWidthEnabled ? iLafData.iItemSize.iWidth : 0; + const CFont* font = iLafData.iFont; + CFont::TMeasureTextInput::TFlags flg + = CFont::TMeasureTextInput::EFVisualOrder; + if( iAlign == CGraphicsContext::ERight ) + { + flg = CFont::TMeasureTextInput::EFVisualOrderRightToLeft; + } + for( TInt i = 0; i < iItemList.Count(); ++i ) + { + TInt itemWidth = AknBidiTextUtils::MeasureTextBoundsWidth( + *font, iItemList[i]->iText, flg ); + if(itemWidth > iItemWidth) + { + iItemWidth = itemWidth; + } + } + } + + // Make sure the total width ( text item + navi width + all horiezental margin ) + // not to be larger than the screen width. + TInt naviWidth = iNaviBtnShown ? iLafData.iNaviSize.iWidth : 0; + TInt totalHorMargin = KTotalHorMarginCount * iLafData.iHorMargin; + TInt totalWidth = iItemWidth + totalHorMargin + naviWidth; + TPixelsTwipsAndRotation ptScreenSize; + CCoeEnv::Static()->ScreenDevice()-> + GetDefaultScreenSizeAndRotation( ptScreenSize ); + if( totalWidth > ptScreenSize.iPixelSize.iWidth ) + { + iItemWidth = ptScreenSize.iPixelSize.iWidth - naviWidth - totalHorMargin; + totalWidth = iItemWidth + totalHorMargin + naviWidth; + } + return totalWidth; + } + +// --------------------------------------------------------------------------- +// Return the rect to fit the screen size. +// --------------------------------------------------------------------------- +// +TRect CPenUiCandidateWnd::RectToFitScreen( const TRect& aRect ) + { + TPixelsTwipsAndRotation ptScreenSize; + CCoeEnv::Static()->ScreenDevice()-> + GetDefaultScreenSizeAndRotation( ptScreenSize) ; + TRect rtScreen ( TPoint( 0, 0 ), ptScreenSize.iPixelSize ); + if( aRect.Width() > rtScreen.Width() || aRect.Height() > rtScreen.Height() ) + { + // If aRect is larger than the screen area, it is no need to adjust. + return aRect; + } + + TRect rect = aRect; + if( rect.iBr.iY > rtScreen.iBr.iY ) + { + // There is no enough space below the underline word. + // If there is no enough space at the right and enough space + // at the left, candidate list pops up on the left. + // Otherwise, candidate list pops up on the right. + TInt verOffset = rtScreen.iBr.iY - rect.iBr.iY; + if ( ( iInitRect.iBr.iX + rect.Width() > rtScreen.iBr.iX ) + && ( rect.iTl.iX - rect.Width() > rtScreen.iTl.iX ) ) + { + rect.Move( -rect.Width(), verOffset ); + } + else + { + rect.Move( iInitRect.iBr.iX - rect.iTl.iX, verOffset ); + } + } + if( rect.iBr.iX > rtScreen.iBr.iX ) + { + rect.Move( rtScreen.iBr.iX - rect.iBr.iX , 0 ); + } + if( rect.iTl.iX < rtScreen.iTl.iX ) + { + rect.Move( rtScreen.iTl.iX - rect.iTl.iX , 0 ); + } + if( rect.iTl.iY < rtScreen.iTl.iY ) + { + rect.Move( 0, rtScreen.iTl.iY - rect.iTl.iY ); + } + return rect; + } + +// --------------------------------------------------------------------------- +// Draw each item. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::DrawItem( CWindowGc* aGc, TInt aIndex ) const + { + if ( aIndex < 0 || aIndex >= iItemRects.Count() ) + { + return; + } + + const CFont* font = iLafData.iFont; + if ( !font ) + { + return; + } + + TInt itemIndex = aIndex + iCurrentPage * iItemRects.Count(); + if( itemIndex >= iItemList.Count() ) + { + return; + } + + // Get text rect + TRect textRect = iItemRects[ aIndex ]; + textRect.SetWidth( iItemWidth ); + textRect.Move( iLafData.iHorMargin, 0 ); + + // Draw seperation + if ( ( itemIndex == iItemList.Count() - 1) && iSpellEnabled ) + { + // Calculate seperation bmp rect + TPoint separatorTl = textRect.iTl; + separatorTl.iY += KSeparatorLineYOffset; + + // Draw bitmap + if( iSeperationBmp ) + { + TRect srcRect( TPoint( 0, 0 ), iSeperationBmp->SizeInPixels() ); + if( iSeperationMaskBmp ) + { + aGc->BitBltMasked( separatorTl, + iSeperationBmp, + srcRect, + iSeperationMaskBmp, + ETrue ); + } + else + { + aGc->BitBlt( separatorTl, + iSeperationBmp, + srcRect ); + } + } + } + + TAknsQsnTextColorsIndex clrIndex; + clrIndex = ( itemIndex == iFocusItem ) ? EAknsCIQsnTextColorsCG10 + : EAknsCIQsnTextColorsCG20; + TRgb color = KRgbBlack; + if (AknsUtils::AvkonSkinEnabled()) + { + AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), + color, + KAknsIIDQsnTextColors, + clrIndex ); + } + + TBuf buf; + if ( iAlign == CGraphicsContext::ERight ) + { + AknBidiTextUtils::ConvertToVisualAndClip( iItemList[itemIndex]->iText, + buf, + *font, + textRect.Width(), + textRect.Width(), + AknBidiTextUtils::ERightToLeft ); + } + else + { + AknBidiTextUtils::ConvertToVisualAndClip( iItemList[itemIndex]->iText, + buf, + *font, + textRect.Width(), + textRect.Width()); + } + + if ( textRect.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'. + textRect.SetHeight( font->FontMaxHeight() + KTextRectMargin ); + } + + // Draw highlight item + if ( itemIndex == iFocusItem ) + { + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRect hightLightRect = iItemRects[ aIndex ]; + TRect innerHightlightRect = hightLightRect; + innerHightlightRect.Shrink( KHighlightInnerRectOffset ); + AknsDrawUtils::DrawFrame( skin, + *aGc, + hightLightRect, + innerHightlightRect, + iItemActiveFrId, + KAknsIIDDefault ); + } + + // Draw text + aGc->UseFont( font ); + aGc->SetPenColor( color ); + TInt baseLine = textRect.Height() / KHalfNumber + + font->AscentInPixels() / KHalfNumber; + aGc->DrawText( buf, textRect, baseLine, iAlign ); + aGc->DiscardFont(); + } + +// --------------------------------------------------------------------------- +// Draw page down / up arrow button. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::DrawPageButton( CWindowGc* aGc, TBool aUpDown ) const + { + TRect buttonRect; + CFbsBitmap* buttonBmp = NULL; + CFbsBitmap* buttonBmpMask = NULL; + CFbsBitmap* buttonDimBmpMask = NULL; + if ( aUpDown ) + { + buttonBmp = iPageUpBmp; + buttonBmpMask = iPageUpBmpMask; + buttonDimBmpMask = iPageUpDimBmpMask; + buttonRect = iPageUpRect; + } + else + { + buttonBmp = iPageDownBmp; + buttonBmpMask = iPageDownBmpMask; + buttonDimBmpMask = iPageDownDimBmpMask; + buttonRect = iPageDownRect; + } + + // Inner rect + TRect innerRect = buttonRect; + innerRect.Shrink( KPageButtonInnerRectOffset ); + + // Draw arrow buttons + CFbsBitmap* bmpMask = NULL; + if( iTotalPages == 1 ) + { + // Draw dim page buttons. + AknsDrawUtils::DrawFrame( AknsUtils::SkinInstance(), + *aGc, + buttonRect, + innerRect, + iNaviDimFrId, + KAknsIIDDefault ); + + bmpMask = buttonDimBmpMask; + } + else + { + // Draw normal state or pressed state + TBool isActive = ( aUpDown && iPointerArea == ECandWndCapPageUp ) + || ( !aUpDown && iPointerArea == ECandWndCapPageDown ); + TAknsItemID ImgID = isActive ? iNaviActiveFrId : iNaviFrId; + AknsDrawUtils::DrawFrame( AknsUtils::SkinInstance(), + *aGc, + buttonRect, + innerRect, + ImgID, + KAknsIIDDefault ); + + bmpMask = buttonBmpMask; + } + + // Draw forground + if( buttonBmp ) + { + TRect srcRect( TPoint( 0, 0 ), buttonBmp->SizeInPixels() ); + if( bmpMask ) + { + aGc->BitBltMasked( buttonRect.iTl, buttonBmp, srcRect, + bmpMask, EFalse ); + } + else + { + aGc->BitBlt( buttonRect.iTl, buttonBmp, srcRect ); + } + } + } + +// --------------------------------------------------------------------------- +// Draw page into text. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::DrawPageInfo( CWindowGc* aGc ) const + { + if ( iPageInfo->Length() == 0) + { + return; + } + + TRgb color( KRgbBlack ); // sane default for nonskinned case + TAknsQsnTextColorsIndex clrIndex; + clrIndex = EAknsCIQsnTextColorsCG20; + if ( AknsUtils::AvkonSkinEnabled() ) + { + AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), + color, + KAknsIIDQsnTextColors, + clrIndex ); + } + + TAknLayoutText textLayout; + textLayout.LayoutText( iScrollRect, iLafData.iPageTextLine ); + textLayout.DrawText( *aGc, iPageInfo->Des(), EFalse, color ); + } + +// --------------------------------------------------------------------------- +// Handle pointer down event. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::HandlePointerDownEvent( const TPoint& aPoint ) + { + if ( Rect().Contains( aPoint ) ) + { + CheckPointerEvent ( aPoint ); + } + else + { + iPointerArea = ECandWndCapOut; + + HideCandidateList(); + } + } + +// --------------------------------------------------------------------------- +// Handle pointer move event. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::HandlePointerMoveEvent(const TPoint& aPoint) + { + if( !IsVisible() || iPointerArea == ECandWndCapNone ) + { + return; + } + + if ( !Rect().Contains( aPoint ) ) + { + iPointerArea = ECandWndCapOut; + return; + } + + CheckPointerEvent ( aPoint ); + } + +// --------------------------------------------------------------------------- +// Handle pointer up event. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::HandlePointerUpEventL() + { + if( !IsVisible() ) + { + iPointerArea = ECandWndCapNone; + return; + } + + TBool needReDraw = EFalse ; + switch ( iPointerArea ) + { + case ECandWndCapItem: + { + if ( iFocusItem != KErrNotFound + && iFocusItem < iItemList.Count() ) + { + ReportItemSelectedEventL(); + HideCandidateList(); + } + } + break; + case ECandWndCapPageUp: + { + iCurrentPage = ( iCurrentPage == 0 ) ? iTotalPages + : iCurrentPage; + iCurrentPage --; + GetPageInfoBufL(); + + needReDraw = ETrue; + } + break; + case ECandWndCapPageDown: + { + iCurrentPage++; + iCurrentPage = ( iCurrentPage == iTotalPages ) ? 0 + : iCurrentPage; + GetPageInfoBufL(); + + needReDraw = ETrue; + } + break; + default: + break; + } + + iPointerArea = ECandWndCapNone; + if ( needReDraw ) + { + DrawDeferred(); + } + } + +// --------------------------------------------------------------------------- +// Check pointer area of pointer event. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::CheckPointerEvent( const TPoint& aPoint ) + { + if( iListRect.Contains( aPoint ) ) + { + TInt focus = ItemIndexByPoint( aPoint ); + if ( focus != KErrNotFound ) + { + iPointerArea = ECandWndCapItem; + + // Enter text item + if ( focus != iFocusItem ) + { + iFocusItem = focus; + DrawDeferred(); + } + } + else + { + iPointerArea = ECandWndCapOther; + } + } + else + { + if ( iTotalPages > 1 ) + { + if ( iPageUpRect.Contains( aPoint) ) + { + // Enter page up button + if ( iPointerArea != ECandWndCapPageUp ) + { + iPointerArea = ECandWndCapPageUp; + DrawDeferred(); + } + } + else if ( iPageDownRect.Contains( aPoint ) ) + { + // Enter page down button + if ( iPointerArea != ECandWndCapPageDown ) + { + iPointerArea = ECandWndCapPageDown; + DrawDeferred(); + } + } + else + { + iPointerArea = ECandWndCapOther; + } + } + else + { + iPointerArea = ECandWndCapOther; + } + } + } + +// --------------------------------------------------------------------------- +// Return the index of pointed text item. +// --------------------------------------------------------------------------- +// +TInt CPenUiCandidateWnd::ItemIndexByPoint( const TPoint& aPoint ) + { + TInt ret = KErrNotFound; + for ( TInt i = 0; i < iItemRects.Count(); i++ ) + { + if ( iItemRects[ i ].Contains( aPoint ) ) + { + ret = i + iCurrentPage * iItemRects.Count(); + if ( ret >= iItemList.Count() ) + { + ret = KErrNotFound; + } + break; + } + } + return ret; + } + +// --------------------------------------------------------------------------- +// Report item selected event to ui layout. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::ReportItemSelectedEventL() + { + if ( iObserver && iFocusItem != KErrNotFound + && iFocusItem < iItemList.Count() ) + { + // Report success select item + TInt command = iItemList[ iFocusItem ]->iCommand; + + HBufC8* buf8 = HBufC8::NewLC( KItemSelIntSize * sizeof( TInt ) ); + TPtr8 buf8Ptr = buf8->Des(); + + RDesWriteStream writeStream; + CleanupClosePushL(writeStream); + writeStream.Open( buf8Ptr ); + + writeStream.WriteInt32L( command ); + writeStream.WriteInt32L( iFocusItem ); + + writeStream.CommitL(); + CleanupStack::PopAndDestroy( &writeStream ); + iObserver->HandleCommand( ECmdPeninputSelectServerCandidate, + reinterpret_cast< TUint8* >( &buf8Ptr ) ); + + CleanupStack::PopAndDestroy( buf8 ); + } + } + +// --------------------------------------------------------------------------- +// Delete all bitmaps. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::DeleteAllBitmaps() + { + delete iPageUpBmp; + iPageUpBmp = NULL; + + delete iPageUpBmpMask; + iPageUpBmpMask = NULL; + + delete iPageUpDimBmpMask; + iPageUpDimBmpMask = NULL; + + delete iPageDownBmp; + iPageDownBmp = NULL; + + delete iPageDownBmpMask; + iPageDownBmpMask = NULL; + + delete iPageDownDimBmpMask; + iPageDownDimBmpMask = NULL; + + delete iSeperationBmp; + iSeperationBmp = NULL; + + delete iSeperationMaskBmp; + iSeperationMaskBmp = NULL; + } + +// --------------------------------------------------------------------------- +// Handle skin change. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::HandleSkinChangeL() + { + // Reconstruct all bitmaps as these bitmaps are based on current skin. + DeleteAllBitmaps(); + + ConstructFromResourceL(); + + SetBitmapSize(); + + CreateDimmedMaskL( iPageUpDimBmpMask, iPageUpBmpMask ); + CreateDimmedMaskL( iPageDownDimBmpMask, iPageDownBmpMask ); + + // Set separator line size if the spell feature is enabled. + if ( iSpellEnabled && iItemRects.Count() > 0 ) + { + if( NULL != iSeperationBmp ) + { + AknIconUtils::SetSize( iSeperationBmp, iSeparatorSize, + EAspectRatioNotPreserved ); + } + + if( NULL != iSeperationMaskBmp ) + { + AknIconUtils::SetSize( iSeperationMaskBmp, iSeparatorSize, + EAspectRatioNotPreserved ); + } + } + } + +// --------------------------------------------------------------------------- +// Responds to changes to the size and position of the contents of this control. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::SizeChanged() + { + TInt paneHorMargin = KPaneHorMarginCount * iLafData.iHorMargin; + + // Calculate list pane rect + iListRect = Rect(); + iListRect.SetWidth( iItemWidth + paneHorMargin ); + + if( iNaviBtnShown ) + { + // scroll pane width = naviButton width + 2 horMargin width + TInt scorllPaneWidth = iLafData.iNaviSize.iWidth + paneHorMargin; + TInt scrollPaneTlX = iListRect.Width(); + if ( iAlign == CGraphicsContext::ERight ) + { + // If the layout is RTL, move list pane to the rightmost, + // move scroll pane to the leftmost. + iListRect.Move( scorllPaneWidth, 0 ); + scrollPaneTlX = 0; + } + + // calculate scroll pane rect + iScrollRect = TRect( TPoint( scrollPaneTlX, iListRect.iTl.iY ), + TSize( scorllPaneWidth, iListRect.Height() ) ); + + // calculate up button rect + TPoint tlPageUp( iScrollRect.iTl.iX + iLafData.iHorMargin, + iScrollRect.iTl.iY + iLafData.iVerMargin ); + iPageUpRect = TRect( tlPageUp, iLafData.iNaviSize ); + + // calculate down button rect + TPoint tlPageDown( iPageUpRect.iTl.iX, + iScrollRect.iBr.iY - iLafData.iVerMargin + - iLafData.iNaviSize.iHeight ); + iPageDownRect = TRect( tlPageDown, iLafData.iNaviSize ); + } + + // Calculate each the area of each text, not including the margin + iItemRects.Reset(); + for ( TInt i = 0; i < KOnePageItemCount; i++ ) + { + TPoint point( iListRect.iTl.iX , iListRect.iTl.iY + + ( i + 1 ) * iLafData.iVerMargin + + i * iLafData.iItemSize.iHeight ); + + TSize size( iListRect.Width(), iLafData.iItemSize.iHeight ); + iItemRects.Append( TRect( point, size ) ); + } + + // Calculate separator line rect if the spell feature is enabled. + if ( iSpellEnabled && iItemRects.Count() > 0 ) + { + TSize newSize ( iItemWidth, KSeparatorLineHeight ); + if ( newSize != iSeparatorSize ) + { + // Resize seperation bitmaps + if( iSeperationBmp ) + { + AknIconUtils::SetSize( iSeperationBmp, newSize, + EAspectRatioNotPreserved ); + } + + if( iSeperationMaskBmp ) + { + AknIconUtils::SetSize( iSeperationMaskBmp, newSize, + EAspectRatioNotPreserved ); + } + + iSeparatorSize = newSize; + } + } + } + +// --------------------------------------------------------------------------- +// Draw candidate control. +// --------------------------------------------------------------------------- +// +void CPenUiCandidateWnd::Draw( const TRect& /*aRect*/ ) const + { + if ( !IsVisible() || Rect().Size() == TSize(0,0)) + { + return; + } + + // Draw background of whole control + CWindowGc& gc = SystemGc(); + TRect listRect = Rect(); + gc.Clear( listRect ); + + TRect innerRect = listRect; + innerRect.Shrink( KInnerRectOffset ); + AknsDrawUtils::DrawFrame( AknsUtils::SkinInstance(), + gc, + listRect, + innerRect, + iBgFrId, + KAknsIIDDefault ); + + // Draw item + for ( TInt i = 0; i < iItemRects.Count(); i++ ) + { + DrawItem( &gc, i ); + } + + // Draw scroll area + if (iNaviBtnShown) + { + DrawPageButton( &gc, ETrue ); + DrawPageButton( &gc, EFalse ); + DrawPageInfo( &gc ); + } + } + +// End Of File diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp --- a/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -72,10 +72,10 @@ iAutoRefreshTimer->Cancel(); } delete iAutoRefreshTimer; - - - Clean(); - + iPopRegion.Close(); + iBubblesArea.Close(); + iBubblesMaskArea.Close(); + iBubblesPos.Close(); delete iCursorWnd; } @@ -126,7 +126,7 @@ gc.BitBlt(pos, iBitmap, rect); #ifdef FIX_FOR_NGA //draw bubble - for ( TInt i = 0; i < iBubblesCtrl.Count(); ++i ) + for (TInt i = 0; i < iBubblesArea.Count(); ++i) { gc.BitBlt(iBubblesPos[i].iTl, iBubblesArea[i]); } @@ -138,7 +138,7 @@ #ifdef FIX_FOR_NGA gc.BitBlt(TPoint(0, 0), iBitmap, Rect()); //draw bubble - for ( TInt i = 0; i < iBubblesCtrl.Count(); ++i ) + for (TInt i = 0; i < iBubblesArea.Count(); ++i) { gc.BitBlt(iBubblesPos[i].iTl, iBubblesArea[i]); } @@ -168,9 +168,8 @@ void CPenUiWndCtrl::Clean() { iCursorBmp = NULL; - iBubblesArea.Close(); - iBubblesCtrl.Close(); - iBubblesPos.Close(); + iBubblesArea.Reset(); + iBubblesPos.Reset(); iBubblesMaskArea.Close(); iPopRegion.Close(); iChangedBmp= NULL; @@ -276,29 +275,16 @@ } iCursorWnd->SetCursorVisible(aOnFlag); } - -// --------------------------------------------------------------------------- -// CPenUiWndCtrl::UpdateBubble -// --------------------------------------------------------------------------- -// -void CPenUiWndCtrl::UpdateBubble( const TUint32 aCtrl, - const CFbsBitmap* aBmp, - const CFbsBitmap* aMask, - const TRect& aPos, - TBool aFlag ) + +void CPenUiWndCtrl::UpdateBubble(const CFbsBitmap* aBmp,const CFbsBitmap* aMask, + const TRect& aPos,TBool aFlag) { - - // Check whether the Ctrl address is exist - TInt idx = iBubblesCtrl.Find( aCtrl ); - + TInt idx = iBubblesArea.Find(aBmp); if(aFlag) { if(KErrNotFound == idx) { - - iBubblesCtrl.Append( aCtrl ); - iBubblesArea.Append(aBmp); iBubblesMaskArea.Append(aMask); iBubblesPos.Append(aPos); @@ -314,9 +300,6 @@ //remove if(idx != KErrNotFound) { - - iBubblesCtrl.Remove( idx ); - iBubblesArea.Remove(idx); iBubblesMaskArea.Remove(idx); iBubblesPos.Remove(idx); @@ -330,20 +313,13 @@ iIcfPos = aPos; Invalidate(Rect(), ETrue); } - +void CPenUiWndCtrl::UpdateChangedArea(const CFbsBitmap* aBmp,const TRect& aPos,TBool aFlag) + { + UpdateBubble(aBmp,0,aPos,aFlag); + return; -// --------------------------------------------------------------------------- -// CPenUiWndCtrl::UpdateChangedArea -// --------------------------------------------------------------------------- -// -void CPenUiWndCtrl::UpdateChangedArea( const TUint32 aCtrl, - const CFbsBitmap* aBmp,const TRect& aPos,TBool aFlag) - { - UpdateBubble( aCtrl, aBmp, 0, aPos, aFlag ); - return; + } - - void CPenUiWndCtrl::SetPopupArea(const TRect& aRect, TBool aFlag) { if(aFlag) //add pop area @@ -419,9 +395,8 @@ #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS - if ( iEnableGfxTransEffect && GfxTransEffect::IsRegistered( this ) && !IsVisible()) + if ( GfxTransEffect::IsRegistered( this ) && !IsVisible()) { - iEnableGfxTransEffect = EFalse; this->MakeVisible(EFalse); GfxTransEffect::NotifyExternalState( ENotifyGlobalAbort ); @@ -464,9 +439,9 @@ return; } #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS - if ( iEnableGfxTransEffect && GfxTransEffect::IsRegistered( this ) ) + if ( GfxTransEffect::IsRegistered( this )) { - iEnableGfxTransEffect = EFalse; + GfxTransEffect::NotifyExternalState( ENotifyGlobalAbort ); //If still visible, do a transition to invisible state. @@ -533,6 +508,10 @@ // Draw is always full-screen in such case. So I change to DrawNow // for temprory solution. /*********************************************************************/ + if ( !IsVisible() ) + { + return; + } if(iShowPopup) { @@ -744,27 +723,25 @@ { struct SData { - TUint32 ctrl; TBool flag; TRect pos; CFbsBitmap* bmp; CFbsBitmap* mask; } data; data = * (reinterpret_cast( const_cast( aEventData.Ptr() ))); - UpdateBubble( data.ctrl, data.bmp, data.mask, data.pos, data.flag ); + UpdateBubble(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.ctrl, data.bmp, data.pos, data.flag ); + UpdateChangedArea(data.bmp,data.pos,data.flag); } break; case ESignalRegisterBkControl: diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/penuiwndeventhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/src/peninputserverapp/penuiwndeventhandler.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2008-2008 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 for pen ui window event handler +* +*/ + +#include "peninputserver.h" +#include "peninputuilayoutowner.h" +#include "penuiwndeventobserver.h" +#include "penuiwndeventhandler.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CPenUiWndEventHandler* CPenUiWndEventHandler::NewL( CPeninputServer* aServer ) + { + CPenUiWndEventHandler* self = CPenUiWndEventHandler::NewLC( aServer ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CPenUiWndEventHandler* CPenUiWndEventHandler::NewLC( CPeninputServer* aServer ) + { + CPenUiWndEventHandler* self = new (ELeave) CPenUiWndEventHandler( aServer ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CPenUiWndEventHandler::~CPenUiWndEventHandler() + { + } + +// --------------------------------------------------------------------------- +// Signal owner that there is an event +// --------------------------------------------------------------------------- +// +void CPenUiWndEventHandler::SignalOwner( TInt aEventType, + const TDesC& aEventData ) + { + if ( iServer ) + { + iServer->SignalOwner( aEventType, aEventData ); + } + } + +// --------------------------------------------------------------------------- +// Handle layout command event. +// --------------------------------------------------------------------------- +// +void CPenUiWndEventHandler::HandleCommand( TInt aCmd, TUint8* aData ) + { + if ( iServer && iServer->PenUiLayout() ) + { + iServer->PenUiLayout()->HandleCommand( aCmd, aData ); + } + } + +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that might leave. +// --------------------------------------------------------------------------- +// +CPenUiWndEventHandler::CPenUiWndEventHandler( CPeninputServer* aServer ) + : iServer( aServer ) + { + } + +// --------------------------------------------------------------------------- +// 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CPenUiWndEventHandler::ConstructL() + { + } + +// End of File diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputarc/src/peninputserverapp/rpeninputanim.cpp --- a/textinput/peninputarc/src/peninputserverapp/rpeninputanim.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputarc/src/peninputserverapp/rpeninputanim.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -336,19 +336,4 @@ args.Set(KMsgSlot1,&msgData); CommandReply(EPeninputOpSetDiscreeptPop,KNullDesC8,args); } - -// --------------------------------------------------------------------------- -// RPeniputAnim::UpdatePointerEventSuppressor() -// Update parameters of pointer event suppressor. -// --------------------------------------------------------------------------- -// -void RPeninputAnim::UpdatePointerEventSuppressor( - const TPointerEventSuppressorParameters& aParameters ) - { - TIpcArgs args( TIpcArgs::ENothing ); - TPckg msgData( aParameters ); - args.Set(KMsgSlot1, &msgData ); - CommandReply( EPeninputOpUpdatePointerSuppressor, KNullDesC8, args ); - } - // End of File diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonctrls/bwins/peninputcommonctrlsU.DEF --- a/textinput/peninputcommonctrls/bwins/peninputcommonctrlsU.DEF Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputcommonctrls/bwins/peninputcommonctrlsU.DEF Fri Oct 22 15:38:27 2010 +0100 @@ -359,3 +359,4 @@ ??1CAknFepCtrlLongPressButton@@UAE@XZ @ 358 NONAME ; CAknFepCtrlLongPressButton::~CAknFepCtrlLongPressButton(void) ?HandleTimerOut@CAknFepCtrlLongPressButton@@UAEXPBVCAknFepTimer@@@Z @ 359 NONAME ; void CAknFepCtrlLongPressButton::HandleTimerOut(class CAknFepTimer const *) ?CancelTimer@CAknFepCtrlLongPressButton@@QAEXXZ @ 360 NONAME ; void CAknFepCtrlLongPressButton::CancelTimer(void) + ?ModeIndexByModeId@CAknFepCtrlMultiModeButton@@QAEHH@Z @ 361 NONAME ; int CAknFepCtrlMultiModeButton::ModeIndexByModeId(int) diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonctrls/eabi/peninputcommonctrlsU.DEF --- a/textinput/peninputcommonctrls/eabi/peninputcommonctrlsU.DEF Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputcommonctrls/eabi/peninputcommonctrlsU.DEF Fri Oct 22 15:38:27 2010 +0100 @@ -491,4 +491,5 @@ _ZTI26CAknFepCtrlLongPressButton @ 490 NONAME _ZTV26CAknFepCtrlLongPressButton @ 491 NONAME _ZThn804_N26CAknFepCtrlLongPressButton14HandleTimerOutEPK12CAknFepTimer @ 492 NONAME + _ZN26CAknFepCtrlMultiModeButton17ModeIndexByModeIdEi @ 493 NONAME diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonctrls/inc/peninputbuttons/peninputmultimodebutton.h --- a/textinput/peninputcommonctrls/inc/peninputbuttons/peninputmultimodebutton.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputcommonctrls/inc/peninputbuttons/peninputmultimodebutton.h Fri Oct 22 15:38:27 2010 +0100 @@ -249,6 +249,14 @@ IMPORT_C TInt GetRealCaseByMode(TInt aModeIndex) const; /** + * Gets the button mode index by button mode id + * + * @param aModeId button mode id + * @return mode index + */ + IMPORT_C TInt ModeIndexByModeId( TInt aModeId ); + + /** * Get range list * * @since S60 v3.2 diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp --- a/textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -1928,6 +1928,22 @@ return KErrNotFound; } +// ------------------------------------------------ +// CAknFepCtrlMultiModeButton::ModeIndexByModeId +// ------------------------------------------------ +EXPORT_C TInt CAknFepCtrlMultiModeButton::ModeIndexByModeId( TInt aModeId ) + { + TInt count = NumberOfModes(); + for ( TInt i = 0; i < count; i++ ) + { + if (iModesList[i]->iModeId == aModeId ) + { + return i; + } + } + return KErrNotFound; + } + // ----------------------------------------------------------------------------- // CAknFepCtrlMultiModeButton::GetRangeListL() // (other items were commented in a header). diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonlayout/BWINS/peninputcommonlayoutU.DEF --- a/textinput/peninputcommonlayout/BWINS/peninputcommonlayoutU.DEF Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputcommonlayout/BWINS/peninputcommonlayoutU.DEF Fri Oct 22 15:38:27 2010 +0100 @@ -203,4 +203,4 @@ ?SetPositionFromOutside@CPeninputCommonLayout@@UAEXABVTPoint@@@Z @ 202 NONAME ; void CPeninputCommonLayout::SetPositionFromOutside(class TPoint const &) ?SetPositionFromOutside@CPeninputCommonLayoutExt@@UAEXABVTPoint@@@Z @ 203 NONAME ; void CPeninputCommonLayoutExt::SetPositionFromOutside(class TPoint const &) ?HandleShiftAndCapslockBtnClicked@CPeninputLayoutWindowExt@@UAEXXZ @ 204 NONAME ; void CPeninputLayoutWindowExt::HandleShiftAndCapslockBtnClicked(void) - + ?EnableToneMarker@CPeninputLayoutWindowExt@@QAEXH@Z @ 205 NONAME ; void CPeninputLayoutWindowExt::EnableToneMarker(int) diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonlayout/EABI/peninputcommonlayoutU.DEF --- a/textinput/peninputcommonlayout/EABI/peninputcommonlayoutU.DEF Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputcommonlayout/EABI/peninputcommonlayoutU.DEF Fri Oct 22 15:38:27 2010 +0100 @@ -316,4 +316,4 @@ _ZThn4_N21CPeninputCommonLayout22SetPositionFromOutsideERK6TPoint @ 315 NONAME ; ## _ZThn4_N24CPeninputCommonLayoutExt22SetPositionFromOutsideERK6TPoint @ 316 NONAME ; ## _ZN24CPeninputLayoutWindowExt32HandleShiftAndCapslockBtnClickedEv @ 317 NONAME - + _ZN24CPeninputLayoutWindowExt16EnableToneMarkerEi @ 318 NONAME diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonlayout/inc/peninputcommonlayoutglobalenum.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h --- a/textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h Fri Oct 22 15:38:27 2010 +0100 @@ -335,15 +335,7 @@ 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(); - + IMPORT_C void EnableToneMarker(TBool aEnable); protected: /** @@ -565,6 +557,25 @@ HBufC* GetKeyMappingStringL( TInt aKeyMapping, const TInt aLang ); void ResetLastColRow(); + + /** + * Handle paging button in number and special character mode + * + * @param aShifted Indicates whether case is shifted. + * @return None. + */ + void HandleNumberModePagingL( TBool aShifted ); + + /** + * Gets the button mode id by current language and shift button state + * + * @param aShifted current shift key state, press down or not + * @param aLanguage current writing language + * @param aPagingPermitted shift key is dimmed or not + * @return mode id + */ + TInt CurrentNumberModeId( TBool aShifted, TInt aLanguage, TBool aPagingPermitted ); + protected: // data /** @@ -667,5 +678,6 @@ * Vowel char flag for Viet */ TBool iVowelChar; + }; #endif // C_CPeninputLayoutWindowExt_H diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp --- a/textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -372,42 +372,32 @@ static_cast( Control(EPeninputWindowCtrlIdMultiLineICF)); multiIcf->SetTextL( aData ); - - if ( iLayoutContext->LayoutType() == EPluginInputModeVkb || - iLayoutContext->LayoutType() == EPluginInputModeFSQ ) - { - TInt lang = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeInputLanguage ) ); - TInt curRange = CPeninputDataConverter::AnyToInt - ( iLayoutContext->RequestData( EPeninputDataTypeCurrentRange ) ); - - if ( lang == ELangVietnamese && curRange == ERangeEnglish ) - { - TBuf<1> preData; - multiIcf->ExtractText( preData, aData.iCurSel.LowerPos()-1, 1 ); - iVowelChar = EFalse; - - if ( KNullDesC() != preData ) - { - for (TUint i = 0; i < sizeof(VietVowelList) / sizeof(TText); ++i) - { - TBuf<1> buf; - buf.Append( VietVowelList[i] ); - if (preData == buf) - { - iVowelChar = ETrue; - break; - } - } - } - CPeninputVkbCtrlExt* vkbCtrl = static_cast - ( Control( EPeninutWindowCtrlIdVkbCtrl ) ); - vkbCtrl->DimKeySet( iToneSet, !iVowelChar ); - } - } } } +EXPORT_C void CPeninputLayoutWindowExt::EnableToneMarker(TBool aEnable) + { + if (iLayoutContext->LayoutType() != EPluginInputModeVkb && + iLayoutContext->LayoutType() != EPluginInputModeFSQ) + { + return; + } + + TInt lang = CPeninputDataConverter::AnyToInt + ( iLayoutContext->RequestData( EPeninputDataTypeInputLanguage ) ); + TInt curRange = CPeninputDataConverter::AnyToInt + ( iLayoutContext->RequestData( EPeninputDataTypeCurrentRange ) ); + + if ( lang != ELangVietnamese || curRange != ERangeEnglish ) + { + return; + } + + iVowelChar = aEnable; + CPeninputVkbCtrlExt* vkbCtrl = static_cast + ( Control( EPeninutWindowCtrlIdVkbCtrl ) ); + vkbCtrl->DimKeySet( iToneSet, !iVowelChar ); + } // --------------------------------------------------------------------------- // CPeninputLayoutWindowExt::SetEditorTextL // (other items were commented in a header) @@ -490,57 +480,7 @@ 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) @@ -568,9 +508,6 @@ if ( found ) { - // Remove the dead key's latched status - CancelDeadKey(); - // Store language iLayoutContext->SetData( EPeninputDataTypeInputLanguage, &aLangID ); @@ -873,10 +810,45 @@ // EXPORT_C void CPeninputLayoutWindowExt::ChangeVkbLayout( TInt aVkbLayoutId ) { - - // Remove the dead key's latched status - CancelDeadKey(); - + 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; + } + } + } TInt curVkbId = CPeninputDataConverter::AnyToInt ( iLayoutContext->RequestData( EPeninputDataTypeVkbLayout ) ); @@ -1260,6 +1232,7 @@ } else { + if ( permittedRange != ERangeNumber ) ChangeVkbLayout( vkbLayout ); } @@ -1440,6 +1413,18 @@ { return; } + + const TInt range = CPeninputDataConverter::AnyToInt( + iLayoutContext->RequestData(EPeninputDataTypeCurrentRange)); + + TBool shiftDown = ( aIsShiftCase > 0 ); + + if ( range == ERangeNumber || range == ERangeNativeNumber ) + { + TRAP_IGNORE(HandleNumberModePagingL( shiftDown )); + } + else + { switch ( aIsCapslockCase * 2 + aIsShiftCase ) { case 1: // text case @@ -1460,6 +1445,7 @@ button->SetHighlight( EFalse ); } break; + } } } // --------------------------------------------------------------------------- @@ -1936,5 +1922,93 @@ icf->SetTextAlignmentL( aAlignment, ConfigInfo()->Language() ); } } - + +// ------------------------------------------------ +// CPeninputLayoutWindowExt::CurrentNumberModeId +// ------------------------------------------------ +TInt CPeninputLayoutWindowExt::CurrentNumberModeId(TBool aShifted, + TInt aLanguage, TBool aPagingPermitted) + { + TInt ret = 0; + if (aPagingPermitted) + { + if (aLanguage == ELangArabic || aLanguage == ELangFarsi || aLanguage + == ELangUrdu) + { + if (aShifted) + { + ret = ECaseNumberSpecialPagingArabic22; + } + else + { + ret = ECaseNumberSpecialPagingArabic12; + } + } + else if (aLanguage == ELangThai) + { + if (aShifted) + { + ret = ECaseNumberSpecialPaging12; + } + else + { + ret = ECaseNumberSpecialPaging22; + } + } + else + { + if ( aShifted ) + { + ret = ECaseNumberSpecialPaging22; + } + else + { + ret = ECaseNumberSpecialPaging12; + } + } + } + else + { + if (aLanguage == ELangArabic || aLanguage == ELangFarsi || aLanguage + == ELangUrdu) + { + ret = ECaseNumberSpecialPagingArabic11; + } + else + { + ret = ECaseNumberSpecialPaging11; + } + } + return ret; + } + +void CPeninputLayoutWindowExt::HandleNumberModePagingL( TBool aShifted ) + { + CAknFepCtrlMultiModeButton* button = static_cast (ControlById( EPeninutWindowCtrlIdShiftBtn ) ); + + if ( !button ) + { + return; + } + + const TInt lang = CPeninputDataConverter::AnyToInt( iLayoutContext->RequestData( EPeninputDataTypeInputLanguage ) ); + TInt permittedRange = CPeninputDataConverter::AnyToInt + ( iLayoutContext->RequestData( EPeninputDataTypePermittedRange )); + TBool isPagingPermitted = EFalse; + if ( permittedRange == ERangeNumber || permittedRange == ERangeNativeNumber ) + { + //if latin number only or native number only is permitted do not allow paging + isPagingPermitted = EFalse; + } + else + { + isPagingPermitted = !button->IsDimmed(); + } + + TInt modeId = CurrentNumberModeId( aShifted, lang, isPagingPermitted ); + TInt index = button ->ModeIndexByModeId( modeId ); + + button->SetCurrentModeL( EBtnBmpActive, index ); + button->SetHighlight( EFalse ); + } //End Of File diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss --- a/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss Fri Oct 22 15:38:27 2010 +0100 @@ -1322,4 +1322,4 @@ scancode = 0x266B; } }; - } + } \ No newline at end of file diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/group/iconlist.txt --- a/textinput/peninputfingerhwrar/group/iconlist.txt Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/group/iconlist.txt Fri Oct 22 15:38:27 2010 +0100 @@ -64,3 +64,4 @@ -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 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp --- a/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp Fri Oct 22 15:38:27 2010 +0100 @@ -43,7 +43,6 @@ SOURCE hbufcarrayar.cpp SOURCE peninputfingerhwrarwritingwnd.cpp SOURCE peninputfingerhwrarnumsymboltable.cpp -SOURCE peninputfingerhwarvkbutility.cpp USERINCLUDE ../inc diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/inc/peninputfingerhwarvkbutility.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwarvkbutility.h Fri Sep 17 17:26:50 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* -* 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h Fri Oct 22 15:38:27 2010 +0100 @@ -137,6 +137,14 @@ */ TInt PrimaryRange(); + /** + * Get current range + * + * @since Symbian TB9.2 + * @return Current range. + */ + TFingerHwrRange CurrentRange(); + /** * Set case @@ -448,6 +456,11 @@ RArray iPermittedRanges; /** + * Current range + */ + TFingerHwrRange iCurrentRange; + + /** * Permitted range in int format */ TInt iIntRange; diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h Fri Oct 22 15:38:27 2010 +0100 @@ -153,13 +153,6 @@ */ TInt IcfTextHeight(); - /** - * get indicator bubble rect. - * - * @since Symbian TB9.2 - * @return bubble rect. - */ - TRect IndicatorBubbleRect(); public: //buttons /** @@ -499,11 +492,6 @@ TInt iIcfTextAlignment; CFont* iIcfFont; - /** - * Msg indicator bubble. - */ - TRect iRectIndicatorBubble; - /** * Candidate laf */ diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h Fri Oct 22 15:38:27 2010 +0100 @@ -30,6 +30,8 @@ class CPeninputFingerHwrArDataStore; class CRepository; class CPeninputFingerHwrArWnd; +class CPeninputFingerHwrArCallBack; + // class DECLARATIONS /** @@ -509,12 +511,19 @@ */ 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h Fri Oct 22 15:38:27 2010 +0100 @@ -100,7 +100,8 @@ * sizechanged * */ - void SizeChanged(const TRect& aVirtualKeypadRect); + void SizeChanged(const TRect aVirtualKeypadRect, const RArray aBtnRects, + const TInt aKeypadRow, const TInt aKeypadCol, TBool aIsLandscape = ETrue); /** * Load VKB image @@ -121,6 +122,12 @@ 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 */ @@ -133,7 +140,7 @@ * @param aNumMapping a string contains numbers and related char. max length is 16. * @return none */ - void UpdateTableSymbol( const TDesC& aNumMapping ); + void SetNumericMapping( const TDesC& aNumMapping ); /* * set arabic number mode. @@ -142,14 +149,6 @@ * @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) /** @@ -208,6 +207,20 @@ */ 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 * @@ -218,14 +231,7 @@ * Draw group control */ void Draw(); - -private: - /** - * Refresh the symbol table - * - */ - void RefreshNumSymbolTable(); - + /** * Load background from resource * @@ -236,13 +242,6 @@ * 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 @@ -255,6 +254,12 @@ */ TBool iPopupVisible; + /** + * store the layout mode + */ + TBool iIsLandscape; + + TInt iCurrentNumSCTType; /* * Default number mode. */ diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h Fri Oct 22 15:38:27 2010 +0100 @@ -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,6 +223,20 @@ */ 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h --- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h Fri Oct 22 15:38:27 2010 +0100 @@ -504,8 +504,7 @@ * @param aCellRects rects of virtual keys. * @return None */ - void LoadNumSymbolVirtualKeysL( const TInt aResId, - const RArray& aCellRects, TBool aReload = ETrue ); + void LoadNumSymbolVirtualKeysL( const TInt aResId, const RArray& aCellRects ); /** * relayout full ui, reset all controls position. diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp Fri Sep 17 17:26:50 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ -/* -* 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -24,7 +24,6 @@ #include #include #include -#include //USER INCLUDE #include "peninputfingerhwrarlayout.h" @@ -73,6 +72,7 @@ delete iRepositoryFep; delete iCommonEngineRepository; +// delete iTriggerStr; delete iHwrEngine; delete iUserDefinedResource; @@ -157,10 +157,6 @@ { iPermittedRanges.Append( ERangeNative ); } - if ( aPermittedRanges & ERangeNativeNumber ) - { - iPermittedRanges.Append( ERangeNativeNumber ); - } if ( aPermittedRanges & ERangeEnglish ) { iPermittedRanges.Append( ERangeEnglish ); @@ -203,6 +199,15 @@ } // ---------------------------------------------------------------------------- +// get current range +// ---------------------------------------------------------------------------- +// +TFingerHwrRange CPeninputFingerHwrArDataStore::CurrentRange() + { + return iCurrentRange; + } + +// ---------------------------------------------------------------------------- // Set case // ---------------------------------------------------------------------------- // @@ -700,7 +705,7 @@ // TBool CPeninputFingerHwrArDataStore::IsNumberOnlyMode() { - if(PrimaryRange() == ERangeNumber || PrimaryRange() == ERangeNativeNumber) + if(PrimaryRange() == ERangeNumber) { return ETrue; } diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -16,13 +16,11 @@ */ -//SYSTEM INCLUDES +//FEP INCLUDES #include #include #include #include -#include - #include "ptidefs.h" //USER INCLUDES @@ -369,13 +367,6 @@ 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -156,18 +156,6 @@ // 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 } // --------------------------------------------------------------------------- @@ -1094,14 +1082,6 @@ return iIcfTextHeight; } -// --------------------------------------------------------------------------- -// get indicator bubble rect. -// --------------------------------------------------------------------------- -// -TRect CPeninputFingerHwrArLafManager::IndicatorBubbleRect() - { - return iRectIndicatorBubble; - } // --------------------------------------------------------------------------- // get inner padding of buttons. diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -49,6 +49,46 @@ 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 ============================= // --------------------------------------------------------------------------- @@ -101,7 +141,9 @@ //retrieve the settings LoadAndPublishDefaultL(); - + + //iCallBack = new (ELeave) CPeninputFingerHwrArCallBack(this); + //set screen layout extent SetRect( TRect( TPoint( 0, 0 ), ScreenSize() ) ); } @@ -585,7 +627,17 @@ 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()); } @@ -622,6 +674,8 @@ delete iStateMgr; delete iGSRepositoryWatcher; delete iRepositorySetting; +// delete iCommonEngineRepository; + //delete iCallBack; } // --------------------------------------------------------------------------- @@ -878,6 +932,7 @@ // void CPeninputFingerHwrArLayout::OnHwrStrokeStartedL() { + //iCallBack->IssueRequestL(); iHwrWnd->HideIndicator(); // The default candidate cell is not highlight diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -41,9 +41,8 @@ #include "peninputfingerhwrarstoreconstants.h" #include "peninputlayoutvkb.h" #include "peninputfingerhwrarnumsymboltable.h" -#include "peninputfingerhwarvkbutility.h" -const TUint16 KInvalidChar = 0xFFFF; + // --------------------------------------------------------------------------- // Symbian Constructor // --------------------------------------------------------------------------- @@ -100,25 +99,9 @@ { CapturePointer( ETrue ); iPopupVisible = ETrue; - 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();; + iCurrentNumSCTType = ENumSCTLatin; + UiLayout()->LockArea(UiLayout()->Rect(),this); + UpdateNumSymbolTable(ENumSCTLatin); } // --------------------------------------------------------------------------- @@ -129,22 +112,6 @@ { 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); } @@ -243,10 +210,15 @@ // SizeChanged // --------------------------------------------------------------------------- // -void CPeninputArabicFingerHwrNumSymbolTable::SizeChanged(const TRect& aVirtualKeypadRect) +void CPeninputArabicFingerHwrNumSymbolTable::SizeChanged( + const TRect aVirtualKeypadRect, const RArray /*aBtnRects*/, + const TInt /*aKeypadRow*/, const TInt /*aKeypadCol*/, TBool aIsLandscape) { + iIsLandscape = aIsLandscape; + // relayout the virtual key pad iNumKeypad->SetRect(aVirtualKeypadRect); + } // --------------------------------------------------------------------------- @@ -275,6 +247,11 @@ iNumKeypad->SetDrawOpaqueBackground( EFalse ); } +void CPeninputArabicFingerHwrNumSymbolTable::OnActivate() + { + CControlGroup::OnActivate(); + } + // --------------------------------------------------------------------------- // Read control's background info. // --------------------------------------------------------------------------- @@ -362,7 +339,53 @@ // void CPeninputArabicFingerHwrNumSymbolTable::LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize) { - PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(*iNumKeypad,aResId,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 ); } // --------------------------------------------------------------------------- @@ -371,57 +394,124 @@ // void CPeninputArabicFingerHwrNumSymbolTable::LoadVirtualKeypadKeyL(const TInt aResId, const RArray& aCellRects) { - PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(*iNumKeypad,aResId,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() ); } // --------------------------------------------------------------------------- +// 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::UpdateTableSymbol( const TDesC& aNumMapping ) +void CPeninputArabicFingerHwrNumSymbolTable::SetNumericMapping( const TDesC& aNumMapping ) { - 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******" + //format of aNumMapping is "0123456789******" //char offset in aNumMapping //cell 0 using aNumMapping[KNumOffsets[0]] @@ -433,36 +523,49 @@ 14, 7, 8, 9, 15, 10, 0, 11 }; - TInt tableSize = sizeof(KNumOffsets)/sizeof(TInt); + + TInt maxMappingItemCount = sizeof(KNumOffsets)/sizeof(TInt); TInt mappingItemCount = aNumMapping.Length(); - 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); - } - } - } + //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 ); + } + } - return reorderedCharTable; - } - + + //sync feedback + UpdateAllVirtualKeysFeedback(); + } + // --------------------------------------------------------------------------- // Navigate the symbol page // --------------------------------------------------------------------------- // -void CPeninputArabicFingerHwrNumSymbolTable::RefreshNumSymbolTable() - { +void CPeninputArabicFingerHwrNumSymbolTable::UpdateNumSymbolTable( TInt aNumSctType) + { + + iCurrentNumSCTType = aNumSctType; // Draw the symbol table Draw(); @@ -479,7 +582,7 @@ // void CPeninputArabicFingerHwrNumSymbolTable::UpdateAllVirtualKeysFeedback() { - //update numpad keys + //update sctpad keys TInt keyCount = iNumKeypad->KeyArray().Count(); for ( TInt i = 0; i < keyCount; i++ ) { @@ -490,30 +593,6 @@ } // --------------------------------------------------------------------------- -// 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 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -41,7 +41,7 @@ #include "peninputfingerhwrarstoreconstants.h" #include "peninputfingerhwrarmultipagevkb.h" #include "peninputfingerhwrarsymboltable.h" -#include "peninputfingerhwarvkbutility.h" + //CONST DEFINATION const TInt KSymbolButtonInnerPadding = 6; @@ -216,16 +216,14 @@ // --------------------------------------------------------------------------- // 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); @@ -255,7 +253,7 @@ iMutiPageKeypad->UpdatePaging(aKeypadRow,aKeypadCol); } - + // --------------------------------------------------------------------------- // create symbol table keypad. // --------------------------------------------------------------------------- @@ -332,6 +330,11 @@ aButton->SizeChanged( aRect, rcInner, aReloadImages ); } +void CPeninputArabicFingerHwrSymbolTable::OnActivate() + { + CControlGroup::OnActivate(); + } + // --------------------------------------------------------------------------- // Read control's background info. // --------------------------------------------------------------------------- @@ -419,7 +422,53 @@ // void CPeninputArabicFingerHwrSymbolTable::LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize) { - PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(*iMutiPageKeypad,aResId,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 ); } // --------------------------------------------------------------------------- @@ -428,10 +477,118 @@ // void CPeninputArabicFingerHwrSymbolTable::LoadVirtualKeypadKeyL(const TInt aResId, const RArray& aCellRects) { - PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(*iMutiPageKeypad,aResId,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() ); } // --------------------------------------------------------------------------- +// 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 // --------------------------------------------------------------------------- // @@ -534,14 +691,17 @@ { 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 + // draw background +// DrawBackground(); DrawBackground(iMutiPageKeypad->Rect()); - // draw group CControlGroup::Draw(); diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp --- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -87,7 +87,7 @@ CPeninputFingerHwrArWnd::~CPeninputFingerHwrArWnd() { #ifdef RD_TACTILE_FEEDBACK - if(UiLayout() && iWritingBox) + if(UiLayout()) { UiLayout()->DeRegisterFeedbackArea(reinterpret_cast(iWritingBox), iWritingBox->Rect()); @@ -352,10 +352,7 @@ { if ( aInfo.Length() > 0 ) { - TRect rect(iLafManager->IndicatorBubbleRect()); - iContextField->MsgBubbleCtrl()->SetRect(rect); -// iContextField->ShowBubble( aInfo, iContextField->MsgBubbleCtrl()->Rect()); - iContextField->ShowBubble( aInfo, rect); + iContextField->ShowBubble( aInfo, iContextField->MsgBubbleCtrl()->Rect() ); } else { @@ -622,7 +619,6 @@ KAknsIIDQsnFrInputPreviewMiddle, KAknsIIDQsnFrInputPreviewSideR ); iContextField->SetMsgBubbleCtrlSize( TSize( bubbleLineLayout.iW,bubbleLineLayout.iH ) ); - iContextField->MsgBubbleCtrl()->SetTextL(KNullDesC); iContextField->SetLineSeparatorAfterPrompt(ETrue); @@ -825,7 +821,7 @@ // --------------------------------------------------------------------------- // void CPeninputFingerHwrArWnd::LoadNumSymbolVirtualKeysL( const TInt aResId, - const RArray& aCellRects, TBool aReload) + const RArray& aCellRects ) { TAknTextLineLayout txtlayout = iLafManager->NumpadKeyTxtLayout(); iNumSymbolTable->KeyPad()->SetTextLineLayout( txtlayout ); @@ -833,14 +829,8 @@ TInt fontid = txtlayout.FontId(); const CFont* font = AknLayoutUtils::FontFromId( fontid ); iNumSymbolTable->KeyPad()->SetFont( font ); - if(aReload) - { - iNumSymbolTable->LoadVirtualKeypadKeyL(aResId,aCellRects); - } - else - { - iNumSymbolTable->UpdateAllVirtualKeysRect(aCellRects); - } + + iNumSymbolTable->LoadVirtualKeypadKeyL(aResId,aCellRects); } // --------------------------------------------------------------------------- @@ -953,7 +943,7 @@ iLafManager->GetNumVirtualKeyRects( numrects ); // load keys - LoadNumSymbolVirtualKeysL(R_FINGER_HWR_NUMPAD, numrects,EFalse); + LoadNumSymbolVirtualKeysL(R_FINGER_HWR_NUMPAD, numrects); CleanupStack::PopAndDestroy();//rects @@ -964,7 +954,9 @@ rect = iLafManager->CtrlRect(iNumSymbolTable->ControlId()); iNumSymbolTable->SetRect(rect); - iNumSymbolTable->SizeChanged(iLafManager->GetVirtualNumKeyRect()); + iNumSymbolTable->SizeChanged(iLafManager->GetVirtualNumKeyRect(), + iLafManager->GetSymBtnArray(), numpadrows, numpadcols, + iLafManager->IsLandscape()); } @@ -1492,7 +1484,7 @@ // void CPeninputFingerHwrArWnd::SetNumericMapping( const TDesC& aNumMapping ) { - iNumSymbolTable->UpdateTableSymbol(aNumMapping); + iNumSymbolTable->SetNumericMapping(aNumMapping); } // --------------------------------------------------------------------------- // set native number mode on or off. diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericitut/inc/peninputgenericitutdata.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericitut/src/peninputitutchnuimgr.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericitut/src/peninputitutwesternuimgr.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericvkb/group/iconlist.txt --- a/textinput/peninputgenericvkb/group/iconlist.txt Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputgenericvkb/group/iconlist.txt Fri Oct 22 15:38:27 2010 +0100 @@ -40,6 +40,12 @@ -c8,8 qgn_indi_fep_button_capslock.svg -c8,8 qgn_indi_fep_button_capslock_sel.svg -c8,8 qgn_indi_fep_button_shift.svg +-c8,8 qgn_indi_input_page.svg +-c8,8 qgn_indi_input_page1.svg +-c8,8 qgn_indi_input_page2.svg +-c8,8 qgn_indi_input_qwerty_page1_1_ah.svg +-c8,8 qgn_indi_input_qwerty_page1_2_ah.svg +-c8,8 qgn_indi_input_qwerty_page2_2_ah.svg -c8,8 qgn_indi_fep_button_shift_sel.svg -c8,8 qgn_indi_fep_button_hwr.svg -c8,8 qgn_indi_fep_button_hwr_sel.svg diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp --- a/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -1038,7 +1038,7 @@ aDataInfo.iQwtRect = aParentWndRect; TInt v1, v2, gridLayoutVariant; - + // Get the variant for Portrait QWERTY TInt cellVariantForPortraitQWERTY; @@ -1199,6 +1199,7 @@ } } + if ( !isPortraitFSQEnabled || ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) ) { @@ -1230,7 +1231,7 @@ // the key rect without gap rect = keypaneRect.Rect(); - + rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY ); TRect rectXBorder = rect; rect = keylabelRect.Rect(); @@ -1243,14 +1244,14 @@ rect = keypadRect.Rect(); rect.Move( - base.iX, - base.iY ); - + TRect rectOfButtons = rect; // The gap between the top of the first row key and the top of the keyboard gapValue = keypaneRect.Rect().iTl.iY - keypadRect.Rect().iTl.iY; // compute the top left Y coordinate of the function buttons rectOfButtons.iTl.iY = rectOfButtons.iTl.iY + keypaneRect.Rect().Height() * rowNumberOfKeyboard + gapValue; - + TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8; TInt dx = rectOfButtons.iTl.iX; TInt dy = rectOfButtons.iTl.iY; @@ -1716,7 +1717,7 @@ TAknLayoutText keyTextLayout; TAknTextLineLayout keyText; TRect keyRect; - // The gap value of keyboard + // The gap value of keyboard TInt gapValue; TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation(); @@ -1791,12 +1792,11 @@ } rectVkbCtrl = keypadRect.Rect(); - // Compute the gap between first row key's top line and keyboard's top line + // Compute the gap between first row key's top line and keyboard's top line gapValue = keypaneRect.Rect().iTl.iY - rectVkbCtrl.iTl.iY; // Compute keyboard position rectVkbCtrl.iBr.iY = rectVkbCtrl.iTl.iY + keypaneRect.Rect().Height() * 3 + gapValue; rectVkbCtrl.iTl.iY += gapValue; - dataInfo->iKeypad.iKaypadRect = rectVkbCtrl; linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(0).LayoutLine(); @@ -1805,6 +1805,7 @@ linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(0).LayoutLine(); keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout ); + TRect rectOfKeypad = RelativeRect( keypadRect.Rect(), base ); rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); @@ -1826,7 +1827,7 @@ dataInfo->iKeypad.iRects.AppendL( bound ); TRect inner = rectXPane; - inner.Move( j * rectXPane.Width(), i * rectXPane.Height() ); + inner.Move( j * rectXPane.Width(), i * rectXPane.Height() ); TAknLayoutText keyTextLayout; keyTextLayout.LayoutText( inner, keyText ); @@ -1944,13 +1945,11 @@ } rectVkbCtrl = keypadRect.Rect(); - - // Compute the gap between first row key's top line and keyboard's top line + // Compute the gap between first row key's top line and keyboard's top line gapValue = keypaneRect.Rect().iTl.iY - rectVkbCtrl.iTl.iY; // Compute keyboard position rectVkbCtrl.iBr.iY = rectVkbCtrl.iTl.iY + keypaneRect.Rect().Height() * 3 + gapValue; rectVkbCtrl.iTl.iY += gapValue; - dataInfo->iKeypad.iKaypadRect = rectVkbCtrl; linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(2).LayoutLine(); @@ -1959,6 +1958,7 @@ linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(2).LayoutLine(); keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout ); + rectOfKeypad = RelativeRect( keypadRect.Rect(), base ); rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); @@ -1980,7 +1980,7 @@ dataInfo->iKeypad.iRects.AppendL( bound ); TRect inner = rectXPane; - inner.Move( j * rectXPane.Width(), i * rectXPane.Height() ); + inner.Move( j * rectXPane.Width(), i * rectXPane.Height() ); TAknLayoutText keyTextLayout; keyTextLayout.LayoutText( inner, keyText ); @@ -2086,14 +2086,12 @@ keypaneRect.LayoutRect( keypadRect.Rect(), linelayout ); } - rectVkbCtrl = keypadRect.Rect(); - + rectVkbCtrl = keypadRect.Rect(); // Compute the gap between first row key's top line and keyboard's top line gapValue = keypaneRect.Rect().iTl.iY - rectVkbCtrl.iTl.iY; // Compute keyboard position rectVkbCtrl.iBr.iY = rectVkbCtrl.iTl.iY + keypaneRect.Rect().Height() * 4 + gapValue; rectVkbCtrl.iTl.iY += gapValue; - dataInfo->iKeypad.iKaypadRect = rectVkbCtrl; linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(3).LayoutLine(); @@ -2102,6 +2100,7 @@ linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(3).LayoutLine(); keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout ); + rectOfKeypad = RelativeRect( keypadRect.Rect(), base ); rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); @@ -2123,7 +2122,7 @@ dataInfo->iKeypad.iRects.AppendL( bound ); TRect inner = rectXPane; - inner.Move( j * rectXPane.Width(), i * rectXPane.Height() ); + inner.Move( j * rectXPane.Width(), i * rectXPane.Height() ); TAknLayoutText keyTextLayout; keyTextLayout.LayoutText( inner, keyText ); diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp --- a/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -278,6 +278,12 @@ vkbWindow->DimArrowKeys( IsDimArrowKeys ); } break; + case ECmdPeninputVietSyncToneMarker: + { + TBool bDimToneMarker = *aData; + vkbWindow->EnableToneMarker(bDimToneMarker); + } + break; case ECmdPenInputDimEnterKey: { TBool isDimEnterKey = *((TUint16*)( aData )); diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp --- a/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -2247,10 +2247,6 @@ static_cast ( Control( EPeninutWindowCtrlIdMultiRangeBtn ))->SizeChanged( exRect, inRect, ETrue ); - - TRAP_IGNORE( icf->MsgBubbleCtrl()->SetTextL( KEmptyString )); - iIndiWithText = EFalse; - IndiBubbleWithoutText(); } iLafMgr->GetButtonRect(EPeninutWindowCtrlIdOptionBtn,exRect ,inRect); diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputgenericvkb/srcdata/peninputvkbwindow.rss --- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindow.rss Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindow.rss Fri Oct 22 15:38:27 2010 +0100 @@ -722,12 +722,48 @@ rangeid=0; modeid=ECaseUpper; }, - AKN_FEP_BUTTON_MODE + AKN_FEP_BUTTON_MODE { modeimage = r_peninput_layout_vkb_range_case_capslock; rangeid=0; modeid=ECaseText; - } + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_11; + rangeid=0; + modeid=ECaseNumberSpecialPaging11; + } , + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_12; + rangeid=0; + modeid=ECaseNumberSpecialPaging12; + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_22; + rangeid=0; + modeid=ECaseNumberSpecialPaging22; + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_arabic_11; + rangeid=0; + modeid=ECaseNumberSpecialPagingArabic11; + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_arabic_12; + rangeid=0; + modeid=ECaseNumberSpecialPagingArabic12; + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_arabic_22; + rangeid=0; + modeid=ECaseNumberSpecialPagingArabic22; + } }; } @@ -889,6 +925,138 @@ disableskinid=EAknsMinorGenericQgnIndiFepButtonSwitch; } +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_11 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputgenericvkbQgn_indi_input_page; + nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_page_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputPage; + + nactivep=EMbmPeninputgenericvkbQgn_indi_input_page; + nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_page_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputPage; + + active=EMbmPeninputgenericvkbQgn_indi_input_page; + activemsk=EMbmPeninputgenericvkbQgn_indi_input_page_mask; + activeskinid=EAknsMinorGenericQgnIndiInputPage; + + activep=EMbmPeninputgenericvkbQgn_indi_input_page; + activepmsk=EMbmPeninputgenericvkbQgn_indi_input_page_mask; + activepskinid=EAknsMinorGenericQgnIndiInputPage; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_12 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputgenericvkbQgn_indi_input_page1; + nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_page1_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputPage1; + + nactivep=EMbmPeninputgenericvkbQgn_indi_input_page1; + nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_page1_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputPage1; + + active=EMbmPeninputgenericvkbQgn_indi_input_page1; + activemsk=EMbmPeninputgenericvkbQgn_indi_input_page1_mask; + activeskinid=EAknsMinorGenericQgnIndiInputPage1; + + activep=EMbmPeninputgenericvkbQgn_indi_input_page1; + activepmsk=EMbmPeninputgenericvkbQgn_indi_input_page1_mask; + activepskinid=EAknsMinorGenericQgnIndiInputPage1; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_22 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputgenericvkbQgn_indi_input_page2; + nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_page2_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputPage2; + + nactivep=EMbmPeninputgenericvkbQgn_indi_input_page2; + nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_page2_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputPage2; + + active=EMbmPeninputgenericvkbQgn_indi_input_page2; + activemsk=EMbmPeninputgenericvkbQgn_indi_input_page2_mask; + activeskinid=EAknsMinorGenericQgnIndiInputPage2; + + activep=EMbmPeninputgenericvkbQgn_indi_input_page2; + activepmsk=EMbmPeninputgenericvkbQgn_indi_input_page2_mask; + activepskinid=EAknsMinorGenericQgnIndiInputPage2; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_arabic_11 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_1_ah; + nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_1_ah_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputQwertyPage11Ah; + + nactivep=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_1_ah; + nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_1_ah_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputQwertyPage11Ah; + + active=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_1_ah; + activemsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_1_ah_mask; + activeskinid=EAknsMinorGenericQgnIndiInputQwertyPage11Ah; + + activep=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_1_ah; + activepmsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_1_ah_mask; + activepskinid=EAknsMinorGenericQgnIndiInputQwertyPage11Ah; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_arabic_12 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_2_ah; + nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_2_ah_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputQwertyPage12Ah; + + nactivep=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_2_ah; + nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_2_ah_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputQwertyPage12Ah; + + active=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_2_ah; + activemsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_2_ah_mask; + activeskinid=EAknsMinorGenericQgnIndiInputQwertyPage12Ah; + + activep=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_2_ah; + activepmsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page1_2_ah_mask; + activepskinid=EAknsMinorGenericQgnIndiInputQwertyPage12Ah; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_arabic_22 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page2_2_ah; + nactivemsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page2_2_ah_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputQwertyPage22Ah; + + nactivep=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page2_2_ah; + nactivepmsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page2_2_ah_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputQwertyPage22Ah; + + active=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page2_2_ah; + activemsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page2_2_ah_mask; + activeskinid=EAknsMinorGenericQgnIndiInputQwertyPage22Ah; + + activep=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page2_2_ah; + activepmsk=EMbmPeninputgenericvkbQgn_indi_input_qwerty_page2_2_ah_mask; + activepskinid=EAknsMinorGenericQgnIndiInputQwertyPage22Ah; + } + RESOURCE LBUF r_peninput_vkb_accent1 { txt=qtn_tin_vkb_accented_set1; diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/inc/peninputsplititutdata.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/inc/peninputsplititutdatamgr.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/inc/peninputsplititutlayout.h --- a/textinput/peninputsplititut/inc/peninputsplititutlayout.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputsplititut/inc/peninputsplititutlayout.h Fri Oct 22 15:38:27 2010 +0100 @@ -309,7 +309,35 @@ * @return chinese ui mgr */ CSplitItutUiMgrBase* ChineseUiManager(); - + + /** + * Handle show candidate list command + * + * + * @aData pointer is sent from FEP, point to a TPtrC + * @return None + */ + void HandleShowMatchListCmdL( TUint8* aData ); + + /** + * Read text stored in a block of memory into HBufC + * + * + * @aData aStartPtr the starting address of a block of memory with a string in it + * @aLength The length of the string + * @return pointer of a HBufC storing the string in it + */ + HBufC* ReadTextInfoHBufCL( TUint16* aStartPtr, TInt aLength ); + + /** + * Handle select candidate list item command + * + * + * @aData pointer is sent from FEP, point to a TPtrC + * @return None + */ + void HandleSelectServerCandItemL( TUint8* aData ); + private: /** * data manager. diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/inc/peninputsplititutwesternuistatespelling.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/inc/peninputsplititutwindow.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/src/peninputsplititutchnuimgr.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/src/peninputsplititutdatamgr.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/src/peninputsplititutlayout.cpp --- a/textinput/peninputsplititut/src/peninputsplititutlayout.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputsplititut/src/peninputsplititutlayout.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -34,6 +34,7 @@ #include #include +#include #include "peninputsplititutlayout.h" #include "peninputsplititutdatamgr.h" @@ -44,6 +45,12 @@ #include "peninputsplititutconverter.h" #include "peninputsplititutwindowmanager.h" +// Buffer size +const TInt KServerBufferSize = 8; + +// TInt number in command, used to show candidate list +const TInt KStartIntNumber = 3; +const TInt KEndIntNumber = 4; // --------------------------------------------------------------------------- // CSplitItutUiLayout::NewL @@ -207,7 +214,6 @@ case ECmdPenInputFingerKeyPress: case ECmdPenInputFingerLongKeyPress: case ECmdPenInputCase: - case ECmdPenInputFingerMatchSelection: case ECmdPenInputFingerSpelling: { if (UiMgr()) @@ -218,14 +224,18 @@ } } break; + case ECmdPenInputFingerMatchSelection: + { + TBool special = *(reinterpret_cast(aData)); + if( !special ) + { + SignalOwner( ESignalHideServerCandidate ); + } + } + break; case ECmdPenInputFingerMatchList: { - if (UiMgr()) - { - TInt handled = KErrNone; - TRAP_IGNORE(handled = UiMgr()->HandleCommandL(aCmd, aData)); - return handled; - } + TRAP_IGNORE( HandleShowMatchListCmdL( aData ) ); } break; case ECmdPenInputNoFreeSpace: @@ -291,7 +301,11 @@ // iWindowMgr->ShowBubble(*aData); } break; - + case ECmdPeninputSelectServerCandidate: + { + TRAP_IGNORE( HandleSelectServerCandItemL( aData ) ); + } + break; default: break; } @@ -549,5 +563,141 @@ return iChnUiMgr; } + +// --------------------------------------------------------------------------- +// Handle show candidate list command. +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::HandleShowMatchListCmdL( TUint8* aData ) + { + RDesReadStream readStream; + TPtr8 buf8( aData, KStartIntNumber * sizeof( TInt ), + KStartIntNumber * sizeof( TInt ) ); + readStream.Open(buf8); + CleanupClosePushL(readStream); + + TInt candcount = readStream.ReadInt32L(); + TInt totalsize = readStream.ReadInt32L(); + TInt langcode = readStream.ReadInt32L(); + TBidiText::TDirectionality dir = + TBidiText::ScriptDirectionality( ( TLanguage ) langcode ); + CGraphicsContext::TTextAlign align = ( dir == TBidiText::ELeftToRight ) ? + CGraphicsContext::ELeft : + CGraphicsContext::ERight; + CleanupStack::PopAndDestroy(&readStream); + + CDesCArray* itemArray = NULL; + if ( candcount > 0 ) + { + TUint8* curPointer = aData + sizeof(TInt) * KStartIntNumber; + itemArray = new (ELeave) CDesCArrayFlat( candcount ); + CleanupStack::PushL( itemArray ); + for ( TInt i = 0; i < candcount; i++ ) + { + // Get length + buf8.Set( curPointer, sizeof( TInt32 ), sizeof( TInt32 ) ); + readStream.Open( buf8 ); + CleanupClosePushL( readStream ); + TInt32 textSize = 0; + textSize = readStream.ReadInt32L(); + CleanupStack::PopAndDestroy( &readStream ); + if ( textSize > 0 ) + { + // Get text + curPointer += sizeof( TInt32 ); + HBufC* itemText = ReadTextInfoHBufCL + ( (TUint16*)curPointer, + ( textSize + 1 )/ 2 ); + if ( itemText ) + { + CleanupStack::PushL( itemText ); + itemArray->AppendL( *itemText ); + CleanupStack::PopAndDestroy( itemText ); + } + curPointer += textSize; + } + } + + buf8.Set( curPointer, sizeof( TInt32 ) * KEndIntNumber, + sizeof( TInt32 ) * KEndIntNumber ); + readStream.Open( buf8 ); + CleanupClosePushL( readStream ); + TRect rect; + rect.iTl.iX = readStream.ReadInt32L(); + rect.iTl.iY = readStream.ReadInt32L(); + rect.iBr.iX = readStream.ReadInt32L(); + rect.iBr.iY = readStream.ReadInt32L(); + CleanupStack::PopAndDestroy( &readStream ); + + TPeninputCandidateData cmd; + cmd.iAlign = ( TInt ) align; + cmd.iInitRect = rect; + cmd.iSpellEnabled = ETrue; + cmd.iTextWidthEnabled = ETrue; + cmd.iItemArray = itemArray; + cmd.iActiveIndex = 0; + + TPtrC buf( reinterpret_cast( &cmd ), sizeof( cmd ) ); + SignalOwner( ESignalShowServerCandidate, buf ); + + CleanupStack::PopAndDestroy( itemArray ); + } + } + +// --------------------------------------------------------------------------- +// Read text stored in a block of memory into HBufC. +// --------------------------------------------------------------------------- +// +HBufC* CSplitItutUiLayout::ReadTextInfoHBufCL( TUint16* aStartPtr, + TInt aLength ) + { + HBufC* itemText = NULL; + if ( aLength > 0 ) + { + itemText = HBufC::NewLC( aLength ); + TPtr itemTextPtr = itemText->Des(); + itemTextPtr.Copy( aStartPtr, aLength ); + CleanupStack::Pop( itemText ); + } + return itemText; + } + +// --------------------------------------------------------------------------- +// Handle select candidate list item command. +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::HandleSelectServerCandItemL( TUint8* aData ) + { + TPtr8* ptr = reinterpret_cast< TPtr8* > ( aData ); + RDesReadStream readStream; + readStream.Open( *ptr ); + CleanupClosePushL( readStream ); + TInt command = readStream.ReadInt32L(); + TInt focusItem = readStream.ReadInt32L(); + CleanupStack::PopAndDestroy(&readStream); + + switch ( command ) + { + case ECandItemCmdItemSelected: + { + TBool commit = ETrue; + TBuf buf; + buf.Append( reinterpret_cast< TUint16* >( &focusItem ), + sizeof( TInt ) ); + buf.Append( reinterpret_cast< TUint16* >( &commit ), + sizeof( TBool ) ); + SignalOwner ( ESignalSelectMatchSelectionText, buf ); + } + break; + case ECandItemCmdEnterSpellMode: + { + SignalOwner ( ESignalEnterSpellMode ); + } + break; + default: + break; + } + } + // End Of File diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp --- a/textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -133,23 +133,14 @@ } iCurrentState = newstate; - 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(); - } + if(DataMgr()->IsUpdate()) + { + DataMgr()->SetUpdate(EFalse); + CSplitItutUiLayout* itutLayout = + static_cast( LayoutContext()->UiLayout() ); + itutLayout->SizeChanged( NULL ); + } + iCurrentState->OnEntryL(); } // --------------------------------------------------------------------------- diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/src/peninputsplititutwesternuistatespelling.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/src/peninputsplititutwindow.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplititut/src/peninputsplititutwindowmanager.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplitqwerty/group/iconlist.txt --- a/textinput/peninputsplitqwerty/group/iconlist.txt Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputsplitqwerty/group/iconlist.txt Fri Oct 22 15:38:27 2010 +0100 @@ -40,6 +40,12 @@ -c8,8 qgn_indi_fep_button_capslock.svg -c8,8 qgn_indi_fep_button_capslock_sel.svg -c8,8 qgn_indi_fep_button_shift.svg +-c8,8 qgn_indi_input_page.svg +-c8,8 qgn_indi_input_page1.svg +-c8,8 qgn_indi_input_page2.svg +-c8,8 qgn_indi_input_qwerty_page1_1_ah.svg +-c8,8 qgn_indi_input_qwerty_page1_2_ah.svg +-c8,8 qgn_indi_input_qwerty_page2_2_ah.svg -c8,8 qgn_indi_fep_button_shift_sel.svg -c8,8 qgn_indi_fep_button_hwr.svg -c8,8 qgn_indi_fep_button_hwr_sel.svg diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplitqwerty/inc/peninputsplitqwertylafdatamgr.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h --- a/textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h Fri Oct 22 15:38:27 2010 +0100 @@ -265,6 +265,34 @@ */ void HandleVirtualKeyUpL( TInt aEventType, CFepUiBaseCtrl* aCtrl, const TDesC& aEventData ); + + /** + * Handle show candidate list command + * + * + * @aData pointer is sent from FEP, point to a TPtrC + * @return None + */ + void HandleShowCandidateListCmdL( TUint8* aData ); + + /** + * Read text stored in a block of memory into HBufC + * + * + * @aData aStartPtr the starting address of a block of memory with a string in it + * @aLength The length of the string + * @return pointer of a HBufC storing the string in it + */ + HBufC* ReadTextInfoHBufCL( TUint16* aStartPtr, TInt aLength ); + + /** + * Handle select candidate list item command + * + * + * @aData pointer is sent from FEP, point to a TPtrC + * @return None + */ + void HandleSelectServerCandItemL( TUint8* aData ); private: diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp --- a/textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -379,7 +379,7 @@ } } - // Compute the gap between first row key's top line and keyboard's top line + // Compute the gap between first row key's top line and keyboard's top line gapValue = keypaneRect.Rect().iTl.iY - keypadRect.Rect().iTl.iY; // Compute function button's top left Y coordinate rectOfButtons.iTl.iY = rectOfButtons.iTl.iY + @@ -414,7 +414,7 @@ data->iKeypad.iRects.AppendL( bound ); TRect inner = rectXPane; - inner.Move( j * rectXPane.Width(), i * rectXPane.Height() ); + inner.Move( j * rectXPane.Width(), i * rectXPane.Height() ); TAknLayoutText keyTextLayout; keyTextLayout.LayoutText( inner, keyText ); @@ -426,10 +426,8 @@ //all template rects are relative to TL of buttons row rectXPane = keypaneRect.Rect(); - // The key rect without gap rectXBorder = RelativeRect( keypaneRect.Rect(), rectXPane.iTl ); - rectXInner = RelativeRect( keylabelRect.Rect(), rectXPane.iTl ); TRect rect3PicPane = RelativeRect( pic3paneRect.Rect(), rectXPane.iTl ); rectXPane.Move( - rectXPane.iTl ); diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplitqwerty/src/peninputsplitqwertylayout.cpp --- a/textinput/peninputsplitqwerty/src/peninputsplitqwertylayout.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertylayout.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -31,6 +31,7 @@ #include #include +#include // User includes #include "peninputsplitqwerty.hrh" @@ -57,6 +58,9 @@ 0xF73A,0xF747,0xF748,0xF749,0xF74A,0xF74B,0xF74C,0xF74D }; +// TInt number in command, used to show candidate list +const TInt KStartIntNumber = 3; +const TInt KEndIntNumber = 4; // --------------------------------------------------------------------------- // Symbian constructor // --------------------------------------------------------------------------- @@ -185,6 +189,12 @@ vkbWindow->DimArrowKeys( IsDimArrowKeys ); } break; + case ECmdPeninputVietSyncToneMarker: + { + TBool bDimToneMarker = *aData; + vkbWindow->EnableToneMarker(bDimToneMarker); + } + break; case ECmdPenInputSetPromptText: break; case ECmdPenInputCharacterPreview: @@ -197,11 +207,26 @@ iInEditWordQueryDlg = *aData; } break; + case ECmdPenInputPopupCandidateList: + { + TRAP_IGNORE( HandleShowCandidateListCmdL( aData ) ); + } + break; + case ECmdPenInputHideCandidateList: + { + SignalOwner( ESignalHideServerCandidate ); + } + break; case ECmdPeninputITIStatus: { // Set the flag to indicate if FSQ with ITI feature is opened iITIEnabled = CPeninputDataConverter::AnyToInt( aData ); - } + } + break; + case ECmdPeninputSelectServerCandidate: + { + TRAP_IGNORE( HandleSelectServerCandItemL( aData ) ); + } break; default: { @@ -261,16 +286,6 @@ // TInt CPeninputSplitQwertyLayout::SizeChanged( const TAny* aData ) { - CPeninputSplitQwertyWindow* - win = static_cast( iLayoutWindow ); - - if ( win ) - { - win->UpdateLafData(); - - win->UpdateLayoutPosAndSize(); - } - return CPeninputCommonLayoutExt::SizeChanged( aData ); } @@ -425,4 +440,130 @@ } } + +// --------------------------------------------------------------------------- +// Handle show candidate list command. +// --------------------------------------------------------------------------- +// +void CPeninputSplitQwertyLayout::HandleShowCandidateListCmdL( TUint8* aData ) + { + // Read candidate data from a block of memory staring from aData + // The format is activeIndex | count of candiates | + // length 1 | text 1 | length 2 | text 2 |... + TPtr8 buf8( aData, sizeof( TInt32 ) * KStartIntNumber, + sizeof( TInt32 ) * KStartIntNumber ); + RDesReadStream readStream; + readStream.Open( buf8 ); + CleanupClosePushL( readStream ); + // Get activeIndex + TInt activeIndex = readStream.ReadInt32L(); + // Get coutn of candidates + TInt count = readStream.ReadInt32L(); + TInt langCode = readStream.ReadInt32L(); + TBidiText::TDirectionality dir = + TBidiText::ScriptDirectionality( ( TLanguage )langCode ); + CGraphicsContext::TTextAlign align = ( dir == TBidiText::ELeftToRight ) ? + CGraphicsContext::ELeft : + CGraphicsContext::ERight; + CleanupStack::PopAndDestroy( &readStream ); + + CDesCArray* itemArray = NULL; + if ( count > 0 ) + { + TUint8* curPointer = aData + sizeof( TInt ) * KStartIntNumber; + itemArray = new ( ELeave ) CDesCArrayFlat( count ); + CleanupStack::PushL( itemArray ); + for ( TInt i = 0; i < count; i++ ) + { + // Get length + buf8.Set( curPointer, sizeof( TInt32 ), sizeof( TInt32 ) ); + readStream.Open( buf8 ); + CleanupClosePushL( readStream ); + TInt32 textSize = 0; + textSize = readStream.ReadInt32L(); + CleanupStack::PopAndDestroy( &readStream ); + if ( textSize > 0 ) + { + // Get text + curPointer += sizeof( TInt32 ); + HBufC* itemText = ReadTextInfoHBufCL + ( (TUint16*)curPointer, + ( textSize + 1 )/ 2 ); + if ( itemText ) + { + CleanupStack::PushL( itemText ); + itemArray->AppendL( *itemText ); + CleanupStack::PopAndDestroy( itemText ); + } + curPointer += textSize; + } + } + + buf8.Set( curPointer, sizeof( TInt32 ) * KEndIntNumber, + sizeof( TInt32 ) * KEndIntNumber ); + readStream.Open( buf8 ); + CleanupClosePushL( readStream ); + TRect rect; + rect.iTl.iX = readStream.ReadInt32L(); + rect.iTl.iY = readStream.ReadInt32L(); + rect.iBr.iX = readStream.ReadInt32L(); + rect.iBr.iY = readStream.ReadInt32L(); + CleanupStack::PopAndDestroy( &readStream ); + + TPeninputCandidateData cmd; + cmd.iAlign = ( TInt ) align; + cmd.iInitRect = rect; + cmd.iSpellEnabled = EFalse; + cmd.iTextWidthEnabled = EFalse; + cmd.iItemArray = itemArray; + cmd.iActiveIndex = activeIndex; + + TPtrC buf( reinterpret_cast( &cmd ), sizeof( cmd ) ); + SignalOwner( ESignalShowServerCandidate, buf ); + + CleanupStack::PopAndDestroy( itemArray ); + } + } + + +// --------------------------------------------------------------------------- +// Read text stored in a block of memory into HBufC. +// --------------------------------------------------------------------------- +// +HBufC* CPeninputSplitQwertyLayout::ReadTextInfoHBufCL( TUint16* aStartPtr, + TInt aLength ) + { + HBufC* itemText = NULL; + if ( aLength > 0 ) + { + itemText = HBufC::NewLC( aLength ); + TPtr itemTextPtr = itemText->Des(); + itemTextPtr.Copy( aStartPtr, aLength ); + CleanupStack::Pop( itemText ); + } + return itemText; + } + +// --------------------------------------------------------------------------- +// Handle select candidate list item command. +// --------------------------------------------------------------------------- +// +void CPeninputSplitQwertyLayout::HandleSelectServerCandItemL( TUint8* aData ) + { + TPtr8* ptr = reinterpret_cast< TPtr8* > ( aData ); + RDesReadStream readStream; + readStream.Open( *ptr ); + CleanupClosePushL( readStream ); + TInt command = readStream.ReadInt32L(); + TInt focusItem = readStream.ReadInt32L(); + CleanupStack::PopAndDestroy(&readStream); + + if ( command == ECandItemCmdItemSelected ) + { + TPtrC buf( reinterpret_cast< TUint16* >( &focusItem ), + sizeof( TInt ) ); + SignalOwner ( ESignalSelectCandidate, buf ); + } + } + // End Of File diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss --- a/textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss Fri Oct 22 15:38:27 2010 +0100 @@ -602,7 +602,43 @@ modeimage = r_peninput_layout_vkb_range_case_capslock; rangeid=0; modeid=ECaseText; - } + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_11; + rangeid=0; + modeid=ECaseNumberSpecialPaging11; + } , + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_12; + rangeid=0; + modeid=ECaseNumberSpecialPaging12; + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_22; + rangeid=0; + modeid=ECaseNumberSpecialPaging22; + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_arabic_11; + rangeid=0; + modeid=ECaseNumberSpecialPagingArabic11; + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_arabic_12; + rangeid=0; + modeid=ECaseNumberSpecialPagingArabic12; + }, + AKN_FEP_BUTTON_MODE + { + modeimage = r_peninput_layout_vkb_range_case_paging_arabic_22; + rangeid=0; + modeid=ECaseNumberSpecialPagingArabic22; + } }; } @@ -764,6 +800,139 @@ disableskinid=EAknsMinorGenericQgnIndiFepButtonSwitch; } +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_11 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputsplitqwertyQgn_indi_input_page; + nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_page_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputPage; + + nactivep=EMbmPeninputsplitqwertyQgn_indi_input_page; + nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_page_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputPage; + + active=EMbmPeninputsplitqwertyQgn_indi_input_page; + activemsk=EMbmPeninputsplitqwertyQgn_indi_input_page_mask; + activeskinid=EAknsMinorGenericQgnIndiInputPage; + + activep=EMbmPeninputsplitqwertyQgn_indi_input_page; + activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_page_mask; + activepskinid=EAknsMinorGenericQgnIndiInputPage; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_12 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputsplitqwertyQgn_indi_input_page1; + nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_page1_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputPage1; + + nactivep=EMbmPeninputsplitqwertyQgn_indi_input_page1; + nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_page1_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputPage1; + + active=EMbmPeninputsplitqwertyQgn_indi_input_page1; + activemsk=EMbmPeninputsplitqwertyQgn_indi_input_page1_mask; + activeskinid=EAknsMinorGenericQgnIndiInputPage1; + + activep=EMbmPeninputsplitqwertyQgn_indi_input_page1; + activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_page1_mask; + activepskinid=EAknsMinorGenericQgnIndiInputPage1; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_22 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputsplitqwertyQgn_indi_input_page2; + nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_page2_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputPage2; + + nactivep=EMbmPeninputsplitqwertyQgn_indi_input_page2; + nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_page2_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputPage2; + + active=EMbmPeninputsplitqwertyQgn_indi_input_page2; + activemsk=EMbmPeninputsplitqwertyQgn_indi_input_page2_mask; + activeskinid=EAknsMinorGenericQgnIndiInputPage2; + + activep=EMbmPeninputsplitqwertyQgn_indi_input_page2; + activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_page2_mask; + activepskinid=EAknsMinorGenericQgnIndiInputPage2; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_arabic_11 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_1_ah; + nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_1_ah_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputQwertyPage11Ah; + + nactivep=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_1_ah; + nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_1_ah_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputQwertyPage11Ah; + + active=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_1_ah; + activemsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_1_ah_mask; + activeskinid=EAknsMinorGenericQgnIndiInputQwertyPage11Ah; + + activep=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_1_ah; + activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_1_ah_mask; + activepskinid=EAknsMinorGenericQgnIndiInputQwertyPage11Ah; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_arabic_12 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_2_ah; + nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_2_ah_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputQwertyPage12Ah; + + nactivep=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_2_ah; + nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_2_ah_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputQwertyPage12Ah; + + active=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_2_ah; + activemsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_2_ah_mask; + activeskinid=EAknsMinorGenericQgnIndiInputQwertyPage12Ah; + + activep=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_2_ah; + activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page1_2_ah_mask; + activepskinid=EAknsMinorGenericQgnIndiInputQwertyPage12Ah; + } + +RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_range_case_paging_arabic_22 + { + bmpfile=PENINPUT_LAYOUT_VKB_BMP; + imgmajorskinid=EAknsMajorGeneric; + + nactive=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page2_2_ah; + nactivemsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page2_2_ah_mask; + nactiveskinid=EAknsMinorGenericQgnIndiInputQwertyPage22Ah; + + nactivep=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page2_2_ah; + nactivepmsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page2_2_ah_mask; + nactivepskinid=EAknsMinorGenericQgnIndiInputQwertyPage22Ah; + + active=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page2_2_ah; + activemsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page2_2_ah_mask; + activeskinid=EAknsMinorGenericQgnIndiInputQwertyPage22Ah; + + activep=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page2_2_ah; + activepmsk=EMbmPeninputsplitqwertyQgn_indi_input_qwerty_page2_2_ah_mask; + activepskinid=EAknsMinorGenericQgnIndiInputQwertyPage22Ah; + } + + RESOURCE LBUF r_peninput_vkb_accent1 { txt=qtn_tin_vkb_accented_set1; diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputvkbcn/ctrlsrc/peninputvkbclientarea.cpp --- a/textinput/peninputvkbcn/ctrlsrc/peninputvkbclientarea.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputvkbcn/ctrlsrc/peninputvkbclientarea.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -952,10 +952,10 @@ TRect compositionRect; TRect innerRect; - // Get composition area rect from laf + // Get composition area rect from laf TRect compositionAreaFromLaf = iLafMgr->compositionLayoutData(); TInt GapValue = compositionAreaFromLaf.iTl.iX; - + if (range == ERangeNative) { if ( layoutType == EAknFepVkbImCnZhuyin ) @@ -1011,14 +1011,14 @@ compositionRect.SetSize(TSize(btnWidth * 3 + iCellAidGap - GapValue, candidateHeight)); } - else - { - compositionRect.iTl = Rect().iTl; - // move the composition area rect with gap + else + { + compositionRect.iTl = Rect().iTl; + // move the composition area rect with gap compositionRect.iTl.iX += GapValue; compositionRect.SetSize( TSize( btnWidth * 3 + iCellAidGap - GapValue * 2, candidateHeight )); - } + } iCompositionField->SetReady(ETrue); iCompositionField->Hide(EFalse); iCompositionField->SizeChanged(compositionRect); @@ -1057,7 +1057,7 @@ } else { - // move the gap + // move the gap compositionRect.iTl.iX -= GapValue; iVkbBoardLeftTop = TPoint(compositionRect.iTl.iX, compositionRect.iBr.iY); } @@ -1080,21 +1080,18 @@ vkbCtrl->SetTextFormat( iLafMgr->KeyTextLayout() ); //Read laf TInt tempHeightForFSQ = btnHeight; - // Modify begin //if (UiLayout()->PenInputType() == EPluginInputModeFSQ ) // { // tempHeightForFSQ = btnHeight + 3; // } TPoint rangeBarRefPoint = TPoint(vkbRect.iTl.iX, vkbRect.iBr.iY); - // Modify begin //rangeBarRefPoint.iY += yAxisOffset; if (range != ERangeNative) { TRect shiftRect; shiftRect.iTl = TPoint(Rect().iTl.iX, vkbRect.iBr.iY); - // Modify begin //shiftRect.iTl.iY += yAxisOffset; shiftRect.SetSize(TSize(btnWidth, tempHeightForFSQ)); AknPenImageUtils::CalculateGraphicRect( shiftRect, innerRect ); diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputvkbcn/inc/peninputvkbcnlafdatamgr.h --- a/textinput/peninputvkbcn/inc/peninputvkbcnlafdatamgr.h Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputvkbcn/inc/peninputvkbcnlafdatamgr.h Fri Oct 22 15:38:27 2010 +0100 @@ -171,8 +171,8 @@ * LAF data for tooltip box */ TPeninputCnTooltipBoxLayoutData iTooltipBox; - - /* + + /* * LAF data for composition area */ TRect iCompositionRect; @@ -201,8 +201,8 @@ const TPeninputCnKeyLayoutData& KeypadLayoutData() const ; const TPeninputCnRangeBarLayoutData& RangbarLayoutData() const; const CPeninputCnQwtLayoutDataInfo& QwtLayoutData() const; - - /* + + /* * Get layout rect for composition area * * @param none @@ -445,15 +445,15 @@ * @return The layout data for tooltip box */ const TPeninputCnTooltipBoxLayoutData& TooltipBoxLayoutData() const; - - /* + + /* * Get layout rect for composition area * * @param none * @return rect of composition area */ const TRect& compositionLayoutData() const; - + protected: /** diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputvkbcn/src/peninputvkbcnlafdatamgr.cpp --- a/textinput/peninputvkbcn/src/peninputvkbcnlafdatamgr.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputvkbcn/src/peninputvkbcnlafdatamgr.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -233,7 +233,7 @@ ASSERT(iLafData); return iLafData->KeypadLayoutData().iKaypadRect; } - + // --------------------------------------------------------------------------- // CPeninputCnGenericVkbLafMgr::compositionLayoutData // (other items were commented in a header) @@ -243,8 +243,8 @@ { ASSERT(iLafData); return iLafData->compositionLayoutData(); - } - + } + // --------------------------------------------------------------------------- // CPeninputCnGenericVkbLafMgr::ICFRect // (other items were commented in a header) @@ -698,7 +698,7 @@ ASSERT( IsValid()); return iLayoutDataInfo[iLayoutType]->iCompositionRect; } - + // --------------------------------------------------------------------------- // CPeninputLafDataCommon::RangbarLayoutData(TInt aRangbarID) // (other items were commented in a header) @@ -876,13 +876,13 @@ aDataInfo.iRightButton.iRect = cellBtnRect.Rect(); aDataInfo.iRightButton.iInnerRect = cellBtnRect.Rect(); } - - // Read composition area laf data + + // Read composition area laf data TAknWindowLineLayout compositionWindowLineLayout = AknLayoutScalable_Avkon::vkb2_top_candi_pane(0).LayoutLine(); TAknLayoutRect compositionLayoutRect; compositionLayoutRect.LayoutRect( toppaneRect.Rect(), compositionWindowLineLayout ); - aDataInfo.iCompositionRect = compositionLayoutRect.Rect(); + aDataInfo.iCompositionRect = compositionLayoutRect.Rect(); // bottom pane const TInt VKBParamBottom2Range[] = { 6, 8, 8 }; diff -r 315ee003fe38 -r 9eb76adaa71f textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp --- a/textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -490,13 +490,6 @@ 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(); } @@ -628,7 +621,8 @@ x = 0; y = 0; } - + + for ( TInt i = 0; i < count; i++ ) { controlID = controlList[i]->ControlID(); @@ -693,9 +687,7 @@ TRAP_IGNORE(SetRangeBarSizeL(x, y)); } } - } - - RootControl()->Draw(); + } } void CPeninputVkbKrWindow::DoCaseChange( TInt aNewCase ) @@ -1203,6 +1195,7 @@ { iTableUpButton->Hide(EFalse); iTableUpButton->SizeChanged( exRect, inRect, ETrue ); + iTableUpButton->Draw(); } iLafMgr->GetButtonRect( @@ -1265,6 +1258,7 @@ { iTablePageLabel->Hide(EFalse); iTablePageLabel->SizeChanged( exRect, inRect, ETrue ); + iTablePageLabel->Draw(); } iLafMgr->GetButtonRect( @@ -1281,6 +1275,7 @@ { iTableDownButton->Hide(EFalse); iTableDownButton->SizeChanged( exRect, inRect, ETrue ); + iTableDownButton->Draw(); } TRect updateArea; @@ -1476,7 +1471,7 @@ buf.Format(_L("%d/%d"),SymbolTableUtil::FindIndex(vkbLayoutToUpdate)+1,KMaxSymbolTable); //iTablePageLabel->SetCaptionL(buf); iTablePageLabel->SetTextL(buf); - RootControl()->Draw(); + iTablePageLabel->Draw(); } } diff -r 315ee003fe38 -r 9eb76adaa71f textinput/ptienginev2/src/PtiEngineImpl.cpp --- a/textinput/ptienginev2/src/PtiEngineImpl.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/ptienginev2/src/PtiEngineImpl.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -768,7 +768,6 @@ return KErrNoSuitableCore; } - // --------------------------------------------------------------------------- // Group Unicode is that kind of mapping which one visible character with more // than one unicode submitted. @@ -790,7 +789,7 @@ { aResult.Append(aKey); } - } + } // --------------------------------------------------------------------------- @@ -882,7 +881,7 @@ IsGroupUnicodeExist(aKey, mappings, 0); if(mappings.Length() == 1) { - Core()->AppendKeyPress(aKey); + Core()->AppendKeyPress(aKey); } else { @@ -1156,7 +1155,7 @@ TPtrC CPtiEngineImpl::RedirectKeyForChineseQwerty(TPtiKey aKey, TBool& aRedirected) { aRedirected = EFalse; - TPtiKeyboardType kbdType = KeyboardType(); + TPtiKeyboardType kbdType = KeyboardType(); TBuf data; TInt key; diff -r 315ee003fe38 -r 9eb76adaa71f textinput/ptienginev2/src/PtiKeyMappings.cpp --- a/textinput/ptienginev2/src/PtiKeyMappings.cpp Fri Sep 17 17:26:50 2010 +0100 +++ b/textinput/ptienginev2/src/PtiKeyMappings.cpp Fri Oct 22 15:38:27 2010 +0100 @@ -19,7 +19,6 @@ #include "PtiKeyMappings.h" #include - // CONSTANTS #ifdef _DEBUG _LIT(KPtiNoKeyMapDataPanic, "PtiEngine: No ITU-T keymap data set.");