--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/clockanim/src/MSGWIN.CPP Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,259 @@
+// Copyright (c) 1997-2009 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:
+// source code for the message-window class
+// $Workfile: MSGWIN.CPP $
+// $Revision: 1.7 $
+// $Author: DougF $
+// $Date: 07 Jul 1999 16:16:18 $
+//
+//
+
+#include "CL_STD.H"
+
+// DMessageWindow
+
+DMessageWindow::DMessageWindow()
+ {
+ __DECLARE_NAME(_S("DMessageWindow"));
+ iPlinthTlColor=KRgbWhite;
+ iPlinthBrColor=KRgbGray;
+ }
+
+DMessageWindow::~DMessageWindow()
+ {
+ CancelDisplay(); // copes with NULL pointers
+ iFunctions->CloseFont(iFont);
+ delete iTimer;
+ }
+
+void DMessageWindow::StartDisplay()
+ {
+ __ASSERT_DEBUG(~iFlags&EFlagVisible, Panic(EClockServerPanicAlreadyVisible));
+ __ASSERT_DEBUG(!iTimer->IsActive(), Panic(EClockServerPanicTimerIsActive));
+ if (~iFlags&EFlagFlash)
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ else
+ {
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncFlash);
+ iFlags|=EFlagFlashStateOn;
+ }
+ iWindowFunctions->SetVisible(ETrue);
+ iFlags|=EFlagVisible;
+ if (iDuration.Int()!=SMessageWindowCommandStartDisplayArgs::EIndefiniteDuration)
+ {
+ iTimer->SetAction(DMessageWindowTimer::EActionCancelDisplay);
+ iTimer->After(iDuration);
+ }
+ }
+
+void DMessageWindow::CancelDisplay()
+ {
+ if (iTimer!=NULL)
+ iTimer->Cancel();
+ if (iFunctions!=NULL)
+ {
+ iFunctions->SetSync(MAnimGeneralFunctions::ESyncNone);
+ iWindowFunctions->SetVisible(EFalse);
+ iFlags&=~EFlagVisible;
+ }
+ }
+
+void DMessageWindow::ConstructLP(const TUint8* aBytePtr, TBool)
+ {
+ SMessageWindowConstructorArgs* messageWindowArgs=(SMessageWindowConstructorArgs*)aBytePtr;
+ aBytePtr+=sizeof(SMessageWindowConstructorArgs);
+ iBaselineOffset=messageWindowArgs->iBaselineOffset;
+ iFont=iFunctions->DuplicateFontL(messageWindowArgs->iFontHandle);
+ iBackgroundColor=messageWindowArgs->iBackgroundColor;
+ iTextColor=messageWindowArgs->iTextColor;
+ iBorderColor=messageWindowArgs->iBorderColor;
+ iTimer=DMessageWindowTimer::NewL(*this);
+ CancelDisplay();
+ }
+
+TInt DMessageWindow::CommandReplyLP(TInt aOpcode, TAny* aArgs)
+ {
+ switch (aOpcode)
+ {
+ case EMessageWindowCommandStartDisplay:
+ {
+ SMessageWindowCommandStartDisplayArgs* messageWindowArgs=(SMessageWindowCommandStartDisplayArgs*)aArgs;
+ TInt initialDelay=messageWindowArgs->iInitialDelay.Int();
+ TInt duration=messageWindowArgs->iDuration.Int();
+ __ASSERT_ALWAYS((initialDelay>=0) && ((duration==SMessageWindowCommandStartDisplayArgs::EIndefiniteDuration) || (duration>=0)),PanicClientFromServer());
+ if (messageWindowArgs->iFlash)
+ iFlags|=EFlagFlash;
+ else
+ iFlags&=~EFlagFlash;
+ iDuration=messageWindowArgs->iDuration;
+ iText=messageWindowArgs->iText;
+ if ((iFlags&EFlagVisible) || (initialDelay==0))
+ {
+ CancelDisplay();
+ StartDisplay();
+ }
+ else if (!iTimer->IsActive())
+ {
+ iTimer->SetAction(DMessageWindowTimer::EActionStartDisplay);
+ iTimer->After(messageWindowArgs->iInitialDelay);
+ }
+ }
+ return KErrNone;
+ case EMessageWindowCommandCancelDisplay:
+ CancelDisplay();
+ return KErrNone;
+ case EMessageWindowCommandGetBorders:
+ {
+ TMargins borders;
+ borders.iLeft=EBorderWidthLeft;
+ borders.iRight=EBorderWidthRight;
+ borders.iTop=EBorderWidthTop;
+ borders.iBottom=EBorderWidthBottom;
+ const TInt error=iFunctions->Message()->Write(KIpcSlot, TPckgC<TMargins>(borders));
+ __ASSERT_ALWAYS(error==KErrNone, PanicClientFromServer());
+ }
+ return KErrNone;
+ case EMessageWindowCommandSetBackgroundColor:
+ {
+ SMessageWindowBackgroundColorArgs* messageWindowArgs=(SMessageWindowBackgroundColorArgs*)aArgs;
+ iBackgroundColor = messageWindowArgs->iBackgroundColor;
+ }
+ return KErrNone;
+ case EMessageWindowCommandSetTextColor:
+ {
+ SMessageWindowTextColorArgs* messageWindowArgs=(SMessageWindowTextColorArgs*)aArgs;
+ iTextColor=messageWindowArgs->iTextColor;
+ }
+ return KErrNone;
+ case EMessageWindowCommandSetBorderColor:
+ {
+ SMessageWindowBorderColorArgs* messageWindowArgs=(SMessageWindowBorderColorArgs*)aArgs;
+ iBorderColor=messageWindowArgs->iBorderColor;
+ }
+ return KErrNone;
+ case EMessageWindowCommandSetPlinthColor:
+ {
+ SMessageWindowPlinthColorArgs* messageWindowArgs=(SMessageWindowPlinthColorArgs*)aArgs;
+ iPlinthTlColor=messageWindowArgs->iTlColor;
+ iPlinthBrColor=messageWindowArgs->iBrColor;
+ }
+ return KErrNone;
+ default:
+ return DAnimWithUtils::CommandReplyLP(aOpcode, aArgs);
+ }
+ }
+
+void DMessageWindow::AnimateP(TDateTime*)
+ {
+ __ASSERT_DEBUG(iFlags&EFlagFlash,Panic(EClockServerPanicAnimatingNonFlashingMessageWindow));
+ if (iFunctions->FlashStateOn())
+ iFlags|=EFlagFlashStateOn;
+ else
+ iFlags&=~EFlagFlashStateOn;
+ iWindowFunctions->ActivateGc();
+ TRect rect=Rect();
+ rect.iTl+=TPoint(EBorderWidthLeft, EBorderWidthTop);
+ rect.iBr-=TPoint(EBorderWidthRight, EBorderWidthBottom);
+ DrawTextPortionOfDisplay(rect);
+ }
+
+void DMessageWindow::RedrawP()
+ {
+ TRect rect=Rect();
+ iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
+ iGc->SetPenStyle(CGraphicsContext::ESolidPen);
+// iGc->SetPenColor(KRgbBlack);
+ iGc->SetPenColor(iBorderColor);
+ iGc->SetPenSize(TSize(1, 1));
+ iGc->DrawRect(rect);
+ rect.Shrink(1, 1);
+ iGc->DrawRect(rect);
+ rect.Shrink(1, 1);
+ iGc->SetPenColor(iPlinthTlColor);
+ iGc->DrawLine(rect.iTl, TPoint(rect.iTl.iX, rect.iBr.iY-1));
+ iGc->DrawLine(rect.iTl, TPoint(rect.iBr.iX-1, rect.iTl.iY));
+ iGc->SetPenColor(iPlinthBrColor);
+ iGc->DrawLine(TPoint(rect.iBr.iX-1, rect.iTl.iY), TPoint(rect.iBr.iX-1, rect.iBr.iY));
+ iGc->DrawLine(TPoint(rect.iTl.iX, rect.iBr.iY-1), TPoint(rect.iBr.iX, rect.iBr.iY-1));
+ rect.Shrink(1, 1);
+ iGc->DrawLine(TPoint(rect.iBr.iX-1, rect.iTl.iY), TPoint(rect.iBr.iX-1, rect.iBr.iY));
+ iGc->DrawLine(TPoint(rect.iTl.iX, rect.iBr.iY-1), TPoint(rect.iBr.iX, rect.iBr.iY-1));
+ rect.iBr-=TPoint(1, 1);
+ DrawTextPortionOfDisplay(rect);
+ }
+
+TRect DMessageWindow::Rect() const
+ {
+ return TRect(TPoint(0, 0), iWindowFunctions->WindowSize());
+ }
+
+void DMessageWindow::DrawTextPortionOfDisplay(const TRect& aRect) const
+ {
+ __ASSERT_DEBUG(TRect(aRect.iTl-TPoint(EBorderWidthLeft, EBorderWidthTop),
+ aRect.iBr+TPoint(EBorderWidthRight, EBorderWidthBottom))==Rect(),Panic(EClockServerPanicBadRect));
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ iGc->SetBrushColor(iBackgroundColor);
+ if ((iFlags&EFlagFlash) && (~iFlags&EFlagFlashStateOn))
+ iGc->Clear(aRect);
+ else
+ {
+ iGc->SetPenStyle(CGraphicsContext::ESolidPen);
+ iGc->SetPenColor(iTextColor);
+ iGc->UseFont(iFont);
+ iGc->DrawText(iText, aRect, iBaselineOffset, CGraphicsContext::ECenter);
+ }
+ }
+
+// DMessageWindow::DMessageWindowTimer
+
+DMessageWindow::DMessageWindowTimer::DMessageWindowTimer(DMessageWindow& aOwner)
+ :CTimer(EPriorityStandard),
+ iOwner(aOwner)
+ {
+ __DECLARE_NAME(_S("DMessageWindowTimer"));
+ CActiveScheduler::Add(this);
+ }
+
+DMessageWindow::DMessageWindowTimer* DMessageWindow::DMessageWindowTimer::NewL(DMessageWindow& aOwner)
+ {
+ DMessageWindowTimer* timer=new(ELeave) DMessageWindowTimer(aOwner);
+ CleanupStack::PushL(timer);
+ timer->ConstructL();
+ CleanupStack::Pop();
+ return timer;
+ }
+
+void DMessageWindow::DMessageWindowTimer::SetAction(TAction aAction)
+ {
+ iAction=aAction;
+ }
+
+void DMessageWindow::DMessageWindowTimer::RunL()
+ {
+ switch (iAction)
+ {
+ case EActionStartDisplay:
+ iOwner.StartDisplay();
+ break;
+ case EActionCancelDisplay:
+ iOwner.CancelDisplay();
+ break;
+#if defined(_DEBUG)
+ default:
+ Panic(EClockServerPanicBadMessageWindowTimerAction);
+ break;
+#endif
+ }
+ }
+