diff -r 000000000000 -r eb1f2e154e89 textinput/peninputgenericitut/src/peninputitutwesternuistatecusotmization.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatecusotmization.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,223 @@ +/* +* 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 "peninputitutwesternuistatecusotmization.h" +#include "peninputgenericitutlayoutcontext.h" +#include "peninputgenericitutuimgrbase.h" +#include "peninputgenericitutdatamgr.h" +#include "peninputitutcustomizationresourcemgr.h" +#include "peninputgenericitutcustomization.h" +#include "peninputgenericitutconverter.h" + +CWesternItutUiStateCustomization* CWesternItutUiStateCustomization::NewL( + CGenericItutUiMgrBase* aOwner) + { + CWesternItutUiStateCustomization* self = + new (ELeave) CWesternItutUiStateCustomization(aOwner); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CWesternItutUiStateCustomization::~CWesternItutUiStateCustomization() + { + if (iRscMgr) + { + iRscMgr->RemoveAddedCtrls(); + delete iRscMgr; + } + } + +CWesternItutUiStateCustomization::CWesternItutUiStateCustomization( + CGenericItutUiMgrBase* aOwner):CGenericItutUiStateBase(aOwner) + { + } + +void CWesternItutUiStateCustomization::ConstructL() + { + CGenericItutUiStateBase::ConstructL(); + iRscMgr = CItutCustomizedRscMgr::NewL(iOwner->LayoutContext()->UiLayout(), + iOwner->LayoutContext()); + } + +void CWesternItutUiStateCustomization::OnEntryL() + { + } + +void CWesternItutUiStateCustomization::OnExit() + { + iRscMgr->Restore(); + } + +TInt CWesternItutUiStateCustomization::HandleCommandL(TInt aCmd, TUint8* aData) + { + switch (aCmd) + { + case EItutExtCmdSetLayout: + { + TInt layouttype = *(reinterpret_cast(aData)); + switch (layouttype) + { + case EItutLayoutNumeric: + { + iOwner->DataMgr()->NotifyChangeControlLayout( + MItutPropertySubscriber::EItutPropertyKeypadResourceId, + R_FINGER_INPUT_KEYPAD_NUMBER); + break; + } + case EItutLayoutAlphabetic: + { + // should consider: if pin code need to support change keypad when case changed + // should also consider: if pin code need to consider different keypad res id used for different + // language script + iOwner->DataMgr()->NotifyChangeControlLayout( + MItutPropertySubscriber::EItutPropertyKeypadResourceId, + iOwner->DataMgr()->KeypadResourceId()); + break; + } + default: + return KErrNotSupported; + } + + return KErrNone; + } + case EItutExtCmdDimKey: + { + TInt keyidx = *(reinterpret_cast(aData)); + + if (IsKeyIdxValid(keyidx)) + { + DimKey(keyidx); + } + + return KErrNone; + } + case EItutExtCmdHideKey: + { + TInt keyidx = *(reinterpret_cast(aData)); + + if (IsKeyIdxValid(keyidx)) + { + HideKey(keyidx); + } + + return KErrNone; + } + case EItutExtCmdAddKey: + { + TItutKey itutkey = *(reinterpret_cast(aData)); + + if (iRscMgr->FindRawKeyBtn(itutkey.iScanCode) == KErrNotFound) + { + iRscMgr->CreateCustomizedRawKeyButtonL(itutkey); + } + else + { + iRscMgr->ShowRawKeyBtn(itutkey.iScanCode); + } + + return KErrNone; + } + case EItutExtCmdSetIcfData: + { + TFepInputContextFieldData icfdata = + *(reinterpret_cast(aData)); + CFepLayoutMultiLineIcf* icffield = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdICF)); + icffield->SetTextL(icfdata); + } + break; + case EItutExtCmdSizeChanged: + { + iRscMgr->ResizeAddedCtrls(); + } + default: + break; + } + + return KErrNotSupported; + } + +CGenericItutUiMgrBase::TUiState CWesternItutUiStateCustomization::StateType() + { + return CGenericItutUiMgrBase::EStateCustomization; + } + +void CWesternItutUiStateCustomization::DimKey(TInt aKeyIndex) + { + TInt keyscancode = ItutKeymap[aKeyIndex].iScanCode; + TInt ctrlid = ItutKeymap[aKeyIndex].iCtrlId; + + if (keyscancode != KInvalidScanCode) + { + CVirtualKeyboard* keypad = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdStdItut)); + CVirtualKey* dimkey = FindKeyByScanCode(keyscancode); + keypad->DimKey(dimkey, ETrue); + iRscMgr->AddDimmedVKey(dimkey); + } + else if (ctrlid != KInvalidCtrlId) + { + CButtonBase* btn = static_cast(iOwner->LayoutContext()->Control(ctrlid)); + btn->SetDimmed(ETrue); + iRscMgr->AddDimmedCtrl(btn); + } + } + +void CWesternItutUiStateCustomization::HideKey(TInt aKeyIndex) + { + // cannot hide virtual key, only can hide button + TInt ctrlid = ItutKeymap[aKeyIndex].iCtrlId; + + if (ctrlid != KInvalidCtrlId) + { + iRscMgr->AddHidedCtrl(iOwner->LayoutContext()->Control(ctrlid)); + } + } + +CVirtualKey* CWesternItutUiStateCustomization::FindKeyByScanCode(TInt aScanCode) + { + CVirtualKeyboard* keypad = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdStdItut)); + const RPointerArray& keys = keypad->KeyArray(); + + for (TInt i = 0; i < keys.Count(); i++) + { + if (keys[i]->ScanCode() == aScanCode) + { + return keys[i]; + } + } + + return NULL; + } + +TBool CWesternItutUiStateCustomization::IsKeyIdxValid(TInt aKeyIndex) + { + return (aKeyIndex >= 0 && aKeyIndex < sizeof(ItutKeymap)/sizeof(ItutKeymap[0])); + } + +// End Of File