diff -r 000000000000 -r eb1f2e154e89 textinput/peninputhwrboxcn/ctrlsrc/peninputhwrbxwnd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputhwrboxcn/ctrlsrc/peninputhwrbxwnd.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,1128 @@ +/* +* 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: CAknFepHwrBxWnd +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "peninputhwrdebug.h" +#include "peninputhwrbxwnd.h" +#include "peninputhwrbxlayout.h" +#include "peninputhwrevent.h" +#include "peninputhwrctrlid.h" +#include "peninputhwrbxctrlbar.h" +#include "peninputhwrboxgroup.h" +#include "peninputhwrbxdatastore.h" +#include "aknlayoutscalable_avkon.cdl.h" + +const TInt KBoxCount = 2; +const TInt KInvalidImg = -1 ; +const TInt KNotSupportSkin = -1; +const TUint32 KDefaultTextColor = 0x000000; +const TInt32 KInvalidResId = -1; + +const TInt KWrittingFactor = 255; // 0% transparency +const TInt KNormalFactor = 229; // 10% transparency + +const TInt KDefaultStrokeEndMarkX = -65536; +const TInt KDefaultStrokeEndMarkY = -65536; + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +CAknFepHwrBxWnd* CAknFepHwrBxWnd::NewL(CFepUiLayout* aFepUiLayout, + TInt aControlId, + TBool aLandscapeStyle) + { + PRINTF((_L("CAknFepHwrBxWnd::NewL(), aCtrlId = %d\n"), aControlId)); + CAknFepHwrBxWnd* self = NewLC(aFepUiLayout, aControlId, aLandscapeStyle); + CleanupStack::Pop(self); + + return self; + } + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +CAknFepHwrBxWnd* CAknFepHwrBxWnd::NewLC(CFepUiLayout* aFepUiLayout, + TInt aControlId, + TBool aLandscapeStyle) + { + PRINTF((_L("CAknFepHwrBxWnd::NewLC(), aCtrlId = %d\n"), aControlId)); + CAknFepHwrBxWnd* self = new (ELeave) CAknFepHwrBxWnd(aFepUiLayout, aControlId); + CleanupStack::PushL(self); + self->ConstructL(aLandscapeStyle); + + return self; + } + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +CAknFepHwrBxWnd::CAknFepHwrBxWnd( CFepUiLayout* aFepUiLayout, TInt aControlId) + :CAknFepCtrlBaseWindow(aFepUiLayout,aControlId), + iFirstTimeConstruct(ETrue), + iUnitShadowSizeSet(EFalse), + iControlPosSet(EFalse) + { + CAknFepHwrBxLayout* layout = static_cast(aFepUiLayout); + iDataStore = layout->DataStore(); + } + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::ConstructL(TBool aLandscapeStyle) + { + PRINTF((_L("CAknFepHwrBxWnd::ConstructL()\n"))); + BaseConstructL(); + + AddContextFieldL(); + + AddBackspaceBtnL(); + + AddOptionButtonL(); + + AddControlBarL(); + + AddBoxGroupL(); + + AddDropdownListL(aLandscapeStyle); + + //add layout as window's observer + AddEventObserver(UiLayout()); + MoveButton()->AddEventObserver(UiLayout()); + + //add window as the subscriber + iDataStore->AddSubscriber(this); + + PRINTF((_L("CAknFepHwrBxWnd::ConstructL()......done!\n"))); + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +CAknFepHwrBxWnd::~CAknFepHwrBxWnd() + { + PRINTF((_L("CAknFepHwrBxWnd::~CAknFepHwrBxWnd()\n"))); + } + +// --------------------------------------------------------- +// ConstructFromResourceL +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::ConstructFromResourceL(TResourceReader& aReader) + { + TInt supportskin = aReader.ReadInt16(); + + if (iFirstTimeConstruct && (supportskin != KNotSupportSkin)) + { + UiLayout()->AddControlL(this); + } + + // read shadow and icf resources + TPtrC bmpFileName = aReader.ReadTPtrC(); + + TInt32 imgMajorSkinId = aReader.ReadInt32(); + + TAknsItemID id; + TInt skinitemid; + + MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); + + for (TInt i = 0; i < KShadowBmpBr + 1; i++) + { + const TInt16 bmpId = aReader.ReadInt16(); + const TInt16 bmpMskId = aReader.ReadInt16(); + skinitemid = aReader.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)); + } + } + + const TInt16 icfbgId = aReader.ReadInt16(); + const TInt16 icfbgmaskId = aReader.ReadInt16(); + skinitemid = aReader.ReadInt16(); + + id.Set(TInt(imgMajorSkinId), skinitemid); + + if (icfbgId != KInvalidImg) + { + CFbsBitmap* icfImg = NULL; + + if (icfbgmaskId != KInvalidImg) + { + CFbsBitmap* icfmaskImg = NULL; + + AknsUtils::CreateIconL(skininstance, + id, + icfImg, + icfmaskImg, + bmpFileName, + icfbgId, + icfbgmaskId); + + AknIconUtils::SetSize(icfmaskImg, TSize(1,1), EAspectRatioNotPreserved); + iContextField->SetBackgroundMaskBitmapL(icfmaskImg); + } + else + { + AknsUtils::CreateIconL(skininstance, + id, + icfImg, + bmpFileName, + icfbgId); + } + + AknIconUtils::SetSize(icfImg, TSize(1,1), EAspectRatioNotPreserved); + iContextField->SetBackgroundBitmapL(icfImg); + } + + // read text color + TRgb textcolor; + TInt32 colorMajorSkinId = aReader.ReadInt32(); + skinitemid = aReader.ReadInt16(); + + id.Set(TInt(colorMajorSkinId), skinitemid); + + const TInt16 textcoloridx = aReader.ReadInt16(); + + TInt error = AknsUtils::GetCachedColor(skininstance, + textcolor, + id, + textcoloridx); + + if (error == KErrNone) + { + iContextField->SetTextColor(textcolor); + } + else + { + iContextField->SetTextColor(TRgb(KDefaultTextColor)); + } + + if (iFirstTimeConstruct) + { + const TInt32 moveResId = aReader.ReadInt32(); + const TInt32 closeResId = aReader.ReadInt32(); + const TInt32 backResId = aReader.ReadInt32(); + const TInt32 optionResId = aReader.ReadInt32(); + const TInt32 ctrlbarResId = aReader.ReadInt32(); + const TInt32 boxgrpResId = aReader.ReadInt32(); + const TInt32 bgImageResId = aReader.ReadInt32(); + + MoveButton()->SetResourceId(moveResId); + MoveButton()->ConstructFromResourceL(); + + CloseButton()->SetResourceId(closeResId); + CloseButton()->ConstructFromResourceL(); + + iBackspace->SetResourceId(backResId); + iBackspace->ConstructFromResourceL(); + + iOptionButton->SetResourceId(optionResId); + iOptionButton->ConstructFromResourceL(); + + CCoeEnv* coeEnv = CCoeEnv::Static(); + TResourceReader ctrlbarreader; + + coeEnv->CreateResourceReaderLC(ctrlbarreader, ctrlbarResId); + iControlBar->ConstructFromResourceL(ctrlbarreader); + CleanupStack::PopAndDestroy(); // ctrlbarreader + + iBoxGroup->SetResourceId(boxgrpResId); + iBoxGroup->ConstructFromResourceL(); + + ReadBackgroundInfoL( bgImageResId ); + } + else + { + CControlGroup::ConstructFromResourceL(); + } + + iFirstTimeConstruct = EFalse; + + TInt newValue = iDataStore->GetPenTrailColor(); + iDataStore->SetBoxPenColor(TRgb(newValue)); + } + +// --------------------------------------------------------- +// ConstructFromResourceL +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::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 and icf resources + TPtrC bmpFileName = reader.ReadTPtrC(); + TInt32 imgMajorSkinId = reader.ReadInt32(); + + TAknsItemID id; + TInt skinitemid; + + MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); + + for (TInt i = 0; i < KShadowBmpBr + 1; i++) + { + const TInt16 bmpId = reader.ReadInt16(); + const TInt16 bmpMskId = reader.ReadInt16(); + skinitemid = reader.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)); + } + } + + const TInt16 icfbgId = reader.ReadInt16(); + const TInt16 icfbgmaskId = reader.ReadInt16(); + skinitemid = reader.ReadInt16(); + + id.Set(TInt(imgMajorSkinId), skinitemid); + + if (icfbgId != KInvalidImg) + { + CFbsBitmap* icfImg = NULL; + + if (icfbgmaskId != KInvalidImg) + { + CFbsBitmap* icfmaskImg = NULL; + + AknsUtils::CreateIconL(skininstance, + id, + icfImg, + icfmaskImg, + bmpFileName, + icfbgId, + icfbgmaskId); + + AknIconUtils::SetSize(icfmaskImg, TSize(1,1), EAspectRatioNotPreserved); + iContextField->SetBackgroundMaskBitmapL(icfmaskImg); + } + else + { + AknsUtils::CreateIconL(skininstance, + id, + icfImg, + bmpFileName, + icfbgId); + } + + AknIconUtils::SetSize(icfImg, TSize(1,1), EAspectRatioNotPreserved); + iContextField->SetBackgroundBitmapL(icfImg); + } + + // read text color + TRgb textcolor; + TInt32 colorMajorSkinId = reader.ReadInt32(); + skinitemid = reader.ReadInt16(); + + id.Set(TInt(colorMajorSkinId), skinitemid); + + const TInt16 textcoloridx = reader.ReadInt16(); + + TInt error = AknsUtils::GetCachedColor(skininstance, + textcolor, + id, + textcoloridx); + + if (error == KErrNone) + { + iContextField->SetTextColor(textcolor); + } + else + { + iContextField->SetTextColor(TRgb(KDefaultTextColor)); + } + + if (iFirstTimeConstruct) + { + const TInt32 moveResId = reader.ReadInt32(); + const TInt32 closeResId = reader.ReadInt32(); + const TInt32 backResId = reader.ReadInt32(); + const TInt32 optionResId = reader.ReadInt32(); + const TInt32 ctrlbarResId = reader.ReadInt32(); + const TInt32 boxgrpResId = reader.ReadInt32(); + const TInt32 bgImageResId = reader.ReadInt32(); + + MoveButton()->SetResourceId(moveResId); + MoveButton()->ConstructFromResourceL(); + + CloseButton()->SetResourceId(closeResId); + CloseButton()->ConstructFromResourceL(); + + iBackspace->SetResourceId(backResId); + iBackspace->ConstructFromResourceL(); + + iOptionButton->SetResourceId(optionResId); + iOptionButton->ConstructFromResourceL(); + + CCoeEnv* coeEnv = CCoeEnv::Static(); + TResourceReader ctrlbarreader; + + coeEnv->CreateResourceReaderLC(ctrlbarreader, ctrlbarResId); + iControlBar->ConstructFromResourceL(ctrlbarreader); + CleanupStack::PopAndDestroy(); // ctrlbarreader + + iBoxGroup->SetResourceId(boxgrpResId); + iBoxGroup->ConstructFromResourceL(); + + ReadBackgroundInfoL( bgImageResId ); + } + else + { + CControlGroup::ConstructFromResourceL(); + } + + CleanupStack::PopAndDestroy(); // reader + + iFirstTimeConstruct = EFalse; + TInt newValue = iDataStore->GetPenTrailColor(); + iDataStore->SetBoxPenColor(TRgb(newValue)); + } + +// --------------------------------------------------------- +// CAknFepHwrBxWnd::ReadUnitSize +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::ReadLafInfo(TBool aLandscapeStyle) + { + if (iDataStore->SizeChanging() || (!iUnitShadowSizeSet)) + { + // if size is changing, or unit size, shadow size have not been set yet + TAknWindowLineLayout appWnd; + TAknWindowLineLayout mainPane; + TAknWindowLineLayout wndLayout; + TAknWindowLineLayout unitLayout; + TAknWindowLineLayout shadowPane; + TAknWindowLineLayout shadowTl; + TAknWindowLineLayout shadowBr; + TAknLayoutRect mainPaneRect; + TAknLayoutRect wndRect; + TAknLayoutRect unitRect; + TAknLayoutRect shadowRect; + TAknLayoutRect shadowTlRect; + TAknLayoutRect shadowBrRect; + + // Get hwr window layout + appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine(); + + if (aLandscapeStyle) + { + // landscape + mainPane = AknLayoutScalable_Avkon::main_pane(4).LayoutLine(); + wndLayout = AknLayoutScalable_Avkon::popup_fep_hwr_window(2).LayoutLine(); + } + else + { + // portrait + mainPane = AknLayoutScalable_Avkon::main_pane(1).LayoutLine(); + wndLayout = AknLayoutScalable_Avkon::popup_fep_hwr_window(0).LayoutLine(); + } + + mainPaneRect.LayoutRect(appWnd.Rect(), mainPane); + wndRect.LayoutRect(mainPaneRect.Rect(), wndLayout); + + unitLayout = AknLayoutScalable_Avkon::fep_hwr_aid_pane(2).LayoutLine(); + unitRect.LayoutRect(wndRect.Rect(), unitLayout); + + TRect hwrWndRect = TRect(0, + 0, + wndRect.Rect().Width(), + wndRect.Rect().Height()); + + iUnitWidth = unitRect.Rect().Width(); + iUnitHeight = unitRect.Rect().Height(); + + // iUnitWidth = 34; + // iUnitHeight = 34; + + shadowPane = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane(1).LayoutLine(); + shadowRect.LayoutRect(hwrWndRect, shadowPane); + + shadowTl = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane_g1().LayoutLine(); + shadowTlRect.LayoutRect(shadowRect.Rect(), shadowTl); + + shadowBr = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane_g8().LayoutLine(); + shadowBrRect.LayoutRect(shadowRect.Rect(), shadowBr); + + iShadowTl = shadowTlRect.Rect().Size(); + iShadowBr = shadowBrRect.Rect().Size(); + + iUnitShadowSizeSet = ETrue; + } + } + +// --------------------------------------------------------- +// Get top left corner shadow size +// --------------------------------------------------------- +// +TSize CAknFepHwrBxWnd::ShadowTlSize() + { + return iShadowTl; + } + +// --------------------------------------------------------- +// Get bottom right corner shadow size +// --------------------------------------------------------- +// +TSize CAknFepHwrBxWnd::ShadowBrSize() + { + return iShadowBr; + } + +// --------------------------------------------------------- +// Set setting button enable +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::SetEnableSettingBtn(TBool aEnable) + { + if ( aEnable ) + { + iOptionButton->SetDimmed(EFalse); + } + else + { + iOptionButton->SetDimmed(ETrue); + iOptionButton->SetActive(EFalse); + } + } + +// --------------------------------------------------------- +// Resize +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::SizeChanged(TBool aLandscapeStyle) + { + ReadLafInfo(aLandscapeStyle); + + if (iDataStore->SizeChanging() || (!iControlPosSet)) + { + // if size changing, or sub controls + // size and position have not been set + + TPoint startPos = TPoint(iShadowTl.iWidth, iShadowTl.iHeight); + TRect hwrWnd = TRect(startPos, + TPoint(startPos.iX + 10*iUnitWidth, + startPos.iY + 7*iUnitHeight)); + SetRect(hwrWnd); + + // title bar + startPos = hwrWnd.iTl; + TRect titleBar = TRect(startPos, + TPoint(startPos.iX + iUnitWidth*10, + startPos.iY + iUnitHeight)); + TitleBar()->SetRect(titleBar); + + // close button + startPos = titleBar.iTl; + TRect closeRect = TRect(startPos, + TPoint(startPos.iX + iUnitWidth, + startPos.iY + iUnitHeight)); + TRect closeInnerRect; + AknPenImageUtils::CalculateGraphicRect(closeRect,closeInnerRect); + CloseButton()->SizeChanged(closeRect, closeInnerRect, ETrue); + + // header pane + startPos = TPoint(closeRect.iBr.iX, closeRect.iTl.iY); + TRect headerPane = TRect(startPos, + TPoint(startPos.iX + iUnitWidth*8, + startPos.iY + iUnitHeight)); + HeaderPane()->SetRect(headerPane); + + // icf + startPos = headerPane.iTl; + TRect icfRect = TRect(startPos, + TPoint(startPos.iX + iUnitWidth*7, + startPos.iY + iUnitHeight)); + + TAknTextLineLayout textPaneTextLayout; + textPaneTextLayout = AknLayoutScalable_Avkon::fep_hwr_top_text_pane_t1().LayoutLine(); + iContextField->SetFont(AknLayoutUtils::FontFromId(textPaneTextLayout.iFont, NULL)); + iContextField->SetRect(icfRect); + + // Backspace button + startPos = TPoint(icfRect.iBr.iX, icfRect.iTl.iY); + TRect backspaceRect = TRect(startPos, + TPoint(startPos.iX + iUnitWidth, + startPos.iY + iUnitHeight)); + TRect backspaceInnerRect; + AknPenImageUtils::CalculateGraphicRect(backspaceRect, backspaceInnerRect); + iBackspace->SizeChanged(backspaceRect, backspaceInnerRect, ETrue); + + // move button + startPos = TPoint(headerPane.iBr.iX, headerPane.iTl.iY); + TRect moveRect = TRect(startPos, + TPoint(startPos.iX + iUnitWidth, + startPos.iY + iUnitHeight)); + TRect moveInnerRect; + AknPenImageUtils::CalculateGraphicRect(moveRect, moveInnerRect); + MoveButton()->SizeChanged(moveRect, moveInnerRect,ETrue); + + // client pane + startPos = TPoint(titleBar.iTl.iX, titleBar.iBr.iY); + TRect clientPane = TRect(startPos, + TPoint(startPos.iX + iUnitWidth*10, + startPos.iY + iUnitHeight*6)); + ClientPane()->SetRect(clientPane); + + // option button + startPos = clientPane.iTl; + TRect optionInnerRect; + TRect optionRect = TRect(startPos, + TPoint(startPos.iX + iUnitWidth, + startPos.iY + iUnitHeight)); + AknPenImageUtils::CalculateGraphicRect(optionRect, optionInnerRect); + iOptionButton->SizeChanged(optionRect, optionInnerRect, ETrue); + + // drop down list + startPos = TPoint(optionRect.iBr.iX, optionRect.iTl.iY); + TAknTextLineLayout candTextLayout; + candTextLayout = AknLayoutScalable_Avkon::cell_hwr_candidate_pane_t1().LayoutLine(); + iDropdownList->SetFont(AknLayoutUtils::FontFromId(candTextLayout.iFont, NULL)); + + iDropdownList->SizeChanged(iUnitWidth, + iUnitHeight, + iUnitWidth, + startPos, + 8, + 4); + + // box group + startPos = TPoint(clientPane.iTl.iX, clientPane.iTl.iY + iUnitHeight); + TRect boxGrp = TRect(startPos, + TPoint(startPos.iX + iUnitWidth*9, + startPos.iY + iUnitHeight*5)); + iBoxGroup->SizeChanged(boxGrp); + + // control bar + startPos = TPoint( boxGrp.iBr.iX, boxGrp.iTl.iY ); + TRect ctrlBar = TRect(startPos, + TPoint(startPos.iX + iUnitWidth, + startPos.iY + iUnitHeight*5)); + TRect topgridRect = TRect(startPos, + TPoint(startPos.iX + iUnitWidth, + startPos.iY + iUnitHeight)); + TRAP_IGNORE(iControlBar->SizeChangedL(ctrlBar, topgridRect)); + + // shadow + SetShadowRect(TRect(0, + 0, + hwrWnd.iBr.iX + iShadowBr.iWidth, + hwrWnd.iBr.iY + iShadowBr.iHeight)); + } + + iControlPosSet = ETrue; + } + +// --------------------------------------------------------- +// Just broadcast the close event +// --------------------------------------------------------- +// +TBool CAknFepHwrBxWnd::DoClose() + { + PRINTF((_L("CAknFepHwrBxWnd::DoClose()\n"))); + + ReportEvent(EHwrEventWindowClose); + + return EFalse; + } + +// --------------------------------------------------------- +// Handle the property change +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::SetPropertyL( + const MAknFepHwrPropertySubscriber::TAknFepHwrProperty aPropertyName, + const TDesC& aPropertyValue) + { + switch (aPropertyName) + { + case MAknFepHwrPropertySubscriber::EAknFepHwrPropertyCandidates: + { + const TInt candiCount = iDataStore->CandidateCount(); + RArray secondaryList; + + for (TInt i = 0; i < candiCount; i++) + { + if (i > candiCount - iDataStore->PermittedRangesCount()) + { + //cell index start from 1 + secondaryList.Append(i); + } + } + iDropdownList->SetSecondaryList(secondaryList); + + secondaryList.Close(); + + RPointerArray* candidates = (RPointerArray*)aPropertyValue.Ptr(); + iDropdownList->SetCandidatesL(*candidates, CFepCtrlDropdownList::EListNoExpandable); + break; + } + case MAknFepHwrPropertySubscriber::EAknFepHwrPropertyPredictives: + { + RPointerArray* candidates = (RPointerArray*)aPropertyValue.Ptr(); + iDropdownList->SetCandidatesL(*candidates, CFepCtrlDropdownList::EListExpandable); + break; + } + case MAknFepHwrPropertySubscriber::EAknFepHwrPropertyAddPredictives: + { + RPointerArray* candidates = (RPointerArray*)aPropertyValue.Ptr(); + iDropdownList->AddCandidatesL(*candidates, CFepCtrlDropdownList::EListExpandable); + } + break; + case MAknFepHwrPropertySubscriber::EAknFepHwrPropertySizeChanged: + { + static_cast(UiLayout())->SetLayoutPositionL(); + break; + } + default: + break; + } + } + +// --------------------------------------------------------- +// Stroke end mark +// --------------------------------------------------------- +// +TPoint CAknFepHwrBxWnd::StrokeEndMark() + { + return TPoint(KDefaultStrokeEndMarkX, KDefaultStrokeEndMarkY); + } + +// --------------------------------------------------------- +// Send input context field text +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::SetEditorTextL(const TFepInputContextFieldData& aData) + { + if(iContextField) + { + iContextField->SetTextL(aData); + } + } + +// --------------------------------------------------------- +// Highlight a dropdownlist cell +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::HighlightCell(TInt aIndex) + { + iDropdownList->SetHighlightCell(aIndex); + } + +// --------------------------------------------------------- +// Add input context field to window +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::AddContextFieldL() + { + CControlGroup* headerPane = NULL; + + //get reference CControlGroup of headerPane + headerPane = HeaderPane(); + User::LeaveIfNull(headerPane); + + //input context field + iContextField = CFepInputContextField::NewL(TRect(), UiLayout(), EHwrCtrlIdInputContextField); + + TAknTextLineLayout textPaneTextLayout; + + textPaneTextLayout = AknLayoutScalable_Avkon::fep_hwr_top_text_pane_t1().LayoutLine(); + + iContextField->SetFont(AknLayoutUtils::FontFromId(textPaneTextLayout.iFont, NULL)); + + //transfer to headerPane + headerPane->AddControlL(iContextField); + + //add layout as event observer + iContextField->AddEventObserver(UiLayout()); + + iContextField->SetFocus(); + } + +// --------------------------------------------------------- +// Add option button to window +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::AddOptionButtonL() + { + //option button + iOptionButton = CAknFepCtrlCommonButton::NewL(UiLayout(), + EHwrCtrlIdTouchInputOption, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive); + + iInputModeSwitch = CPeninputLayoutInputmodelChoice::NewL( + UiLayout(), + EHwrCtrlIdHwrModeSwitch, + EPluginInputModeHwr ); + iInputModeSwitch->SetListSkinID( KAknsIIDQsnFrList, KAknsIIDQsnFrPopupSub ); + AddControlL( iInputModeSwitch ); + iInputModeSwitch->AddEventObserver( UiLayout() ); + + ClientPane()->AddControlL(iOptionButton); + + //add layout as event observer + iOptionButton->AddEventObserver(UiLayout()); + } + +// --------------------------------------------------------- +// Pup up pen input mode switcher +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::PopUpPenInputModeSwitcher() + { + CFepUiBaseCtrl* vkbControl = iControlBar->ControlById(EHwrCtrlIdVkb); + TRAP_IGNORE( iInputModeSwitch->PopUpSwitchListL( vkbControl->Rect() ) ); + } + +// --------------------------------------------------------- +// Add controlbar to window +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::AddControlBarL() + { + CControlGroup* clientPane = NULL; + + clientPane = ClientPane(); + User::LeaveIfNull(clientPane); + + //control bar + iControlBar = CAknFepHwrBxCtrlBar::NewL(UiLayout(), EHwrCtrlIdControlBar); + + //transfer to clientPane + clientPane->AddControlL(iControlBar); + + //add control bar as property subscriber + iDataStore->AddSubscriber(iControlBar); + + //no need to add layout as control bar's observer because its sub control + //will send event directly to layout + } + +// --------------------------------------------------------- +// Add box group to window +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::AddBoxGroupL() + { + CControlGroup* clientPane = NULL; + + clientPane = ClientPane(); + User::LeaveIfNull(clientPane); + + iBoxGroup = CAknFepHwrBoxGroup::NewL(UiLayout(), EHwrCtrlIdHwrBoxGroup, KBoxCount); + iBoxGroup->SetTransparency(KWrittingFactor, KNormalFactor); + + //transfer to clientPane + clientPane->AddControlL(iBoxGroup); + + //add layout as event observer + iBoxGroup->AddEventObserver(UiLayout()); + + //add BoxGroup as property subscriber + iDataStore->AddSubscriber(iBoxGroup); + iDataStore->SetStrokeEndMarkControl(iBoxGroup); + } + +// --------------------------------------------------------- +// Add dropdown list to window +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::AddDropdownListL(TBool aLandscapeStyle) + { + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC(reader,R_AKN_FEP_DROP_DOWN_LIST); + + iSecondRangeColor = TRgb(0xFF0000); + + ReadLafInfo(aLandscapeStyle); + TAknTextLineLayout candTextLayout = + AknLayoutScalable_Avkon::cell_hwr_candidate_pane_t1().LayoutLine(); + + TInt textMargin = (iUnitHeight - + AknLayoutUtils::FontFromId(candTextLayout.iFont, NULL)->HeightInPixels())/2; + + TDropdownListDrawInfo candiDrawInfo(KAknsIIDQsnFrFunctionButtonInactive, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrItutButtonCandiSideL, + KAknsIIDQsnFrItutButtonCandiMiddle, + KAknsIIDQsnFrItutButtonCandiSideR, + KAknsIIDQsnFrItutButtonCandiPressedSideL, + KAknsIIDQsnFrItutButtonCandiPressedMiddle, + KAknsIIDQsnFrItutButtonCandiPressedSideR, + TRgb(194, 221, 242), + ETrue); + + iDropdownList = CFepCtrlDropdownList::NewL(TPoint(Rect().iTl.iX, Rect().iTl.iY + iUnitHeight), + UiLayout(), + 255, + reader, + iUnitWidth, + iUnitHeight, + iUnitWidth, + 9, + 4, + AknLayoutUtils::FontFromId(candTextLayout.iFont, + NULL), + NULL, + CGraphicsContext::ECenter, + textMargin, + KRgbBlack, // border color + TRgb(0xeeeeee), // content bg color + KRgbWhite, // navi bg color + AKN_LAF_COLOR_STATIC(candTextLayout.iC), + KRgbRed); + + ClientPane()->AddControlL(iDropdownList); + iDropdownList->SetResourceId(R_AKN_FEP_DROP_DOWN_LIST); + iDropdownList->SetEventIdForCandidateSelected(EHwrEventCandidateSelected); + iDropdownList->SetEventIdForNextPageCandidate(EHwrEventGetNextCandidatePage); + iDropdownList->SetEventIdForPreviousPageCandidate(EHwrEventGetPreviousCandidatePage); + iDropdownList->SetEventIdForCandidateExisted(EHwrEventCandidateExisted); + iDropdownList->AddEventObserver(UiLayout()); + iDropdownList->SetDropdownListImgID(candiDrawInfo); + CleanupStack::PopAndDestroy(); // reader + } + +// --------------------------------------------------------- +// Cancel writing +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::CancelWriting() + { + if (iBoxGroup) + { + iBoxGroup->CancelWriting(); + } + } + +// --------------------------------------------------------- +// Cancel repeat +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::CancelRepeat() + { + CAknFepCtrlRepeatButton* btn = static_cast + (Control(EHwrCtrlIdBackspace)); + if (btn) + { + btn->CancelRepeat(); + } + } + + +// --------------------------------------------------------- +// Draw window and shadow +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::Draw() + { + CAknFepCtrlBaseWindow::Draw(); + + // draw shadow + DrawShadow(); + + UpdateArea(Rect(), EFalse); + } + +// --------------------------------------------------------- +// Draw window and shadow +// --------------------------------------------------------- +// +void CAknFepHwrBxWnd::DimInputContextField(TBool aFlag) + { + if (iContextField) + { + iContextField->SetDimmed(aFlag); + } + } + +// --------------------------------------------------------- +// Get drop down list +// --------------------------------------------------------- +// +CFepCtrlDropdownList* CAknFepHwrBxWnd::DropdownList() + { + return iDropdownList; + } + +void CAknFepHwrBxWnd::AddBackspaceBtnL() + { + CControlGroup* headerPane = NULL; + + //get reference CControlGroup of headerPane + headerPane = HeaderPane(); + User::LeaveIfNull(headerPane); + + iBackspace = CAknFepCtrlRepeatButton::NewL( UiLayout(), EHwrCtrlIdBackspace, + EHwrEventKeyBack, EKeyBackspace, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive); + headerPane->AddControlL(iBackspace); + iBackspace->AddEventObserver( UiLayout() ); + } + +// --------------------------------------------------------------------------- +// CAknFepHwrBxWnd::ReadBackgroundInfoL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CAknFepHwrBxWnd::ReadBackgroundInfoL( TInt aResId ) + { + if( aResId == 0 ) + return; + + 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 ); + } + +void CAknFepHwrBxWnd::SetTextAlignmentL( TInt aAlignment ) + { + if ( iContextField ) + { + iContextField->SetTextAlignmentL( aAlignment ); + } + } + +// End Of File +