diff -r edfc90759b9f -r 18b321db4884 imageeditor/plugins/DrawPlugin/src/CImageLabel.cpp --- /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 +#include +#include //For iEikonEnv +#include +// --------------------------------------------------------------------------- +// 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; + }