diff -r 000000000000 -r eb1f2e154e89 textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "peninputrepeatbuttonex.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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(&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(&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& 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(&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