diff -r 000000000000 -r eb1f2e154e89 textinput/peninputgenericitut/src/peninputitutwesternuistatematchselection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatematchselection.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,235 @@ +/* +* 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 "peninputitutwesternuistatematchselection.h" +#include "peninputgenericitutuimgrbase.h" +#include "peninputgenericitutdatamgr.h" +#include "peninputgenericitutlayoutcontext.h" +#include "peninputgenericitutconverter.h" + +CWesternItutUiStateMatchSelection* CWesternItutUiStateMatchSelection::NewL( + CGenericItutUiMgrBase* aOwner) + { + CWesternItutUiStateMatchSelection* self = + new (ELeave) CWesternItutUiStateMatchSelection(aOwner); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CWesternItutUiStateMatchSelection::~CWesternItutUiStateMatchSelection() + { + iCandlist.ResetAndDestroy(); + iCandlist.Close(); + delete iSpellText; + } + +CWesternItutUiStateMatchSelection::CWesternItutUiStateMatchSelection( + CGenericItutUiMgrBase* aOwner):CGenericItutUiStateBase(aOwner) + { + iSelList = static_cast( + iOwner->LayoutContext()->Control(ECtrlIdMatchSelection)); + + iIcf = static_cast( + iOwner->LayoutContext()->Control(ECtrlIdICF)); + } + +void CWesternItutUiStateMatchSelection::ConstructL() + { + CGenericItutUiStateBase::ConstructL(); + iSpellText = StringLoader::LoadL(R_PENINPUT_FINGER_SPELL); + } + +void CWesternItutUiStateMatchSelection::OnEntryL() + { + TInt keypadResId = KInvalidResId; + switch (iOwner->DataMgr()->InputMode()) + { + case ENumber: + keypadResId = R_FINGER_INPUT_KEYPAD_NUMBER; + break; + case ELatin: + keypadResId = iOwner->DataMgr()->KeypadResourceId(); + break; + default: + break; + } + + // update resource id of keypad, candidate drop list + iOwner->DataMgr()->NotifyChangeControlLayout( + MItutPropertySubscriber::EItutPropertyKeypadResourceId, + keypadResId); + + if (iOwner->DataMgr()->IsChinese()) + { + iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight + | EBtnArrowUp| EBtnArrowDown); + } + else + { + iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight); + } + } + +void CWesternItutUiStateMatchSelection::OnExit() + { + iOwner->LayoutContext()->ShowArrowBtn(0); + iSelList->CloseWindow(); + iIcf->SetOverLapState(EFalse); + } + +CGenericItutUiMgrBase::TUiState CWesternItutUiStateMatchSelection::StateType() + { + return CGenericItutUiMgrBase::EStateMatchSelection; + } + +void CWesternItutUiStateMatchSelection::ReportItemSelected(TInt aCmdId, TInt aIdx, TBool aCommit) + { + TBuf<8> buf; + buf.Append(reinterpret_cast(&aIdx), sizeof(TInt)/sizeof(TText)); + buf.Append(reinterpret_cast(&aCommit), sizeof(TBool)/sizeof(TText)); + + iOwner->LayoutContext()->UiLayout()->SignalOwner(aCmdId, buf); + } + +void CWesternItutUiStateMatchSelection::ReportItemSelected(TInt aCmdId, TInt aIdx) + { + TBuf<4> buf; + buf.Append(reinterpret_cast(&aIdx), sizeof(TInt)/sizeof(TText)); + + iOwner->LayoutContext()->UiLayout()->SignalOwner(aCmdId, buf); + } + +TBool CWesternItutUiStateMatchSelection::HandleCtrlEventL( + TInt aEventType, CFepUiBaseCtrl* aCtrl, const TDesC& aEventData) + { + switch (aEventType) + { + case EItutCmdPredictItemSelected: + { + TInt itemidx = *(TInt*)aEventData.Ptr(); + + // if press spell, then enter spell mode, otherwise select an item + // note that spell do not belong to iCandlist + itemidx == iCandlist.Count() ? + iOwner->LayoutContext()->UiLayout()->SignalOwner(ESignalEnterSpellMode) : + // according to updated ui spec, if select an item, do not commit it + //ReportItemSelected(ESignalSelectMatchSelectionText, itemidx, ETrue); + ReportItemSelected(ESignalSelectMatchSelectionText, itemidx, ETrue); + return ETrue; + } + case EEventChoiceSelected: + { + CFepLayoutChoiceList::SEvent* event = + (CFepLayoutChoiceList::SEvent*)aEventData.Ptr(); + + if ( aCtrl->ControlId() == ECtrlIdMatchSelection && event->iIndex == -1) + { + iOwner->LayoutContext()->EnterMatchSelectionState(EFalse); + return ETrue; + } + } + break; + default: + break; + } + + return EFalse; + } + +TInt CWesternItutUiStateMatchSelection::HandleCommandL(TInt aCmd, TUint8* aData) + { + switch (aCmd) + { + case ECmdPenInputFingerMatchList: + { + RDesReadStream readStream; + TPtr8 countPtr(aData, 2*sizeof(TInt), 2*sizeof(TInt)); + readStream.Open(countPtr); + CleanupClosePushL(readStream); + + TInt candcount = readStream.ReadInt32L(); + TInt totalsize = readStream.ReadInt32L(); + CleanupStack::PopAndDestroy(&readStream); + + TPtr8 ptr(aData + 2*sizeof(TInt), totalsize - 2*sizeof(TInt), + totalsize - 2*sizeof(TInt)); + readStream.Open(ptr); + CleanupClosePushL(readStream); + + iCandlist.ResetAndDestroy(); + + iSelList->ClearItemsL(); + CFepLayoutChoiceList::SItem item; + + for (TInt i = 0; i < candcount; i++) + { + TInt candSize = readStream.ReadInt32L(); + + HBufC* candBuf = HBufC::NewLC(candSize/2); + TPtr candBufPtr = candBuf->Des(); + + readStream.ReadL(candBufPtr, candSize/2); + iCandlist.AppendL(candBuf); + CleanupStack::Pop(candBuf); + + item.iCommand = EItutCmdPredictItemSelected; + item.iText.Copy(candBufPtr); + iSelList->AddItemL(item); + + } + + if (iCandlist.Count() != 0) + { + item.iCommand = EItutCmdEnterSpellMode; + item.iText.Copy(*iSpellText); + iSelList->AddItemL(item); + SetMatchSelListLTPosAndDisplay(); + } + + CleanupStack::PopAndDestroy(&readStream); + return KErrNone; + } + default: + break; + } + + return KErrNotSupported; + } + +void CWesternItutUiStateMatchSelection::SetMatchSelListLTPosAndDisplay() + { + TPoint posbelow, posright; + posbelow = posright = iIcf->Rect().iTl; + iIcf->InlineTextPos(posbelow, posright); + TPoint tlPos = iOwner->DataMgr()->IsLandScape() ? posright : posbelow; + iSelList->SetCurrentFocusedIndex(-1); + iSelList->Display( TRect(tlPos, tlPos), CFepLayoutPopupWnd::EDispBottomRight); + } + +// End Of File