imageeditor/plugins/DrawPlugin/src/CImageLabel.cpp
changeset 8 18b321db4884
child 10 e7871f3699e6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditor/plugins/DrawPlugin/src/CImageLabel.cpp	Thu Jun 03 18:57:10 2010 +0800
@@ -0,0 +1,395 @@
+/*
+ ============================================================================
+ Name		: CImageLabel.cpp
+ Author	  : 
+ Version	 : 1.0
+ Copyright   : Your copyright notice
+ Description : CCImageLabel implementation
+ ============================================================================
+ */
+#include "TimeAO.h"
+#include "CImageLabel.h"
+#include <W32STD.H>
+#include <akniconutils.h> 
+#include <EIKENV.H> //For iEikonEnv
+#include <GDI.H>
+// ---------------------------------------------------------------------------
+// CImageLabel()
+// ---------------------------------------------------------------------------
+//
+CImageLabel::CImageLabel()
+	{
+	// No implementation required
+	}
+// ---------------------------------------------------------------------------
+// ~CImageLabel()
+// ---------------------------------------------------------------------------
+//
+CImageLabel::~CImageLabel()
+	{
+	if (iBitmap != NULL)
+		{
+		delete iBitmap;
+		iBitmap = NULL;
+		}
+	if (iBitmapMask != NULL)
+		{
+		delete iBitmapMask;
+		iBitmap = NULL;
+		}
+	if (iTimeAO != NULL)
+		{
+		delete iTimeAO;
+		iTimeAO = NULL;
+		}
+	}
+// ---------------------------------------------------------------------------
+// NewLC()
+// ---------------------------------------------------------------------------
+//
+CImageLabel* CImageLabel::NewLC(CCoeControl *aParent, const TRect& aRect,
+		TOOLTIP_LAYOUT aLabelLayout)
+	{
+	CImageLabel* self = new (ELeave) CImageLabel();
+	CleanupStack::PushL(self);
+	self->ConstructL(aParent, aRect, aLabelLayout);
+	return self;
+	}
+// ---------------------------------------------------------------------------
+// NewL()
+// ---------------------------------------------------------------------------
+//
+CImageLabel* CImageLabel::NewL(CCoeControl *aParent, const TRect& aRect,
+		TOOLTIP_LAYOUT aLabelLayout)
+	{
+	CImageLabel* self = CImageLabel::NewLC(aParent, aRect, aLabelLayout);
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+// ---------------------------------------------------------------------------
+// ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::ConstructL(CCoeControl *aParent, const TRect& aRect,
+		TOOLTIP_LAYOUT aLabelLayout)
+	{
+	SetContainerWindowL(*aParent);
+	SetRect(aRect);
+
+	iState = ENone;
+	iLabelLayout = aLabelLayout;
+	iBitmap = NULL;
+	iBitmapMask = NULL;
+
+	iTooltipStartPoint = TPoint(0, 0);
+	CalculateImagePoint();
+	CalculateBoundingRectStartPoint();
+	CalculateZones();
+
+	iTimeAO = CTimeAO::NewL();
+	iTimeAO->SetObserver(this);
+	
+	iIsHandlePointerNotifyProcessing = EFalse;
+	}
+// ---------------------------------------------------------------------------
+// HandlePointerEventL()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+	{
+	switch (aPointerEvent.iType)
+		{
+		case TPointerEvent::EButton1Down:
+			{
+			if(iIsHandlePointerNotifyProcessing)
+				{
+				//Ignore button down event when HandlePointerNotify is processing.
+				break;
+				}
+			iState = ESelected;
+			DrawNow();
+			iTimeAO->StartL();
+			
+			break;
+			}
+		case TPointerEvent::EButton1Up:
+			{
+			iTimeAO->Cancel();
+			//If the statte is moveing or selected.change the state to ENone 
+			
+			if (iState == EMoving || iState == ESelectedWithTooltip)
+				{
+				iState = ENone;
+				DrawNow();
+				}
+			else
+				{
+				iState = ENone;
+				DrawNow();
+				//If not on process start it
+				if(!iIsHandlePointerNotifyProcessing)
+					{
+					iIsHandlePointerNotifyProcessing = ETrue;
+					//To avoid pop up dialog two times by quick double chick
+					iHandlePointerObserver->HandlePointerNotify(this);
+					iIsHandlePointerNotifyProcessing = EFalse;
+					}
+				}
+			break;
+			}
+		default:
+			break;
+		}
+	}
+// ---------------------------------------------------------------------------
+// SizeChanged()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::SizeChanged()
+	{
+	DrawNow();
+	}
+// ---------------------------------------------------------------------------
+// Draw()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::Draw(const TRect& aRect) const
+	{
+	// Get the standard graphics context
+	CWindowGc& gc = SystemGc();
+
+	TRgb Rgb(KRgbGray);
+	Rgb.SetAlpha(180);
+	gc.SetBrushColor(Rgb);
+	gc.SetBrushStyle(CWindowGc::ESolidBrush);
+	gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	gc.SetPenColor(KRgbDarkGray);
+	gc.SetPenSize(TSize(2,2));
+
+	switch (iState)
+		{
+		case ENone:
+			{
+		//do nothing	
+			}
+			break;
+		case EMoving:
+			{
+			//Draw the bounding rect
+			TSize cornorSize(8, 8);
+			gc.DrawRoundRect(TRect(iBoundingRectStartPoint, iBoundingSize),
+					cornorSize);
+			break;
+			}
+		case ESelected:
+			{
+			//Draw the bouding rect
+			TSize cornorSize(8, 8);
+			gc.DrawRoundRect(TRect(iBoundingRectStartPoint, iBoundingSize),
+					cornorSize);
+			break;
+			}
+		case ESelectedWithTooltip:
+			{
+			//Draw the bounding rect
+			TSize cornorSize(8, 8);
+			gc.DrawRoundRect(TRect(iBoundingRectStartPoint, iBoundingSize),
+					cornorSize);
+
+			CFont* pFont = NULL;
+			TFontSpec fontSpec = iEikonEnv->TitleFont()->FontSpecInTwips();
+			fontSpec.iHeight *= 0.535;
+			iCoeEnv->ScreenDevice()->GetNearestFontInTwips(pFont, fontSpec);
+
+			//Draw the tooltips
+			gc.UseFont(pFont);
+			gc.SetPenStyle(CGraphicsContext::ESolidPen);
+			gc.SetPenColor(KRgbGreen);
+			gc.DrawText(iTooltip, iTooltipStartPoint);
+			iCoeEnv->ScreenDevice()->ReleaseFont(pFont);
+			gc.DiscardFont();
+			break;
+			}
+		default:
+			break;
+		}
+
+	//Draw svg picture
+	if (iBitmap != NULL)
+		{
+		gc.BitBltMasked(iImageStartPoint, iBitmap, TRect(TPoint(0, 0), TSize(
+				iBoundingSize)), iBitmapMask, ETrue);
+		}
+
+	}
+// ---------------------------------------------------------------------------
+// Notify()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::Notify()
+	{
+	//if the state is not moving set selected with tooltips
+	if (iState != EMoving)
+		iState = ESelectedWithTooltip;
+	DrawNow();
+	}
+// ---------------------------------------------------------------------------
+// SetImage()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::SetImage(const TDesC& aMbmPackage, TInt aIndex)
+	{
+	//Load pictures
+	AknIconUtils::CreateIconL(iBitmap, iBitmapMask, aMbmPackage, aIndex, aIndex
+			+ 1);
+	AknIconUtils::SetSize(iBitmap, iImageSize);
+	AknIconUtils::SetSize(iBitmapMask, iImageSize);
+
+	ActivateL();
+	}
+// ---------------------------------------------------------------------------
+// SetTooltip()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::SetTooltip(const TDesC& aTooltip)
+	{
+	iTooltip.Copy(aTooltip);
+	CalculateTooltipPoint();
+	}
+// ---------------------------------------------------------------------------
+// ResetControl()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::ResetControl()
+	{
+	CalculateImagePoint();
+	CalculateBoundingRectStartPoint();
+	CalculateTooltipPoint();
+	CalculateZones();
+	}
+// ---------------------------------------------------------------------------
+// CalculateImagePoint()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::CalculateImagePoint()
+	{
+	// landscape 
+	if (iLabelLayout == ELabelHorizontal)
+		{
+		iImageStartPoint.iX = Rect().iTl.iX + 2;
+		iImageStartPoint.iY = Rect().iBr.iY - (Rect().iBr.iX - Rect().iTl.iX)
+				+ 2;
+		}
+	//portrait
+	else if (iLabelLayout == ELabelVertical)
+		{
+		iImageStartPoint.iX = Rect().iBr.iX - (Rect().iBr.iY - Rect().iTl.iY)
+				+ 2;
+		iImageStartPoint.iY = Rect().iTl.iY + 2;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CalculateBoundingRectStartPoint()
+// calcuate related start point
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::CalculateBoundingRectStartPoint()
+	{
+	// landscape 
+	if (iLabelLayout == ELabelHorizontal)
+		{
+		iBoundingRectStartPoint.iX = Rect().iTl.iX + 1;
+		iBoundingRectStartPoint.iY = Rect().iBr.iY - (Rect().iBr.iX
+				- Rect().iTl.iX) + 1;
+		}
+	//portrait
+	else if (iLabelLayout == ELabelVertical)
+		{
+		iBoundingRectStartPoint.iX = Rect().iBr.iX - (Rect().iBr.iY
+				- Rect().iTl.iY) + 1;
+		iBoundingRectStartPoint.iY = Rect().iTl.iY + 1;
+		}
+
+	}
+// ---------------------------------------------------------------------------
+// CalculateTooltipPoint()
+// Where show the tooltips.
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::CalculateTooltipPoint()
+	{
+	// landscape 
+	if (iLabelLayout == ELabelHorizontal)
+		{
+		CFont* pFont = NULL;
+		TFontSpec fontSpec = iEikonEnv->TitleFont()->FontSpecInTwips();
+		fontSpec.iHeight *= 0.535;
+		iCoeEnv->ScreenDevice()->GetNearestFontInTwips(pFont, fontSpec);
+		int tooltipLength = pFont->TextWidthInPixels(iTooltip);
+		iCoeEnv->ScreenDevice()->ReleaseFont(pFont);
+
+		iTooltipStartPoint.iX = Rect().iTl.iX
+				+ (Rect().Width() - tooltipLength) / 2;
+		iTooltipStartPoint.iY = Rect().iBr.iY - (Rect().iBr.iX - Rect().iTl.iX);
+		}
+	//portrait
+	else if (iLabelLayout == ELabelVertical)
+		{
+		CFont* pFont = NULL;
+		TFontSpec fontSpec = iEikonEnv->TitleFont()->FontSpecInTwips();
+		fontSpec.iHeight *= 0.535;
+		iCoeEnv->ScreenDevice()->GetNearestFontInTwips(pFont, fontSpec);
+		int tooltipLength = pFont->TextWidthInPixels(iTooltip);
+		int tooltipHeight = pFont->HeightInPixels();
+		iCoeEnv->ScreenDevice()->ReleaseFont(pFont);
+
+		iTooltipStartPoint.iX = Rect().iTl.iX + (iBoundingRectStartPoint.iX
+				- Rect().iTl.iX - tooltipLength) / 2;
+		iTooltipStartPoint.iY = Rect().iBr.iY - (Rect().Height()
+				- tooltipHeight) / 2;
+		}
+	}
+// ---------------------------------------------------------------------------
+// CalculateZones()
+// ---------------------------------------------------------------------------
+//
+
+void CImageLabel::CalculateZones()
+	{
+	// landscape 
+	if (iLabelLayout == ELabelHorizontal)
+		{
+		iBoundingSize.iHeight = Rect().iBr.iX - Rect().iTl.iX - 2;
+		iBoundingSize.iWidth = iBoundingSize.iHeight - 2;
+
+		iImageSize.iHeight = iBoundingSize.iHeight - 4;
+		iImageSize.iWidth = iBoundingSize.iWidth - 4;
+		}
+	//portrait
+	else if (iLabelLayout == ELabelVertical)
+		{
+		iBoundingSize.iHeight = Rect().iBr.iY - Rect().iTl.iY - 2;
+		iBoundingSize.iWidth = iBoundingSize.iHeight - 2;
+
+		iImageSize.iHeight = iBoundingSize.iHeight - 4;
+		iImageSize.iWidth = iBoundingSize.iWidth - 4;
+		}
+	}
+// ---------------------------------------------------------------------------
+// LabelIsMoving()
+// ---------------------------------------------------------------------------
+//
+
+void CImageLabel::LabelIsMoving()
+	{
+	iState = EMoving;
+	}
+// ---------------------------------------------------------------------------
+// SetHandlePointerObserver()
+// ---------------------------------------------------------------------------
+//
+void CImageLabel::SetHandlePointerObserver(
+		MHandlePointerObserver* aHandlePointerObserver)
+	{
+	iHandlePointerObserver = aHandlePointerObserver;
+	}