diff -r 000000000000 -r eb1f2e154e89 textinput/peninputvkbkr/src/PeninputVkbKrLayout.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputvkbkr/src/PeninputVkbKrLayout.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,516 @@ +/* +* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0"" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: peninput VKB data manager +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "PeninputVkbKrDbg.h" +#include "PeninputVkbKrLayout.h" +#include "PeninputVkbKrWindow.h" +#include "PeninputVkbKrDataMgr.h" + +#include "PeninputVkbKrUiStateType.h" +#include "PeninputVkbKrUiStateNone.h" +#include "PeninputVkbKrUiStateStandby.h" + +/* Teleca change begin, 21.05.2009 ssal */ +const TInt KPeriodicTimerIntervalSec(2500000); +/* Teleca change end, 21.05.2009 ssal */ +// --------------------------------------------------------------------------- +// Constructors & Destructors +// --------------------------------------------------------------------------- +// + +CPeninputVkbKrLayout* CPeninputVkbKrLayout::NewL( + MLayoutOwner* aLayoutOwner, + const TAny* aInitData, + const TInt& aInputMode) + { + CPeninputVkbKrLayout* self = + new (ELeave) CPeninputVkbKrLayout(aLayoutOwner,aInputMode); + CleanupStack::PushL(self); + self->ConstructL(aInitData); + CleanupStack::Pop(self); + return self; + } + +CPeninputVkbKrLayout::CPeninputVkbKrLayout( + MLayoutOwner* aLayoutOwner, + const TInt& aInputMode) + : CPeninputCommonLayoutExt(aLayoutOwner), + iInputMode(aInputMode), + iInEditWordQueryDlg(EFalse) + { + } + +void CPeninputVkbKrLayout::ConstructL(const TAny* aInitData) + { + LOG(""); + LOG("Vkb.Layout.ConstructL=================================="); + + iPtiEngine=CPtiEngine::NewL(); +#ifdef RD_INTELLIGENT_TEXT_INPUT + iPtiEngine->ActivateLanguageL(ELangKorean,EPtiEngineQwertyKorean); +#else + iPtiEngine->ActivateLanguageL(ELangKorean,EPtiEngineQwerty); +#endif //RD_INTELLIGENT_TEXT_INPUT + + CPeninputCommonLayoutExt::ConstructL(aInitData); + CPeninputVkbKrUiStateNone* stateNone= + CPeninputVkbKrUiStateNone::NewL(UiStateMgr(),this,*iPtiEngine); + UiStateMgr()->AddUiState(stateNone,EPeninputVkbKrUiStateNone); + CPeninputVkbKrUiStateStandby* stateStandby= + CPeninputVkbKrUiStateStandby::NewL(UiStateMgr(),this,*iPtiEngine); + UiStateMgr()->AddUiState(stateStandby,EPeninputVkbKrUiStateStandby); + UiStateMgr()->SetCurrentUiState(EPeninputVkbKrUiStateNone); + + /* Teleca change begin, 21.05.2009 ssal */ + iInfoTimer = CPeriodic::NewL(CActive::EPriorityStandard); + /* Teleca change end, 21.05.2009 ssal */ + } + +CPeninputVkbKrLayout::~CPeninputVkbKrLayout() + { + delete iPtiEngine; + + /* Teleca change begin, 21.05.2009 ssal */ + if (iInfoTimer) + { + iInfoTimer->Cancel(); + } + delete iInfoTimer; + /* Teleca change end, 21.05.2009 ssal */ + } + +// --------------------------------------------------------------------------- +// from CFepUiLayout +// --------------------------------------------------------------------------- +// + +TBool CPeninputVkbKrLayout::HandleEventL( + TEventType aType, + const TAny* aData) + { + LOG1("Vkb.Layout.HandleEventL %d",aType); + return CPeninputCommonLayoutExt::HandleEventL(aType,aData); + } + +TInt CPeninputVkbKrLayout::HandleCommand(TInt aCmd, TUint8* aData) + { + CPeninputVkbKrWindow* vkbWindow = + static_cast(iLayoutWindow); + switch ( aCmd ) + { + case ECmdPenInputRange: + vkbWindow->PreProcessRange(*aData); + break; + default: + break; + } + + TInt ret(CPeninputCommonLayoutExt::HandleCommand(aCmd,aData)); + switch ( aCmd ) + { + case ECmdPenInputPermittedRange: + LOG("Vkb.Layout.HandleCommand ECmdPenInputPermittedRange"); + break; + case ECmdPenInputEditorNumericKeyMap: + LOG("Vkb.Layout.HandleCommand ECmdPenInputEditorNumericKeyMap"); + break; + case ECmdPenInputCase: + LOG("Vkb.Layout.HandleCommand ECmdPenInputCase"); + break; + case ECmdPenInputLanguage: + LOG("Vkb.Layout.HandleCommand ECmdPenInputLanguage"); + UiStateMgr()->CurrentUiState()->HandleControlEvent(EPeninputLayoutEventOpen,KNullDesC); + break; + case ECmdPenInputEditorState: + LOG("Vkb.Layout.HandleCommand ECmdPenInputEditorState"); + break; + case ECmdPenInputSetWindowPos: + LOG("Vkb.Layout.HandleCommand ECmdPenInputSetWindowPos"); + break; + case ECmdPenInputWindowOpen: + LOG("Vkb.Layout.HandleCommand ECmdPenInputWindowOpen"); + UiStateMgr()->SetCurrentUiState(EPeninputVkbKrUiStateStandby); + UpdateArea(vkbWindow,vkbWindow->Rect(),ETrue); + if( !iIsOpenVkbKr ) + { + iKeyBoardType = iPtiEngine->KeyboardType(); + iPtiEngine->SetKeyboardType(EPtiKeyboardQwerty3x11); + } + iIsOpenVkbKr = ETrue; + ret=KErrNone; + break; + case ECmdPenInputWindowClose: + LOG("Vkb.Layout.HandleCommand ECmdPenInputWindowClose"); + iIsOpenVkbKr = EFalse; + iPtiEngine->SetKeyboardType(iKeyBoardType); + UiStateMgr()->CurrentUiState()->HandleControlEvent(EPeninputLayoutEventClose,KNullDesC); + UiStateMgr()->SetCurrentUiState(EPeninputVkbKrUiStateNone); + ret=KErrNone; + break; + case ECmdPenInputAllowChangeCase: + LOG("Vkb.Layout.HandleCommand ECmdPenInputAllowChangeCase"); + break; + case ECmdPenInputCaseMode: + LOG("Vkb.Layout.HandleCommand ECmdPenInputCaseMode"); + break; + case ECmdPenInputRange: + LOG("Vkb.Layout.HandleCommand ECmdPenInputRange"); + break; + case ECmdPenInputPermittedCase: + LOG("Vkb.Layout.HandleCommand ECmdPenInputPermittedCase"); + break; + case ECmdPenInputPluginInputMode: + LOG("Vkb.Layout.HandleCommand ECmdPenInputPluginInputMode"); + break; + case ECmdPenInputEnableSettingBtn: + LOG("Vkb.Layout.HandleCommand ECmdPenInputEnableSettingBtn"); + break; + case ECmdPenInputEditorCustomNumericKeyMap: + LOG("Vkb.Layout.HandleCommand ECmdPenInputEditorCustomNumericKeyMap"); + break; + case ECmdPenInputSuggestRange: + LOG("Vkb.Layout.HandleCommand ECmdPenInputSuggestRange"); + break; + case ECmdPenInputIsSecretText: + LOG("Vkb.Layout.HandleCommand ECmdPenInputIsSecretText"); + vkbWindow->SetSwitchlistSecretFlag(*aData); + break; + case ECmdPenInputIsNumberGrouping: + LOG("Vkb.Layout.HandleCommand ECmdPenInputIsNumberGrouping"); + break; + case ECmdPenInputDimArrowKeys: + LOG("Vkb.Layout.HandleCommand ECmdPenInputDimArrowKeys"); + vkbWindow->DimArrowKeys( *aData ); + break; + case ECmdPenInputSendEditorTextAndCurPos: + LOG("Vkb.Layout.HandleCommand ECmdPenInputSendEditorTextAndCurPos"); + break; + case ECmdPenInputJapaneseSetting: + LOG("Vkb.Layout.HandleCommand ECmdPenInputJapaneseSetting"); + break; + case ECmdPenInputJapaneseSetSubRange: + LOG("Vkb.Layout.HandleCommand ECmdPenInputJapaneseSetSubRange"); + break; + case ECmdPenInputJapaneseGetModeOfSubRange: + LOG("Vkb.Layout.HandleCommand ECmdPenInputJapaneseGetModeOfSubRange"); + break; + case ECmdPenInputFingerInputMode: + LOG("Vkb.Layout.HandleCommand ECmdPenInputFingerInputMode"); + break; + case ECmdPenInputFingerOpenSCT: + LOG("Vkb.Layout.HandleCommand ECmdPenInputFingerOpenSCT"); + break; + case ECmdPenInputSetPromptText: + { + if ( iInputMode == EPluginInputModeFSQ ) + TRAP_IGNORE(vkbWindow->SetPromptTextL(aData)); + } + break; + case ECmdPenInputCharacterPreview: + { + vkbWindow->ShowBubble(*aData); + } + break; + case ECmdPenInputInEditWordQueryDlg: + { + iInEditWordQueryDlg = *aData; + } + break; + + default: + LOG1("Vkb.Layout.HandleCommand %d",aCmd); + break; + } + return ret; + } + +void CPeninputVkbKrLayout::HandleControlEvent( + TInt aEventType, + CFepUiBaseCtrl* aCtrl, + const TDesC& aEventData) + { + TInt* data = (TInt*)aEventData.Ptr(); + + switch (aEventType) + { + case EEventButtonDown: + LOG("Vkb.Layout.HandleControlEvent EEventButtonDown"); + break; + case EEventButtonUp: + LOG("Vkb.Layout.HandleControlEvent EEventButtonUp"); + break; + case EEventDraggingStart: + LOG("Vkb.Layout.HandleControlEvent EEventDraggingStart"); + break; + case EEventDragging: + LOG("Vkb.Layout.HandleControlEvent EEventDragging"); + break; + case EEventDraggingEnd: + LOG("Vkb.Layout.HandleControlEvent EEventDraggingEnd"); + break; + case EEventVirtualKeyUp: + LOG("Vkb.Layout.HandleControlEvent EEventVirtualKeyUp"); + break; + case EEventVirtualKeyDown: + LOG("Vkb.Layout.HandleControlEvent EEventVirtualKeyDown"); + break; + case EEventHwrStrokeStarted: + LOG("Vkb.Layout.HandleControlEvent EEventHwrStrokeStarted"); + break; + case EEventHwrStrokeFinished: + LOG("Vkb.Layout.HandleControlEvent EEventHwrStrokeFinished"); + break; + case EEventHwrCharacterTimerOut: + LOG("Vkb.Layout.HandleControlEvent EEventHwrCharacterTimerOut"); + break; + case EEventCandidateSelected: + LOG("Vkb.Layout.HandleControlEvent EEventCandidateSelected"); + break; + case EEventButtonLongPress: + LOG("Vkb.Layout.HandleControlEvent EEventButtonLongPress"); + break; + case EEventSizeChanged: + LOG("Vkb.Layout.HandleControlEvent EEventSizeChanged"); + break; + case EEventRegionUpdated: + LOG("Vkb.Layout.HandleControlEvent EEventRegionUpdated"); + break; + case EEventSetAppCursorSelection: + LOG("Vkb.Layout.HandleControlEvent EEventSetAppCursorSelection"); + break; + case EEventControlFocusGained: + LOG("Vkb.Layout.HandleControlEvent EEventControlFocusGained"); + break; + case EEventControlFocusLost: + LOG("Vkb.Layout.HandleControlEvent EEventControlFocusLost"); + break; + case EEventButtonDownCanceled: + LOG("Vkb.Layout.HandleControlEvent EEventButtonDownCanceled"); + break; + case EEventHwrStrokeCanceled: + LOG("Vkb.Layout.HandleControlEvent EEventHwrStrokeCanceled"); + break; + case EEventControlDestroyed: + LOG("Vkb.Layout.HandleControlEvent EEventControlDestroyed"); + break; + case EEventChoiceSelected: + LOG("Vkb.Layout.HandleControlEvent EEventChoiceSelected"); + break; + case EEventPointerLeftControl: + LOG("Vkb.Layout.HandleControlEvent EEventPointerLeftControl"); + break; + case EEventPointerEnterControl: + LOG("Vkb.Layout.HandleControlEvent EEventPointerEnterControl"); + break; + case EEventVirtualKeyLatched: + LOG("Vkb.Layout.HandleControlEvent EEventVirtualKeyLatched"); + break; + case EEventVirtualKeyUnLatched: + LOG("Vkb.Layout.HandleControlEvent EEventVirtualKeyUnLatched"); + break; + case EEventICFSelectionChanged: + LOG("Vkb.Layout.HandleControlEvent EEventICFSelectionChanged"); + break; + case EEventRawKeyDownEvent: + LOG("Vkb.Layout.HandleControlEvent EEventRawKeyDownEvent"); + break; + case EEventRawKeyUpEvent: + LOG("Vkb.Layout.HandleControlEvent EEventRawKeyUpEvent"); + break; + case EEventPointerDownOnNomatch: + LOG("Vkb.Layout.HandleControlEvent EEventPointerDownOnNomatch"); + break; + case EEventPointerDownOnInline: + LOG("Vkb.Layout.HandleControlEvent EEventPointerDownOnInline"); + break; + case EEventCapturePointer: + LOG("Vkb.Layout.HandleControlEvent EEventCapturePointer"); + break; + case EEventIcfPointerUpEvent: + LOG("Vkb.Layout.HandleControlEvent EEventIcfPointerUpEvent"); + break; + case EEventControlExtBase: + LOG("Vkb.Layout.HandleControlEvent EEventControlExtBase"); + break; + case EEventControlUserBase: + LOG("Vkb.Layout.HandleControlEvent EEventControlUserBase"); + break; + default: + LOG1("Vkb.Layout.HandleControlEvent %d",aEventType); + break; + } + if (aEventType==EPeninputLayoutEventOption) + { + iUiStateMgr->CurrentUiState()->HandleControlEvent( + aEventType, + aEventData); + } + CPeninputCommonLayoutExt::HandleControlEvent( + aEventType, + aCtrl, + aEventData); + } + +TInt CPeninputVkbKrLayout::OnAppEditorTextComing( + const TFepInputContextFieldData& aData) + { + LOG1("Vkb.Layout.OnAppEditorTextComing %d",aData.iCmd); + return CPeninputCommonLayoutExt::OnAppEditorTextComing(aData); + } + +TBool CPeninputVkbKrLayout::HandleRawKeyEventL( + const TRawEvent& aKeyEvent) + { + LOG1("Vkb.Layout.HandleRawKeyEventL %d",aKeyEvent.ScanCode()); + return CPeninputCommonLayoutExt::HandleRawKeyEventL(aKeyEvent); + } + + +TBool CPeninputVkbKrLayout::OnPointerEventOutsideLayout( + const TRawEvent& /*aEvent*/) + { + LOG("Vkb.Layout.OnPointerEventOutsideLayout"); + UiStateMgr()->CurrentUiState()->HandleControlEvent(EPeninputLayoutEventOpen,KNullDesC); + return EFalse; + } + +TInt CPeninputVkbKrLayout::OnResourceChange(TInt aType) + { + LOG("Vkb.Layout.OnResourceChange"); + /* + if (aType==KEikDynamicLayoutVariantSwitch) + { + UiStateMgr()->CurrentUiState()->HandleControlEvent(EPeninputLayoutEventMovePosition,KNullDesC); + } + */ + return CPeninputCommonLayoutExt::OnResourceChange(aType); + } + +// --------------------------------------------------------------------------- +// from CPeninputCommonLayout +// --------------------------------------------------------------------------- +// + +void CPeninputVkbKrLayout::CreateLayoutWindowL() + { + iLayoutWindow = CPeninputVkbKrWindow::NewL( this, this, UiStateMgr() ); + } + +void CPeninputVkbKrLayout::CreateDataMgrL( const TAny* /*aInitData*/ ) + { + iDataMgr = CPeninputVkbKrDataMgr::NewL(this,*iPtiEngine); + } + +TInt CPeninputVkbKrLayout::LayoutType() + { + return iInputMode; + } + +TInt CPeninputVkbKrLayout::SizeChanged( const TAny* aData ) + { + LOG("Vkb.Layout.SizeChanged"); + (( CPeninputVkbKrWindow*)iLayoutWindow)->UpdateLafData(); + return CPeninputCommonLayoutExt::SizeChanged( aData ); + } + +void CPeninputVkbKrLayout::HandleAppInfoChange( + const TDesC& aInfo, + TPeninputAppInfo aType) + { + LOG("Vkb.Layout.HandleAppInfoChange"); + if ( LayoutWindow() ) + { + CFepLayoutMultiLineIcf* icf = static_cast + (LayoutWindow()->Control(EPeninputWindowCtrlIdMultiLineICF)) ; + + if ( icf && ( aType == EAppIndicatorMsg ) && (iInputMode == EPluginInputModeFSQ) ) + { + if ( aInfo.Length() > 0 && !iInEditWordQueryDlg) + { + icf->ShowBubble(aInfo,icf->MsgBubbleCtrl()->Rect()); + } + else + { + icf->HideBubble(); + } + } + /* Teleca change begin, 19.05.2009 ssal */ + else if ( icf && ( aType == EAppByteWarningMsg ) && (iInputMode == EPluginInputModeFSQ) ) + { + if (!iInfoTimer->IsActive()) + { + iInfoTimer->Start(KPeriodicTimerIntervalSec, + KPeriodicTimerIntervalSec, + TCallBack(CPeninputVkbKrLayout::HideByteWarningBubble, this)); + } + icf->ShowByteWarningBubble(aInfo); + } + /* Teleca change end, 19.05.2009 ssal */ + /* Teleca change begin, 09.09.2009 ssal */ + + else if ( icf && ( aType == EAppMessageTypeChangeMsg ) && (iInputMode == EPluginInputModeFSQ) ) + { + if (!iInfoTimer->IsActive()) + { + if ( aInfo.Length() > 0 && !iInEditWordQueryDlg) + { + icf->ShowBubble(aInfo,icf->MsgBubbleCtrl()->Rect()); + } + + iInfoTimer->Start(KPeriodicTimerIntervalSec, + KPeriodicTimerIntervalSec, + TCallBack(CPeninputVkbKrLayout::HideByteWarningBubble, this)); + } + icf->ShowByteWarningBubble(aInfo); + } + /* Teleca change end, 09.09.2009 ssal */ + } + } +/* Teleca change begin, 21.05.2009 ssal */ +TInt CPeninputVkbKrLayout::HideByteWarningBubble(TAny* aPointer) + { + CPeninputVkbKrLayout* layout = static_cast(aPointer); + layout->HideByteWarningBubble(); + return KErrNone; + } + +void CPeninputVkbKrLayout::HideByteWarningBubble() + { + if (!iInfoTimer) + { + return; + } + + CFepLayoutMultiLineIcf* icf = static_cast + (LayoutWindow()->Control(EPeninputWindowCtrlIdMultiLineICF)); + + if (iInfoTimer->IsActive()) + { + iInfoTimer->Cancel(); + icf->HideInfoBubble(); + } + } +/* Teleca change end, 18.05.2009 ssal */