textinput/peninputvkbkr/src/PeninputVkbKrLayout.cpp
changeset 0 eb1f2e154e89
child 3 f5a1e66df979
--- /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 <AknDef.h>
+#include <AknFepGlobalEnums.h>
+#include <aknfeppeninputenums.h>
+#include <PeninputCommonLayoutGlobalEnum.h>
+#include <PeninputUiStateMgr.h>
+#include <PeninputLayoutBubbleCtrl.h>
+#include <PeninputLayoutMultilineIcf.h>
+#include <PtiEngine.h>
+
+#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<CPeninputVkbKrWindow*>(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<CFepLayoutMultiLineIcf*> 
+                                    (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<CPeninputVkbKrLayout*>(aPointer);
+    layout->HideByteWarningBubble();
+    return KErrNone;
+    }
+    
+void CPeninputVkbKrLayout::HideByteWarningBubble()
+    {
+    if (!iInfoTimer)
+        {
+        return;
+        }
+    
+    CFepLayoutMultiLineIcf* icf = static_cast<CFepLayoutMultiLineIcf*> 
+                                 (LayoutWindow()->Control(EPeninputWindowCtrlIdMultiLineICF));
+       
+    if (iInfoTimer->IsActive())
+        {
+        iInfoTimer->Cancel();
+        icf->HideInfoBubble();
+        }
+    }    
+/* Teleca change end, 18.05.2009 ssal */