--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,4293 @@
+/*
+* 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: Implementation of button
+*
+*/
+
+
+// system includes
+#include <barsread.h>
+#include <peninputlayout.h>
+#include <AknIconUtils.h>
+#include <coemain.h>
+#include <AknsUtils.h>
+#include <AknUtils.h>
+#include <AknsDrawUtils.h>
+// user includes
+#include <peninputbutton.h>
+#include <peninputdragbutton.h>
+#include <peninputeventbutton.h>
+#include <peninputmultimodebutton.h>
+#include <peninputrepeatbutton.h>
+#include <peninputrawkeybutton.h>
+#include <peninputcommonbutton.h>
+#include <peninputmultiimagebutton.h>
+#include <peninputcommonctrls.hrh>
+#include <peninputcommonlayoutglobalenum.h>
+#include <peninputlongpressbutton.h>
+
+const TInt KInvalidBmp = -1 ;
+
+//default value for long press timer
+const TInt KLongPressInterval = 600000;
+
+//default value for repeat timer
+const TInt KRepeatInterval = 100000;
+
+//default text color and shadow text color
+const TUint32 KDefaultTextColor = 0x000000;
+const TUint32 KDefaultShadowTextColor = 0xffffff;
+const TInt32 KInvalidResId = -1;
+const TInt KInvalidEventId = 0xffff;
+//const TInt KFadingParamBlack = 255;
+//const TInt KFadingParamWhite = 0;
+
+const TInt KTransparency[256] =
+ {
+ 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7,
+ 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13,
+ 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 19,
+ 19, 19, 20, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 24, 24,
+ 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 29,
+ 30, 30, 30, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35,
+ 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 40, 40, 40,
+ 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 46,
+ 46, 46, 47, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 50, 51, 51,
+ 51, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 56,
+ 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62,
+ 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67,
+ 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 73,
+ 73, 73, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77
+ };
+// Invalid function icon color group
+const TInt KInvalidColorGroup = -1;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::CAknFepCtrlButton
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlButton::CAknFepCtrlButton(CFepUiLayout* aUiLayout, TInt aControlId)
+: CButtonBase(TRect(), aUiLayout, aControlId), iFirstTimeConstruct(ETrue), iHighlight(EFalse)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::NewL
+// Two-phased constructor.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlButton* CAknFepCtrlButton::NewL(CFepUiLayout* aUiLayout, TInt aControlId)
+ {
+ CAknFepCtrlButton* self = NewLC(aUiLayout, aControlId);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::NewLC
+// Two-phased constructor.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlButton* CAknFepCtrlButton::NewLC(CFepUiLayout* aUiLayout, TInt aControlId)
+ {
+ CAknFepCtrlButton* self = new (ELeave) CAknFepCtrlButton(aUiLayout, aControlId);
+ CleanupStack::PushL(self);
+ self->BaseConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlButton::~CAknFepCtrlButton()
+ {
+ iBmpList.Close();
+ iMaskBmpList.Close();
+ }
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::ConstructFromResourceL
+// The order of the image ids in the CButtonBase class must not be changed
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlButton::ConstructFromResourceL(TResourceReader& aReader)
+ {
+ if (!iFirstTimeConstruct)
+ {
+ iBmpList.Close();
+ iMaskBmpList.Close();
+ ResetBmpPool();
+ }
+
+ TPtrC bmpFileName = aReader.ReadTPtrC(); // Read the file name of the bmps
+ TInt32 imgMajorSkinId = aReader.ReadInt32();
+ TInt colorgroup = aReader.ReadInt16();
+ TAknsItemID id;
+
+ for (TInt ii = 0; ii < EBtnBmpLastType + 1; ++ii)
+ {
+ // Get the image ids and mask ids from resource
+ TInt bmpId = aReader.ReadInt16();
+ TInt bmpMskId = aReader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitemid = aReader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ CFbsBitmap* bmp = NULL;
+ CFbsBitmap* maskbmp = NULL;
+
+ if (bmpMskId != KInvalidBmp)
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ maskbmp,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+
+ // set maskbmp and size
+ SetMaskBitmapL(maskbmp, TButtonBmpType(EBtnBmpNonActive + ii));
+ iMaskBmpList.Append(maskbmp);
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ bmpFileName,
+ bmpId);
+ }
+
+ // set bmp and size
+ SetBitmapL(bmp, TButtonBmpType(EBtnBmpNonActive + ii));
+ iBmpList.Append(bmp);
+ }
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ ResizeBitmaps(Rect().Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::ConstructFromResourceL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlButton::ConstructFromResourceL()
+ {
+ if (iResourceId == KInvalidResId)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ // need to remove original bmp and maskbmp
+ iBmpList.Close();
+ iMaskBmpList.Close();
+ ResetBmpPool();
+ }
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+ TPtrC bmpFileName = reader.ReadTPtrC(); // Read the file name of the bmps
+ TInt32 imgMajorSkinId = reader.ReadInt32();
+ TInt colorgroup = reader.ReadInt16();
+ TAknsItemID id;
+
+ for (TInt ii = 0; ii < EBtnBmpLastType + 1; ++ii)
+ {
+ // Get the image ids and mask ids from resource
+ TInt bmpId = reader.ReadInt16();
+ TInt bmpMskId = reader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitemid = reader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ CFbsBitmap* bmp = NULL;
+ CFbsBitmap* maskbmp = NULL;
+
+ if (bmpMskId != KInvalidBmp)
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ maskbmp,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+
+ // set maskbmp and size
+ SetMaskBitmapL(maskbmp, TButtonBmpType(EBtnBmpNonActive + ii));
+ iMaskBmpList.Append(maskbmp);
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ bmpFileName,
+ bmpId);
+ }
+
+ // set bmp and size
+ SetBitmapL(bmp, TButtonBmpType(EBtnBmpNonActive + ii));
+ iBmpList.Append(bmp);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // reader
+
+ if (!iFirstTimeConstruct)
+ {
+ ResizeBitmaps(Rect().Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::Draw
+// Draws UI
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlButton::Draw()
+ {
+ if(!AbleToDraw())
+ return;
+
+ if ( !BackgroundBmp() )
+ {
+ CButtonBase::Draw();
+ }
+
+ CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+
+ //mask bitmaps
+ gc->Activate( MaskBitmapDevice() );
+
+ gc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc->SetBrushColor( TRgb(KOpaqueColor));//Non transparent at all
+ gc->SetPenStyle(CGraphicsContext::ESolidPen );
+ gc->SetPenSize( PenSize());
+ gc->SetPenColor( TRgb(KOpaqueColor) );
+ gc->DrawRect(Rect());
+
+ // ----- draw bitmaps -----
+ gc->Activate( BitmapDevice() );
+ if ( BackgroundBmp() )
+ {
+ TSize size=BackgroundBmp()->SizeInPixels();
+
+ gc->DrawBitmap(Rect(), BackgroundBmp(),size);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::SetActive
+// Set active for the button
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlButton::SetActive(TBool aActiveFlag)
+ {
+ if( IsDimmed() )
+ {
+ return;
+ }
+
+ if(IsActive() != aActiveFlag)
+ {
+ CFepUiBaseCtrl::SetActive(aActiveFlag);
+ if(aActiveFlag || iHighlight)
+ {
+ SetBackgroundBmp(Bitmap(EBtnBmpActive,EFalse));
+ SetBackgroundMaskBmp(Bitmap(EBtnBmpActive,ETrue));
+ //Hide(EFalse); //active button won't be Hiden ???
+ }
+ else
+ {
+ SetBackgroundBmp(Bitmap(EBtnBmpNonActive,EFalse));
+ SetBackgroundMaskBmp(Bitmap(EBtnBmpNonActive,ETrue));
+ }
+ if(BitGc())
+ {
+ Draw();
+ UpdateArea(Rect(),EFalse);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::SetHighlight
+// Set highlight for the button
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlButton::SetHighlight(TBool aIsHighlight)
+ {
+ iHighlight = aIsHighlight;
+
+ if ( iHighlight )
+ {
+ SetBackgroundBmp(Bitmap(EBtnBmpActive,EFalse));
+ SetBackgroundMaskBmp(Bitmap(EBtnBmpActive,ETrue));
+ }
+ else
+ {
+ SetBackgroundBmp(Bitmap(EBtnBmpNonActive,EFalse));
+ SetBackgroundMaskBmp(Bitmap(EBtnBmpNonActive,ETrue));
+ }
+ Draw();
+ UpdateArea(Rect(), EFalse);
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::ResizeBitmaps
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlButton::ResizeBitmaps(TSize aSize)
+ {
+ if (iMaskBmpList.Count() >= 1 &&
+ iMaskBmpList[0]->SizeInPixels() != aSize)
+ {
+ for( int ii = 0; ii < iMaskBmpList.Count(); ++ii )
+ {
+ AknIconUtils::SetSize(iMaskBmpList[ii], aSize, EAspectRatioNotPreserved);
+ }
+ }
+
+ if (iBmpList.Count() >= 1 &&
+ iBmpList[0]->SizeInPixels() != aSize)
+ {
+ for( int ii = 0; ii < iBmpList.Count(); ++ii )
+ {
+ AknIconUtils::SetSize(iBmpList[ii], aSize, EAspectRatioNotPreserved);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::SizeChanged
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlButton::SizeChanged(TRect aNewRect, TBool aIsReloadImages)
+ {
+ if ((aNewRect.Size().iWidth == 0 || aNewRect.Size().iHeight == 0) &&
+ (ControlId() != EPeninupWindowCtrlIdArrowLeftBtn &&
+ ControlId() != EPeninupWindowCtrlIdArrowRightBtn))
+ {
+ return;
+ }
+
+ SetRect(aNewRect);
+
+ //if (aIsReloadImages)
+ {
+ ResizeBitmaps(aNewRect.Size());
+ }
+
+ Draw();
+ UpdateArea(Rect(), EFalse);
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlButton::HandlePointerLeave
+// Handle pointer leave event
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlButton::HandlePointerLeave(const TPoint& aPt)
+ {
+ if( IsDimmed() )
+ return;
+ if( iHighlight )
+ {
+ SetBackgroundBmp(iActiveBmp);
+ SetBackgroundMaskBmp(iActiveMaskBmp);
+ }
+
+ else
+ {
+ SetBackgroundBmp(iNonActiveBkBmp);
+ SetBackgroundMaskBmp(iNonActiveBkMaskBmp);
+ }
+ Draw();
+ UpdateArea(Rect(), EFalse);
+ CFepUiBaseCtrl::HandlePointerLeave(aPt);
+ return ;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlDragButton::CAknFepCtrlDragButton
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlDragButton::CAknFepCtrlDragButton(CFepUiLayout* aUiLayout, TInt aControlId)
+: CDragBar(TRect(), aUiLayout, aControlId), iFirstTimeConstruct(ETrue)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlDragButton::~CAknFepCtrlDragButton()
+ {
+ iBmpList.Close();
+ iMaskBmpList.Close();
+
+ DeleteForgroundRes();
+ delete iText;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlDragButton::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlDragButton* CAknFepCtrlDragButton::NewL(CFepUiLayout* aUiLayout,
+ TInt aControlId)
+ {
+ CAknFepCtrlDragButton* self = NewLC(aUiLayout, aControlId);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlDragButton::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlDragButton* CAknFepCtrlDragButton::NewLC(CFepUiLayout* aUiLayout,
+ TInt aControlId)
+ {
+ CAknFepCtrlDragButton* self = new (ELeave) CAknFepCtrlDragButton(aUiLayout, aControlId);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlDragButton::ConstructFromResourceL
+// The order of the image ids in the CButtonBase class must not be changed
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlDragButton::ConstructFromResourceL(TResourceReader& aReader)
+ {
+ /*
+ if (!iFirstTimeConstruct)
+ {
+ iBmpList.Close();
+ iMaskBmpList.Close();
+ ResetBmpPool();
+ }
+
+ TPtrC bmpFileName = aReader.ReadTPtrC();
+ TInt32 imgMajorSkinId = aReader.ReadInt32();
+ TAknsItemID id;
+
+ for (TInt ii = 0; ii < EBtnBmpLastType + 1; ++ii)
+ {
+ const TInt16 bmpId = aReader.ReadInt16();
+ const TInt16 bmpMskId = aReader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitemid = aReader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ CFbsBitmap* bmp = NULL;
+ CFbsBitmap* maskbmp = NULL;
+
+ if (bmpMskId != KInvalidBmp)
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ maskbmp,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+
+ SetMaskBitmapL(maskbmp, TButtonBmpType(EBtnBmpNonActive + ii));
+ iMaskBmpList.Append(maskbmp);
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ bmpFileName,
+ bmpId);
+ }
+
+ SetBitmapL(bmp, TButtonBmpType(EBtnBmpNonActive + ii));
+ iBmpList.Append(bmp);
+ }
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ ResizeBitmaps(Rect().Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;*/
+ if (!iFirstTimeConstruct)
+ {
+ DeleteForgroundRes();
+ }
+
+ TPtrC bmpFileName = aReader.ReadTPtrC(); // Read the file name of the bmps
+ TInt32 imgMajorSkinId = aReader.ReadInt32();
+ TInt colorGroup = aReader.ReadInt16();
+ TAknsItemID id;
+
+ // Get the image ids and mask ids from resource
+ TInt bmpId = aReader.ReadInt16();
+ TInt bmpMskId = aReader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitemid = aReader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ if (bmpMskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForgroundBmp,
+ iForgroundBmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ iForgroundBmp,
+ iForgroundBmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId,
+ AKN_LAF_COLOR( 0 ) );
+ }
+
+ AknIconUtils::SetSize(iForgroundBmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iForgroundBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);
+
+ /*CreateDimmedMaskL( iForgroundDimBmpMask,
+ iForgroundBmpMask );
+ AknIconUtils::SetSize(iForgroundDimBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);*/
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForgroundBmp,
+ bmpFileName,
+ bmpId);
+ AknIconUtils::SetSize(iForgroundBmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ }
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ //ResizeBitmaps(iForgroundBmpRect.Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlDragButton::ConstructFromResourceL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlDragButton::ConstructFromResourceL()
+ {
+ /*
+ if (iResourceId == KInvalidResId)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ iBmpList.Close();
+ iMaskBmpList.Close();
+ ResetBmpPool();
+ }
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+ TPtrC bmpFileName = reader.ReadTPtrC();
+ TInt32 imgMajorSkinId = reader.ReadInt32();
+ TAknsItemID id;
+
+ for (TInt ii = 0; ii < EBtnBmpLastType + 1; ++ii)
+ {
+ const TInt16 bmpId = reader.ReadInt16();
+ const TInt16 bmpMskId = reader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitemid = reader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ CFbsBitmap* bmp = NULL;
+ CFbsBitmap* maskbmp = NULL;
+
+ if (bmpMskId != KInvalidBmp)
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ maskbmp,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+
+ SetMaskBitmapL(maskbmp, TButtonBmpType(EBtnBmpNonActive + ii));
+ iMaskBmpList.Append(maskbmp);
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ bmpFileName,
+ bmpId);
+ }
+
+ SetBitmapL(bmp, TButtonBmpType(EBtnBmpNonActive + ii));
+ iBmpList.Append(bmp);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // reader
+
+ if (!iFirstTimeConstruct)
+ {
+ ResizeBitmaps(Rect().Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;*/
+ if (iResourceId == KInvalidResId)
+ {
+ return;
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ // need to remove original bmp and maskbmp
+ DeleteForgroundRes();
+ }
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+ TPtrC bmpFileName = reader.ReadTPtrC(); // Read the file name of the bmps
+ TInt32 imgMajorSkinId = reader.ReadInt32();
+ TInt colorGroup = reader.ReadInt16();
+ TAknsItemID id;
+
+ // Get the image ids and mask ids from resource
+ TInt bmpId = reader.ReadInt16();
+ TInt bmpMskId = reader.ReadInt16();
+
+ // Read skin item id
+ const TInt skinitemid = reader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ if (bmpMskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForgroundBmp,
+ iForgroundBmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ iForgroundBmp,
+ iForgroundBmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId,
+ AKN_LAF_COLOR( 0 ) );
+ }
+
+ AknIconUtils::SetSize(iForgroundBmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iForgroundBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);
+
+ /*CreateDimmedMaskL( iForgroundDimBmpMask, iForgroundBmpMask );
+ AknIconUtils::SetSize(iForgroundDimBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);*/
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForgroundBmp,
+ bmpFileName,
+ bmpId);
+ AknIconUtils::SetSize(iForgroundBmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // reader
+
+ if (!iFirstTimeConstruct)
+ {
+ //ResizeBitmaps(iForgroundBmpRect.Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlDragButton::DeleteForgroundRes
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlDragButton::DeleteForgroundRes()
+ {
+ if( iForgroundBmp )
+ {
+ delete iForgroundBmp;
+ iForgroundBmp = NULL;
+ }
+ if( iForgroundBmpMask )
+ {
+ delete iForgroundBmpMask;
+ iForgroundBmpMask = NULL;
+ }
+ if( iForgroundDimBmpMask )
+ {
+ delete iForgroundDimBmpMask;
+ iForgroundDimBmpMask = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlDragButton::CreateDimmedMaskL
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlDragButton::CreateDimmedMaskL( CFbsBitmap*& aDimmedMask,
+ const CFbsBitmap* aMask
+ /*TScaleMode aScaleMode*/ )
+ {
+ if (aMask && aMask->DisplayMode() == EGray256)
+ {
+ delete aDimmedMask;
+ aDimmedMask = NULL;
+
+ aDimmedMask = new (ELeave) CFbsBitmap;
+
+ User::LeaveIfError(aDimmedMask->Create(aMask->SizeInPixels(), EGray256));
+ CleanupStack::PushL(aDimmedMask);
+
+ CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL(aDimmedMask);
+ CleanupStack::PushL(bitmapDevice);
+
+ CFbsBitGc* bitGc(NULL);
+ User::LeaveIfError(bitmapDevice->CreateContext(bitGc));
+ CleanupStack::PushL(bitGc);
+
+ bitGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ bitGc->BitBlt(TPoint(0, 0), aMask);
+
+ aDimmedMask->LockHeap();
+ TInt w = aMask->SizeInPixels().iWidth;
+ TInt h = aMask->SizeInPixels().iHeight;
+ TInt dataStride = aMask->DataStride() - w;
+ unsigned char* address = (unsigned char *)aDimmedMask->DataAddress();
+
+ for ( TInt i = 0; i < h; ++i )
+ {
+ for ( TInt j = 0; j < w; ++j )
+ {
+ *address = KTransparency[*address];
+ ++address;
+ }
+ address += dataStride;
+ }
+
+ aDimmedMask->UnlockHeap();
+
+ //AknIconUtils::SetSize(aDimmedMask, aMask->SizeInPixels(), aScaleMode);
+
+ CleanupStack::PopAndDestroy(2); // bitmapDevice, bitGc
+ CleanupStack::Pop(1); // aDimmedMask
+ }
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlDragButton::SetForgroundBmpRect
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlDragButton::SetForgroundBmpRect(const TRect& aRect)
+ {
+ iForgroundBmpRect = aRect;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlDragButton::SetForegroundBmpL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlDragButton::SetForegroundBmpL(CFbsBitmap* aBmp,
+ CFbsBitmap* aMaskBmp)
+ {
+ DeleteForgroundRes();
+
+ iForgroundBmp = aBmp;
+ iForgroundBmpMask = aMaskBmp;
+
+ ResizeBitmaps(iForgroundBmpRect.Size());
+ }
+
+EXPORT_C void CAknFepCtrlDragButton::Move(const TPoint& aOffset)
+ {
+ CButtonBase::Move(aOffset);
+ iForgroundBmpRect.Move( aOffset );
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlDragButton::HandlePointerDownEventL
+// Handle button down event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlDragButton::HandlePointerDownEventL(const TPoint& aPt)
+ {
+ if( IsDimmed() )
+ return NULL;
+
+ CDragBar::HandlePointerDownEventL(aPt);
+
+ SetReady(ETrue);
+ Draw();
+ UpdateArea(Rect(),EFalse);
+ ReportEvent(EEventButtonDown);
+ return this;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlDragButton::Draw
+// Draws UI
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlDragButton::Draw()
+ {
+ if(!AbleToDraw())
+ return;
+
+ CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+
+ //mask bitmaps
+ DrawOpaqueMaskBackground();
+ TRect rect = Rect();
+ TRect innerRect = rect;
+ innerRect.Shrink( 10, 10 );
+
+ // ----- draw bitmaps -----
+ gc->Activate( BitmapDevice() );
+ //gc->Clear(rect);
+
+ CFbsBitmap* bmpMask = NULL;
+
+ // Draw background
+ if( IsDimmed() ) // Dimmed state
+ {
+ AknsDrawUtils::DrawFrame( UiLayout()->SkinInstance(),
+ *gc,
+ rect,
+ innerRect,
+ iInactiveImgID,
+ KAknsIIDDefault );
+ if( iForgroundDimBmpMask )
+ {
+ delete iForgroundDimBmpMask;
+ iForgroundDimBmpMask = NULL;
+ }
+ TRAP_IGNORE(CreateDimmedMaskL( iForgroundDimBmpMask,
+ iForgroundBmpMask ));
+ AknIconUtils::SetSize(iForgroundDimBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);
+ bmpMask = iForgroundDimBmpMask;
+ }
+ else
+ {
+ // Normal state or pressed state
+ TAknsItemID ImgID = (IsDragging() | PointerDown()) ? iPressedImgID : iNormalImgID;
+ AknsDrawUtils::DrawFrame( UiLayout()->SkinInstance(),
+ *gc,
+ rect,
+ innerRect,
+ ImgID,
+ KAknsIIDDefault );
+ bmpMask = iForgroundBmpMask;
+ }
+
+ // Draw forground
+ if( iForgroundBmp )
+ {
+ TRect srcRect( TPoint( 0, 0 ), iForgroundBmp->SizeInPixels() );
+ if( bmpMask )
+ {
+ gc->BitBltMasked( iForgroundBmpRect.iTl,
+ iForgroundBmp,
+ srcRect,
+ bmpMask,
+ EFalse);
+ }
+ else
+ {
+ gc->BitBlt( iForgroundBmpRect.iTl,
+ iForgroundBmp,
+ srcRect );
+ }
+ }
+
+ if (iText)
+ {
+ TAknLayoutText textLayout;
+ textLayout.LayoutText(Rect(), iTextFormat);
+ textLayout.DrawText(*gc, *iText);
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlDragButton::ResizeBitmaps
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepCtrlDragButton::ResizeBitmaps(TSize aInnerSize)
+ {
+ /*
+ if (iMaskBmpList.Count() >= 1 &&
+ iMaskBmpList[0]->SizeInPixels() != aSize)
+ {
+ for( TInt ii = 0; ii < iMaskBmpList.Count(); ++ii )
+ {
+ AknIconUtils::SetSize(iMaskBmpList[ii], aSize, EAspectRatioNotPreserved);
+ }
+ }
+
+ if (iBmpList.Count() >= 1 &&
+ iBmpList[0]->SizeInPixels() != aSize)
+ {
+ for( TInt ii = 0; ii < iBmpList.Count(); ++ii )
+ {
+ AknIconUtils::SetSize(iBmpList[ii], aSize, EAspectRatioNotPreserved);
+ }
+ }*/
+ if( iForgroundBmp && ( iForgroundBmp->SizeInPixels() != aInnerSize ) )
+ {
+ AknIconUtils::SetSize( iForgroundBmp, aInnerSize, EAspectRatioNotPreserved );
+ }
+ if( iForgroundBmpMask && ( iForgroundBmpMask->SizeInPixels() != aInnerSize ) )
+ {
+ AknIconUtils::SetSize( iForgroundBmpMask, aInnerSize, EAspectRatioNotPreserved );
+ }
+
+ /*TRAP_IGNORE(CreateDimmedMaskL(iForgroundDimBmpMask,
+ iForgroundBmpMask)); */
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlDragButton::SizeChanged
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlDragButton::SizeChanged(TRect aNewRect,
+ TRect aInnerRect,
+ TBool aIsReloadImages)
+ {
+ // Reset the position and the extent of the button aera
+ /*if (aNewRect.Size().iWidth == 0 || aNewRect.Size().iHeight == 0)
+ {
+ return;
+ }
+
+ SetRect(aNewRect);
+
+ if (aIsReloadImages)
+ {
+ ResizeBitmaps(aNewRect.Size());
+ }
+
+ Draw();
+ UpdateArea(Rect(), ETrue);*/
+
+ if (aNewRect.Size().iWidth == 0 || aNewRect.Size().iHeight == 0)
+ {
+ return;
+ }
+
+ TRect oriRect = Rect();
+ SetRect(aNewRect);
+ iForgroundBmpRect = aInnerRect;
+
+ if (aIsReloadImages)
+ {
+ ResizeBitmaps(aInnerRect.Size() );
+ }
+ RootControl()->ReDrawRect( oriRect );
+ UpdateArea(oriRect, EFalse);
+ Draw();
+ UpdateArea(Rect(), EFalse);
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::CAknFepCtrlMultiModeButton
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlMultiModeButton::CAknFepCtrlMultiModeButton(CFepUiLayout* aUiLayout,
+ TInt aControlId,TAknsItemID aNormalID,
+ TAknsItemID aPressedID,TAknsItemID aInactiveID)
+ : CAknFepCtrlCommonButton(aUiLayout, aControlId, aNormalID, aPressedID, aInactiveID)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::NewL
+// Two-phased constructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlMultiModeButton* CAknFepCtrlMultiModeButton::NewL(CFepUiLayout* aUiLayout,
+ TInt aControlId,TAknsItemID aNormalID,
+ TAknsItemID aPressedID,TAknsItemID aInactiveID)
+ {
+ CAknFepCtrlMultiModeButton* self = NewLC(aUiLayout, aControlId,
+ aNormalID, aPressedID, aInactiveID);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::NewLC
+// Two-phased constructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlMultiModeButton* CAknFepCtrlMultiModeButton::NewLC(CFepUiLayout* aUiLayout,
+ TInt aControlId,TAknsItemID aNormalID,
+ TAknsItemID aPressedID,TAknsItemID aInactiveID)
+ {
+ CAknFepCtrlMultiModeButton* self = new (ELeave) CAknFepCtrlMultiModeButton(aUiLayout,
+ aControlId,
+ aNormalID,
+ aPressedID,
+ aInactiveID);
+ CleanupStack::PushL(self);
+ self->BaseConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlMultiModeButton::~CAknFepCtrlMultiModeButton()
+ {
+ iImageResIdList.Close();
+ iForegroundBmpList.ResetAndDestroy();
+ iForegroundBmpList.Close();
+ iForegroundMaskBmpList.ResetAndDestroy();
+ iForegroundMaskBmpList.Close();
+
+ iModeTextList.ResetAndDestroy();
+ iModeTextList.Close();
+
+ iModesList.ResetAndDestroy();
+ iModesList.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::ConstructFromResourceL
+// The order of the image ids in the CButtonBase class must not be changed
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void CAknFepCtrlMultiModeButton::ConstructFromResourceL(TResourceReader& aReader)
+ {
+ if (!iFirstTimeConstruct)
+ {
+ iImageResIdList.Close();
+ iForegroundBmpList.ResetAndDestroy();
+ iForegroundBmpList.Close();
+ iForegroundMaskBmpList.ResetAndDestroy();
+ iForegroundMaskBmpList.Close();
+
+ iModeTextList.ResetAndDestroy();
+ iModeTextList.Close();
+
+
+ iModesList.ResetAndDestroy();
+ iModesList.Close();
+
+ ResetBmpPool();
+ }
+
+ // read text color and shadow text color
+ TInt32 colorMajorSkinId = aReader.ReadInt32();
+ const TInt skinitemid = aReader.ReadInt16();
+ TInt textcoloridx = aReader.ReadInt16();
+ TInt shadowtextcoloridx = aReader.ReadInt16();
+
+ TAknsItemID id;
+
+ id.Set(TInt(colorMajorSkinId), skinitemid);
+ TInt error = AknsUtils::GetCachedColor(UiLayout()->SkinInstance(),
+ iFontColor,
+ id,
+ textcoloridx);
+
+ if (error != KErrNone)
+ {
+ iFontColor = TRgb(KDefaultTextColor);
+ }
+
+ SetFontColor(iFontColor);
+
+ error = AknsUtils::GetCachedColor(UiLayout()->SkinInstance(),
+ iShadowFontColor,
+ id,
+ shadowtextcoloridx);
+
+ if (error != KErrNone)
+ {
+ iShadowFontColor = TRgb(KDefaultShadowTextColor);
+ }
+
+ SetShadowFontColor(iShadowFontColor);
+
+ const TInt16 countModes = aReader.ReadInt16(); // Read the count of different cases
+
+ if (countModes <= 0)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ iNumberOfModes = 0;
+
+ for (TInt ii = 0; ii < countModes; ii++)
+ {
+ AddModeL(aReader);
+ iNumberOfModes++;
+ }
+
+ if (iFirstTimeConstruct)
+ {
+ if (iImageResIdList.Count() == 1)
+ {
+ // set background bimap for button
+ SetButtonBmpL(EBtnBmpNonActive, 0);
+ iCurrentBmpType = EBtnBmpNonActive;
+ }
+
+ const TInt16 defaultModeIndex = aReader.ReadInt16();
+ SetCurrentModeL(EBtnBmpNonActive, defaultModeIndex);
+ }
+ else
+ {
+ SetButtonBmpL(iCurrentBmpType, iCurrentMode);
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::ConstructFromResourceL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void CAknFepCtrlMultiModeButton::ConstructFromResourceL()
+ {
+ if (iResourceId == KInvalidResId)
+ {
+ return;
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ iImageResIdList.Close();
+ iForegroundBmpList.ResetAndDestroy();
+ iForegroundBmpList.Close();
+ iForegroundMaskBmpList.ResetAndDestroy();
+ iForegroundMaskBmpList.Close();
+
+ iModeTextList.ResetAndDestroy();
+ iModeTextList.Close();
+
+
+ iModesList.ResetAndDestroy();
+ iModesList.Close();
+
+ ResetBmpPool();
+ }
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+ // read text color and shadow text color
+ TInt32 colorMajorSkinId = reader.ReadInt32();
+ const TInt skinitemid = reader.ReadInt16();
+ TInt textcoloridx = reader.ReadInt16();
+ TInt shadowtextcoloridx = reader.ReadInt16();
+
+ TAknsItemID id;
+
+ id.Set(TInt(colorMajorSkinId), skinitemid);
+ TInt error = AknsUtils::GetCachedColor(UiLayout()->SkinInstance(),
+ iFontColor,
+ id,
+ textcoloridx);
+
+ if (error != KErrNone)
+ {
+ iFontColor = TRgb(KDefaultTextColor);
+ }
+
+ SetFontColor(iFontColor);
+
+ error = AknsUtils::GetCachedColor(UiLayout()->SkinInstance(),
+ iShadowFontColor,
+ id,
+ shadowtextcoloridx);
+
+ if (error != KErrNone)
+ {
+ iShadowFontColor = TRgb(KDefaultShadowTextColor);
+ }
+
+ SetShadowFontColor(iShadowFontColor);
+
+ const TInt16 countModes = reader.ReadInt16();
+
+ if (countModes <= 0)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ iNumberOfModes = 0;
+
+ for (TInt ii = 0; ii < countModes; ii++)
+ {
+ AddModeL(reader);
+ iNumberOfModes++;
+ }
+
+
+ if (iFirstTimeConstruct)
+ {
+ if (iImageResIdList.Count() == 1)
+ {
+ // set background bimap for button
+ SetButtonBmpL(EBtnBmpNonActive, 0);
+ iCurrentBmpType = EBtnBmpNonActive;
+ }
+
+ const TInt16 defaultModeIndex = reader.ReadInt16();
+ SetCurrentModeL(EBtnBmpNonActive, defaultModeIndex);
+ }
+ else
+ {
+ ResizeBitmaps(iForgroundBmpRect.Size());
+ SetButtonBmpL(iCurrentBmpType, iCurrentMode);
+ Draw();
+ }
+
+ CleanupStack::PopAndDestroy(); // reader
+
+ iFirstTimeConstruct = EFalse;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::AddModeL
+// Add new display mode from resource reader
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::AddModeL(TResourceReader& aReader)
+ {
+ const TInt32 imageResId = aReader.ReadInt32();
+ iModeTextList.Append(aReader.ReadHBufCL());
+ const TInt rangeId = aReader.ReadInt16();
+ const TInt modeId = aReader.ReadInt16();
+
+ TAknFepModeIndicator* modeIndicator = new (ELeave) TAknFepModeIndicator;
+ CleanupStack::PushL(modeIndicator);
+
+ modeIndicator->iRangeId = rangeId;
+ modeIndicator->iModeId = modeId;
+ modeIndicator->iPermitted = ETrue;
+
+ iModesList.AppendL(modeIndicator);
+ CleanupStack::Pop(modeIndicator); // indicator
+
+ if ( imageResId != KInvalidBmp )
+ {
+ // switch mode means change image
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, imageResId);
+
+ TPtrC bmpFileName = reader.ReadTPtrC();
+ TInt32 imgMajorSkinId = reader.ReadInt32();
+ TInt colorGroup = reader.ReadInt16();
+ TAknsItemID id;
+
+ for (TInt jj = 0; jj < /*EBtnBmpLastType +*/ 1; jj++)
+ {
+ const TInt16 bmpId = reader.ReadInt16();
+ const TInt16 bmpMskId = reader.ReadInt16();
+ const TInt16 skinitemid = reader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ CFbsBitmap* bmp = NULL;
+ CFbsBitmap* maskbmp = NULL;
+
+ if (bmpMskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ maskbmp,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ bmp,
+ maskbmp,
+ bmpFileName,
+ bmpId,
+ bmpMskId,
+ AKN_LAF_COLOR( 0 ) );
+
+ }
+ CleanupStack::PushL(maskbmp);
+ AknIconUtils::SetSize(maskbmp, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);
+ iForegroundMaskBmpList.AppendL(maskbmp);
+ CleanupStack::Pop(maskbmp);
+
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ bmp,
+ bmpFileName,
+ bmpId);
+
+ }
+
+ CleanupStack::PushL(bmp);
+ AknIconUtils::SetSize(bmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ iForegroundBmpList.AppendL(bmp);
+ CleanupStack::Pop(bmp);
+
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); //reader
+
+ iImageResIdList.Append(imageResId);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::SetButtonBmp
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::SetButtonBmpL(const TButtonBmpType aType ,
+ const TInt aMode)
+ {
+ if ( !ForgroundBmp() ||
+ ForgroundBmp()->Handle() != iForegroundBmpList[aMode]->Handle() ||
+ !ForgroundBmpMask() ||
+ ForgroundBmpMask()->Handle() != iForegroundMaskBmpList[aMode]->Handle() )
+ {
+ CFbsBitmap* bmp = new (ELeave) CFbsBitmap;
+ if(iForegroundMaskBmpList.Count() > 0 && iForegroundBmpList[aMode])
+ {
+ CleanupStack::PushL( bmp );
+
+ User::LeaveIfError(bmp->Duplicate(iForegroundBmpList[aMode]->Handle()));
+
+ CleanupStack::Pop( bmp );
+ }
+ else
+ {
+ delete bmp;
+ bmp = NULL;
+ }
+ CFbsBitmap* maskbmp = new (ELeave) CFbsBitmap;
+
+ if(iForegroundMaskBmpList.Count() > 0 && iForegroundMaskBmpList[aMode])
+ {
+ CleanupStack::PushL( maskbmp );
+ User::LeaveIfError(maskbmp->Duplicate(iForegroundMaskBmpList[aMode]->Handle()));
+ CleanupStack::Pop( maskbmp );
+ }
+ else
+ {
+ delete maskbmp;
+ maskbmp = NULL;
+ }
+ SetForegroundBmpL(bmp,maskbmp);
+ }
+ else if ( ForgroundBmp()->SizeInPixels() != iForegroundBmpList[aMode]->SizeInPixels() ||
+ ForgroundBmpMask()->SizeInPixels() != iForegroundMaskBmpList[aMode]->SizeInPixels())
+ {
+ ResizeBitmaps(iForegroundBmpList[aMode]->SizeInPixels());
+ }
+
+ if(aType == EBtnBmpActivePressed
+ || aType == EBtnBmpNonActivePressed)
+ {
+ SetHighlight(ETrue);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::SetCurrentModeL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::SetCurrentModeL(const TButtonBmpType aType,
+ const TInt aModeIndex)
+ {
+ if ((aModeIndex >= 0) &&
+ (aModeIndex <= NumberOfModes()-1) &&
+ (iModesList[aModeIndex]->iPermitted))
+ {
+ iCurrentMode = aModeIndex;
+
+ if (iImageResIdList.Count() > 1)
+ {
+ // change mode means change image
+ SetButtonBmpL(aType, iCurrentMode);
+ iCurrentBmpType = aType;
+ }
+
+ Draw();
+ UpdateArea(Rect());
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::NextMode
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlMultiModeButton::NextMode() const
+ {
+ TInt startIndex = 0;
+
+ if (iCurrentMode < (NumberOfModes() -1))
+ {
+ startIndex = iCurrentMode + 1;
+ }
+
+ TBool find = EFalse;
+
+ while (!find && (startIndex != iCurrentMode))
+ {
+ if (iModesList[startIndex]->iPermitted)
+ {
+ find = ETrue;
+ }
+ else
+ {
+ startIndex++;
+
+ if (startIndex > (NumberOfModes()-1))
+ {
+ startIndex = 0;
+ }
+ }
+ }
+
+ if (find)
+ {
+ return startIndex;
+ }
+ else
+ {
+ return iCurrentMode;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::ImageAlreadyExist
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknFepCtrlMultiModeButton::ImageAlreadyExist(const TInt32 aResId)
+ {
+ TBool findResId = EFalse;
+
+ for (TInt i=0; i<iImageResIdList.Count(); i++)
+ {
+ if (aResId == iImageResIdList[i])
+ {
+ findResId = ETrue;
+
+ break;
+ }
+ }
+
+ return findResId;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::DisplayText
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::DisplayText()
+ {
+ if ((iFont) && (iShadowFont))
+ {
+ // draw shadow text
+ BitGc()->UseFont(iShadowFont);
+
+ BitGc()->SetBrushStyle( CGraphicsContext::ENullBrush );
+ BitGc()->SetBrushColor( KRgbBlack);//Non transparent at all
+ BitGc()->SetPenColor(iShadowFontColor);
+ BitGc()->SetPenStyle(CGraphicsContext::ESolidPen);
+ BitGc()->SetPenSize( PenSize());
+
+ TPoint pointText;
+ TPoint pointShadowText;
+
+ TInt leftMarginOfText =
+ (Rect().Width() - iFont->TextWidthInPixels(*(iModeTextList[iCurrentMode])))/2;
+
+ pointText.iX = Rect().iTl.iX + leftMarginOfText;
+ pointText.iY = Rect().iTl.iY + Rect().Height()*3/4;
+
+ pointShadowText.iX = pointText.iX + 1;
+ pointShadowText.iY = pointText.iY + 1;
+
+ //BitGc()->DrawText(*(iModeTextList[iCurrentMode]), Rect(), Rect().Height()*3/4, CGraphicsContext::ECenter, Rect().Width()/2 - iFont->TextWidthInPixels(*(iModeTextList[iCurrentMode]))/2);
+ BitGc()->DrawText(*(iModeTextList[iCurrentMode]), pointShadowText);
+
+ BitGc()->DiscardFont();
+
+ // draw text
+ BitGc()->UseFont(iFont);
+
+ BitGc()->SetBrushStyle( CGraphicsContext::ENullBrush );
+ BitGc()->SetBrushColor( KRgbBlack);//Non transparent at all
+ BitGc()->SetPenColor(iFontColor);
+ BitGc()->SetPenStyle(CGraphicsContext::ESolidPen);
+ BitGc()->SetPenSize( PenSize());
+
+ //BitGc()->DrawText(*(iModeTextList[iCurrentMode]), Rect(), Rect().Height()*3/4+1, CGraphicsContext::ECenter, Rect().Width()/2 - iFont->TextWidthInPixels(*(iModeTextList[iCurrentMode]))/2-1);
+ BitGc()->DrawText(*(iModeTextList[iCurrentMode]), pointText);
+
+ BitGc()->DiscardFont();
+
+ //BitGc()->SetPenStyle(CGraphicsContext::ENullPen);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::Draw
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::Draw()
+ {
+ if(!AbleToDraw())
+ return;
+
+ CAknFepCtrlCommonButton::Draw();
+ //CButtonBase::Draw();
+ if ( iModeTextList.Count() )
+ {
+ if ((iModeTextList[iCurrentMode]) && (iModeTextList[iCurrentMode]->Length() > 0))
+ {
+ DisplayText();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::SetFontColor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::SetFontColor(const TRgb aFontColor)
+ {
+ iFontColor = aFontColor;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::SetShadowFontColor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::SetShadowFontColor(const TRgb aShadowFontColor)
+ {
+ iShadowFontColor = aShadowFontColor;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::SetPermittedModes
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlMultiModeButton::SetPermittedModes(const TInt aRangeId,
+ const TInt aRealCaseId,
+ TBool aPermit)
+ {
+ for (TInt i = 0; i < iModesList.Count(); i++)
+ {
+ if ((iModesList[i]->iRangeId == aRangeId) && (iModesList[i]->iModeId == aRealCaseId))
+ {
+ iModesList[i]->iPermitted = aPermit;
+
+ return KErrNone;
+ }
+ }
+
+ return KErrNotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::SetPermittedRange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlMultiModeButton::SetPermittedRange(const TInt aRangeId, TBool aPermit)
+ {
+ TBool findRangeId = EFalse;
+
+ for (TInt i = 0; i < iModesList.Count(); i++)
+ {
+ if ((iModesList[i]->iRangeId == aRangeId) && (iModesList[i]->iPermitted != aPermit))
+ {
+ iModesList[i]->iPermitted = aPermit;
+ findRangeId = ETrue;
+ }
+ }
+
+ if (!findRangeId)
+ {
+ return KErrNotSupported;
+ }
+ else
+ {
+ return KErrNone;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::EnableAllModes
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::EnableAllModes()
+ {
+ for (TInt i = 0; i < iModesList.Count(); i++)
+ {
+ iModesList[i]->iPermitted = ETrue;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::DisableAllModes
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::DisableAllModes()
+ {
+ for (TInt i = 0; i < iModesList.Count(); i++)
+ {
+ iModesList[i]->iPermitted = EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::DisableAllModes
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::DisableOneModes(const TInt aRangeId)
+ {
+ for (TInt i = 0; i < iModesList.Count(); i++)
+ {
+ if(iModesList[i]->iRangeId == aRangeId)
+ {
+ iModesList[i]->iPermitted = EFalse;
+ TRAP_IGNORE(SetCurrentModeL(EBtnBmpNonActive, NextMode()));
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::IsGivenRangeSupported
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknFepCtrlMultiModeButton::IsGivenRangeSupported(const TInt aRange)
+ {
+ for (TInt i = 0; i < iModesList.Count(); i++)
+ {
+ // judge if aRange is supported by at least 1 mode
+ if ((iModesList[i]->iRangeId == aRange) && (iModesList[i]->iPermitted))
+ {
+ return ETrue;
+ }
+ }
+
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::SetRange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlMultiModeButton::SetRange(const TInt aRange)
+ {
+ if (CurrentRange() != aRange)
+ {
+ for (TInt i = 0; i < iModesList.Count(); i++)
+ {
+ if ((iModesList[i]->iRangeId == aRange) &&
+ (iModesList[i]->iPermitted))
+ {
+ TRAP_IGNORE(SetCurrentModeL(EBtnBmpActive, i));
+ return KErrNone;
+ }
+ }
+ }
+
+ return KErrNotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::CurrentRange
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlMultiModeButton::CurrentRange() const
+ {
+ if ((iCurrentMode >= 0) && (iCurrentMode <= (NumberOfModes()-1)))
+ {
+ return iModesList[iCurrentMode]->iRangeId;
+ }
+ else
+ {
+ return KErrNotFound;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::RangeOfGivenMode()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlMultiModeButton::RangeOfGivenMode(TInt aModeIndex) const
+ {
+ if ((aModeIndex >= 0) && (aModeIndex <= NumberOfModes()-1))
+ {
+ return iModesList[aModeIndex]->iRangeId;
+ }
+
+ return KErrNotSupported;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::GetRealCaseByMode()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlMultiModeButton::GetRealCaseByMode(TInt aModeIndex) const
+ {
+ if ((aModeIndex >= 0) && (aModeIndex <= NumberOfModes() -1))
+ {
+ return iModesList[aModeIndex]->iModeId;
+ }
+
+ return KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::GetRangeListL()
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepCtrlMultiModeButton::GetRangeListL(RArray<TInt>& aList)
+ {
+ CleanupClosePushL( aList );
+ for (TInt i = 0; i < NumberOfModes(); i++)
+ {
+ if (aList.Find(iModesList[i]->iRangeId) == KErrNotFound)
+ {
+ aList.AppendL(iModesList[i]->iRangeId);
+ }
+ }
+ CleanupStack::Pop();
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::DuplicateBitmapL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CFbsBitmap* CAknFepCtrlMultiModeButton::DuplicateBitmapL(CFbsBitmap* aSourceBmp)
+ {
+ CFbsBitmap* bmp = new (ELeave) CFbsBitmap;
+ CleanupStack::PushL( bmp );
+
+ User::LeaveIfError(bmp->Duplicate(aSourceBmp->Handle()));
+
+ CleanupStack::Pop( bmp );
+ //iOwnedBitmaps.InsertInAddressOrder(bmp);
+ return bmp;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::ResizeBitmaps
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepCtrlMultiModeButton::ResizeBitmaps(TSize aSize)
+ {
+ if(iForegroundBmpList.Count() >= 1 && iForegroundBmpList[0]->SizeInPixels() != aSize
+ || iForegroundMaskBmpList.Count() >= 1 && iForegroundMaskBmpList[0]->SizeInPixels() != aSize)
+ {
+ for (TInt i=0; i<iForegroundBmpList.Count(); i++)
+ {
+ AknIconUtils::SetSize(iForegroundBmpList[i], aSize, EAspectRatioNotPreserved);
+ }
+ for (TInt i=0; i<iForegroundMaskBmpList.Count(); i++)
+ {
+ AknIconUtils::SetSize(iForegroundMaskBmpList[i], aSize, EAspectRatioNotPreserved);
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::SizeChanged
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiModeButton::SizeChanged(TRect aRect, TRect aInnerRect,
+ TBool aIsReloadImages)
+ {
+ if (aRect.Size().iWidth == 0 || aRect.Size().iHeight == 0)
+ {
+ return;
+ }
+ SetRect(aRect);
+
+ iForgroundBmpRect = aInnerRect;
+
+ if (aIsReloadImages)
+ {
+ ResizeBitmaps(aInnerRect.Size());
+ }
+
+ TRAP_IGNORE(SetButtonBmpL(iCurrentBmpType, iCurrentMode));
+
+ CAknFepCtrlCommonButton::SizeChanged(aRect,aInnerRect,aIsReloadImages);
+/*
+ Draw();
+ UpdateArea(Rect(), ETrue);
+*/
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlMultiModeButton::TransferOwnership
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepCtrlMultiModeButton::TransferOwnership(CFbsBitmap* aRemoved)
+ {
+/*
+ TInt index = iOwnedBitmaps.FindInAddressOrder(aRemoved);
+ if( index != KErrNotFound )
+ {
+ iOwnedBitmaps.Remove(index);
+ }
+*/
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::NewL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlEventButton* CAknFepCtrlEventButton::NewL(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ CAknFepCtrlEventButton* self = NewLC(aUiLayout, aControlId, aEvent, aUnicode,
+ aNormalID, aPressedID, aInactiveID);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::NewLC
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlEventButton* CAknFepCtrlEventButton::NewLC(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ CAknFepCtrlEventButton* self = new (ELeave) CAknFepCtrlEventButton(aUiLayout,
+ aControlId,
+ aEvent,
+ aUnicode,
+ aNormalID,
+ aPressedID,
+ aInactiveID);
+ CleanupStack::PushL(self);
+ self->BaseConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::CAknFepCtrlEventButton
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlEventButton::CAknFepCtrlEventButton(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ : CAknFepCtrlCommonButton(aUiLayout, aControlId, aNormalID, aPressedID, aInactiveID),
+ iEvent(aEvent),iUnicode(aUnicode),iText(NULL)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::~CAknFepCtrlEventButton
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlEventButton::~CAknFepCtrlEventButton()
+ {
+ delete iText;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::HandlePointerUpEventL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlEventButton::HandlePointerUpEventL(const TPoint& aPoint)
+ {
+ if (iEvent == 0xFFFF)
+ {
+ return CAknFepCtrlCommonButton::HandlePointerUpEventL(aPoint);
+ }
+ else
+ {
+ CAknFepCtrlCommonButton::HandlePointerUpEventL(aPoint);
+ if(IsDimmed())
+ {
+ return NULL;
+ }
+
+ if(IsActive())
+ {
+ SetBackgroundBmp(Bitmap(EBtnBmpActive,EFalse));
+ SetBackgroundMaskBmp(Bitmap(EBtnBmpActive,ETrue));
+ }
+ else
+ {
+ SetBackgroundBmp(Bitmap(EBtnBmpNonActive,EFalse));
+ SetBackgroundMaskBmp(Bitmap(EBtnBmpNonActive,ETrue));
+ }
+
+ SetActive(ETrue);
+ Draw();
+ UpdateArea(Rect(),EFalse);
+
+ TPtrC ptr = (TUint16*)(&iUnicode);
+ ReportEvent(iEvent,ptr);
+
+ return this;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::DisplayText
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::DisplayText()
+ {
+ if ((iFont) && (iShadowFont))
+ {
+ CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+
+ gc->Activate(BitmapDevice());
+
+ // draw shadow text
+ gc->UseFont(iShadowFont);
+
+ gc->SetBrushStyle( CGraphicsContext::ENullBrush );
+ gc->SetBrushColor( KRgbBlack);//Non transparent at all
+ gc->SetPenColor(iShadowFontColor);
+ gc->SetPenStyle(CGraphicsContext::ESolidPen);
+ gc->SetPenSize( PenSize());
+
+ TPoint pointText;
+ TPoint pointShadowText;
+
+ TInt leftMarginOfText = (Rect().Width() - iFont->TextWidthInPixels(*iText))/2;
+
+ pointText.iX = Rect().iTl.iX + leftMarginOfText;
+ pointText.iY = Rect().iTl.iY + Rect().Height()*3/4;
+
+ pointShadowText.iX = pointText.iX + 1;
+ pointShadowText.iY = pointText.iY + 1;
+
+ gc->DrawText(*iText, pointShadowText);
+
+ gc->DiscardFont();
+
+ // draw text
+ gc->UseFont(iFont);
+
+ gc->SetBrushStyle( CGraphicsContext::ENullBrush );
+ gc->SetBrushColor( KRgbBlack);//Non transparent at all
+ gc->SetPenColor(iFontColor);
+ gc->SetPenStyle(CGraphicsContext::ESolidPen);
+ gc->SetPenSize( PenSize());
+
+ gc->DrawText(*iText, pointText);
+
+ gc->DiscardFont();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::SetFontColor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::SetFontColor(const TRgb aColor)
+ {
+ iFontColor = aColor;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::SetShadowFontColor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::SetShadowFontColor(const TRgb aColor)
+ {
+ iShadowFontColor = aColor;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::Draw
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::Draw()
+ {
+ if(!AbleToDraw())
+ return;
+
+ CAknFepCtrlCommonButton::Draw();
+
+ if ( iText && (iText->Length() > 0 ) )
+ {
+ DisplayText();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::SetText
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::SetText(const TDesC& aText)
+ {
+ if ( iText )
+ {
+ delete iText;
+ iText = NULL;
+ }
+ TRAPD(err, iText = aText.AllocL());
+ if (err != KErrNone)
+ {
+ iText = NULL;
+ }
+ Draw();
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::SetFont
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::SetFont(const CFont* aFont)
+ {
+ iFont = aFont;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::SetShadowFont
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::SetShadowFont(const CFont* aFont)
+ {
+ iShadowFont = aFont;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::Event
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlEventButton::Event() const
+ {
+ return iEvent;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::Unicode
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknFepCtrlEventButton::Unicode() const
+ {
+ return iUnicode;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::SetEvent
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::SetEvent(TInt aEvent)
+ {
+ iEvent = aEvent;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepCtrlEventButton::SetUnicode
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlEventButton::SetUnicode(TInt aUnicode)
+ {
+ iUnicode = aUnicode;
+ }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlRepeatButton* CAknFepCtrlRepeatButton::NewLC(CFepUiLayout* aUiLayout,
+ TInt aCtrlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ //PRINTF((_L("CAknFepCtrlRepeatButton::NewLC(), aCtrlId = %d\n"), aCtrlId));
+ CAknFepCtrlRepeatButton *self = new(ELeave) CAknFepCtrlRepeatButton(aUiLayout,
+ aCtrlId,
+ aEvent,
+ aUnicode,
+ aNormalID,
+ aPressedID,
+ aInactiveID);
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlRepeatButton* CAknFepCtrlRepeatButton::NewL(CFepUiLayout* aUiLayout,
+ TInt aCtrlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ //PRINTF((_L("CAknFepCtrlRepeatButton::NewL(), aCtrlId = %d\n"), aCtrlId));
+ CAknFepCtrlRepeatButton *self = NewLC(aUiLayout, aCtrlId, aEvent, aUnicode,
+ aNormalID, aPressedID, aInactiveID);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlRepeatButton::~CAknFepCtrlRepeatButton()
+ {
+ //PRINTF((_L("CAknFepCtrlRepeatButton::~CAknFepCtrlRepeatButton()\n")));
+ CancelRepeat();
+
+ delete iLongPressTimer;
+ delete iRepeatTimer;
+ }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlRepeatButton::CAknFepCtrlRepeatButton(CFepUiLayout* aUiLayout,
+ TInt aCtrlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ :CAknFepCtrlEventButton(aUiLayout, aCtrlId, aEvent, aUnicode,
+ aNormalID,
+ aPressedID,
+ aInactiveID)
+ {
+ iLongPressInterval = KLongPressInterval;
+ iRepeatInterval = KRepeatInterval;
+ }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlRepeatButton::ConstructL()
+ {
+ //PRINTF((_L("CAknFepCtrlRepeatButton::ConstructL()\n")));
+ BaseConstructL();
+
+ iLongPressTimer = CAknFepTimer::NewL(this);
+ iRepeatTimer = CAknFepTimer::NewL(this);
+ }
+
+// ---------------------------------------------------------
+// Time out event handler of both long press timer & repeat timer
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlRepeatButton::HandleTimerOut(const CAknFepTimer* aTimer)
+ {
+ //PRINTF((_L("CAknFepCtrlRepeatButton::HandleTimerOut()--")));
+ if (aTimer == iLongPressTimer)
+ {
+ //PRINTF((_L("long press timer timeout\n")));
+ iRepeatTimer->SetTimer(iRepeatInterval);
+ }
+ else
+ {
+ if (aTimer == iRepeatTimer)
+ {
+ //PRINTF((_L("repeat timer timeout: EEventButtonUp reported\n")));
+ if ( Unicode() )
+ {
+ TInt unicode = Unicode();
+ TPtrC ptr = (TUint16*)(&unicode ) ;
+ ReportEvent(Event(),ptr);
+#ifdef RD_TACTILE_FEEDBACK
+ if (UiLayout()->SupportTactileFeedback())
+ {
+ UiLayout()->DoTactileFeedback(ETouchFeedbackSensitiveInput);
+ }
+#endif //RD_TACTILE_FEEDBACK
+ }
+ else
+ {
+ ReportEvent(EEventButtonUp);
+ }
+ iRepeatTimer->SetTimer(iRepeatInterval);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// Handle button down start long press timer
+// ---------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlRepeatButton::HandlePointerDownEventL(const TPoint& aPt)
+ {
+ //PRINTF((_L("CAknFepCtrlRepeatButton::HandleButtonDown()\n")));
+
+ //PRINTF((_L("Set long press Timer\n")));
+ if( IsDimmed() )
+ {
+ return NULL;
+ }
+ iLongPressTimer->SetTimer(iLongPressInterval);
+ TInt unicode = Unicode();
+ TPtrC ptr = (TUint16*)(&unicode);
+ ReportEvent(Event(), ptr);
+ return CAknFepCtrlCommonButton::HandlePointerDownEventL(aPt);
+ }
+
+// ---------------------------------------------------------
+// Handle button up cancel timers
+// ---------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlRepeatButton::HandlePointerUpEventL(const TPoint& aPt)
+ {
+ //PRINTF((_L("CAknFepCtrlRepeatButton::HandleButtonUp()\n")));
+
+ CancelRepeat();
+
+ return CAknFepCtrlCommonButton::HandlePointerUpEventL(aPt);
+ }
+
+// ---------------------------------------------------------
+// Handle pointer levae event cancel timers
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlRepeatButton::HandlePointerLeave(const TPoint& aPoint)
+ {
+ CAknFepCtrlCommonButton::HandlePointerLeave(aPoint);
+
+ CancelRepeat();
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlRepeatButton::CancelPointerDownL
+// Cancel pointer down event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlRepeatButton::CancelPointerDownL()
+ {
+ CAknFepCtrlCommonButton::CancelPointerDownL();
+
+ CancelRepeat();
+ }
+
+// ---------------------------------------------------------
+// Set the repeat interval of repeat timer
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlRepeatButton::SetRepeatInterval(const TTimeIntervalMicroSeconds32& aTime)
+ {
+ iRepeatInterval = aTime;
+ }
+
+// ---------------------------------------------------------
+// Cancel timers
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlRepeatButton::CancelRepeat()
+ {
+ //PRINTF((_L("CAknFepCtrlRepeatButton::CancelRepeat()\n")));
+ iLongPressTimer->Cancel();
+ iRepeatTimer->Cancel();
+ }
+
+EXPORT_C CAknFepCtrlRawKeyButton* CAknFepCtrlRawKeyButton::NewL(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID,
+ TInt aDownEvent,
+ TInt aUpEvent,
+ TInt aScanCode)
+ {
+ CAknFepCtrlRawKeyButton* self = NewLC(aUiLayout,
+ aControlId,
+ aNormalID,
+ aPressedID,
+ aInactiveID,
+ aDownEvent,
+ aUpEvent,
+ aScanCode);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+EXPORT_C CAknFepCtrlRawKeyButton* CAknFepCtrlRawKeyButton::NewLC(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID,
+ TInt aDownEvent,
+ TInt aUpEvent,
+ TInt aScanCode)
+ {
+ CAknFepCtrlRawKeyButton* self = new (ELeave) CAknFepCtrlRawKeyButton(aUiLayout,
+ aControlId,
+ aNormalID,
+ aPressedID,
+ aInactiveID,
+ aDownEvent,
+ aUpEvent,
+ aScanCode);
+ CleanupStack::PushL(self);
+ self->BaseConstructL();
+ return self;
+ }
+
+EXPORT_C CAknFepCtrlRawKeyButton::CAknFepCtrlRawKeyButton(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID,
+ TInt aDownEvent,
+ TInt aUpEvent,
+ TInt aScanCode)
+ : CAknFepCtrlCommonButton(aUiLayout, aControlId, aNormalID, aPressedID, aInactiveID),
+ iDownEvent(aDownEvent),
+ iUpEvent(aUpEvent),
+ iScanCode(aScanCode),
+ iLastPntDownEvent(EFalse)
+ {
+ }
+
+EXPORT_C CAknFepCtrlRawKeyButton::~CAknFepCtrlRawKeyButton()
+ {
+ }
+
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlRawKeyButton::HandlePointerDownEventL(const TPoint& aPoint)
+ {
+/* if (iDownEvent == KInvalidEventId)
+ {
+ return CButtonBase::HandlePointerDownEventL(aPoint);
+ }
+
+ if(IsDimmed())
+ {
+ return NULL;
+ }
+
+ CAknFepCtrlButton::HandlePointerDownEventL(aPoint);
+ if(IsActive())
+ {
+ SetBackgroundBmp(iActiveBmpPressed);
+ SetBackgroundMaskBmp(iActiveMaskBmpPressed);
+ }
+ else
+ {
+ SetBackgroundBmp(iNonActiveBkBmpPressed);
+ SetBackgroundMaskBmp(iNonActiveBkMaskBmpPressed);
+ }
+
+ Draw();
+ UpdateArea(Rect(),ETrue);
+*/
+ if(IsDimmed())
+ {
+ return NULL;
+ }
+
+ CAknFepCtrlCommonButton::HandlePointerDownEventL(aPoint);
+ TKeyEvent event= {0,0,0,0};
+ TPtrC eventDataPtr;
+ event.iScanCode = iScanCode;
+ eventDataPtr.Set(reinterpret_cast<TUint16*>(&event),sizeof(event));
+
+ ReportEvent(iDownEvent,eventDataPtr);
+
+ iLastPntDownEvent = ETrue;
+
+ return this;
+ }
+
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlRawKeyButton::HandlePointerUpEventL(const TPoint& aPoint)
+ {
+ if (iUpEvent == KInvalidEventId)
+ {
+ return CButtonBase::HandlePointerUpEventL(aPoint);
+ }
+
+/* if(IsDimmed())
+ {
+ return NULL;
+ }
+
+ if(IsActive())
+ {
+ SetBackgroundBmp(Bitmap(EBtnBmpActive,EFalse));
+ SetBackgroundMaskBmp(Bitmap(EBtnBmpActive,ETrue));
+ }
+ else
+ {
+ SetBackgroundBmp(Bitmap(EBtnBmpNonActive,EFalse));
+ SetBackgroundMaskBmp(Bitmap(EBtnBmpNonActive,ETrue));
+ }
+
+ SetActive(ETrue);
+ Draw();
+ UpdateArea(Rect(),ETrue);
+*/
+ if(IsDimmed())
+ {
+ return NULL;
+ }
+
+ CAknFepCtrlCommonButton::HandlePointerUpEventL(aPoint);
+ if (iLastPntDownEvent)
+ {
+ // only when last event is pointer down event, there is need to simulate
+ // pointer up event
+ TKeyEvent event= {0,0,0,0};
+ TPtrC eventDataPtr;
+ event.iScanCode = iScanCode;
+ eventDataPtr.Set(reinterpret_cast<TUint16*>(&event),sizeof(event));
+
+ ReportEvent(iUpEvent,eventDataPtr);
+
+ iLastPntDownEvent = EFalse;
+ }
+
+ return this;
+ }
+
+EXPORT_C void CAknFepCtrlRawKeyButton::ConstructFromResourceL(TResourceReader& aReader)
+ {
+ TInt scancode = aReader.ReadInt16();
+ SetScanCode(scancode);
+
+ TInt32 btnimgResId = aReader.ReadInt32();
+ TResourceReader imgreader;
+ CCoeEnv::Static()->CreateResourceReaderLC(imgreader, btnimgResId);
+ CAknFepCtrlCommonButton::ConstructFromResourceL(imgreader);
+ CleanupStack::PopAndDestroy(); // imgreader
+
+ //ResizeBitmaps(Rect().Size());
+ iFirstTimeConstruct = EFalse;
+ }
+
+EXPORT_C void CAknFepCtrlRawKeyButton::ConstructFromResourceL()
+ {
+ if (iResourceId == KInvalidResId)
+ {
+ return;
+ }
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+ TInt scancode = reader.ReadInt16();
+ SetScanCode(scancode);
+
+ TInt32 btnimgResId = reader.ReadInt32();
+ TResourceReader imgreader;
+ CCoeEnv::Static()->CreateResourceReaderLC(imgreader, btnimgResId);
+ CAknFepCtrlCommonButton::ConstructFromResourceL(imgreader);
+ CleanupStack::PopAndDestroy(2); // reader, imgreader
+
+ //ResizeBitmaps(Rect().Size());
+ iFirstTimeConstruct = EFalse;
+ }
+
+EXPORT_C void CAknFepCtrlRawKeyButton::HandlePointerLeave(const TPoint& aPoint)
+ {
+ if (!Rect().Contains(aPoint))
+ {
+ TRAP_IGNORE(HandlePointerUpEventL(Rect().Center()));
+ }
+ }
+
+EXPORT_C void CAknFepCtrlRawKeyButton::OnDeActivate()
+ {
+ CButtonBase::OnDeActivate();
+
+ if (iLastPntDownEvent)
+ {
+ TRAP_IGNORE(HandlePointerUpEventL(Rect().Center()));
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::CAknFepCtrlCommonButton
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlCommonButton::CAknFepCtrlCommonButton(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+: CButtonBase(TRect(), aUiLayout, aControlId),
+ iFirstTimeConstruct(ETrue),
+ iHighlight(EFalse),
+ iPressed(EFalse),
+ iTextColorIndex( KInvalidColorGroup )
+ {
+ iNormalImgID = aNormalID;
+ iPressedImgID = aPressedID;
+ iInactiveImgID = aInactiveID;
+ CFepUiBaseCtrl::SetActive( ETrue );
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::NewL
+// Two-phased constructor.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlCommonButton* CAknFepCtrlCommonButton::NewL(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ CAknFepCtrlCommonButton* self = NewLC(aUiLayout,
+ aControlId,
+ aNormalID,
+ aPressedID,
+ aInactiveID);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::NewLC
+// Two-phased constructor.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlCommonButton* CAknFepCtrlCommonButton::NewLC(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ CAknFepCtrlCommonButton* self = new (ELeave) CAknFepCtrlCommonButton(aUiLayout,
+ aControlId,
+ aNormalID,
+ aPressedID,
+ aInactiveID);
+ CleanupStack::PushL(self);
+ self->BaseConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlCommonButton::~CAknFepCtrlCommonButton()
+ {
+ DeleteForgroundRes();
+ delete iColorIcons;
+ delete iText;
+ }
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::ConstructFromResourceL
+// The order of the image ids in the CButtonBase class must not be changed
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::ConstructFromResourceL(TResourceReader& aReader)
+ {
+ if (!iFirstTimeConstruct)
+ {
+ DeleteForgroundRes();
+ if( iColorIcons )
+ iColorIcons->ReConstructL();
+ }
+
+ TPtrC bmpFileName = aReader.ReadTPtrC(); // Read the file name of the bmps
+ TInt32 imgMajorSkinId = aReader.ReadInt32();
+ TInt colorGroup = aReader.ReadInt16();
+ TAknsItemID id;
+
+ // Get the image ids and mask ids from resource
+ TInt bmpId = aReader.ReadInt16();
+ TInt bmpMskId = aReader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitemid = aReader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ if (bmpMskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForgroundBmp,
+ iForgroundBmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ iForgroundBmp,
+ iForgroundBmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId,
+ AKN_LAF_COLOR( 0 ) );
+ }
+
+ AknIconUtils::SetSize(iForgroundBmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iForgroundBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);
+
+ /*CreateDimmedMaskL( iForgroundDimBmpMask, iForgroundBmpMask );
+ AknIconUtils::SetSize(iForgroundDimBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);*/
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForgroundBmp,
+ bmpFileName,
+ bmpId);
+ AknIconUtils::SetSize(iForgroundBmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ }
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ //ResizeBitmaps(iForgroundBmpRect.Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::ConstructFromResourceL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::ConstructFromResourceL()
+ {
+ if (iResourceId == KInvalidResId)
+ {
+ return;
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ // need to remove original bmp and maskbmp
+ DeleteForgroundRes();
+ if( iColorIcons )
+ iColorIcons->ReConstructL();
+ }
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+ TPtrC bmpFileName = reader.ReadTPtrC(); // Read the file name of the bmps
+ TInt32 imgMajorSkinId = reader.ReadInt32();
+ TInt colorGroup = reader.ReadInt16();
+ TAknsItemID id;
+
+ // Get the image ids and mask ids from resource
+ TInt bmpId = reader.ReadInt16();
+ TInt bmpMskId = reader.ReadInt16();
+
+ // Read skin item id
+ const TInt skinitemid = reader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ if (bmpMskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForgroundBmp,
+ iForgroundBmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ iForgroundBmp,
+ iForgroundBmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId,
+ AKN_LAF_COLOR( 0 ) );
+ }
+
+ AknIconUtils::SetSize(iForgroundBmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iForgroundBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);
+
+ /*CreateDimmedMaskL( iForgroundDimBmpMask,
+ iForgroundBmpMask );
+ AknIconUtils::SetSize(iForgroundDimBmpMask, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);*/
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForgroundBmp,
+ bmpFileName,
+ bmpId);
+ AknIconUtils::SetSize(iForgroundBmp, iForgroundBmpRect.Size(), EAspectRatioNotPreserved);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // reader
+
+ if (!iFirstTimeConstruct)
+ {
+ //ResizeBitmaps(iForgroundBmpRect.Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::Draw
+// Draws UI
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::Draw()
+ {
+ if(!AbleToDraw())
+ return;
+
+ CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+
+ //mask bitmaps
+ DrawOpaqueMaskBackground();
+ TRect rect = Rect();
+ TRect innerRect = rect;
+ innerRect.Shrink( 10, 10 );
+
+ // ----- draw bitmaps -----
+ gc->Activate( BitmapDevice() );
+ // gc->SetClippingRegion( &ValidClipRegion() );
+ //gc->Clear(rect);
+
+ CFbsBitmap* bmpMask = NULL;
+
+ // Draw background
+ if( IsDimmed() ) // Dimmed state
+ {
+ AknsDrawUtils::DrawFrame( UiLayout()->SkinInstance(),
+ *gc,
+ rect,
+ innerRect,
+ iInactiveImgID,
+ KAknsIIDDefault );
+ if( iForgroundDimBmpMask )
+ {
+ delete iForgroundDimBmpMask;
+ iForgroundDimBmpMask = NULL;
+ }
+ TRAP_IGNORE(CreateDimmedMaskL( iForgroundDimBmpMask,
+ iForgroundBmpMask ));
+ AknIconUtils::SetSize(iForgroundDimBmpMask, iForgroundBmpRect.Size(),
+ EAspectRatioNotPreserved);
+
+ bmpMask = iForgroundDimBmpMask;
+ }
+ else
+ {
+ // Normal state or pressed state
+ TAknsItemID ImgID;
+ if (iHighlight)
+ {
+ ImgID = iPressedImgID;
+ }
+ else
+ {
+ ImgID = /*iPressed*/PointerDown()? iPressedImgID : iNormalImgID;
+ }
+
+ AknsDrawUtils::DrawFrame( UiLayout()->SkinInstance(),
+ *gc,
+ rect,
+ innerRect,
+ ImgID,
+ KAknsIIDDefault );
+ bmpMask = iForgroundBmpMask;
+ }
+
+ // Draw forground
+ if ( iColorIcons ) // 3-pieces color icon
+ {
+ AknPenInputDrawUtils::Draw3PiecesColorIcon( iColorIcons,
+ *gc,
+ iForgroundBmpRect,
+ iDraw3PiecesInfo.iInnerRect );
+ }
+ else if( iForgroundBmp )
+ {
+ TRect srcRect( TPoint( 0, 0 ), iForgroundBmp->SizeInPixels() );
+ if( bmpMask )
+ {
+ gc->BitBltMasked( iForgroundBmpRect.iTl,
+ iForgroundBmp,
+ srcRect,
+ bmpMask,
+ EFalse);
+ }
+ else
+ {
+ gc->BitBlt( iForgroundBmpRect.iTl,
+ iForgroundBmp,
+ srcRect );
+ }
+ }
+
+ if (iText)
+ {
+ //if( IsDimmed() )
+ // {
+ // gc->SetFadingParameters( KFadingParamBlack, KFadingParamWhite );
+ // gc->SetFaded( ETrue );
+ // }
+
+ TAknLayoutText textLayout;
+ textLayout.LayoutText(Rect(), iTextFormat);
+ if( iTextColorIndex == KInvalidColorGroup )
+ textLayout.DrawText(*gc, *iText);
+ else
+ {
+ TRgb color( KRgbBlack ); // sane default for nonskinned case
+ if ( AknsUtils::AvkonSkinEnabled() )
+ {
+ AknsUtils::GetCachedColor( UiLayout()->SkinInstance(),
+ color, KAknsIIDQsnTextColors, iTextColorIndex );
+ }
+ if( IsDimmed() )
+ {
+ color = KRgbGray;
+ }
+ textLayout.DrawText(*gc, *iText, ETrue, color);
+ }
+ //if( IsDimmed() )
+ // gc->SetFaded( EFalse );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::SetActive
+// Set active for the button
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::SetActive(TBool aActiveFlag)
+ {
+ if( IsDimmed() )
+ {
+ return;
+ }
+
+ if(IsActive() != aActiveFlag)
+ {
+ CFepUiBaseCtrl::SetActive(aActiveFlag);
+/* if(BitGc())
+ {
+ Draw();
+ UpdateArea(Rect(),EFalse);
+ }*/
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::SetHighlight
+// Set highlight for the button
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::SetHighlight(TBool aIsHighlight)
+ {
+ iHighlight = aIsHighlight;
+
+ Draw();
+ UpdateArea(Rect(),EFalse);
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::ResizeBitmaps
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlCommonButton::ResizeBitmaps(TSize aInnerSize)
+ {
+ if( iForgroundBmp && ( iForgroundBmp->SizeInPixels() != aInnerSize ) )
+ {
+ AknIconUtils::SetSize( iForgroundBmp, aInnerSize, EAspectRatioNotPreserved );
+ }
+ if( iForgroundBmpMask && ( iForgroundBmpMask->SizeInPixels() != aInnerSize ) )
+ {
+ AknIconUtils::SetSize( iForgroundBmpMask, aInnerSize, EAspectRatioNotPreserved );
+ }
+
+ /*TRAP_IGNORE(CreateDimmedMaskL(iForgroundDimBmpMask,
+ iForgroundBmpMask));*/
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::SizeChanged
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::SizeChanged(TRect aNewRect,
+ TRect aInnerRect,
+ TBool aIsReloadImages)
+ {
+ if (aNewRect.Size().iWidth == 0 || aNewRect.Size().iHeight == 0)
+ {
+ return;
+ }
+
+ TRect oriRect = Rect();
+
+ if( oriRect == aNewRect && iForgroundBmpRect == aInnerRect )
+ {
+ return;
+ }
+
+ SetRect(aNewRect);
+
+ if (aIsReloadImages)
+ {
+ iForgroundBmpRect = aInnerRect;
+ ResizeBitmaps(aInnerRect.Size() );
+ }
+ RootControl()->ReDrawRect( Rect() );
+ UpdateArea(Rect(), EFalse);
+ Draw();
+ UpdateArea(Rect(), EFalse);
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::SetForgroundBmpRect
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::SetForgroundBmpRect(const TRect& aRect)
+ {
+ iForgroundBmpRect = aRect;
+ }
+
+EXPORT_C void CAknFepCtrlCommonButton::SetDraw3PieceFrameInfo(TDraw3PiecesFrame a3PiecesFrameInfo)
+ {
+ iDraw3PiecesInfo = a3PiecesFrameInfo;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::DeleteForgroundRes
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlCommonButton::DeleteForgroundRes()
+ {
+ if( iForgroundBmp )
+ {
+ delete iForgroundBmp;
+ iForgroundBmp = NULL;
+ }
+ if( iForgroundBmpMask )
+ {
+ delete iForgroundBmpMask;
+ iForgroundBmpMask = NULL;
+ }
+ if( iForgroundDimBmpMask )
+ {
+ delete iForgroundDimBmpMask;
+ iForgroundDimBmpMask = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::CreateDimmedMaskL
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlCommonButton::CreateDimmedMaskL( CFbsBitmap*& aDimmedMask,
+ const CFbsBitmap* aMask
+ /*TScaleMode aScaleMode*/ )
+ {
+ if (aMask && aMask->DisplayMode() == EGray256)
+ {
+ delete aDimmedMask;
+ aDimmedMask = NULL;
+
+ aDimmedMask = new (ELeave) CFbsBitmap;
+
+ User::LeaveIfError(aDimmedMask->Create(aMask->SizeInPixels(), EGray256));
+ CleanupStack::PushL(aDimmedMask);
+
+ CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL(aDimmedMask);
+ CleanupStack::PushL(bitmapDevice);
+
+ CFbsBitGc* bitGc(NULL);
+ User::LeaveIfError(bitmapDevice->CreateContext(bitGc));
+ CleanupStack::PushL(bitGc);
+
+ bitGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ bitGc->BitBlt(TPoint(0, 0), aMask);
+
+ aDimmedMask->LockHeap();
+ TInt w = aMask->SizeInPixels().iWidth;
+ TInt h = aMask->SizeInPixels().iHeight;
+ TInt dataStride = aMask->DataStride() - w;
+ unsigned char* address = (unsigned char *)aDimmedMask->DataAddress();
+
+ for ( TInt i = 0; i < h; ++i )
+ {
+ for ( TInt j = 0; j < w; ++j )
+ {
+ *address = KTransparency[*address];
+ ++address;
+ }
+ address += dataStride;
+ }
+
+ aDimmedMask->UnlockHeap();
+
+ //AknIconUtils::SetSize(aDimmedMask, aMask->SizeInPixels(), aScaleMode);
+
+ CleanupStack::PopAndDestroy(2); // bitmapDevice, bitGc
+ CleanupStack::Pop(1); // aDimmedMask
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::HandlePointerDownEventL
+// Handle button down event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlCommonButton::HandlePointerDownEventL(const TPoint& aPt)
+ {
+ if( IsDimmed() )
+ return NULL;
+
+ CFepUiBaseCtrl::HandlePointerDownEventL(aPt);
+ iPressed = ETrue;
+
+ Draw();
+ UpdateArea(Rect(),EFalse);
+ ReportEvent(EEventButtonDown);
+ return this;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::HandlePointerLeave
+// Handle pointer leave event
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::HandlePointerLeave(const TPoint& aPt)
+ {
+ if( IsDimmed() )
+ return;
+
+ CFepUiBaseCtrl::HandlePointerLeave(aPt);
+ iPressed = EFalse;
+
+ RootControl()->ReDrawRect( Rect() );
+ UpdateArea(Rect(),EFalse);
+
+ return ;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::HandleButtonUpEventL
+// Handle button up event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlCommonButton::HandlePointerUpEventL(const TPoint& aPt)
+ {
+ CFepUiBaseCtrl::HandlePointerUpEventL(aPt);
+ if( IsDimmed() )
+ return NULL;
+
+ iPressed = EFalse;
+ SetActive(ETrue);
+ RootControl()->ReDrawRect( Rect() );
+ //Draw();
+ UpdateArea(Rect(),EFalse);
+
+ ReportEvent(EEventButtonUp);
+
+#ifdef RD_TACTILE_FEEDBACK
+ {
+ UiLayout()->DoTactileFeedback(ETouchFeedbackSensitiveInput, ETrue, EFalse);
+ }
+#endif // RD_TACTILE_FEEDBACK
+
+ return this;
+ }
+
+EXPORT_C void CAknFepCtrlCommonButton::HandlePointerEnter(const TPoint& aPt)
+ {
+ if( IsDimmed() )
+ return;
+
+ CFepUiBaseCtrl::HandlePointerEnter(aPt);
+ iPressed = ETrue;
+ Draw();
+ UpdateArea(Rect(),EFalse);
+
+ return ;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::CancelPointerDownL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::CancelPointerDownL()
+ {
+ CFepUiBaseCtrl::CancelPointerDownL();
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlCommonButton::SetForegroundBmpL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlCommonButton::SetForegroundBmpL(CFbsBitmap* aBmp,
+ CFbsBitmap* aMaskBmp)
+ {
+ DeleteForgroundRes();
+
+ iForgroundBmp = aBmp;
+ iForgroundBmpMask = aMaskBmp;
+
+ ResizeBitmaps(iForgroundBmpRect.Size());
+ }
+
+EXPORT_C void CAknFepCtrlCommonButton::Move(const TPoint& aOffset)
+ {
+ CButtonBase::Move(aOffset);
+ iForgroundBmpRect.Move( aOffset );
+
+ if ( iColorIcons )
+ {
+ iDraw3PiecesInfo.iInnerRect.Move( aOffset );
+ }
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::CAknFepCtrlMultiImageButton
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlMultiImageButton::CAknFepCtrlMultiImageButton(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ : CAknFepCtrlCommonButton(aUiLayout, aControlId, aNormalID, aPressedID, aInactiveID)
+ {
+ iNormalImgID = aNormalID;
+ iPressedImgID = aPressedID;
+ iInactiveImgID = aInactiveID;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::NewL
+// Two-phased constructor.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlMultiImageButton* CAknFepCtrlMultiImageButton::NewL(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ CAknFepCtrlMultiImageButton* self = NewLC(aUiLayout,
+ aControlId,
+ aNormalID,
+ aPressedID,
+ aInactiveID);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::NewLC
+// Two-phased constructor.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlMultiImageButton* CAknFepCtrlMultiImageButton::NewLC(CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ CAknFepCtrlMultiImageButton* self = new (ELeave) CAknFepCtrlMultiImageButton(aUiLayout,
+ aControlId,
+ aNormalID,
+ aPressedID,
+ aInactiveID);
+ CleanupStack::PushL(self);
+ self->BaseConstructL();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlMultiImageButton::~CAknFepCtrlMultiImageButton()
+ {
+ DeleteForgroundRes();
+ delete iText;
+ }
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::ConstructFromResourceL
+// The order of the image ids in the CButtonBase class must not be changed
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiImageButton::ConstructFromResourceL(TResourceReader& aReader)
+ {
+ if (!iFirstTimeConstruct)
+ {
+ DeleteForgroundRes();
+ }
+
+ TPtrC bmpFileName = aReader.ReadTPtrC(); // Read the file name of the bmps
+ TInt32 imgMajorSkinId = aReader.ReadInt32();
+ TInt colorGroup = aReader.ReadInt16();
+ TAknsItemID id;
+
+ // Get the image ids and mask ids from resource
+ TInt bmpId = aReader.ReadInt16();
+ TInt bmpMskId = aReader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitemid = aReader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ if (bmpMskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForground1Bmp,
+ iForground1BmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ iForground1Bmp,
+ iForground1BmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId,
+ AKN_LAF_COLOR( 0 ) );
+ }
+
+ AknIconUtils::SetSize(iForground1Bmp, iForground1BmpRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iForground1BmpMask, iForground1BmpRect.Size(),
+ EAspectRatioNotPreserved);
+
+ /*CreateDimmedMaskL( iForground1DimBmpMask, iForground1BmpMask );
+ AknIconUtils::SetSize(iForground1DimBmpMask, iForground1BmpRect.Size(),
+ EAspectRatioNotPreserved);*/
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForground1Bmp,
+ bmpFileName,
+ bmpId);
+ AknIconUtils::SetSize(iForground1Bmp, iForground1BmpRect.Size(), EAspectRatioNotPreserved);
+ }
+ }
+
+
+
+ TAknsItemID id2;
+
+ // Get the image ids and mask ids from resource
+ TInt bmp2Id = aReader.ReadInt16();
+ TInt bmp2MskId = aReader.ReadInt16();
+
+ // read skin item id
+ const TInt skinitem2id = aReader.ReadInt16();
+ id2.Set(TInt(imgMajorSkinId), skinitem2id);
+
+ if (bmp2Id != KInvalidBmp)
+ {
+ if (bmp2MskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id2,
+ iForground2Bmp,
+ iForground2BmpMask,
+ bmpFileName,
+ bmp2Id,
+ bmp2MskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id2,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ iForground2Bmp,
+ iForground2BmpMask,
+ bmpFileName,
+ bmp2Id,
+ bmp2MskId,
+ AKN_LAF_COLOR( 0 ) );
+ }
+
+ AknIconUtils::SetSize(iForground2Bmp, iForground2BmpRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iForground2BmpMask, iForground2BmpRect.Size(),
+ EAspectRatioNotPreserved);
+
+ /*CreateDimmedMaskL( iForground2DimBmpMask, iForground2BmpMask );
+ AknIconUtils::SetSize(iForground2DimBmpMask, iForground2BmpRect.Size(),
+ EAspectRatioNotPreserved);*/
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id2,
+ iForground2Bmp,
+ bmpFileName,
+ bmp2Id);
+ AknIconUtils::SetSize(iForground2Bmp, iForground2BmpRect.Size(), EAspectRatioNotPreserved);
+ }
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::ConstructFromResourceL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiImageButton::ConstructFromResourceL()
+ {
+ if (iResourceId == KInvalidResId)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ if (!iFirstTimeConstruct)
+ {
+ // need to remove original bmp and maskbmp
+ DeleteForgroundRes();
+ }
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+ TPtrC bmpFileName = reader.ReadTPtrC(); // Read the file name of the bmps
+ TInt32 imgMajorSkinId = reader.ReadInt32();
+ TInt colorGroup = reader.ReadInt16();
+ TAknsItemID id;
+
+ // Get the image ids and mask ids from resource
+ TInt bmpId = reader.ReadInt16();
+ TInt bmpMskId = reader.ReadInt16();
+
+ // Read skin item id
+ const TInt skinitemid = reader.ReadInt16();
+ id.Set(TInt(imgMajorSkinId), skinitemid);
+
+ if (bmpId != KInvalidBmp)
+ {
+ if (bmpMskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForground1Bmp,
+ iForground1BmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ iForground1Bmp,
+ iForground1BmpMask,
+ bmpFileName,
+ bmpId,
+ bmpMskId,
+ AKN_LAF_COLOR( 0 ) );
+ }
+
+ AknIconUtils::SetSize(iForground1Bmp, iForground1BmpRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iForground1BmpMask, iForground1BmpRect.Size(), EAspectRatioNotPreserved);
+
+ /*CreateDimmedMaskL( iForground1DimBmpMask,
+ iForground1BmpMask );
+ AknIconUtils::SetSize(iForground1DimBmpMask, iForground1BmpRect.Size(), EAspectRatioNotPreserved);*/
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForground1Bmp,
+ bmpFileName,
+ bmpId);
+ AknIconUtils::SetSize(iForground1Bmp, iForground1BmpRect.Size(), EAspectRatioNotPreserved);
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ TAknsItemID id2;
+
+ // Get the image ids and mask ids from resource
+ TInt bmp2Id = reader.ReadInt16();
+ TInt bmp2MskId = reader.ReadInt16();
+
+ // Read skin item id
+ const TInt skinitem2id = reader.ReadInt16();
+ id2.Set(TInt(imgMajorSkinId), skinitem2id);
+
+ if (bmp2Id != KInvalidBmp)
+ {
+ if (bmp2MskId != KInvalidBmp)
+ {
+ if( colorGroup == KInvalidColorGroup )
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id2,
+ iForground2Bmp,
+ iForground2BmpMask,
+ bmpFileName,
+ bmp2Id,
+ bmp2MskId);
+ }
+ else
+ {
+ AknsUtils::CreateColorIconL( UiLayout()->SkinInstance(),
+ id,
+ KAknsIIDQsnIconColors,
+ colorGroup,
+ iForground2Bmp,
+ iForground2BmpMask,
+ bmpFileName,
+ bmp2Id,
+ bmp2MskId,
+ AKN_LAF_COLOR( 0 ) );
+ }
+
+ AknIconUtils::SetSize(iForground2Bmp, iForground2BmpRect.Size(), EAspectRatioPreserved);
+ AknIconUtils::SetSize(iForground2BmpMask, iForground2BmpRect.Size(), EAspectRatioPreserved);
+
+ /*CreateDimmedMaskL( iForground2DimBmpMask, iForground2BmpMask );
+ AknIconUtils::SetSize(iForground2DimBmpMask, iForground2BmpRect.Size(),
+ EAspectRatioNotPreserved);*/
+ }
+ else
+ {
+ AknsUtils::CreateIconL(UiLayout()->SkinInstance(),
+ id,
+ iForground2Bmp,
+ bmpFileName,
+ bmp2Id);
+ AknIconUtils::SetSize(iForground2Bmp, iForground2BmpRect.Size(), EAspectRatioPreserved);
+ }
+ }
+
+
+
+
+
+
+ CleanupStack::PopAndDestroy(); // reader
+
+ if (!iFirstTimeConstruct)
+ {
+ //ResizeBitmaps(iForgroundBmpRect.Size());
+ Draw();
+ }
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::Draw
+// Draws UI
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiImageButton::Draw()
+ {
+ if(!AbleToDraw())
+ return;
+
+ CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+
+ //mask bitmaps
+ DrawOpaqueMaskBackground();
+ TRect rect = Rect();
+ TRect innerRect = rect;
+ innerRect.Shrink( 10, 10 );
+
+ // ----- draw bitmaps -----
+ gc->Activate( BitmapDevice() );
+ // gc->SetClippingRegion( &ValidClipRegion() );
+ //gc->Clear(rect);
+
+ CFbsBitmap* bmpMask1 = NULL;
+ CFbsBitmap* bmpMask2 = NULL;
+
+ // Draw background
+ if( IsDimmed() ) // Dimmed state
+ {
+ AknsDrawUtils::DrawFrame( UiLayout()->SkinInstance(),
+ *gc,
+ rect,
+ innerRect,
+ iInactiveImgID,
+ KAknsIIDDefault );
+ if( iForground1DimBmpMask )
+ {
+ delete iForground1DimBmpMask;
+ iForground1DimBmpMask = NULL;
+ }
+ TRAP_IGNORE(CreateDimmedMaskL( iForground1DimBmpMask,
+ iForground1BmpMask ));
+ AknIconUtils::SetSize(iForground1DimBmpMask, iForground1BmpRect.Size(),
+ EAspectRatioNotPreserved);
+ bmpMask1 = iForground1DimBmpMask;
+
+ if( iForground2DimBmpMask )
+ {
+ delete iForground2DimBmpMask;
+ iForground2DimBmpMask = NULL;
+ }
+ TRAP_IGNORE(CreateDimmedMaskL( iForground2DimBmpMask,
+ iForground2BmpMask ));
+ AknIconUtils::SetSize(iForground2DimBmpMask, iForground2BmpRect.Size(),
+ EAspectRatioNotPreserved);
+ bmpMask2 = iForground2DimBmpMask;
+ }
+ else
+ {
+ // Normal state or pressed state
+ TAknsItemID ImgID;
+ if (iHighlight)
+ {
+ ImgID = iPressedImgID;
+ }
+ else
+ {
+ ImgID = /*iPressed*/PointerDown()? iPressedImgID : iNormalImgID;
+ }
+
+ AknsDrawUtils::DrawFrame( UiLayout()->SkinInstance(),
+ *gc,
+ rect,
+ innerRect,
+ ImgID,
+ KAknsIIDDefault );
+ bmpMask1 = iForground1BmpMask;
+ bmpMask2 = iForground2BmpMask;
+ }
+
+ // Draw forground
+ if( iForground1Bmp && iForground2Bmp)
+ {
+ TRect srcRect( TPoint( 0, 0 ), iForground1Bmp->SizeInPixels() );
+ if( bmpMask1 )
+ {
+ gc->BitBltMasked( iForground1BmpRect.iTl,
+ iForground1Bmp,
+ srcRect,
+ bmpMask1,
+ EFalse);
+ }
+ else
+ {
+ gc->BitBlt( iForground1BmpRect.iTl,
+ iForground1Bmp,
+ srcRect );
+ }
+
+ TRect src2Rect( TPoint( 0, 0 ), iForground2Bmp->SizeInPixels() );
+ if( bmpMask2 )
+ {
+ gc->BitBltMasked( rect.iTl, // layout of 2nd foreground is determined by image itself, but not hard code.
+ iForground2Bmp,
+ src2Rect,
+ bmpMask2,
+ EFalse);
+ }
+ else
+ {
+ gc->BitBlt( rect.iTl,
+ iForground2Bmp,
+ src2Rect );
+ }
+ }
+
+ if (iText)
+ {
+ TAknLayoutText textLayout;
+ textLayout.LayoutText(Rect(), iTextFormat);
+ textLayout.DrawText(*gc, *iText);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::ResizeBitmaps
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlMultiImageButton::ResizeBitmaps(TSize aInnerSize)
+ {
+ if( iForground1Bmp && ( iForground1Bmp->SizeInPixels() != aInnerSize ) )
+ {
+ AknIconUtils::SetSize( iForground1Bmp, aInnerSize, EAspectRatioNotPreserved );
+ }
+ if( iForground1BmpMask && ( iForground1BmpMask->SizeInPixels() != aInnerSize ) )
+ {
+ AknIconUtils::SetSize( iForground1BmpMask, aInnerSize, EAspectRatioNotPreserved );
+ }
+
+ //TRAP_IGNORE(CreateDimmedMaskL(iForground1DimBmpMask, iForground1BmpMask));
+
+
+
+
+ if( iForground2Bmp && ( iForground2Bmp->SizeInPixels() != Rect().Size() ) )
+ {
+ AknIconUtils::SetSize( iForground2Bmp, Rect().Size(), EAspectRatioNotPreserved );
+ }
+ if( iForground2BmpMask && ( iForground2BmpMask->SizeInPixels() != Rect().Size() ) )
+ {
+ AknIconUtils::SetSize( iForground2BmpMask, Rect().Size(), EAspectRatioNotPreserved );
+ }
+
+ //TRAP_IGNORE(CreateDimmedMaskL(iForground2DimBmpMask, iForground2BmpMask));
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::SizeChanged
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlMultiImageButton::SizeChanged(TRect aNewRect,
+ TRect aInnerRect,
+ TBool aIsReloadImages)
+ {
+ if (aNewRect.Size().iWidth == 0 || aNewRect.Size().iHeight == 0)
+ {
+ return;
+ }
+
+ TRect oriRect = Rect();
+ SetRect(aNewRect);
+ iForground1BmpRect = aInnerRect;
+ iForground2BmpRect = aInnerRect;
+
+ if (aIsReloadImages)
+ {
+ ResizeBitmaps(aInnerRect.Size() );
+ }
+ RootControl()->ReDrawRect( oriRect );
+ UpdateArea(oriRect, EFalse);
+ Draw();
+ UpdateArea(Rect(), EFalse);
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::DeleteForgroundRes
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlMultiImageButton::DeleteForgroundRes()
+ {
+ if( iForground1Bmp )
+ {
+ delete iForground1Bmp;
+ iForground1Bmp = NULL;
+ }
+ if( iForground1BmpMask )
+ {
+ delete iForground1BmpMask;
+ iForground1BmpMask = NULL;
+ }
+ if( iForground1DimBmpMask )
+ {
+ delete iForground1DimBmpMask;
+ iForground1DimBmpMask = NULL;
+ }
+
+
+ if( iForground2Bmp )
+ {
+ delete iForground2Bmp;
+ iForground2Bmp = NULL;
+ }
+ if( iForground2BmpMask )
+ {
+ delete iForground2BmpMask;
+ iForground2BmpMask = NULL;
+ }
+ if( iForground2DimBmpMask )
+ {
+ delete iForground2DimBmpMask;
+ iForground2DimBmpMask = NULL;
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlMultiImageButton::CreateDimmedMaskL
+// This methods shall be called by the container's SizeChanged handler
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknFepCtrlMultiImageButton::CreateDimmedMaskL( CFbsBitmap*& aDimmedMask,
+ const CFbsBitmap* aMask
+ /*TScaleMode aScaleMode*/ )
+ {
+ if (aMask && aMask->DisplayMode() == EGray256)
+ {
+ delete aDimmedMask;
+ aDimmedMask = NULL;
+
+ aDimmedMask = new (ELeave) CFbsBitmap;
+
+ User::LeaveIfError(aDimmedMask->Create(aMask->SizeInPixels(), EGray256));
+ CleanupStack::PushL(aDimmedMask);
+
+ CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL(aDimmedMask);
+ CleanupStack::PushL(bitmapDevice);
+
+ CFbsBitGc* bitGc(NULL);
+ User::LeaveIfError(bitmapDevice->CreateContext(bitGc));
+ CleanupStack::PushL(bitGc);
+
+ bitGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ bitGc->BitBlt(TPoint(0, 0), aMask);
+
+ aDimmedMask->LockHeap();
+ TInt w = aMask->SizeInPixels().iWidth;
+ TInt h = aMask->SizeInPixels().iHeight;
+ TInt dataStride = aMask->DataStride() - w;
+ unsigned char* address = (unsigned char *)aDimmedMask->DataAddress();
+
+ for ( TInt i = 0; i < h; ++i )
+ {
+ for ( TInt j = 0; j < w; ++j )
+ {
+ *address = KTransparency[*address];
+ ++address;
+ }
+ address += dataStride;
+ }
+
+ aDimmedMask->UnlockHeap();
+
+ //AknIconUtils::SetSize(aDimmedMask, aMask->SizeInPixels(), aScaleMode);
+
+ CleanupStack::PopAndDestroy(2); // bitmapDevice, bitGc
+ CleanupStack::Pop(1); // aDimmedMask
+ }
+
+ }
+
+EXPORT_C void CAknFepCtrlMultiImageButton::Move(const TPoint& aOffset)
+ {
+ CButtonBase::Move(aOffset);
+ iForground1BmpRect.Move( aOffset );
+ iForground2BmpRect.Move( aOffset );
+ }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlLongPressButton* CAknFepCtrlLongPressButton::NewLC(CFepUiLayout* aUiLayout,
+ TInt aCtrlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ //PRINTF((_L("CAknFepCtrlLongPressButton::NewLC(), aCtrlId = %d\n"), aCtrlId));
+ CAknFepCtrlLongPressButton *self = new(ELeave) CAknFepCtrlLongPressButton(aUiLayout,
+ aCtrlId,
+ aEvent,
+ aUnicode,
+ aNormalID,
+ aPressedID,
+ aInactiveID);
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlLongPressButton* CAknFepCtrlLongPressButton::NewL(CFepUiLayout* aUiLayout,
+ TInt aCtrlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ {
+ //PRINTF((_L("CAknFepCtrlLongPressButton::NewL(), aCtrlId = %d\n"), aCtrlId));
+ CAknFepCtrlLongPressButton *self = NewLC(aUiLayout, aCtrlId, aEvent, aUnicode,
+ aNormalID, aPressedID, aInactiveID);
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlLongPressButton::~CAknFepCtrlLongPressButton()
+ {
+ //PRINTF((_L("CAknFepCtrlLongPressButton::~CAknFepCtrlLongPressButton()\n")));
+ CancelTimer();
+
+ delete iLongPressTimer;
+ }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlLongPressButton::CAknFepCtrlLongPressButton(CFepUiLayout* aUiLayout,
+ TInt aCtrlId,
+ TInt aEvent,
+ TInt aUnicode,
+ TAknsItemID aNormalID,
+ TAknsItemID aPressedID,
+ TAknsItemID aInactiveID)
+ :CAknFepCtrlEventButton(aUiLayout, aCtrlId, aEvent, aUnicode,
+ aNormalID,
+ aPressedID,
+ aInactiveID)
+ {
+ iLongPressInterval = KLongPressInterval;
+ }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::ConstructL()
+ {
+ //PRINTF((_L("CAknFepCtrlLongPressButton::ConstructL()\n")));
+ BaseConstructL();
+ iIsLongPress = EFalse;
+ iLongPressTimer = CAknFepTimer::NewL(this);
+ }
+
+// ---------------------------------------------------------
+// Time out event handler of long press timer
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::HandleTimerOut(const CAknFepTimer* aTimer)
+ {
+ //PRINTF((_L("CAknFepCtrlLongPressButton::HandleTimerOut()--")));
+ if (aTimer == iLongPressTimer)
+ {
+ iIsLongPress = ETrue;
+ CancelTimer();
+ TInt unicode = Unicode();
+ TPtrC ptr = (TUint16*)(&unicode);
+ ReportEvent(EPeninputLayoutEventMultiRangeLongPress, ptr);
+ }
+ }
+
+// ---------------------------------------------------------
+// Handle button down start long press timer
+// ---------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlLongPressButton::HandlePointerDownEventL(const TPoint& aPt)
+ {
+ //PRINTF((_L("CAknFepCtrlLongPressButton::HandleButtonDown()\n")));
+ //PRINTF((_L("Set long press Timer\n")));
+ if ( IsDimmed() )
+ {
+ return NULL;
+ }
+
+ iLongPressTimer->SetTimer(iLongPressInterval);
+ iIsLongPress = EFalse;
+
+ return CAknFepCtrlCommonButton::HandlePointerDownEventL(aPt);
+ }
+
+// ---------------------------------------------------------
+// Handle button up cancel timer
+// ---------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlLongPressButton::HandlePointerUpEventL(const TPoint& aPt)
+ {
+ //PRINTF((_L("CAknFepCtrlLongPressButton::HandleButtonUp()\n")));
+
+ if ( IsDimmed() )
+ {
+ return NULL;
+ }
+
+ CancelTimer();
+
+ if (!iIsLongPress)
+ {
+ TInt unicode = Unicode();
+ TPtrC ptr = (TUint16*)(&unicode);
+ ReportEvent(EPeninputLayoutEventMultiRange, ptr);
+ }
+
+ iIsLongPress = EFalse;
+
+
+ return CAknFepCtrlCommonButton::HandlePointerUpEventL(aPt);
+ }
+
+// ---------------------------------------------------------
+// Handle pointer leave event cancel timer
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::HandlePointerLeave(const TPoint& aPoint)
+ {
+ CAknFepCtrlCommonButton::HandlePointerLeave(aPoint);
+
+ CancelTimer();
+ }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlLongPressButton::CancelPointerDownL
+// Cancel pointer down event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::CancelPointerDownL()
+ {
+ // No implementation needed
+ CAknFepCtrlCommonButton::CancelPointerDownL();
+ }
+
+// ---------------------------------------------------------
+// Cancel timer
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::CancelTimer()
+ {
+ //PRINTF((_L("CAknFepCtrlLongPressButton::CancelTimer()\n")));
+ iLongPressTimer->Cancel();
+ }
+// End Of File