--- /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 <AknFepGlobalEnums.h>
+#include <peninputgeneralitutnew.rsg>
+#include <peninputscrollablelist.h>
+#include <peninputlayout.h>
+#include <e32keys.h>
+#include <s32mem.h>
+#include <peninputlayoutmultilineicf.h>
+#include <StringLoader.h>
+
+#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<CFepLayoutScrollableList*>(
+ iOwner->LayoutContext()->Control(ECtrlIdMatchSelection));
+
+ iIcf = static_cast<CFepLayoutMultiLineIcf*>(
+ 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<TText*>(&aIdx), sizeof(TInt)/sizeof(TText));
+ buf.Append(reinterpret_cast<TText*>(&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<TText*>(&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