diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/clockanim/src/MSGWIN.CPP --- /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(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 + } + } +