diff -r 000000000000 -r eb1f2e154e89 textinput/peninputcommonctrls/src/peninputbasewindow/peninputbasewindowext.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputcommonctrls/src/peninputbasewindow/peninputbasewindowext.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,691 @@ +/* +* 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: CAknFepCtrlBaseWindowExt +* +*/ + + +// INCLUDES +#include +#include +#include +#include +#include +#include + #include + +#include +#include +#include +#include +#include + +#include +#include + +const TInt32 KInvalidResId = -1; +const TInt KNotSupportSkin = -1; +const TInt KInvalidImg = -1 ; +const TUint32 KDefaultTextColor = 0x000000; + + + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +EXPORT_C CAknFepCtrlBaseWindowExt::CAknFepCtrlBaseWindowExt(CFepUiLayout* aFepUiLayout, + TInt aControlId) + :CControlGroup(aFepUiLayout,aControlId), + iCloseButton(NULL), + iFirstTimeConstruct(ETrue), + iCoeEnv(CCoeEnv::Static()) + { + } + +// --------------------------------------------------------- +// Constructor +// --------------------------------------------------------- +// +EXPORT_C void CAknFepCtrlBaseWindowExt::BaseConstructL() + { + CControlGroup::ConstructL(); + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +EXPORT_C CAknFepCtrlBaseWindowExt::~CAknFepCtrlBaseWindowExt() + { + } + +// --------------------------------------------------------- +// Draw window frame and sub controls +// --------------------------------------------------------- +// +EXPORT_C void CAknFepCtrlBaseWindowExt::Draw() + { + if(Hiden() || !Ready()) + { + return; + } + + //Clear(); + + DrawOpaqueMaskBackground( Rect() ); + CFbsBitGc* gc= static_cast ( BitGc()); + /* + gc->Activate( MaskBitmapDevice() ); + gc->SetBrushStyle( CGraphicsContext::ENullBrush ); + gc->SetBrushColor( MaskBkCol() ); + gc->SetPenSize( PenSize()); + gc->SetPenColor( PenColor() ); + gc->DrawRect( Rect()); + */ + // ----- draw bitmaps ----- + + gc->Activate( BitmapDevice() ); + gc->SetBrushColor( TRgb(KOpaqueColor) ); + gc->SetPenColor( TRgb(KOpaqueColor) ); + gc->DrawRect( Rect()); + if( BackgroundBmp() && BackgroundBmp()->SizeInPixels() != Rect().Size() ) + AknIconUtils::SetSize(BackgroundBmp(), Rect().Size(), EAspectRatioNotPreserved); + + DrawBackground(); + CControlGroup::Draw(); + /* + for(TInt i=0; i< NumOfControls(); i++) + { + CFepUiBaseCtrl* ctrl = At(i); + if(!ctrl->Hiden()) + { + ctrl->Draw(); + } + }*/ + } + +// --------------------------------------------------------- +// Close window +// --------------------------------------------------------- +// +EXPORT_C void CAknFepCtrlBaseWindowExt::Close() + { + if (DoClose()) + { + Hide(ETrue); + } + } + +// --------------------------------------------------------- +// Enable or disable drag window +// --------------------------------------------------------- +// +EXPORT_C void CAknFepCtrlBaseWindowExt::SetDragEnable(TBool /*aEnable*/) + { + /*if (iMoveButton) + { + iMoveButton->EnableDragging(aEnable); + }*/ + } + +// --------------------------------------------------------- +// Handle close event +// --------------------------------------------------------- +// +EXPORT_C void CAknFepCtrlBaseWindowExt::HandleControlEvent(TInt aEventType, + CFepUiBaseCtrl* aCtrl, + const TDesC& /*aEventData*/) + { + if (aEventType == EEventButtonUp) + { + if (aCtrl->ControlId() == EPeninutWindowCtrlIdCloseBtn) + { + Close(); + } + } + } + +EXPORT_C TBool CAknFepCtrlBaseWindowExt::DoClose() + { + return ETrue; + } + +EXPORT_C CFepUiBaseCtrl* CAknFepCtrlBaseWindowExt::Control(TInt aCtrlId) + { + CFepUiBaseCtrl* ctrl = NULL; + RPointerArray todo; + TInt current = 0; + TBool notFound = ETrue; + + todo.Append(this); + + while (current < todo.Count() && notFound) + { + ctrl = todo[current]; + if(ctrl->ControlId() == aCtrlId) + { + notFound = EFalse; + } + else + { + if(ctrl->IsKindOfControl(ECtrlControlGroup)) + { + CControlGroup* temp = static_cast(ctrl); + for (int i = 0; i < temp->NumOfControls(); i++) + { + todo.Append(temp->At(i)); + } + } + current++; + } + } + + todo.Close(); + + return notFound ? NULL : ctrl; + } + +EXPORT_C void CAknFepCtrlBaseWindowExt::ConstructFromResourceL() + { + if (iResourceId == KInvalidResId) + { + User::Leave(KErrArgument); + } + + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC(reader, iResourceId); + + TInt supportskin = reader.ReadInt16(); + + if (iFirstTimeConstruct&& (supportskin != KNotSupportSkin)) + { + UiLayout()->AddControlL(this); + } + + // Read information of shadow + const TInt32 shadowResId = reader.ReadInt32(); + ReadShadowInfoL( shadowResId ); + + // Read information of background + const TInt32 backgroundResId = reader.ReadInt32(); + ReadBackgroundInfoL( backgroundResId ); + + // Read resource information to create base window controls + const TInt count = reader.ReadInt16(); + + if( iFirstTimeConstruct ) + { + for( TInt i = 0; i < count && iFirstTimeConstruct; i++ ) + { + const TInt16 id = reader.ReadInt16(); + const TInt32 image = reader.ReadInt32(); + CreateBaseWindowControlsL( id, image ); + } + } + else + { + CControlGroup::ConstructFromResourceL(); + // ReConstruct ICF when resource changed + CFepLayoutMultiLineIcf* multiIcf = + static_cast( Control(EPeninputWindowCtrlIdMultiLineICF)); + if( multiIcf ) + { + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC( reader, multiIcf->ResourceId() ); + ReadMultiLineIcfInforL( reader, multiIcf ); + CleanupStack::PopAndDestroy( 1 ); + } + } + CleanupStack::PopAndDestroy(); // reader + + iFirstTimeConstruct = EFalse; + } + +TBool CAknFepCtrlBaseWindowExt::CreateCustomControlL( TInt16 /*aControlId*/, TInt32 /*aImageId*/ ) + { + return EFalse; + } + +void CAknFepCtrlBaseWindowExt::AddCustomControlGroupL(CFepUiBaseCtrl* aCtrl) + { + AddControlL(aCtrl); + } + +EXPORT_C void CAknFepCtrlBaseWindowExt::CreateBaseWindowControlsL( TInt16 aControlId, + TInt32 aImageId ) + { + if (CreateCustomControlL(aControlId, aImageId)) + { + return; + } + + switch ( aControlId ) + { + case EPeninutWindowCtrlIdCloseBtn: + { + CAknFepCtrlCommonButton* closeButton = + CAknFepCtrlCommonButton::NewL(UiLayout(), aControlId, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive); + + AddCustomControlGroupL( closeButton ); + + closeButton->AddEventObserver(this); + closeButton->SetResourceId( aImageId ); + closeButton->ConstructFromResourceL(); + SetCloseButton(closeButton); + } + break; + case EPeninutWindowCtrlIdInputContextField: + { + CFepInputContextField* icf= CFepInputContextField::NewL( TRect(), + UiLayout(), aControlId ); + + AddCustomControlGroupL( icf ); + + icf->SetFocus(ETrue); + icf->AddEventObserver( UiLayout() ); + + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC( reader, aImageId ); + ReadIcfInfoL( reader, icf); + CleanupStack::PopAndDestroy( 1 ); + } + break; + case EPeninputWindowCtrlIdMultiLineICF: + { + const CFont* icfFont = NULL; + TAknTextLineLayout textPaneTextLayout; + + textPaneTextLayout = + AknLayoutScalable_Avkon::fep_vkb_top_text_pane_t1().LayoutLine(); + + icfFont = AknLayoutUtils::FontFromId( textPaneTextLayout.iFont, NULL ); + CFepLayoutMultiLineIcf* multiLineIcf = NULL; + + if ( icfFont ) + { + multiLineIcf = CFepLayoutMultiLineIcf::NewL( TRect(), + UiLayout(), aControlId, icfFont->HeightInPixels(), + icfFont->FontMaxHeight(),icfFont ); + + AddCustomControlGroupL( multiLineIcf ); + + // Add layout as event observer + multiLineIcf->AddEventObserver( UiLayout() ); + multiLineIcf->SetResourceId( aImageId ); + multiLineIcf->SetFocus(ETrue); + + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC( reader, aImageId ); + ReadMultiLineIcfInforL( reader,multiLineIcf ); + CleanupStack::PopAndDestroy( 1 ); + } + } + break; + case EPeninutWindowCtrlIdOptionBtn: + { + CAknFepCtrlEventButton* touchInputOptionButton = CAknFepCtrlEventButton::NewL( + UiLayout(), + aControlId, EPeninputLayoutEventOption, 0, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive ); + + AddCustomControlGroupL( touchInputOptionButton ); + + touchInputOptionButton->AddEventObserver( UiLayout() ); + touchInputOptionButton->SetResourceId( aImageId ); + touchInputOptionButton->ConstructFromResourceL(); + } + break; + case EPeninutWindowCtrlIdBackspaceBtn: + { + CAknFepCtrlRepeatButton* backspaceButton = CAknFepCtrlRepeatButton::NewL( + UiLayout(), aControlId, EPeninputLayoutEventBack, EKeyBackspace, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive ); + + AddCustomControlGroupL( backspaceButton ); + + backspaceButton->AddEventObserver( UiLayout() ); + backspaceButton->SetResourceId( aImageId ); + backspaceButton->ConstructFromResourceL(); + } + break; + case EPeninutWindowCtrlIdSpaceBtn: + { + CAknFepCtrlEventButton* spaceButton = CAknFepCtrlEventButton::NewL( + UiLayout(), aControlId, EPeninputLayoutEventSpace, EKeySpace, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive ); + AddCustomControlGroupL( spaceButton ); + spaceButton->AddEventObserver( UiLayout() ); + spaceButton->SetResourceId( aImageId ); + spaceButton->ConstructFromResourceL(); + } + break; + case EPeninutWindowCtrlIdEnterBtn: + { + CAknFepCtrlEventButton* enterButton = CAknFepCtrlEventButton::NewL( + UiLayout(), aControlId, EPeninputLayoutEventEnter, EKeyEnter, + KAknsIIDQsnFrFunctionButtonNormal, + KAknsIIDQsnFrFunctionButtonPressed, + KAknsIIDQsnFrFunctionButtonInactive ); + + AddCustomControlGroupL( enterButton ); + enterButton->AddEventObserver(UiLayout()); + enterButton->SetResourceId( aImageId ); + enterButton->ConstructFromResourceL(); + } + break; + case EPeninutWindowCtrlIdSwitcherPopupWindow: + { + CPeninputLayoutInputmodelChoice* modeSwitchChoice = + CPeninputLayoutInputmodelChoice::NewL( UiLayout(), + EPeninutWindowCtrlIdSwitcherPopupWindow, + (TPluginInputMode)(UiLayout()->PenInputType())); + modeSwitchChoice->SetListSkinID( KAknsIIDQsnFrList, KAknsIIDQsnFrPopupSub ); + AddCustomControlGroupL( modeSwitchChoice ); + modeSwitchChoice->AddEventObserver( UiLayout() ); + } + break; + default: + { + } + break; + } + } + +// --------------------------------------------------------------------------- +// CAknFepCtrlBaseWindowExt::ReadShadowInfoL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CAknFepCtrlBaseWindowExt::ReadShadowInfoL( TInt aResId ) + { + TResourceReader resReader; + iCoeEnv->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); + } + + UiLayout()->SetShadowBmp(shadowImg, shadowMaskImg, TShadowBitmapIndex(i)); + } + } + CleanupStack::PopAndDestroy( 1 ); + } + +// --------------------------------------------------------------------------- +// CAknFepCtrlBaseWindowExt::ReadBackgroundInfoL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CAknFepCtrlBaseWindowExt::ReadBackgroundInfoL( 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; + iCoeEnv->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 ); + } + +// --------------------------------------------------------------------------- +// CAknFepCtrlBaseWindowExt::ReadIcfInfoL +// (other items were commented in a header) +// --------------------------------------------------------------------------- +// +void CAknFepCtrlBaseWindowExt::ReadIcfInfoL(TResourceReader aResReader, + CFepInputContextField* icf ) + { + TPtrC bmpFileName = aResReader.ReadTPtrC(); + TInt32 imgMajorSkinId = aResReader.ReadInt32(); + + TAknsItemID id; + TInt skinitemid; + + MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); + + const TInt16 icfbgId = aResReader.ReadInt16(); + const TInt16 icfbgmaskId = aResReader.ReadInt16(); + skinitemid = aResReader.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); + icf->SetBackgroundMaskBitmapL(icfmaskImg); + } + else + { + AknsUtils::CreateIconL(skininstance, + id, + icfImg, + bmpFileName, + icfbgId); + } + + AknIconUtils::SetSize(icfImg, TSize(1,1), EAspectRatioNotPreserved); + icf->SetBackgroundBitmapL(icfImg); + } + + // read text color + TRgb textcolor; + TInt32 colorMajorSkinId = aResReader.ReadInt32(); + skinitemid = aResReader.ReadInt16(); + + id.Set(TInt(colorMajorSkinId), skinitemid); + + const TInt16 textcoloridx = aResReader.ReadInt16(); + + TInt error = AknsUtils::GetCachedColor(skininstance, + textcolor, + id, + textcoloridx); + + if (error == KErrNone) + { + icf->SetTextColor( textcolor ); + } + else + { + icf->SetTextColor( TRgb( KDefaultTextColor ) ); + } + } + +void CAknFepCtrlBaseWindowExt::ReadMultiLineIcfInforL( TResourceReader aResReader , + CFepLayoutMultiLineIcf* icf) + { + TPtrC bmpFileName = aResReader.ReadTPtrC(); + TInt32 imgMajorSkinId = aResReader.ReadInt32(); + + TAknsItemID id; + TInt skinitemid; + + MAknsSkinInstance* skininstance = AknsUtils::SkinInstance(); + + const TInt16 icfbgId = aResReader.ReadInt16(); + const TInt16 icfbgmaskId = aResReader.ReadInt16(); + skinitemid = aResReader.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); + icf->SetBackgroundMaskBitmapL(icfmaskImg); + } + else + { + AknsUtils::CreateIconL(skininstance, + id, + icfImg, + bmpFileName, + icfbgId); + } + + AknIconUtils::SetSize(icfImg, TSize(1,1), EAspectRatioNotPreserved); + icf->SetBackgroundBitmapL(icfImg); + } + + // read text color + TRgb textcolor; + TInt32 colorMajorSkinId = aResReader.ReadInt32(); + skinitemid = aResReader.ReadInt16(); + + id.Set(TInt(colorMajorSkinId), skinitemid); + + const TInt16 textcoloridx = aResReader.ReadInt16(); + + TInt error = AknsUtils::GetCachedColor(skininstance, + textcolor, + id, + textcoloridx); + + if (error == KErrNone) + { + icf->SetTextColorL( textcolor ); + } + else + { + icf->SetTextColorL( TRgb( KDefaultTextColor ) ); + } + } + + + +// End Of File