textinput/peninputvkbkr/src/PeninputVkbKrLayout.cpp
changeset 0 eb1f2e154e89
child 3 f5a1e66df979
equal deleted inserted replaced
-1:000000000000 0:eb1f2e154e89
       
     1 /*
       
     2 * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0""
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  peninput VKB data manager
       
    15 *
       
    16 */
       
    17 
       
    18 #include <AknDef.h>
       
    19 #include <AknFepGlobalEnums.h>
       
    20 #include <aknfeppeninputenums.h>
       
    21 #include <PeninputCommonLayoutGlobalEnum.h>
       
    22 #include <PeninputUiStateMgr.h>
       
    23 #include <PeninputLayoutBubbleCtrl.h>
       
    24 #include <PeninputLayoutMultilineIcf.h>
       
    25 #include <PtiEngine.h>
       
    26 
       
    27 #include "PeninputVkbKrDbg.h"
       
    28 #include "PeninputVkbKrLayout.h"
       
    29 #include "PeninputVkbKrWindow.h"
       
    30 #include "PeninputVkbKrDataMgr.h"
       
    31 
       
    32 #include "PeninputVkbKrUiStateType.h"
       
    33 #include "PeninputVkbKrUiStateNone.h"
       
    34 #include "PeninputVkbKrUiStateStandby.h"
       
    35 
       
    36 /* Teleca change begin, 21.05.2009 ssal */
       
    37 const TInt KPeriodicTimerIntervalSec(2500000);
       
    38 /* Teleca change end, 21.05.2009 ssal */
       
    39 // ---------------------------------------------------------------------------
       
    40 // Constructors & Destructors
       
    41 // ---------------------------------------------------------------------------
       
    42 //
       
    43 
       
    44 CPeninputVkbKrLayout* CPeninputVkbKrLayout::NewL(
       
    45         MLayoutOwner* aLayoutOwner,
       
    46         const TAny* aInitData,
       
    47         const TInt& aInputMode)
       
    48     {
       
    49     CPeninputVkbKrLayout* self = 
       
    50         new (ELeave) CPeninputVkbKrLayout(aLayoutOwner,aInputMode);
       
    51     CleanupStack::PushL(self);
       
    52     self->ConstructL(aInitData);
       
    53     CleanupStack::Pop(self);
       
    54     return self;
       
    55     }
       
    56 
       
    57 CPeninputVkbKrLayout::CPeninputVkbKrLayout(
       
    58         MLayoutOwner* aLayoutOwner,
       
    59         const TInt& aInputMode)
       
    60     : CPeninputCommonLayoutExt(aLayoutOwner),
       
    61       iInputMode(aInputMode),
       
    62       iInEditWordQueryDlg(EFalse)
       
    63     {
       
    64     }
       
    65 
       
    66 void CPeninputVkbKrLayout::ConstructL(const TAny* aInitData)
       
    67     {
       
    68     LOG("");
       
    69     LOG("Vkb.Layout.ConstructL==================================");
       
    70     
       
    71     iPtiEngine=CPtiEngine::NewL();
       
    72 #ifdef RD_INTELLIGENT_TEXT_INPUT
       
    73     iPtiEngine->ActivateLanguageL(ELangKorean,EPtiEngineQwertyKorean);
       
    74 #else
       
    75     iPtiEngine->ActivateLanguageL(ELangKorean,EPtiEngineQwerty);
       
    76 #endif //RD_INTELLIGENT_TEXT_INPUT
       
    77     
       
    78     CPeninputCommonLayoutExt::ConstructL(aInitData);
       
    79     CPeninputVkbKrUiStateNone* stateNone=
       
    80         CPeninputVkbKrUiStateNone::NewL(UiStateMgr(),this,*iPtiEngine);
       
    81     UiStateMgr()->AddUiState(stateNone,EPeninputVkbKrUiStateNone);
       
    82     CPeninputVkbKrUiStateStandby* stateStandby=
       
    83         CPeninputVkbKrUiStateStandby::NewL(UiStateMgr(),this,*iPtiEngine);
       
    84     UiStateMgr()->AddUiState(stateStandby,EPeninputVkbKrUiStateStandby);
       
    85     UiStateMgr()->SetCurrentUiState(EPeninputVkbKrUiStateNone);
       
    86     
       
    87     /* Teleca change begin, 21.05.2009 ssal */
       
    88     iInfoTimer = CPeriodic::NewL(CActive::EPriorityStandard);
       
    89     /* Teleca change end, 21.05.2009 ssal */
       
    90     }
       
    91 
       
    92 CPeninputVkbKrLayout::~CPeninputVkbKrLayout()
       
    93     {
       
    94     delete iPtiEngine;
       
    95     
       
    96     /* Teleca change begin, 21.05.2009 ssal */
       
    97     if (iInfoTimer)
       
    98     	{
       
    99     	iInfoTimer->Cancel();
       
   100     	}
       
   101    	delete iInfoTimer;
       
   102     /* Teleca change end, 21.05.2009 ssal */ 
       
   103     }
       
   104 
       
   105 // ---------------------------------------------------------------------------
       
   106 // from CFepUiLayout
       
   107 // ---------------------------------------------------------------------------
       
   108 //
       
   109 
       
   110 TBool CPeninputVkbKrLayout::HandleEventL(
       
   111         TEventType aType, 
       
   112         const TAny* aData)
       
   113     {
       
   114     LOG1("Vkb.Layout.HandleEventL %d",aType);
       
   115     return CPeninputCommonLayoutExt::HandleEventL(aType,aData);
       
   116     }
       
   117 
       
   118 TInt CPeninputVkbKrLayout::HandleCommand(TInt aCmd, TUint8* aData)
       
   119     {
       
   120     CPeninputVkbKrWindow* vkbWindow = 
       
   121         static_cast<CPeninputVkbKrWindow*>(iLayoutWindow);
       
   122     switch ( aCmd )
       
   123         {
       
   124         case ECmdPenInputRange:
       
   125             vkbWindow->PreProcessRange(*aData);
       
   126             break;
       
   127         default:
       
   128             break;
       
   129         }
       
   130     
       
   131     TInt ret(CPeninputCommonLayoutExt::HandleCommand(aCmd,aData));
       
   132     switch ( aCmd )
       
   133         {
       
   134         case ECmdPenInputPermittedRange:
       
   135             LOG("Vkb.Layout.HandleCommand ECmdPenInputPermittedRange");
       
   136             break;
       
   137         case ECmdPenInputEditorNumericKeyMap:
       
   138             LOG("Vkb.Layout.HandleCommand ECmdPenInputEditorNumericKeyMap");
       
   139             break;
       
   140         case ECmdPenInputCase:
       
   141             LOG("Vkb.Layout.HandleCommand ECmdPenInputCase");
       
   142             break;
       
   143         case ECmdPenInputLanguage:
       
   144             LOG("Vkb.Layout.HandleCommand ECmdPenInputLanguage");
       
   145             UiStateMgr()->CurrentUiState()->HandleControlEvent(EPeninputLayoutEventOpen,KNullDesC);
       
   146             break;
       
   147         case ECmdPenInputEditorState:
       
   148             LOG("Vkb.Layout.HandleCommand ECmdPenInputEditorState");
       
   149             break;
       
   150         case ECmdPenInputSetWindowPos:
       
   151             LOG("Vkb.Layout.HandleCommand ECmdPenInputSetWindowPos");
       
   152             break;
       
   153         case ECmdPenInputWindowOpen:
       
   154             LOG("Vkb.Layout.HandleCommand ECmdPenInputWindowOpen");
       
   155             UiStateMgr()->SetCurrentUiState(EPeninputVkbKrUiStateStandby);
       
   156             UpdateArea(vkbWindow,vkbWindow->Rect(),ETrue);
       
   157             if( !iIsOpenVkbKr )
       
   158                 {
       
   159                 iKeyBoardType = iPtiEngine->KeyboardType();
       
   160                 iPtiEngine->SetKeyboardType(EPtiKeyboardQwerty3x11);
       
   161                 }
       
   162             iIsOpenVkbKr = ETrue;
       
   163             ret=KErrNone;
       
   164             break;
       
   165         case ECmdPenInputWindowClose:
       
   166             LOG("Vkb.Layout.HandleCommand ECmdPenInputWindowClose");
       
   167             iIsOpenVkbKr = EFalse;
       
   168             iPtiEngine->SetKeyboardType(iKeyBoardType);
       
   169             UiStateMgr()->CurrentUiState()->HandleControlEvent(EPeninputLayoutEventClose,KNullDesC);
       
   170             UiStateMgr()->SetCurrentUiState(EPeninputVkbKrUiStateNone);
       
   171             ret=KErrNone;
       
   172             break;
       
   173         case ECmdPenInputAllowChangeCase:
       
   174             LOG("Vkb.Layout.HandleCommand ECmdPenInputAllowChangeCase");
       
   175             break;
       
   176         case ECmdPenInputCaseMode:
       
   177             LOG("Vkb.Layout.HandleCommand ECmdPenInputCaseMode");
       
   178             break;
       
   179         case ECmdPenInputRange:
       
   180             LOG("Vkb.Layout.HandleCommand ECmdPenInputRange");
       
   181             break;
       
   182         case ECmdPenInputPermittedCase:
       
   183             LOG("Vkb.Layout.HandleCommand ECmdPenInputPermittedCase");
       
   184             break;
       
   185         case ECmdPenInputPluginInputMode:
       
   186             LOG("Vkb.Layout.HandleCommand ECmdPenInputPluginInputMode");
       
   187             break;
       
   188         case ECmdPenInputEnableSettingBtn:
       
   189             LOG("Vkb.Layout.HandleCommand ECmdPenInputEnableSettingBtn");
       
   190             break;
       
   191         case ECmdPenInputEditorCustomNumericKeyMap:
       
   192             LOG("Vkb.Layout.HandleCommand ECmdPenInputEditorCustomNumericKeyMap");
       
   193             break;
       
   194         case ECmdPenInputSuggestRange:
       
   195             LOG("Vkb.Layout.HandleCommand ECmdPenInputSuggestRange");
       
   196             break;
       
   197         case ECmdPenInputIsSecretText:
       
   198             LOG("Vkb.Layout.HandleCommand ECmdPenInputIsSecretText");
       
   199             vkbWindow->SetSwitchlistSecretFlag(*aData);
       
   200             break;
       
   201         case ECmdPenInputIsNumberGrouping:
       
   202             LOG("Vkb.Layout.HandleCommand ECmdPenInputIsNumberGrouping");
       
   203             break;
       
   204         case ECmdPenInputDimArrowKeys:
       
   205             LOG("Vkb.Layout.HandleCommand ECmdPenInputDimArrowKeys");
       
   206             vkbWindow->DimArrowKeys( *aData );
       
   207             break;
       
   208         case ECmdPenInputSendEditorTextAndCurPos:
       
   209             LOG("Vkb.Layout.HandleCommand ECmdPenInputSendEditorTextAndCurPos");
       
   210             break;
       
   211         case ECmdPenInputJapaneseSetting:
       
   212             LOG("Vkb.Layout.HandleCommand ECmdPenInputJapaneseSetting");
       
   213             break;
       
   214         case ECmdPenInputJapaneseSetSubRange:
       
   215             LOG("Vkb.Layout.HandleCommand ECmdPenInputJapaneseSetSubRange");
       
   216             break;
       
   217         case ECmdPenInputJapaneseGetModeOfSubRange:
       
   218             LOG("Vkb.Layout.HandleCommand ECmdPenInputJapaneseGetModeOfSubRange");
       
   219             break;
       
   220         case ECmdPenInputFingerInputMode:
       
   221             LOG("Vkb.Layout.HandleCommand ECmdPenInputFingerInputMode");
       
   222             break;
       
   223         case ECmdPenInputFingerOpenSCT:
       
   224             LOG("Vkb.Layout.HandleCommand ECmdPenInputFingerOpenSCT");
       
   225             break;
       
   226         case ECmdPenInputSetPromptText:
       
   227             {
       
   228             if ( iInputMode == EPluginInputModeFSQ )
       
   229                 TRAP_IGNORE(vkbWindow->SetPromptTextL(aData));
       
   230             }
       
   231             break;
       
   232         case ECmdPenInputCharacterPreview:
       
   233             {
       
   234             vkbWindow->ShowBubble(*aData);
       
   235             }
       
   236             break;
       
   237         case ECmdPenInputInEditWordQueryDlg:
       
   238             {
       
   239             iInEditWordQueryDlg = *aData;
       
   240             }
       
   241             break;
       
   242 
       
   243         default:
       
   244             LOG1("Vkb.Layout.HandleCommand %d",aCmd);
       
   245             break;
       
   246         }
       
   247     return ret;
       
   248     }
       
   249 
       
   250 void CPeninputVkbKrLayout::HandleControlEvent(
       
   251         TInt aEventType, 
       
   252         CFepUiBaseCtrl* aCtrl, 
       
   253         const TDesC& aEventData)
       
   254     {
       
   255     TInt* data = (TInt*)aEventData.Ptr();
       
   256 
       
   257     switch (aEventType)
       
   258         {
       
   259         case EEventButtonDown:
       
   260             LOG("Vkb.Layout.HandleControlEvent EEventButtonDown");
       
   261             break;
       
   262         case EEventButtonUp:
       
   263             LOG("Vkb.Layout.HandleControlEvent EEventButtonUp");
       
   264             break;
       
   265         case EEventDraggingStart:
       
   266             LOG("Vkb.Layout.HandleControlEvent EEventDraggingStart");
       
   267             break;
       
   268         case EEventDragging:
       
   269             LOG("Vkb.Layout.HandleControlEvent EEventDragging");
       
   270             break;
       
   271         case EEventDraggingEnd:
       
   272             LOG("Vkb.Layout.HandleControlEvent EEventDraggingEnd");
       
   273             break;
       
   274         case EEventVirtualKeyUp:
       
   275             LOG("Vkb.Layout.HandleControlEvent EEventVirtualKeyUp");
       
   276             break;
       
   277         case EEventVirtualKeyDown:
       
   278             LOG("Vkb.Layout.HandleControlEvent EEventVirtualKeyDown");
       
   279             break;
       
   280         case EEventHwrStrokeStarted:
       
   281             LOG("Vkb.Layout.HandleControlEvent EEventHwrStrokeStarted");
       
   282             break;
       
   283         case EEventHwrStrokeFinished:
       
   284             LOG("Vkb.Layout.HandleControlEvent EEventHwrStrokeFinished");
       
   285             break;
       
   286         case EEventHwrCharacterTimerOut:
       
   287             LOG("Vkb.Layout.HandleControlEvent EEventHwrCharacterTimerOut");
       
   288             break;
       
   289         case EEventCandidateSelected:
       
   290             LOG("Vkb.Layout.HandleControlEvent EEventCandidateSelected");
       
   291             break;
       
   292         case EEventButtonLongPress:
       
   293             LOG("Vkb.Layout.HandleControlEvent EEventButtonLongPress");
       
   294             break;
       
   295         case EEventSizeChanged:
       
   296             LOG("Vkb.Layout.HandleControlEvent EEventSizeChanged");
       
   297             break;
       
   298         case EEventRegionUpdated:
       
   299             LOG("Vkb.Layout.HandleControlEvent EEventRegionUpdated");
       
   300             break;
       
   301         case EEventSetAppCursorSelection:
       
   302             LOG("Vkb.Layout.HandleControlEvent EEventSetAppCursorSelection");
       
   303             break;
       
   304         case EEventControlFocusGained:
       
   305             LOG("Vkb.Layout.HandleControlEvent EEventControlFocusGained");
       
   306             break;
       
   307         case EEventControlFocusLost:
       
   308             LOG("Vkb.Layout.HandleControlEvent EEventControlFocusLost");
       
   309             break;
       
   310         case EEventButtonDownCanceled:
       
   311             LOG("Vkb.Layout.HandleControlEvent EEventButtonDownCanceled");
       
   312             break;
       
   313         case EEventHwrStrokeCanceled:
       
   314             LOG("Vkb.Layout.HandleControlEvent EEventHwrStrokeCanceled");
       
   315             break;
       
   316         case EEventControlDestroyed:
       
   317             LOG("Vkb.Layout.HandleControlEvent EEventControlDestroyed");
       
   318             break;
       
   319         case EEventChoiceSelected:
       
   320             LOG("Vkb.Layout.HandleControlEvent EEventChoiceSelected");
       
   321             break;
       
   322         case EEventPointerLeftControl:
       
   323             LOG("Vkb.Layout.HandleControlEvent EEventPointerLeftControl");
       
   324             break;
       
   325         case EEventPointerEnterControl:
       
   326             LOG("Vkb.Layout.HandleControlEvent EEventPointerEnterControl");
       
   327             break;
       
   328         case EEventVirtualKeyLatched:
       
   329             LOG("Vkb.Layout.HandleControlEvent EEventVirtualKeyLatched");
       
   330             break;
       
   331         case EEventVirtualKeyUnLatched:
       
   332             LOG("Vkb.Layout.HandleControlEvent EEventVirtualKeyUnLatched");
       
   333             break;
       
   334         case EEventICFSelectionChanged:
       
   335             LOG("Vkb.Layout.HandleControlEvent EEventICFSelectionChanged");
       
   336             break;
       
   337         case EEventRawKeyDownEvent:
       
   338             LOG("Vkb.Layout.HandleControlEvent EEventRawKeyDownEvent");
       
   339             break;
       
   340         case EEventRawKeyUpEvent:
       
   341             LOG("Vkb.Layout.HandleControlEvent EEventRawKeyUpEvent");
       
   342             break;
       
   343         case EEventPointerDownOnNomatch:
       
   344             LOG("Vkb.Layout.HandleControlEvent EEventPointerDownOnNomatch");
       
   345             break;
       
   346         case EEventPointerDownOnInline:
       
   347             LOG("Vkb.Layout.HandleControlEvent EEventPointerDownOnInline");
       
   348             break;
       
   349         case EEventCapturePointer:
       
   350             LOG("Vkb.Layout.HandleControlEvent EEventCapturePointer");
       
   351             break;
       
   352         case EEventIcfPointerUpEvent:
       
   353             LOG("Vkb.Layout.HandleControlEvent EEventIcfPointerUpEvent");
       
   354             break;
       
   355         case EEventControlExtBase:
       
   356             LOG("Vkb.Layout.HandleControlEvent EEventControlExtBase");
       
   357             break;
       
   358         case EEventControlUserBase:
       
   359             LOG("Vkb.Layout.HandleControlEvent EEventControlUserBase");
       
   360             break;
       
   361         default:
       
   362             LOG1("Vkb.Layout.HandleControlEvent %d",aEventType);
       
   363             break;
       
   364         }
       
   365     if (aEventType==EPeninputLayoutEventOption)
       
   366         {
       
   367         iUiStateMgr->CurrentUiState()->HandleControlEvent(
       
   368             aEventType,
       
   369             aEventData);
       
   370         }
       
   371     CPeninputCommonLayoutExt::HandleControlEvent(
       
   372         aEventType, 
       
   373         aCtrl, 
       
   374         aEventData);
       
   375     }
       
   376 
       
   377 TInt CPeninputVkbKrLayout::OnAppEditorTextComing(
       
   378         const TFepInputContextFieldData& aData)
       
   379     {
       
   380     LOG1("Vkb.Layout.OnAppEditorTextComing %d",aData.iCmd);
       
   381     return CPeninputCommonLayoutExt::OnAppEditorTextComing(aData);
       
   382     }
       
   383 
       
   384 TBool CPeninputVkbKrLayout::HandleRawKeyEventL(
       
   385         const TRawEvent& aKeyEvent)
       
   386     {
       
   387     LOG1("Vkb.Layout.HandleRawKeyEventL %d",aKeyEvent.ScanCode());
       
   388     return CPeninputCommonLayoutExt::HandleRawKeyEventL(aKeyEvent);
       
   389     }
       
   390 
       
   391 
       
   392 TBool CPeninputVkbKrLayout::OnPointerEventOutsideLayout(
       
   393         const TRawEvent& /*aEvent*/)
       
   394     {
       
   395     LOG("Vkb.Layout.OnPointerEventOutsideLayout");
       
   396     UiStateMgr()->CurrentUiState()->HandleControlEvent(EPeninputLayoutEventOpen,KNullDesC);
       
   397     return EFalse;
       
   398     }
       
   399 
       
   400 TInt CPeninputVkbKrLayout::OnResourceChange(TInt aType)
       
   401     {
       
   402     LOG("Vkb.Layout.OnResourceChange");
       
   403     /*
       
   404     if (aType==KEikDynamicLayoutVariantSwitch)
       
   405         {
       
   406         UiStateMgr()->CurrentUiState()->HandleControlEvent(EPeninputLayoutEventMovePosition,KNullDesC);                
       
   407         }
       
   408     */
       
   409     return CPeninputCommonLayoutExt::OnResourceChange(aType);    
       
   410     }
       
   411 
       
   412 // ---------------------------------------------------------------------------
       
   413 // from CPeninputCommonLayout
       
   414 // ---------------------------------------------------------------------------
       
   415 //
       
   416 
       
   417 void CPeninputVkbKrLayout::CreateLayoutWindowL()
       
   418     {
       
   419     iLayoutWindow = CPeninputVkbKrWindow::NewL( this, this, UiStateMgr() );
       
   420     }
       
   421 
       
   422 void CPeninputVkbKrLayout::CreateDataMgrL( const TAny* /*aInitData*/ )
       
   423     {
       
   424     iDataMgr = CPeninputVkbKrDataMgr::NewL(this,*iPtiEngine);
       
   425     }
       
   426 
       
   427 TInt CPeninputVkbKrLayout::LayoutType()
       
   428     {
       
   429     return iInputMode;
       
   430     }
       
   431 
       
   432 TInt CPeninputVkbKrLayout::SizeChanged( const TAny* aData )
       
   433     {
       
   434     LOG("Vkb.Layout.SizeChanged");
       
   435     (( CPeninputVkbKrWindow*)iLayoutWindow)->UpdateLafData();
       
   436     return CPeninputCommonLayoutExt::SizeChanged( aData );
       
   437     }
       
   438 
       
   439 void CPeninputVkbKrLayout::HandleAppInfoChange(
       
   440         const TDesC& aInfo, 
       
   441         TPeninputAppInfo aType)
       
   442     {
       
   443     LOG("Vkb.Layout.HandleAppInfoChange");
       
   444     if ( LayoutWindow() )
       
   445         {
       
   446         CFepLayoutMultiLineIcf* icf = static_cast<CFepLayoutMultiLineIcf*> 
       
   447                                     (LayoutWindow()->Control(EPeninputWindowCtrlIdMultiLineICF)) ;
       
   448         
       
   449         if ( icf && ( aType == EAppIndicatorMsg ) && (iInputMode == EPluginInputModeFSQ) )
       
   450             { 
       
   451             if ( aInfo.Length() > 0 && !iInEditWordQueryDlg)
       
   452                 {
       
   453                 icf->ShowBubble(aInfo,icf->MsgBubbleCtrl()->Rect());
       
   454                 }
       
   455             else
       
   456                 {
       
   457                 icf->HideBubble();
       
   458                 }
       
   459             }
       
   460         /* Teleca change begin, 19.05.2009 ssal */
       
   461         else if ( icf && ( aType == EAppByteWarningMsg ) && (iInputMode == EPluginInputModeFSQ) )
       
   462             { 
       
   463 			if (!iInfoTimer->IsActive())
       
   464 				{
       
   465 				iInfoTimer->Start(KPeriodicTimerIntervalSec,
       
   466                           		  KPeriodicTimerIntervalSec, 
       
   467                           		  TCallBack(CPeninputVkbKrLayout::HideByteWarningBubble, this));                  		 
       
   468 				}    
       
   469 			icf->ShowByteWarningBubble(aInfo);                               		
       
   470     		}
       
   471 		/* Teleca change end, 19.05.2009 ssal */  
       
   472 		/* Teleca change begin, 09.09.2009 ssal */
       
   473 		
       
   474         else if ( icf && ( aType == EAppMessageTypeChangeMsg ) && (iInputMode == EPluginInputModeFSQ) )
       
   475             { 
       
   476 			if (!iInfoTimer->IsActive())
       
   477 				{
       
   478 				if ( aInfo.Length() > 0 && !iInEditWordQueryDlg)
       
   479                 	{
       
   480                 	icf->ShowBubble(aInfo,icf->MsgBubbleCtrl()->Rect());
       
   481                 	}
       
   482 				
       
   483 				iInfoTimer->Start(KPeriodicTimerIntervalSec,
       
   484                           		  KPeriodicTimerIntervalSec, 
       
   485                           		  TCallBack(CPeninputVkbKrLayout::HideByteWarningBubble, this));     		  
       
   486 				}
       
   487 			icf->ShowByteWarningBubble(aInfo);	                                       
       
   488     		}
       
   489 		/* Teleca change end, 09.09.2009 ssal */             
       
   490         }
       
   491     }
       
   492 /* Teleca change begin, 21.05.2009 ssal */
       
   493 TInt CPeninputVkbKrLayout::HideByteWarningBubble(TAny* aPointer)
       
   494     {
       
   495     CPeninputVkbKrLayout* layout = static_cast<CPeninputVkbKrLayout*>(aPointer);
       
   496     layout->HideByteWarningBubble();
       
   497     return KErrNone;
       
   498     }
       
   499     
       
   500 void CPeninputVkbKrLayout::HideByteWarningBubble()
       
   501     {
       
   502     if (!iInfoTimer)
       
   503         {
       
   504         return;
       
   505         }
       
   506     
       
   507     CFepLayoutMultiLineIcf* icf = static_cast<CFepLayoutMultiLineIcf*> 
       
   508                                  (LayoutWindow()->Control(EPeninputWindowCtrlIdMultiLineICF));
       
   509        
       
   510     if (iInfoTimer->IsActive())
       
   511         {
       
   512         iInfoTimer->Cancel();
       
   513         icf->HideInfoBubble();
       
   514         }
       
   515     }    
       
   516 /* Teleca change end, 18.05.2009 ssal */