diff -r eb1f2e154e89 -r f5a1e66df979 textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp Fri Feb 19 23:09:27 2010 +0200 @@ -0,0 +1,1469 @@ +/* +* Copyright (c) 2005-2008 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: Implementation of main window of finger hwr. +* +*/ + +// INCLUDE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "peninputfingerhwrarwnd.h" +#include "peninputfingerhwrarlafmanager.h" +#include "peninputfingerhwrarevent.h" +#include "peninputfingerhwrarcontrolid.h" +#include "peninputfingerhwrarstoreconstants.h" +#include "peninputfingerhwrarlayout.h" +#include "peninputfingerhwrardatastore.h" +#include "peninputlayouthwrwnd.h" +#include "peninputfingerhwrarsymboltable.h" +#include "peninputfingerhwrarindicator.h" + +#include "peninputfingerhwrarmultipagevkb.h" +#include "hbufcarrayar.h" + +const TUint32 KDefaultTextColor = 0x000000; +const TUint KDefaultFrameColor = 0x000000; +const TUint32 KDefaultWriteBoxBgColor = 0xdddddd; +const TUint32 KDefaultWriteBoxFrameColor = 0x000000; + +// --------------------------------------------------------------------------- +// Symbian Constructor +// --------------------------------------------------------------------------- +// +CPeninputFingerHwrArWnd* CPeninputFingerHwrArWnd::NewL( CFepUiLayout* aFepUiLayout, + TInt aControlId, TBool aLandscapeStyle ) + { + CPeninputFingerHwrArWnd* self = NewLC( aFepUiLayout, aControlId, aLandscapeStyle ); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// Symbian Constructor +// --------------------------------------------------------------------------- +// +CPeninputFingerHwrArWnd* CPeninputFingerHwrArWnd::NewLC( CFepUiLayout* aFepUiLayout, + TInt aControlId, TBool aLandscapeStyle ) + { + CPeninputFingerHwrArWnd* self = new ( ELeave ) CPeninputFingerHwrArWnd( aFepUiLayout, aControlId ); + CleanupStack::PushL( self ); + self->ConstructL( aLandscapeStyle ); + + return self; + } + +// --------------------------------------------------------------------------- +// c++ destructor +// --------------------------------------------------------------------------- +// +CPeninputFingerHwrArWnd::~CPeninputFingerHwrArWnd() + { + delete iLafManager; + } + +// --------------------------------------------------------------------------- +// Construct control from resource. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ConstructFromResourceL() + { + if ( iResourceId == KInvalidResId ) + { + User::Leave( KErrArgument ); + } + + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, iResourceId ); + + TInt supportskin = reader.ReadInt16(); + + if ( iFirstTimeConstruct && ( supportskin != KNotSupportSkin ) ) + { + UiLayout()->AddControlL( this ); + } + + // read shadow resources + TInt32 shadow = reader.ReadInt32(); + ReadShadowInfoL( shadow ); + + // read icf resource + TInt32 icf = reader.ReadInt32(); + ReadICFInfoL( icf ); + + + if ( iFirstTimeConstruct ) + { + const TInt32 boxwndResId = reader.ReadInt32(); + const TInt32 bgImageResId = reader.ReadInt32(); + + ReadWritingBoxInfoL( boxwndResId ); + ReadBackgroundInfoL( bgImageResId ); + //iHandwritingIndicator->ConstructFromResourceL(R_AKN_FEP_HWR_INDICATOR_ICON); + } + else + { + CControlGroup::ConstructFromResourceL(); + + const TInt32 boxwndResId = reader.ReadInt32(); + const TInt32 bgImageResId = reader.ReadInt32(); + ReadWritingBoxInfoL( boxwndResId ); + ReadBackgroundInfoL( bgImageResId ); + } + + CleanupStack::PopAndDestroy(); // reader + + if (!iFirstTimeConstruct) + { + Draw(); + } + + iFirstTimeConstruct = EFalse; + } + + +// --------------------------------------------------------------------------- +// Draw window. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::Draw() + { + if(AbleToDraw()) + { + DrawOpaqueMaskBackground( Rect() ); + + if( BackgroundBmp() && BackgroundBmp()->SizeInPixels() != Rect().Size() ) + { + AknIconUtils::SetSize(BackgroundBmp(), Rect().Size(), EAspectRatioNotPreserved); + } + + DrawBackground(); + + CControlGroup::Draw(); + + // Set guide line + DrawGuideLine(); + + //iHandwritingIndicator->BringToTop(); + iHandwritingIndicator->Draw(); + // update whole area + UpdateArea( Rect(), EFalse ); + } + } + +// --------------------------------------------------------------------------- +// Resize. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SizeChangedL() + { + iLafManager->ReadLafInfo(); + ResetLayoutL(); + + + iCandidateList->SizeChanged( iLafManager->CandidateUnitWidth(), + iLafManager->CandidateUnitHeight(), + iLafManager->CandidateUnitWidth(), + iLafManager->CandidateLTPos(), + 3/*KCandidateCountPerRow*/, + 2 ); + iNumCandidateList->SizeChanged( iLafManager->CandidateUnitWidth(), + iLafManager->CandidateUnitHeight(), + iLafManager->CandidateUnitWidth(), + iLafManager->CandidateLTPos(), + 3/*KCandidateCountPerRow*/, + 1 ); + iContextField->SetTextMargin ( iLafManager->IcfLeftMargin(), + iLafManager->IcfRightMargin(), + iLafManager->IcfTopMargin(), + iLafManager->IcfBottomMargin() ); + + iContextField->SetLineSpace( iLafManager->IcfLineSpaceMargin() ); + iContextField->SizeChangedL( iLafManager->IcfRect(), + iLafManager->IcfTextHeight(), + iLafManager->IcfFont()->FontMaxHeight(), + iLafManager->IcfFont() ); + Draw(); +} + +// --------------------------------------------------------------------------- +// accept editor's text alignment. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetTextAlignmentL( TInt aAlignment, TInt aLangId ) + { + if ( iContextField ) + { + iContextField->SetTextAlignmentL( aAlignment, aLangId ); + } + } + +// --------------------------------------------------------------------------- +// accept editor's text +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetEditorTextL( const TFepInputContextFieldData& aData ) + { + if ( iContextField ) + { + iContextField->SetTextL( aData ); + } + } + +// --------------------------------------------------------------------------- +// accept editor's promopt txt. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetPromptTextL( TUint8* aPromoptData ) + { + RDesReadStream readStream; + + TPtr8 countPtr(aPromoptData, 2*sizeof(TInt), 2*sizeof(TInt)); + readStream.Open(countPtr); + CleanupClosePushL(readStream); + const TInt dataCount = readStream.ReadInt32L(); + const TInt textCount = readStream.ReadInt32L(); + CleanupStack::PopAndDestroy(&readStream); + + TPtr8 ptr( aPromoptData+2*sizeof(TInt), dataCount+textCount, dataCount+textCount ); + readStream.Open(ptr); + CleanupClosePushL(readStream); + + HBufC8* dataBuf = HBufC8::NewLC(dataCount); + TPtr8 dataBufPtr = dataBuf->Des(); + readStream.ReadL(dataBufPtr, dataCount); + + TFepPromptText* pIcfData = + reinterpret_cast(const_cast(dataBufPtr.Ptr())); + + HBufC* textBuf; + if (textCount > 0) + { + textBuf = HBufC::NewLC(textCount/2); + TPtr textBufPtr = textBuf->Des(); + readStream.ReadL(textBufPtr, textCount/2); + + const HBufC* icfPromptText = iContextField->PromptText(); + + if (!icfPromptText || icfPromptText->Compare(textBuf->Des()) != 0 ) + { + iContextField->SetPromptTextL( textBuf->Des(), pIcfData->iCleanContent ); + } + + CleanupStack::PopAndDestroy(textBuf); + } + else + { + iContextField->SetPromptTextL(KNullDesC, pIcfData->iCleanContent); + } + + CleanupStack::PopAndDestroy(dataBuf); + CleanupStack::PopAndDestroy(&readStream); + } + +// --------------------------------------------------------------------------- +// Dim option button +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetEnableSettingBtn(const TBool aEnable) + { + if ( aEnable ) + { + iOptionBtn->SetDimmed(EFalse); + } + else + { + iOptionBtn->SetDimmed(ETrue); + iOptionBtn->SetActive(EFalse); + } + + } + +// --------------------------------------------------------------------------- +// accept editor's bubble text. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetBubbleTextL( const TDesC& aInfo ) + { + if ( aInfo.Length() > 0 ) + { + iContextField->ShowBubble( aInfo, iContextField->MsgBubbleCtrl()->Rect() ); + } + else + { + iContextField->HideBubble(); + } + } + +// --------------------------------------------------------------------------- +// accept editor's char ranges restriction. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetPermittedRanges( const TInt aPermittedRanges ) + { + if(aPermittedRanges == 0) + return; + + iPermittedRanges = aPermittedRanges; + } + +// --------------------------------------------------------------------------- +// get strokes from hwr writing box. +// --------------------------------------------------------------------------- +// +const RArray& CPeninputFingerHwrArWnd::StrokeList() + { + return iWritingBox->StrokeList(); + } + +// --------------------------------------------------------------------------- +// set end mark of hwr +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetStrokeEndMark( const TPoint& aEndMark ) + { + iWritingBox->SetStrokeEndMark( aEndMark ); + } + +// --------------------------------------------------------------------------- +// set guide line on or off. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetGuideLineOn(const TBool aGuideLineOn) + { + iGuideLineOn = aGuideLineOn; + } + +// --------------------------------------------------------------------------- +// set pen color of hwr writing. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetBoxPenColor( const TInt aPenColor ) + { + iWritingBox->SetPenColor( aPenColor ); + } + +// --------------------------------------------------------------------------- +// set pen size of hwr writing. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetBoxPenSize( const TSize aPenSize ) + { + iWritingBox->SetPenSize( aPenSize ); + } + +// --------------------------------------------------------------------------- +// set writing speed hwr writing. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SetBoxWritingSpeed( const TTimeIntervalMicroSeconds32& aCharDelay ) + { + iWritingBox->SetCharacterDelay( aCharDelay ); + iWritingBox->SetStrokeDelay( 90000 ); + } + +// --------------------------------------------------------------------------- +// retrieve rect of hwr writingbox. +// --------------------------------------------------------------------------- +// +TRect CPeninputFingerHwrArWnd::WritingBoxRect() + { + return iWritingBox->Rect(); + } + + +// --------------------------------------------------------------------------- +// Cancel wrting +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CancelWriting() + { + iWritingBox->CancelCharWriting(); + } + +// --------------------------------------------------------------------------- +// Change SCT page. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ShowSctPage( TInt aPageNo, TInt aPos ) + { + iSymbolTable->NavigatePage(aPageNo,aPos); + UpdateAllVirtualKeysFeedback( EFingerHwrSymbolRange ); + } + +// --------------------------------------------------------------------------- +// retrieve the ICF control. +// --------------------------------------------------------------------------- +// +CFepLayoutMultiLineIcf* CPeninputFingerHwrArWnd::Icf() + { + return iContextField; + } + + +// --------------------------------------------------------------------------- +// retrieve the candicate list control. +// --------------------------------------------------------------------------- +// +CFepCtrlDropdownList* CPeninputFingerHwrArWnd::CandidateList() + { + return iCandidateList; + } +// --------------------------------------------------------------------------- +// retrieve the number candicate list control. +// --------------------------------------------------------------------------- +// +CFepCtrlDropdownList* CPeninputFingerHwrArWnd::NumCandidateList() + { + return iNumCandidateList; + } + +// --------------------------------------------------------------------------- +// Update layout +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::UpdateLayout( const TBool aIsStandby, const TBool aReloadCandicate) + { + TRAP_IGNORE( UpdateLayoutL( aIsStandby, aReloadCandicate) ); + } + +// --------------------------------------------------------------------------- +// Update layout +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::UpdateLayoutL( const TBool aIsStandby, + const TBool aReloadCandicate) + { + // Set the candidates when dropdown list is shown + if ( !aIsStandby ) + { + typedef CFepCtrlDropdownList::TListType TDropListType; + + CPeninputFingerHwrArLayout* hwrLayout = NULL; + hwrLayout = static_cast( UiLayout() ); + CPeninputFingerHwrArDataStore& datastore = hwrLayout->DataStore(); + + const RPointerArray& candidates = datastore.Candidate(); + + + TDropListType unexpandable = CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble; + + if ( datastore.PrimaryRange() == ERangeNative ) + { + iCandidateList->Hide( EFalse ); + + if ( aReloadCandicate ) + { + iCandidateList->SetCandidatesL( candidates, unexpandable ); + } + + iCandidateList->SetHighlightCell( 0, datastore.Highlight() ); + + } + else + { + iNumCandidateList->Hide( EFalse ); + if ( aReloadCandicate ) + { + iNumCandidateList->SetCandidatesL( candidates, unexpandable ); + } + + iNumCandidateList->SetHighlightCell( 0, datastore.Highlight() ); + } + } + else + { + iCandidateList->ResetAndClear(CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble); + iNumCandidateList->ResetAndClear(CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble); + // hide all the dropdown list in standby state + iCandidateList->Hide( ETrue ); + iNumCandidateList->Hide( ETrue ); + } + + iArrowLeftBtn->Hide( !aIsStandby ); + iArrowRightBtn->Hide( !aIsStandby ); + iArrowUpBtn->Hide( !aIsStandby ); + iArrowDownBtn->Hide( !aIsStandby ); + } + +// --------------------------------------------------------------------------- +// dim arrow buttons. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::DimArrowKeys( TBool aDimArrow ) + { + iArrowLeftBtn->SetDimmed( aDimArrow ); + iArrowRightBtn->SetDimmed( aDimArrow ); + iArrowUpBtn->SetDimmed( aDimArrow ); + iArrowDownBtn->SetDimmed( aDimArrow ); + } + +// --------------------------------------------------------------------------- +// retrieve char range of layout, including sct. +// --------------------------------------------------------------------------- +// +TInt CPeninputFingerHwrArWnd::CurrentCharRange() + { + return iCurCharRange; + } + +// --------------------------------------------------------------------------- +// c++ constructor +// --------------------------------------------------------------------------- +// +CPeninputFingerHwrArWnd::CPeninputFingerHwrArWnd( + CFepUiLayout* aFepUiLayout, TInt aControlId ) + : CControlGroup( aFepUiLayout,aControlId ), iFirstTimeConstruct( ETrue ) + { + } + +// --------------------------------------------------------------------------- +// Symbian second-phase constructor +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ConstructL( TBool /*aLandscapeStyle*/ ) + { + BaseConstructL(); + + iLafManager = CPeninputFingerHwrArLafManager::NewL(); + iLafManager->ReadLafInfo(); + + //crate writing + CreateWritingBoxL(); + + //create the handwriting indicator + iHandwritingIndicator = CPeninputArabicFingerHwrIndicator::NewL(UiLayout(),EHwrCtrlIdHandwringIndicator); + AddControlL(iHandwritingIndicator); + + //create icf + CreateContextFieldL(); + + //create candidate lists + CreateCandidateListL(); + + //create number candidate lists. + CreateNumCandidateListL(); + + //create virtual sct pad + CreateSymbolTableL(); + + //create control buttons + CreateButtonsL(); + + iCurCharRangeNoSct = EFingerHwrNativeRange; + iCurCharRange = EFingerHwrNativeRange; + + //ResetLayoutL(); + SizeChangedL(); + SwitchToStandbyView(); + } + +// --------------------------------------------------------------------------- +// create icf. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CreateContextFieldL() + { + const CFont* icffont =iLafManager->IcfFont(); + + iContextField = CFepLayoutMultiLineIcf::NewL( + iLafManager->IcfRect(), + UiLayout(), + EHwrCtrlIdInputContextField, + icffont->HeightInPixels(), + icffont->FontMaxHeight(), + icffont ); + + iContextField->SetTextMargin ( iLafManager->IcfLeftMargin(), + iLafManager->IcfRightMargin(), + iLafManager->IcfTopMargin(), + iLafManager->IcfBottomMargin() ); + + iContextField->SetLineSpace( iLafManager->IcfLineSpaceMargin() ); + + iContextField->SizeChangedL( iLafManager->IcfRect(), + iLafManager->IcfTextHeight(), + iLafManager->IcfFont()->FontMaxHeight(), + iLafManager->IcfFont() ); + + TAknWindowLineLayout bubbleLineLayout = AknLayoutScalable_Apps::popup_char_count_window().LayoutLine(); + TAknTextLineLayout bubbleTextLayout = AknLayoutScalable_Apps::popup_char_count_window_t1( 0 ).LayoutLine(); + + iContextField->MsgBubbleCtrl()->SetTextFormat( bubbleTextLayout ); + iContextField->MsgBubbleCtrl()->SetTextColorIndex( EAknsCIQsnTextColorsCG67 ); + + //Change the ID when ID into release + iContextField->MsgBubbleCtrl()->SetBitmapParam( NULL, + NULL, + KAknsIIDQsnFrInputPreviewSideL, + KAknsIIDQsnFrInputPreviewMiddle, + KAknsIIDQsnFrInputPreviewSideR ); + iContextField->SetMsgBubbleCtrlSize( TSize( bubbleLineLayout.iW,bubbleLineLayout.iH ) ); + + iContextField->SetLineSeparatorAfterPrompt(ETrue); + + //transfer to headerPane + AddControlL( iContextField ); + + //add layout as event observer + iContextField->AddEventObserver( UiLayout() ); + iContextField->SetFocus(); + + } + +// --------------------------------------------------------------------------- +// create candidate lists. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CreateCandidateListL() + { + TDropdownListDrawInfo candiDrawInfo( + KAknsIIDQsnFrFunctionButtonInactive, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrItutButtonCandiSideL, + KAknsIIDQsnFrItutButtonCandiMiddle, + KAknsIIDQsnFrItutButtonCandiSideR, + KAknsIIDQsnFrItutButtonCandiPressedSideL, + KAknsIIDQsnFrItutButtonCandiPressedMiddle, + KAknsIIDQsnFrItutButtonCandiPressedSideR, + TRgb( 194, 221, 242 ), + ETrue ); + + TInt unitWidth = iLafManager->CandidateUnitWidth(); + TInt unitHeight = iLafManager->CandidateUnitHeight(); + TPoint ltPosition = iLafManager->CandidateLTPos(); + const CFont *font = iLafManager->CandidateFont(); + iCandidateList = CFepCtrlDropdownList::NewL(UiLayout(), + EHwrCtrlIdCandidateList, + R_FSHWR_CANDIDATE_DROP_DOWN_LIST, + ltPosition, + font , + TSize(unitWidth,unitHeight), + unitWidth, + 3,2, + unitHeight, + 0, + 0, + CFepCtrlDropdownList::ECandFromRToL, + EFalse); + AddControlL( iCandidateList ); + + TInt horizontalMargin = iLafManager->CandidateHorizontalMargin(); + TInt verticalMargin = iLafManager->CandidateVerticalMargin(); + iCandidateList->SetCellMargin( horizontalMargin, verticalMargin ); + iCandidateList->SetFont( font ); + + // set the needed events + iCandidateList->SetEventIdForCandidateSelected( EHwrEventCandidateSelected ); + iCandidateList->AddEventObserver( UiLayout() ); + + // hide the candidate list + iCandidateList->Hide( ETrue ); + iCandidateList->SetDropdownListImgID( candiDrawInfo ); + } + +// --------------------------------------------------------------------------- +// create candidate lists. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CreateNumCandidateListL() + { + TDropdownListDrawInfo candiDrawInfo( + KAknsIIDQsnFrFunctionButtonInactive, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrItutButtonCandiSideL, + KAknsIIDQsnFrItutButtonCandiMiddle, + KAknsIIDQsnFrItutButtonCandiSideR, + KAknsIIDQsnFrItutButtonCandiPressedSideL, + KAknsIIDQsnFrItutButtonCandiPressedMiddle, + KAknsIIDQsnFrItutButtonCandiPressedSideR, + TRgb( 194, 221, 242 ), + ETrue ); + + TInt unitWidth = iLafManager->CandidateUnitWidth(); + TInt unitHeight = iLafManager->CandidateUnitHeight(); + TPoint ltPosition = iLafManager->CandidateLTPos(); + const CFont *font = iLafManager->CandidateFont(); + TInt horizontalMargin = iLafManager->CandidateHorizontalMargin(); + TInt verticalMargin = iLafManager->CandidateVerticalMargin(); + + iNumCandidateList = CFepCtrlDropdownList::NewL(UiLayout(), + EHwrCtrlIdNumCandidateList, + R_FSHWR_CANDIDATE_DROP_DOWN_LIST, + ltPosition, + font , + TSize(unitWidth,unitHeight), + unitWidth, + 3,1, + unitHeight, + 0, + 0, + CFepCtrlDropdownList::ECandFromRToL, + EFalse); + AddControlL( iNumCandidateList ); + iNumCandidateList->SetCellMargin( horizontalMargin, verticalMargin ); + iNumCandidateList->SetFont( font ); + + // set the needed events + iNumCandidateList->SetEventIdForCandidateSelected( EHwrEventCandidateSelected ); + iNumCandidateList->AddEventObserver( UiLayout() ); + + // hide the candidate list + iNumCandidateList->Hide( ETrue ); + iNumCandidateList->SetDropdownListImgID( candiDrawInfo ); + + } +// --------------------------------------------------------------------------- +// create writing box. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CreateWritingBoxL() + { + iWritingBox = CTransparentHwrWndExt::NewL( TRect( 0,0,0,0 ), UiLayout(), + EHwrCtrlIdWritingBox, EFalse ); + + AddControlL( iWritingBox ); + + + //set it to window + iWritingBox->SetStrokeEndMark( TPoint( -1,0 ) ); + iWritingBox->AddEventObserver( UiLayout() ); + iWritingBox->EnableTraceOutsideWindow( EFalse ); + iWritingBox->SetWndTransparencyFactor( 0 ); + + iWritingBox->InstallPenTraceDecoratorL( KNullDesC,EFalse); + } + +// --------------------------------------------------------------------------- +// create all function buttons. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CreateButtonsL() + { + iCloseBtn = CreateEventBtnL( EHwrCtrlIdClose, R_AKN_FEP_HWR_CLOSE ); + iOptionBtn = CreateEventBtnL( EHwrCtrlIdLanguageOption, R_AKN_FEP_HWR_OPTION ); + + iBackspaceBtn = CreateRepBtnL( EHwrCtrlIdBackspace, R_AKN_FEP_HWR_BACK_SPACE, + EHwrEventKeyBack, EKeyBackspace ); + + iArrowLeftBtn = CreateRepBtnL( EHwrCtrlIdArrowLeft, R_AKN_FEP_HWR_ARROWLEFT, + EHwrEventNavKeyClicked, EKeyLeftArrow ); + iArrowRightBtn = CreateRepBtnL( EHwrCtrlIdArrowRight, R_AKN_FEP_HWR_ARROWRIGHT, + EHwrEventNavKeyClicked, EKeyRightArrow ); + iArrowUpBtn = CreateRepBtnL( EHwrCtrlIdArrowUp, R_AKN_FEP_HWR_ARROWUP, + EHwrEventNavKeyClicked, EKeyUpArrow ); + iArrowDownBtn = CreateRepBtnL( EHwrCtrlIdArrowDown, R_AKN_FEP_HWR_ARROWDOWN, + EHwrEventNavKeyClicked, EKeyDownArrow ); + iSymbolTableBtn = CreateEventBtnL( EHwrCtrlIdSymbolButton, R_AKN_FEP_HWR_SYMBOL_TABLE_BUTTON ); + } + +// --------------------------------------------------------------------------- +// create virtual sct pad. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CreateSymbolTableL() + { + iSymbolTable = CPeninputArabicFingerHwrSymbolTable::NewL(UiLayout(),EHwrCtrlIdSymbolTableVkbGroup); + iSymbolTable->Hide(ETrue); + AddControlL( iSymbolTable ); + iSymbolTable->AddEventObserver( UiLayout() ); + } + +// --------------------------------------------------------------------------- +// EventButton creation helper. +// --------------------------------------------------------------------------- +// +CAknFepCtrlEventButton* CPeninputFingerHwrArWnd::CreateEventBtnL( TInt aCtrlId, + TInt32 aResId, TInt aEvent/*= 0xFFFF*/,TInt aUnicode/*=0*/ ) + { + CAknFepCtrlEventButton* button = CAknFepCtrlEventButton::NewL( + UiLayout(), aCtrlId, aEvent, aUnicode, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive ); + + button->SetResourceId( aResId ); + button->ConstructFromResourceL(); + button->AddEventObserver( UiLayout() ); + AddControlL( button ); + return button; + } + +// --------------------------------------------------------------------------- +// RepeatButton creation helper. +// --------------------------------------------------------------------------- +// +CAknFepCtrlRepeatButton* CPeninputFingerHwrArWnd::CreateRepBtnL( const TInt aCtrlId, + TInt32 aResId, const TInt aEvent, const TInt aUnicode ) + { + CAknFepCtrlRepeatButton* button = CAknFepCtrlRepeatButton::NewL( + UiLayout(), aCtrlId, aEvent, aUnicode, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive ); + + button->SetResourceId( aResId ); + button->ConstructFromResourceL( ); + button->AddEventObserver( UiLayout() ); + AddControlL( button ); + + return button; + } + +// --------------------------------------------------------------------------- +// load virtual number pad images. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::LoadVkbKeyImageL( TInt aResId, const TSize& aKeySize ) + { + iSymbolTable->LoadVkbKeyImageL(aResId,aKeySize); + } + +// --------------------------------------------------------------------------- +// load virtual sct keys. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::LoadVirtualSctpadKeysL( const TInt aResId, + const RArray& aCellRects ) + { + TAknTextLineLayout txtlayout = iLafManager->SctpadKeyTxtLayout(); + iSymbolTable->KeyPad()->SetTextLineLayout( txtlayout ); + + TInt fontid = txtlayout.FontId(); + const CFont* font = AknLayoutUtils::FontFromId( fontid ); + iSymbolTable->KeyPad()->SetFont( font ); + + iSymbolTable->LoadVirtualKeypadKeyL(aResId,aCellRects); + } + +// --------------------------------------------------------------------------- +// relayout full ui, reset all controls position. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ResetLayoutL() + { + TRect rcScreen = iLafManager->LayoutRect(); + SetRect( rcScreen ); + + TRect rect; + + //Move ICF + rect = iLafManager->CtrlRect( iContextField->ControlId() ); + iContextField->SetRect( rect ); + + //Move Writing box + rect = iLafManager->CtrlRect( iWritingBox->ControlId() ); + iWritingBox->SetRect( rect ); + + //resize indicator + TRect indicatorRect; + indicatorRect.iTl = rect.iTl; + indicatorRect.Move(TPoint(10,10)); + + indicatorRect.SetSize(TSize(50,30)); + + iHandwritingIndicator->ConstructFromResourceL(R_AKN_FEP_HWR_INDICATOR_ICON); + iHandwritingIndicator->SizeChanged(indicatorRect,ETrue); + + //Move buttons + TSize siBtnPadding = iLafManager->ButtonInnerPadding(); + TInt pdx = siBtnPadding.iWidth; + TInt pdy = siBtnPadding.iHeight; + + rect = iLafManager->CtrlRect( iCloseBtn->ControlId() ); + MoveIconButton( iCloseBtn, rect, pdx, pdy, ETrue ); + + rect = iLafManager->CtrlRect( iSymbolTableBtn->ControlId() ); + MoveIconButton( iSymbolTableBtn, rect, pdx, pdy, ETrue ); + + rect = iLafManager->CtrlRect( iBackspaceBtn->ControlId() ); + MoveIconButton( iBackspaceBtn, rect, pdx, pdy, ETrue ); + + rect = iLafManager->CtrlRect( iArrowUpBtn->ControlId() ); + MoveIconButton( iArrowUpBtn, rect, pdx, pdy, ETrue ); + + rect = iLafManager->CtrlRect( iArrowLeftBtn->ControlId() ); + MoveIconButton( iArrowLeftBtn, rect, pdx, pdy, ETrue ); + + rect = iLafManager->CtrlRect( iArrowRightBtn->ControlId() ); + MoveIconButton( iArrowRightBtn, rect, pdx, pdy, ETrue ); + + rect = iLafManager->CtrlRect( iArrowDownBtn->ControlId() ); + MoveIconButton( iArrowDownBtn, rect, pdx, pdy, ETrue ); + + rect = iLafManager->CtrlRect( iOptionBtn->ControlId() ); + MoveIconButton( iOptionBtn, rect, pdx, pdy, ETrue ); + + // load vkb key image + TSize keysize = iLafManager->VirtualSctpadCellSize().Size(); + LoadVkbKeyImageL(R_FINGER_HWR_SCTPAD_IMAGE, keysize ); + + // get the key rect + RArray rects; + CleanupClosePushL( rects ); + iLafManager->GetVirtualKeyRects( rects ); + + // load keys + if(iLafManager->IsLandscape()) + { + LoadVirtualSctpadKeysL(R_ARABIC_FINGER_HWR_LANDSCAPE_SYMBOL_TABLE, rects); + } + else + { + LoadVirtualSctpadKeysL(R_ARABIC_FINGER_HWR_PORTRAIT_SYMBOL_TABLE, rects); + } + CleanupStack::PopAndDestroy();//rects + + //move virtual Sctpad + TInt rows = iLafManager->VirtualSctpadRowCount(); + TInt cols = iLafManager->VirtualSctpadColCount(); + + rect = iLafManager->CtrlRect(iSymbolTable->ControlId()); + iSymbolTable->SetRect(rect); + + TSize symButtonSize = iLafManager->SymbolGroupButtonSize(); + iSymbolTable->SizeChanged(TSize(),symButtonSize,rows,cols,iLafManager->IsLandscape()); + } + + +// --------------------------------------------------------------------------- +// layout for chinese range standby. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SwitchToStandbyView() + { + // hide following controls + iCandidateList->Hide( ETrue ); + iNumCandidateList->Hide( ETrue ); + iSymbolTable->Hide( ETrue ); + + // show following controls + iArrowLeftBtn->Hide( EFalse ); + iArrowRightBtn->Hide( EFalse ); + iArrowUpBtn->Hide( EFalse ); + iArrowDownBtn->Hide( EFalse ); + iOptionBtn->Hide( EFalse ); + + iSymbolTableBtn->Hide( EFalse ); + iSymbolTableBtn->SetHighlight( EFalse); + + UpdateAllVirtualKeysFeedback( EFingerHwrNativeRange ); + Draw(); + } + +// --------------------------------------------------------------------------- +// layout for symbol range standby. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::SwitchToSymbolTableView() + { + // show following controls + iWritingBox->Hide( EFalse ); + iSymbolTable->Hide( EFalse ); + iOptionBtn->Hide( EFalse ); + + // hide follwing controls + iCandidateList->Hide( ETrue ); + iNumCandidateList->Hide( ETrue ); + iArrowLeftBtn->Hide( ETrue ); + iArrowRightBtn->Hide( ETrue ); + iArrowUpBtn->Hide( ETrue ); + iArrowDownBtn->Hide( ETrue ); + iOptionBtn->Hide( EFalse ); + iSymbolTableBtn->SetHighlight( ETrue ); + + TInt pageno = ( iCurCharRangeNoSct == EFingerHwrNativeRange ) ? 0 : 1; + ShowSctPage( pageno, EPagePosPageNo ); + + UpdateAllVirtualKeysFeedback( EFingerHwrSymbolRange ); + iSymbolTable->OpenSymbolTable(); + } + + +// --------------------------------------------------------------------------- +// EventButton layout helper. Move button to specified rect. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::MoveIconButton( CAknFepCtrlEventButton* aButton, + const TRect& aRect, TInt aXPadding, TInt aYPadding, TBool aReloadImages ) + { + if ( !aButton ) + { + return; + } + + aButton->SetRect( aRect ); + TRect rcInner = aRect; + if ( rcInner.Width()> rcInner.Height() ) + { + TInt dx = ( rcInner.Width() - rcInner.Height() ) / 2; + rcInner.Move( dx, 0 ); + rcInner.SetWidth( rcInner.Height() ); + } + else + { + TInt dy = ( rcInner.Height() - rcInner.Width() ) / 2; + rcInner.Move( 0, dy ); + rcInner.SetHeight( rcInner.Width() ); + } + + rcInner.Shrink( aXPadding, aYPadding ); + aButton->SizeChanged( aRect, rcInner, aReloadImages ); + } + +// --------------------------------------------------------------------------- +// Read control's shadow info. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ReadShadowInfoL( const TInt aResId ) + { + TResourceReader resReader; + CCoeEnv::Static()->CreateResourceReaderLC( resReader, aResId ); + + TPtrC bmpFileName = resReader.ReadTPtrC(); + TInt32 imgMajorSkinId = resReader.ReadInt32(); + + TAknsItemID id; + TInt skinitemid; + + MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); + + for ( TInt i = 0; i < KShadowBmpBr + 1; i++ ) + { + const TInt16 bmpId = resReader.ReadInt16(); + const TInt16 bmpMskId = resReader.ReadInt16(); + skinitemid = resReader.ReadInt16(); + + id.Set( TInt( imgMajorSkinId ), skinitemid ); + + if ( bmpId != KInvalidImg ) + { + CFbsBitmap* shadowImg = NULL; + CFbsBitmap* shadowMaskImg = NULL; + + if ( bmpMskId != KInvalidImg ) + { + AknsUtils::CreateIconL( skininstance, + id, + shadowImg, + shadowMaskImg, + bmpFileName, + bmpId, + bmpMskId ); + } + else + { + AknsUtils::CreateIconL( skininstance, + id, + shadowImg, + bmpFileName, + bmpId ); + } + + SetShadowBmp( shadowImg, shadowMaskImg, TShadowBitmapIndex( i ) ); + } + } + CleanupStack::PopAndDestroy( 1 ); // reader + + } + +// --------------------------------------------------------------------------- +// Read control's background info. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ReadBackgroundInfoL( const TInt aResId ) + { + if ( aResId == 0 ) + return; + + if ( BackgroundBmp() ) + { + CFbsBitmap* bkBmp = BackgroundBmp(); + delete bkBmp; + SetBackgroundBmp( NULL ); + } + if ( BkMaskBmp() ) + { + CFbsBitmap* bkMaskBmp = BkMaskBmp(); + delete bkMaskBmp; + SetBackgroundMaskBmp( NULL ); + } + + TResourceReader resReader; + CCoeEnv::Static()->CreateResourceReaderLC( resReader, aResId ); + + TPtrC bmpFileName = resReader.ReadTPtrC(); + TInt32 imgMajorSkinId = resReader.ReadInt32(); + + TAknsItemID id; + TInt skinitemid; + + MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); + const TInt16 bmpId = resReader.ReadInt16(); + const TInt16 bmpMskId = resReader.ReadInt16(); + skinitemid = resReader.ReadInt16(); + id.Set( TInt( imgMajorSkinId ), skinitemid ); + + if ( bmpId != KInvalidImg ) + { + CFbsBitmap* backgroundImg = NULL; + CFbsBitmap* backgroundMaskImg = NULL; + if ( bmpMskId != KInvalidImg ) + { + AknsUtils::CreateIconL( skininstance, id, backgroundImg, + backgroundMaskImg, bmpFileName, bmpId, bmpMskId ); + } + else + { + AknsUtils::CreateIconL( skininstance, id, backgroundImg, + bmpFileName, bmpId ); + } + + SetBackgroundBmp( backgroundImg ); + SetBackgroundMaskBmp( backgroundMaskImg ); + } + CleanupStack::PopAndDestroy( 1 ); //reader + } + +// --------------------------------------------------------------------------- +// read icf appearance info. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ReadICFInfoL( const TInt aResId ) + { + if ( aResId == 0 ) + { + return; + } + + TResourceReader icfreader; + CCoeEnv::Static()->CreateResourceReaderLC( icfreader, aResId ); + + TInt32 colorMajorSkinId = icfreader.ReadInt32(); + TInt skinitemid = icfreader.ReadInt16(); + TInt coloridx = icfreader.ReadInt16(); + + TAknsItemID colorid; + colorid.Set( TInt( colorMajorSkinId ), skinitemid ); + + TRgb icftextcolor; + MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); + TInt error = AknsUtils::GetCachedColor( skininstance, icftextcolor, + colorid, coloridx ); + + if ( error != KErrNone ) + { + icftextcolor = TRgb( KDefaultTextColor ); + } + + iContextField->SetTextColorL( icftextcolor ); + + // Set highlight color + TRgb icfhightlightcolor; + error = AknsUtils::GetCachedColor( skininstance, + icfhightlightcolor, + KAknsIIDQsnHighlightColors, + EAknsCIQsnHighlightColorsCG2 ); + if ( error == KErrNone ) + { + iContextField->SetTextSelColorL( icfhightlightcolor ); + } + + skinitemid = icfreader.ReadInt16(); + coloridx = icfreader.ReadInt16(); + + colorid.Set( TInt( colorMajorSkinId ), skinitemid ); + + TRgb icfframecolor; + error = AknsUtils::GetCachedColor( skininstance, icfframecolor, + colorid, coloridx ); + + if ( error != KErrNone ) + { + icfframecolor = TRgb( KDefaultFrameColor ); + } + + iContextField->SetBorderColor( icfframecolor ); + iContextField->SetBgImgSkinId( KAknsIIDQsnFrCall2Rect ); + CleanupStack::PopAndDestroy( 1 ); // icfreader + } + +// --------------------------------------------------------------------------- +// read writingbox appearance info. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ReadWritingBoxInfoL( const TInt aResId ) + { + if ( aResId == 0 ) + { + return; + } + + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId ); + + // get write box bg color + TInt32 colorMajorSkinId = reader.ReadInt32(); + TInt skinitemid = reader.ReadInt16(); + TInt coloridx = reader.ReadInt16(); + + TAknsItemID colorid; + colorid.Set( TInt( colorMajorSkinId ), skinitemid ); + + TRgb boxcolor; + MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); + TInt error = AknsUtils::GetCachedColor( skininstance, + boxcolor, + colorid, + coloridx ); + + if ( error != KErrNone ) + { + boxcolor = TRgb( KDefaultWriteBoxBgColor ); + } + + iWritingBox->SetBkColor( boxcolor ); + + skinitemid = reader.ReadInt16(); + coloridx = reader.ReadInt16(); + + colorid.Set( TInt( colorMajorSkinId ), skinitemid ); + + TRgb boxframecolor; + error = AknsUtils::GetCachedColor( skininstance, + boxframecolor, + colorid, + coloridx ); + + if ( error != KErrNone ) + { + boxframecolor = TRgb( KDefaultWriteBoxFrameColor ); + } + + iWritingBox->SetFrameCol( boxframecolor ); + + CleanupStack::PopAndDestroy(); // reader + } + +// --------------------------------------------------------------------------- +// update feedback state of all virtual keys. +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::UpdateAllVirtualKeysFeedback( TInt aType ) + { + iSymbolTable->UpdateAllVirtualKeysFeedback(aType); + } + +// --------------------------------------------------------------------------- +// show bublble or not +// --------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::ShowBubble(TInt aShow) + { + if (aShow > 0) + { + TRect outrect,innerrect; + iCandidateList->ShowBubble(ETrue); + + // Set priview popup size + iCandidateList->SetBubbleBitmapParam(NULL,NULL,KAknsIIDQsnFrInputCharPreview); + + outrect = iLafManager->PreviewBubbleRect(); + innerrect = iLafManager->PreviewBubbleInnerRect(); + iCandidateList->SetTextFormat(iLafManager->PreviewBubbleTextLayout()); + iCandidateList->SetBubbleTextFont(iLafManager->PreviewBubbleFont()); + iCandidateList->SetBubbleSize(TSize(outrect.Width(),outrect.Height())); // Read laf + iCandidateList->SetFrameDiff(innerrect.iTl.iX - outrect.iTl.iX, + innerrect.iTl.iY - outrect.iTl.iY, + outrect.iBr.iX - innerrect.iBr.iX, + outrect.iBr.iY - innerrect.iBr.iY); + + iNumCandidateList->ShowBubble(ETrue); + + // Set priview popup size + iNumCandidateList->SetBubbleBitmapParam(NULL,NULL,KAknsIIDQsnFrInputCharPreview); + iNumCandidateList->SetTextFormat(iLafManager->PreviewBubbleTextLayout()); + iNumCandidateList->SetBubbleTextFont(iLafManager->PreviewBubbleFont()); + iNumCandidateList->SetBubbleSize(TSize(outrect.Width(),outrect.Height())); // Read laf + iNumCandidateList->SetFrameDiff(innerrect.iTl.iX - outrect.iTl.iX, + innerrect.iTl.iY - outrect.iTl.iY, + outrect.iBr.iX - innerrect.iBr.iX, + outrect.iBr.iY - innerrect.iBr.iY); + + } + else + { + iCandidateList->ShowBubble(EFalse); + iNumCandidateList->ShowBubble(EFalse); + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbWnd::CalculateGuideLinePos +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CalculateGuideLinePos() + { + TRect rect = iWritingBox->Rect(); + TInt leftrightmargin = rect.Size().iWidth / 10; + + CPeninputFingerHwrArLayout* hwrLayout = NULL; + hwrLayout = static_cast( UiLayout() ); + + TInt bottommargin = 0; + hwrLayout->DataStore().GetBottomGuideLinePos(bottommargin); + + iGuideLineBottomTl.iX = rect.iTl.iX + leftrightmargin; + iGuideLineBottomTl.iY = rect.iTl.iY + bottommargin; + + iGuideLineBottomBr.iX = rect.iBr.iX - leftrightmargin; + iGuideLineBottomBr.iY = rect.iTl.iY + bottommargin; + } + +// -------------------------------------------------------------------------- +// CPeninputFingerHwrArWnd::DrawGuideLine +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::DrawGuideLine() + { + if(iGuideLineOn) + { + iWritingBox->HideGuideLine(ETrue); + } + else + { + TInt style = CTransparentHwrWndExt::EGuideLineBottom; + iWritingBox->SetGuideLineStyle( style ); + + // if size changing, or guide line pos has not been set + CalculateGuideLinePos(); + + iWritingBox->SetBottomGuideLinePosition(iGuideLineBottomTl, iGuideLineBottomBr); + + iWritingBox->RefreshUI(); + } + } + +// -------------------------------------------------------------------------- +// CPeninputFingerHwrArWnd::OpenSymbolTable +// Open the symbol table +// -------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::OpenSymbolTable() + { + if(!iSymbolTable->IsPopup()) + { + SwitchToSymbolTableView(); + } + } + +// -------------------------------------------------------------------------- +// CPeninputFingerHwrArWnd::CloseSymbolTable +// Close the symbol table +// -------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::CloseSymbolTable() + { + if(iSymbolTable->IsPopup()) + { + iSymbolTable->CloseSymbolTable(); + SwitchToStandbyView(); + } + } + +// -------------------------------------------------------------------------- +// CPeninputFingerHwrArWnd::IsSymbolTableShowingUp +// Check if the symbol table has been shown up +// -------------------------------------------------------------------------- +// +TBool CPeninputFingerHwrArWnd::IsSymbolTableShowingUp() + { + return iSymbolTable->IsPopup(); + } + +// -------------------------------------------------------------------------- +// CPeninputFingerHwrArWnd::IsCandidateShowup +// Check if the candadiate list has been shown up +// -------------------------------------------------------------------------- +// +TBool CPeninputFingerHwrArWnd::IsCandidateShowup() + { + if(!iCandidateList->Hiden() || !iNumCandidateList->Hiden()) + { + return ETrue; + } + return EFalse; + } + +// -------------------------------------------------------------------------- +// CPeninputFingerHwrArWnd::IsCandidateShowup +// Check if the candadiate list has been shown up +// -------------------------------------------------------------------------- +// +void CPeninputFingerHwrArWnd::HideIndicator() + { + if(!iHandwritingIndicator->Hiden()) + { + iHandwritingIndicator->Hide(ETrue); + Draw(); + } + } + +// -------------------------------------------------------------------------- +// CPeninputFingerHwrArWnd::GetCharBeforeCursor +// Get the char by its position in ICF editor +// -------------------------------------------------------------------------- +// +TBool CPeninputFingerHwrArWnd::GetCharBeforeCursor(TInt aCharPos, TUint16& aCharBeforeCursor) + { + TBuf<1> dataBeforeCursor; + iContextField->ExtractText( dataBeforeCursor, aCharPos, 1 ); + if(dataBeforeCursor!= KNullDesC) + { + aCharBeforeCursor = dataBeforeCursor[0]; + return ETrue; + } + else + { + return EFalse; + } + } + +// End Of File