diff -r ebd48d2de13c -r ecbabf52600f textinput/peninputsplititut/src/peninputsplititutwesternuistatespelling.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputsplititut/src/peninputsplititutwesternuistatespelling.cpp Wed Sep 01 12:23:33 2010 +0100 @@ -0,0 +1,217 @@ +/* +* 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 "peninputsplititutwesternuistatespelling.h" +#include "peninputsplititutuimgrbase.h" +#include "peninputsplititutdatamgr.h" +#include "peninputsplititutlayoutcontext.h" +#include "peninputsplititutconverter.h" +#include "peninputsplititutlayout.h" +#include "peninputcommonbgctrl.h" +#include "peninputsplititutwindowmanager.h" +#include "peninputsplititutwindow.h" + +CWesternSplitItutUiStateSpelling* CWesternSplitItutUiStateSpelling::NewL(CSplitItutUiMgrBase* aOwner) + { + CWesternSplitItutUiStateSpelling* self = new (ELeave) CWesternSplitItutUiStateSpelling(aOwner); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CWesternSplitItutUiStateSpelling::~CWesternSplitItutUiStateSpelling() + { + } + +CWesternSplitItutUiStateSpelling::CWesternSplitItutUiStateSpelling(CSplitItutUiMgrBase* aOwner) + :CSplitItutUiStateBase(aOwner) + { + iICF = static_cast(iOwner->LayoutContext()->Control(ECtrlIdICF)); + } + +void CWesternSplitItutUiStateSpelling::ConstructL() + { + CSplitItutUiStateBase::ConstructL(); + } + +void CWesternSplitItutUiStateSpelling::CreateTextBtnIfNeededL(CAknFepCtrlCommonButton*& aBtn, + TInt aCtrlId, + TInt aCtrlPos, + TInt aTextResId, + TAknTextLineLayout aTextFormat) + { + if (!aBtn) + { + aBtn = CAknFepCtrlCommonButton::NewL(iOwner->LayoutContext()->UiLayout(), + aCtrlId, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive); + aBtn->SetRect(TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(aCtrlPos))); + HBufC* btntext = StringLoader::LoadLC(aTextResId); + aBtn->SetTextFormat(aTextFormat); + aBtn->SetTextL(*btntext); + aBtn->SetTextColorIndex( EAknsCIQsnTextColorsCG65 ); + CleanupStack::PopAndDestroy(btntext); + iOwner->LayoutContext()->UiLayout()->AddControlL(aBtn); + } + } + +void CWesternSplitItutUiStateSpelling::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; + } + //hide bubble in the first place. + iICF->HideBubble(); + + // update resource id of keypad + iOwner->DataMgr()->NotifyChangeControlLayout( + MItutPropertySubscriber::EItutPropertyKeypadResourceId, keypadResId); + + // hide not needed controls + //iOwner->LayoutContext()->Control(ECtrlIdArrowLeft)->Hide(ETrue); + //iOwner->LayoutContext()->Control(ECtrlIdArrowRight)->Hide(ETrue); + iOwner->LayoutContext()->ShowArrowBtn( EBtnArrowLeft | EBtnArrowRight ); + iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(ETrue); + iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(ETrue); + + TAknTextLineLayout btntextformat = TItutDataConverter::AnyToTextLine( + iOwner->DataMgr()->RequestData(EBtnTextLine)); + CreateTextBtnIfNeededL(iOk, ECtrlIdOkBtn, EItutPosOk, R_PENINPUT_FINGER_OK, btntextformat); + iOk->SetReady(ETrue); + iOk->Hide(EFalse); + iICF->IsEmpty() ? iOk->SetDimmed(ETrue) : iOk->SetDimmed(EFalse); + + CreateTextBtnIfNeededL(iCancel, ECtrlIdCancelBtn, EItutPosCancel, + R_PENINPUT_FINGER_CANCEL, btntextformat); + iCancel->SetReady(ETrue); + iCancel->Hide(EFalse); + + iOwner->DataMgr()->SetSpellMode(ETrue); + iICF->SetLineSeparatorAfterPrompt(ETrue); + + ReCalcLayoutL(); + + iICF->Hide( EFalse ); + iOwner->DataMgr()->SetUpdate(ETrue); + } + +void CWesternSplitItutUiStateSpelling::OnExit() + { + iICF->HideBubble(); //Hide bubble when full screen ITUT closed + iOk->Hide(ETrue); + iCancel->Hide(ETrue); + iOwner->DataMgr()->SetSpellMode(EFalse); + iICF->Hide( ETrue ); + iOwner->LayoutContext()->ShowArrowBtn(0); + } + +CSplitItutUiMgrBase::TUiState CWesternSplitItutUiStateSpelling::StateType() + { + return CSplitItutUiMgrBase::EStateSpelling; + } + +TInt CWesternSplitItutUiStateSpelling::HandleCommandL(TInt aCmd, TUint8* /*aData*/) + { + switch (aCmd) + { + case EItutExtCmdSizeChanged: + { + ReCalcLayoutL(); + return KErrNone; + } + + case EItutCmdCheckIcfEmpty: + { + iICF->IsEmpty() ? iOk->SetDimmed(ETrue) : iOk->SetDimmed(EFalse); + return KErrNone; + } + default: + break; + } + + return KErrNotSupported; + } + +TBool CWesternSplitItutUiStateSpelling::HandleCtrlEventL(TInt aEventType, + CFepUiBaseCtrl* aCtrl, + const TDesC& /*aEventData*/) + { + switch (aEventType) + { + case EEventButtonUp: + { + TInt ctrlid = aCtrl->ControlId(); + + if (ctrlid != ECtrlIdOkBtn && ctrlid != ECtrlIdCancelBtn) + { + return EFalse; + } + + TBuf<4> buf; + TBool exitbyok = (ctrlid == ECtrlIdOkBtn); + buf.Append(reinterpret_cast(&exitbyok), sizeof(TBool)/sizeof(TText)); + + iOwner->LayoutContext()->UiLayout()->SignalOwner(ESignalExitSpellMode, buf); + return ETrue; + } + default: + break; + } + + return EFalse; + } + +void CWesternSplitItutUiStateSpelling::ReCalcLayoutL() + { + // Update "OK" and "Cancel" position + TAknTextLineLayout btntextformat = TItutDataConverter::AnyToTextLine( + iOwner->DataMgr()->RequestData(EBtnTextLine)); + TRect btnrect = TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(EItutPosOk)); + iOk->SetTextFormat(btntextformat); + iOk->SizeChanged(btnrect, btnrect, ETrue); + + btnrect = TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(EItutPosCancel)); + iCancel->SetTextFormat(btntextformat); + iCancel->SizeChanged(btnrect, btnrect, ETrue); + + // Update key position + iOwner->LayoutContext()->ApplyVariantLafDataForSpellL(); + } + +// End Of File