textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp
changeset 0 eb1f2e154e89
child 5 a47de9135b21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,460 @@
+/*
+* 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:  drop-down list control
+*
+*/
+
+
+#include <aknlayoutscalable_apps.cdl.h>
+#include <peninputgeneralitutnew.rsg>
+#include <peninputitutconfig_chinese.rsg>
+#include <skinlayout.cdl.h>
+#include <AknsDrawUtils.h>
+#include <AknsUtils.h>
+#include <AknUtils.h> 
+#include <peninputrawkeybutton.h>
+#include <peninputrepeatbutton.h>
+#include <peninputcommonbutton.h>
+#include "peninputrepeatbuttonex.h"
+#include <AknFepGlobalEnums.h>
+#include <aknfeppeninputenums.h>
+#include <peninputdropdownlist.h>
+#include <peninputlayoutchoicelist.h>
+#include <peninputscrollablelist.h>
+#include <s32mem.h>
+#include <peninputlabel.h>
+#include <peninputlayoutinputmodechoice.h>
+#include <peninputlayoutbubblectrl.h>
+
+#include "peninputgenericitutlayout.h"
+#include "peninputgenericitutdatamgr.h"
+#include "peninputgenericitutuimgrbase.h"
+#include "peninputgenericitutuistatebase.h"
+#include "peninputitutchnuimgr.h"
+#include "peninputitutwesternuimgr.h"
+#include "peninputgenericitutconverter.h"
+#include "peninputgenericitutwindowmanager.h"
+
+
+
+CGenericItutUiLayout* CGenericItutUiLayout::NewL(MLayoutOwner* aLayoutOwner,
+                                                 const TAny* aInitData)
+    {
+    CGenericItutUiLayout* layout = new (ELeave) CGenericItutUiLayout(aLayoutOwner);
+
+    CleanupStack::PushL(layout);
+    layout->ConstructL(aInitData);
+    CleanupStack::Pop(layout);
+
+    return layout;
+    }
+
+CGenericItutUiLayout::CGenericItutUiLayout(MLayoutOwner* aLayoutOwner)
+                                          :CFepUiLayout(aLayoutOwner)
+    {
+    }
+
+CGenericItutUiLayout::~CGenericItutUiLayout()
+    {
+    delete iDataMgr;
+    delete iChnUiMgr;
+    delete iWesternUiMgr;
+    delete iWindowMgr;
+    }
+
+void CGenericItutUiLayout::ConstructL(const TAny* aInitData)
+    {
+    BaseConstructL();
+
+    TPeninputLayoutData* layoutData = (TPeninputLayoutData*)aInitData;
+    
+    iDataMgr = CGenericItutDataMgr::NewL(this, layoutData->iPtiEngine );
+    
+
+    SetScreenSize(TItutDataConverter::AnyToSize(iDataMgr->RequestData(EScreenSize)));
+
+    SetRect(TItutDataConverter::AnyToRect(iDataMgr->RequestData(ELayoutRect)));
+   
+    // western ui mgr is default ui mgr
+    iWindowMgr = CGenericItutWindowManager::NewL(this, iDataMgr);
+    iDataMgr->AddSubscriber(iWindowMgr);    
+    iWesternUiMgr = CWesternItutUiMgr::NewL(this, iDataMgr, iWindowMgr);
+    }
+
+
+void CGenericItutUiLayout::SimulateRawEvent(TInt aScanCode, TRawEvent::TType aType)
+    {
+    TRawEvent event; 
+    event.Set(aType,aScanCode);
+    
+    TPtrC eventPtr(reinterpret_cast<const TUint16*>(&event),sizeof(event)/sizeof(TUint16));
+
+    SignalOwner(ESignalSimulateEvent,eventPtr);
+    }
+
+// ---------------------------------------------------------------------------
+// Simulate raw event to window server immediately.
+// simulating raw event command won't be scheduled by AO 
+// because it won't be added into CPeninputAnimObj::iAnimCmd.
+// ---------------------------------------------------------------------------
+//    
+void CGenericItutUiLayout::SimulateImmeRawEvent( TInt aScanCode, TRawEvent::TType aType )
+    {
+    TRawEvent event; 
+    event.Set(aType,aScanCode);    
+    TPtrC eventPtr(reinterpret_cast<const TUint16*>(&event),sizeof(event)/sizeof(TUint16));
+    SignalOwner( ESignalImmeSimulateEvent, eventPtr );   	
+    }
+
+void CGenericItutUiLayout::HandleControlEvent(TInt aEventType, 
+                                              CFepUiBaseCtrl* aCtrl, 
+                                              const TDesC& aEventData)
+    {
+    TBool handled = EFalse;
+
+    if (UiMgr())
+        {
+        TRAP_IGNORE(handled = UiMgr()->HandleCtrlEventL(aEventType,
+                                                        aCtrl,
+                                                        aEventData));
+        }
+
+    if (handled)
+        {
+        return;   
+        }
+
+    TRAP_IGNORE(iWindowMgr->HandleCtrlEventL(aEventType,
+                                             aCtrl,
+                                             aEventData));
+   }
+
+TInt CGenericItutUiLayout::OnAppEditorTextComing(const TFepInputContextFieldData& aData)
+    {
+    TInt err = iWindowMgr->OnAppEditorTextComing(aData);
+
+    if (UiMgr()->CurrentState() &&
+        UiMgr()->CurrentState()->StateType() == CGenericItutUiMgrBase::EStateSpelling)
+        {
+        TRAP_IGNORE(UiMgr()->HandleCommandL(EItutCmdCheckIcfEmpty, NULL));
+        }
+ 
+     return err;
+    }
+
+
+TInt CGenericItutUiLayout::HandleCommand(TInt aCmd, TUint8* aData)
+    {
+    if ( KErrNone == CFepUiLayout::HandleCommand( aCmd, aData ) )
+        {
+        return KErrNone;
+        }
+
+    TUint* data = (TUint*) aData;
+
+    switch(aCmd)
+        {
+        case ECmdPenInputLanguage:
+            {
+            TRAP_IGNORE(SetInputLanguageL(*data));
+            
+            }
+            break;
+        case ECmdPenInputRange:
+        	{
+        	iDataMgr->SetLatinOnly( *data );
+        	}
+        	break;
+        case ECmdPenInputFingerInputMode:
+            {
+            TRAP_IGNORE(SetInputModeL(*data));
+            }
+            break;
+        case ECmdPenInputFingerKeyPress:
+        case ECmdPenInputFingerLongKeyPress:
+        case EItutExtCmdCustomerState:
+        case EItutExtCmdSetLayout:
+        case EItutExtCmdDimKey:
+        case EItutExtCmdHideKey:
+        case EItutExtCmdAddKey:
+        case EItutExtCmdSizeChanged:
+        case EItutExtCmdSetIcfData:
+        case ECmdPenInputCase:
+        case ECmdPenInputFingerMatchSelection:
+        case ECmdPenInputFingerSpelling:
+            {
+            if (UiMgr())
+                {
+                TInt handled = KErrNone;
+                TRAP_IGNORE(handled = UiMgr()->HandleCommandL(aCmd, aData));
+                return handled;
+                }
+            }
+            break;
+        case ECmdPenInputFingerMatchList:
+            {
+            if (UiMgr())
+                {
+                TInt handled = KErrNone;
+                TRAP_IGNORE(handled = UiMgr()->HandleCommandL(aCmd, aData));
+                return handled;
+                }
+            }
+            break;
+        case ECmdPenInputSetTextAlignment:
+            {
+            iDataMgr->SetIcfTextAlignment(*data);
+            iDataMgr->SetTextAlignment();
+            }
+            break;
+        case ECmdPenInputNoFreeSpace:
+        	{
+            TRAP_IGNORE(ChineseUiManager()->HandleCommandL(ECmdPenInputNoFreeSpace, NULL));
+        	}
+        case ECmdPenInputSetPromptText:        	
+        case ECmdPenInputFingerMatchIndicator:
+        case ECmdPenInputSendEditMenuData:
+        case ECmdPenInputEnableSettingBtn:
+        case ECmdPenInputDimArrowKeys:
+        case ECmdPenInputRotation:
+            {
+            TRAP_IGNORE(iWindowMgr->HandleCommandL(aCmd, aData));
+            }
+            break;
+        case ECmdPenInputIsSecretText:
+            {
+            TRAP_IGNORE(iWindowMgr->HandleCommandL(aCmd, aData));
+            *data ? iIsSecret = ETrue: iIsSecret = EFalse;             
+             if (UiMgr())
+                {
+                TInt handled = KErrNone;
+                TRAP_IGNORE(handled = UiMgr()->HandleCommandL(aCmd, aData));
+                return handled;
+                }
+            }
+        break;
+        case ECmdPenInputEnableIndicatorButton:
+            {
+            TRAP_IGNORE(iWindowMgr->HandleCommandL(aCmd, aData));
+            } 
+        break;
+        case ECmdPenInputSymbolOfHardKeyOne:
+        case ECmdPenInputInEditWordQueryDlg:
+            {
+            TRAP_IGNORE(iWindowMgr->HandleCommandL(aCmd, aData));
+            }
+            break;
+        case ECmdPenInputIsNumberGrouping:
+            {
+            TRAP_IGNORE(iWindowMgr->HandleCommandL(aCmd, aData));
+            }
+            break;
+        case ECmdPenInputEditorNumericKeyMap:
+        	{
+        	iDataMgr->SetNumericKeymap( *data );
+        	}
+            break;
+        case ECmdPenInputEditorCustomNumericKeyMap:
+        	{
+        	iDataMgr->SetNumericKeymapData( (TInt*) data );
+        	}
+        	break;
+        case ECmdPenInputPermittedRange:
+        	{
+        	iDataMgr->SetNumericOnly( *data );
+        	}
+        	break;
+        case ECmdPenInputCharacterPreview:
+            {
+            iWindowMgr->ShowBubble(*aData);    
+            }
+            break;
+        default:
+            break;
+        }
+
+    return KErrNone;
+    }
+
+TInt CGenericItutUiLayout::PenInputType()
+    {
+    return EPluginInputModeItut;
+    }
+
+TInt CGenericItutUiLayout::SizeChanged(const TAny* /*pData*/)
+    {
+    TBool overLap = UiMgr()->CurrentState()->StateType() 
+        == CGenericItutUiMgrBase::EStateMatchSelection ? ETrue: EFalse;
+        
+    iDataMgr->ReadLafInfo();
+
+    // set layout rect
+    SetRect(TItutDataConverter::AnyToRect(iDataMgr->RequestData(ELayoutRect)));
+        
+    iWindowMgr->SizeChanged(overLap);
+
+    return KErrNone;    
+    }
+
+void CGenericItutUiLayout::SubmitText(const TDesC& aEventData)
+    {
+    SignalOwner(ESignalKeyEvent, aEventData);
+    }
+
+TInt CGenericItutUiLayout::OnSkinChange()
+    {
+    CFepUiLayout::OnSkinChange();
+    
+    TInt err = iWindowMgr->OnSkinChange();
+
+    return err;
+    }
+
+
+TBool CGenericItutUiLayout::PressOnCtrls(TPoint aPt)
+    {
+    const RPointerArray<CFepUiBaseCtrl>& ctrllist = RootControl()->ControlList();
+
+    for (TInt i = 0; i < ctrllist.Count(); i++)
+        {
+        if (!ctrllist[i]->Hiden() && ctrllist[i]->Rect().Contains(aPt))
+            {
+            return ETrue;
+            }
+        }
+
+    return EFalse;    
+    }
+
+CGenericItutUiMgrBase* CGenericItutUiLayout::UiMgr()
+    {
+    if (iDataMgr->IsChinese())
+       {
+       iCurrentUiMgr = ChineseUiManager();
+       }
+    else
+       {
+       iCurrentUiMgr = iWesternUiMgr;
+       }
+
+    return iCurrentUiMgr;        
+    }
+    
+void CGenericItutUiLayout::SetInputModeL(TInt aMode)
+    {
+    // fix EJML-7HM6GM, e.g. both EStrokeFind and EStroke will be stored as EStroke
+    if (aMode != iDataMgr->InputMode() || 
+        aMode == EStroke || aMode == EStrokeFind ||
+        aMode == EZhuyin || aMode == EZhuyinFind ||
+        ( iDataMgr->IsNumericOnly() && iDataMgr->IsCharFlagChanged() ) )
+        {
+        // deactivate original uimgr first
+        if (iCurrentUiMgr 
+            && iCurrentUiMgr->CurrentState()
+            && iCurrentUiMgr->CurrentState()->StateType() != CGenericItutUiMgrBase::EStateSpelling)
+            {
+            iCurrentUiMgr->DeactivateUI();
+            }
+
+        iDataMgr->SetInputModeL(aMode);
+
+        UiMgr()->ActivateUiL();
+        }
+    }
+
+void CGenericItutUiLayout::SetInputLanguageL(TInt aLanguage)
+    {
+    TInt previousLang = iDataMgr->InputLanguage();
+    iDataMgr->SetLanguageL(aLanguage);
+    iWindowMgr->SetLanguageL(aLanguage);
+    
+    if (previousLang != aLanguage)
+        {
+        ApplyVariantLafDataL();   
+        }
+    }
+
+void CGenericItutUiLayout::OnDeActivate()
+    {
+    TRAP_IGNORE(UiMgr()->HandleCommandL(ECmdPenInputDeActive, NULL));
+
+    CFepUiLayout::OnDeActivate();
+    }
+void CGenericItutUiLayout::OnActivate()
+    {
+    CFepUiLayout::OnActivate();
+     
+    iWindowMgr->OnActivate();
+    }
+
+CFepUiLayout* CGenericItutUiLayout::UiLayout()
+    {
+    return this;
+    }
+
+   
+void CGenericItutUiLayout::EnterMatchSelectionState(TBool aOn)
+    {
+    TBuf<4> buf;
+    buf.Append(reinterpret_cast<TText*>(&aOn), sizeof(TBool)/sizeof(TText));
+    SignalOwner(ESignalEnterMatchSelection, buf);
+    }
+
+void CGenericItutUiLayout::HandleAppInfoChange(const TDesC& aInfo, 
+                                               TPeninputAppInfo aType)
+    {
+    if ( aType == EAppIndicatorMsg )
+        {
+        TRAP_IGNORE(iWindowMgr->HandleAppInfoChangeL(aInfo));
+        }
+    /* Teleca change begin, 19.05.2009 ssal */    
+    if ( aType == EAppByteWarningMsg || aType == EAppMessageTypeChangeMsg)
+        {
+        TRAP_IGNORE(iWindowMgr->DisplayWarningNote(aInfo));
+        } 
+    /* Teleca change end, 19.05.2009 ssal */       
+    }
+    
+void CGenericItutUiLayout::ShowArrowBtn(TInt aShowFlag)
+    {
+    iWindowMgr->ShowArrowBtn(aShowFlag);    
+    }
+    
+void CGenericItutUiLayout::ApplyVariantLafDataL(TBool aResolutionChange)
+    {
+    iWindowMgr->ApplyVariantLafDataL(aResolutionChange);
+    }
+    
+CGenericItutWindowManager* CGenericItutUiLayout::UiManager()
+    {
+    return iWindowMgr;   
+    }
+
+CFepUiBaseCtrl* CGenericItutUiLayout::Control(TInt aCtrlId)
+    {
+    return iWindowMgr->Control(aCtrlId); 
+    }
+
+CGenericItutUiMgrBase* CGenericItutUiLayout::ChineseUiManager()
+    {
+    if (!iChnUiMgr)
+        {
+        TRAP_IGNORE( iChnUiMgr = CChnItutUiMgr::NewL(this, iDataMgr, iWindowMgr) );
+        }
+        
+    return iChnUiMgr;
+        
+    }
+    
+// End Of File