diff -r 000000000000 -r eb1f2e154e89 textinput/peninputsplititut/src/peninputsplititutlayout.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputsplititut/src/peninputsplititutlayout.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,510 @@ +/* +* 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: split itu-t layout +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +#include +//#include + +#include +#include + +#include "peninputsplititutlayout.h" +#include "peninputsplititutdatamgr.h" +#include "peninputsplititutuimgrbase.h" +#include "peninputsplititutuistatebase.h" +#include "peninputsplititutchnuimgr.h" +#include "peninputsplititutwesternuimgr.h" +#include "peninputsplititutconverter.h" +#include "peninputsplititutwindowmanager.h" + + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::NewL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CSplitItutUiLayout* CSplitItutUiLayout::NewL(MLayoutOwner* aLayoutOwner, + const TAny* aInitData) + { + CSplitItutUiLayout* layout = new (ELeave) CSplitItutUiLayout(aLayoutOwner); + + CleanupStack::PushL(layout); + layout->ConstructL(aInitData); + CleanupStack::Pop(layout); + + return layout; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::CSplitItutUiLayout +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CSplitItutUiLayout::CSplitItutUiLayout(MLayoutOwner* aLayoutOwner) + :CFepUiLayout(aLayoutOwner) + { + } + +// ---------CSplitItutUiLayout---------------------------------------- +// CSplitItutUiLayout::~CSplitItutUiLayout +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CSplitItutUiLayout::~CSplitItutUiLayout() + { + delete iDataMgr; + delete iChnUiMgr; + delete iWesternUiMgr; + delete iWindowMgr; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::ConstructL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::ConstructL(const TAny* aInitData) + { + BaseConstructL(); + + TPeninputLayoutData* layoutData = (TPeninputLayoutData*)aInitData; + + iDataMgr = CSplitItutDataMgr::NewL(this, layoutData->iPtiEngine ); + SetScreenSize(TItutDataConverter::AnyToSize(iDataMgr->RequestData(EScreenSize))); + + // western ui mgr is default ui mgr + iWindowMgr = CSplitItutWindowManager::NewL(this, iDataMgr); + iDataMgr->AddSubscriber(iWindowMgr); + iWesternUiMgr = CWesternSplitItutUiMgr::NewL(this, iDataMgr, iWindowMgr); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::SimulateRawEvent +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::SimulateRawEvent(TInt aScanCode, TRawEvent::TType aType) + { + TRawEvent event; + event.Set(aType,aScanCode); + + TPtrC eventPtr(reinterpret_cast(&event),sizeof(event)/sizeof(TUint16)); + + SignalOwner(ESignalSimulateEvent,eventPtr); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::HandleControlEvent +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::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)); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::HandleCommand +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +TInt CSplitItutUiLayout::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 ECmdPenInputCase: + case ECmdPenInputFingerMatchSelection: + { + 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 ECmdPenInputNoFreeSpace: + { + TRAP_IGNORE(ChineseUiManager()->HandleCommandL(ECmdPenInputNoFreeSpace, NULL)); + } + 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; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::PenInputType +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +TInt CSplitItutUiLayout::PenInputType() + { + return EPluginInputModeItut; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::SizeChanged +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +TInt CSplitItutUiLayout::SizeChanged(const TAny* /*pData*/) + { + iDataMgr->ReadLafInfo(); + + // set layout rect + SetRect(TItutDataConverter::AnyToRect(iDataMgr->RequestData(ELayoutRect))); + + iWindowMgr->SizeChanged(); + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::SubmitText +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::SubmitText(const TDesC& aEventData) + { + SignalOwner(ESignalKeyEvent, aEventData); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::OnSkinChange +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +TInt CSplitItutUiLayout::OnSkinChange() + { + CFepUiLayout::OnSkinChange(); + + TInt err = iWindowMgr->OnSkinChange(); + + return err; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::PressOnCtrls +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +TBool CSplitItutUiLayout::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; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::UiMgr +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CSplitItutUiMgrBase* CSplitItutUiLayout::UiMgr() + { + if (iDataMgr->IsChinese()) + { + iCurrentUiMgr = ChineseUiManager(); + } + else + { + iCurrentUiMgr = iWesternUiMgr; + } + + return iCurrentUiMgr; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::SetInputModeL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::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 + iDataMgr->SetInputModeL(aMode); + + UiMgr()->ActivateUiL(); + } + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::SetInputLanguageL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::SetInputLanguageL(TInt aLanguage) + { + TInt previousLang = iDataMgr->InputLanguage(); + iDataMgr->SetLanguageL(aLanguage); + + if (previousLang != aLanguage) + { + ApplyVariantLafDataL(); + } + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::OnDeActivate +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::OnDeActivate() + { + TRAP_IGNORE(UiMgr()->HandleCommandL(ECmdPenInputDeActive, NULL)); + + CFepUiLayout::OnDeActivate(); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::OnActivate +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::OnActivate() + { + CFepUiLayout::OnActivate(); + + SetRect(TItutDataConverter::AnyToRect(iDataMgr->RequestData(ELayoutRect))); + TPoint offset = TItutDataConverter::AnyToPoint(iDataMgr->RequestData(ELayoutOffset)); + LayoutOwner()->SetPosition( offset ); + + iWindowMgr->OnActivate(); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::UiLayout +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CFepUiLayout* CSplitItutUiLayout::UiLayout() + { + return this; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::HandleAppInfoChange +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::HandleAppInfoChange(const TDesC& aInfo, + TPeninputAppInfo aType) + { + if ( aType == EAppIndicatorMsg ) + { + TRAP_IGNORE(iWindowMgr->HandleAppInfoChangeL(aInfo)); + } + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::ShowArrowBtn +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::ShowArrowBtn(TInt aShowFlag) + { + iWindowMgr->ShowArrowBtn(aShowFlag); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::ApplyVariantLafDataL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CSplitItutUiLayout::ApplyVariantLafDataL(TBool aResolutionChange) + { + iWindowMgr->ApplyVariantLafDataL(aResolutionChange); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::UiManager +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CSplitItutWindowManager* CSplitItutUiLayout::UiManager() + { + return iWindowMgr; + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::Control +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CFepUiBaseCtrl* CSplitItutUiLayout::Control(TInt aCtrlId) + { + return iWindowMgr->Control(aCtrlId); + } + +// --------------------------------------------------------------------------- +// CSplitItutUiLayout::ChineseUiManager +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +CSplitItutUiMgrBase* CSplitItutUiLayout::ChineseUiManager() + { + if (!iChnUiMgr) + { + TRAP_IGNORE( iChnUiMgr = CChnSplitItutUiMgr::NewL(this, iDataMgr, iWindowMgr) ); + } + + return iChnUiMgr; + + } + +// End Of File