diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tlib/TLDIALOG.CPP --- a/windowing/windowserver/tlib/TLDIALOG.CPP Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,463 +0,0 @@ -// Copyright (c) 1994-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: -// Base classes used for building window server test code -// -// - -#include -#include -#include -#include -#include "TLIB.H" - -const TInt ButtonGap=20; -const TInt ButtonBorderGap=10; -const TInt ButtonBorderMargin=3; -const TInt TextMargin=5; -const TInt KAutoDelaySeconds=60; - -NONSHARABLE_CLASS(CTAutoKey): public CActive - { -public: - static CTAutoKey* NewL(RWsSession& aWs); - ~CTAutoKey(); - void Activate(TInt aDelay); - - void RunL(); - void DoCancel(); - -private: - CTAutoKey(RWsSession& aWs); - void ConstructL(); - - RTimer iTimer; - TInt iDelay; - RWsSession& iWs; - }; - -EXPORT_C CTDialog::CTDialog() : CTTitledWindow(), iNumButtons(1) - { - iButton[0].Copy(_L("Continue")); // Default button - } - -EXPORT_C CTDialog::~CTDialog() - { - if (iIsActive) - CActiveScheduler::Stop(); - delete iAutoKey; - } - -EXPORT_C void CTDialog::ConstructLD(CTWinBase &aParent,CWindowGc &aGc) - { - iOldFocus=aParent.Group()->CurWin(); - TRAPD(err,CTTitledWindow::ConstructL(aParent)); - if (err!=KErrNone) - { - delete this; - User::Leave(err); - } - iActivated=ETrue; - iWin.SetBackgroundColor(TRgb::Gray256(238)); // Light gray - AssignGC(aGc); - iWin.SetPointerCapture(ETrue); - Group()->SetCurrentWindow(this, ETrue); - iAutoKey=CTAutoKey::NewL(Client()->iWs); - } - -EXPORT_C void CTDialog::RelinquishFocus() - { - Group()->SetCurrentWindow(iOldFocus); - } - -EXPORT_C TInt CTDialog::Display() - { - TInt result; - - SetWindowSize(); - if (iWinActive) - BaseWin()->SetVisible(ETrue); - else - { - Activate(); - iWinActive=ETrue; - } - if (iTakeFocus) - Group()->SetCurrentWindow(this); - Group()->GroupWin()->SetOrdinalPosition(0); - iResultPtr=&result; - CTClient *client=Client(); - if (client->QueueRead()) - { - client->iWs.Flush(); - client=NULL; - } - iIsActive=ETrue; - iAutoKey->Activate(KAutoDelaySeconds); - CActiveScheduler::Start(); - if (client) - client->CancelRead(); - return(result); - } - -EXPORT_C void CTDialog::SetFlags(TUint aFlags) - { - iFlags=aFlags; - } - -void CTDialog::SetMaxWid(TInt &aMax, TInt aWid) - { - if (aWid>aMax) - aMax=aWid; - } - -EXPORT_C void CTDialog::SetWindowSize() - { - if (iActivated) - { - TInt max=0; - SetMaxWid(max,iFont->TextWidthInPixels(iTitle)); - SetMaxWid(max,iFont->TextWidthInPixels(iLine1)); - SetMaxWid(max,iFont->TextWidthInPixels(iLine2)); - max+=TextMargin*2; - iButWid=0; - if (iNumButtons>0) - { - for(TInt index=0;indexTextWidthInPixels(iButton[index])); - iButWid+=ButtonBorderMargin*2; - SetMaxWid(max,iButWid*iNumButtons+ButtonGap*(iNumButtons-1)+ButtonBorderGap*2); - } - TSize parSize=Parent()->Size(); - TSize size(max,iFont->HeightInPixels()*8); - TPoint pos((parSize.iWidth-size.iWidth)/2,(parSize.iHeight-size.iHeight)/2); - if (iFlags&EDialogDisplayAtBottom) - pos.iY*=2; - if (iFlags&EDialogDisplayAtLeft) - pos.iX=0; - SetExt(pos,size); - Invalidate(); - } - } - -EXPORT_C void CTDialog::SetLine1(const TDesC &aLine1) - { - iLine1.Copy(aLine1); - } - -EXPORT_C void CTDialog::SetLine2(const TDesC &aLine2) - { - iLine2.Copy(aLine2); - } - -EXPORT_C void CTDialog::SetNumButtons(TInt aNum) - { - if ((TUint)aNum>3) - TbPanic(EDialogButtonCount); - iNumButtons=aNum; - } - -EXPORT_C void CTDialog::SetButtonText(TInt aNum,const TDesC &aButton) - { - if ((TUint)aNum>(TUint)iNumButtons) - TbPanic(EDialogButtonIndex); - iButton[aNum].Copy(aButton); - } - -TRect CTDialog::ButtonRect(TInt aIndex) const - { - TInt chunk=(iSize.iWidth-ButtonBorderMargin*2)/iNumButtons; - TInt midPos=ButtonBorderMargin+chunk*aIndex+chunk/2; - return(TRect(midPos-iButWid/2,iFont->HeightInPixels()*6,midPos+iButWid/2,iFont->HeightInPixels()*7+ButtonBorderMargin*2)); - } - -EXPORT_C void CTDialog::Draw() - { - CTTitledWindow::Draw(); - iGc->SetPenColor(TRgb::Gray16(0)); - iGc->DrawText(iLine1, TPoint((iSize.iWidth-iFont->TextWidthInPixels(iLine1))/2,iFont->HeightInPixels()*3)); - iGc->DrawText(iLine2, TPoint((iSize.iWidth-iFont->TextWidthInPixels(iLine2))/2,iFont->HeightInPixels()*4+2)); - if (iNumButtons!=0) - { - for(TInt index=0;indexSetBrushStyle(CGraphicsContext::ESolidBrush); - iGc->SetBrushColor(TRgb::Gray256(255)); - iGc->DrawRect(rect); - iGc->DrawRect(rect); - iGc->SetBrushStyle(CGraphicsContext::ENullBrush); - TInt midPos=(rect.iTl.iX+rect.iBr.iX)/2; - iGc->DrawText(iButton[index], TPoint((midPos-iFont->TextWidthInPixels(iButton[index])/2), - iFont->HeightInPixels()*6+iFont->AscentInPixels()+ButtonBorderMargin)); - } - } - } - -EXPORT_C void CTDialog::WinKeyL(const TKeyEvent &aKey,const TTime&) - { - switch(aKey.iCode) - { - case EKeyEscape: - case '0': - ButtonPressL(0); - break; - case EKeyEnter: - case '1': - ButtonPressL(iNumButtons>1 ? 1 : 0); // Same as ESC on a single button dialog - break; - case ' ': - case '2': - ButtonPressL(2); - break; - } - } - -EXPORT_C void CTDialog::PointerL(const TPointerEvent &aPointer,const TTime &aTime) - { - if (aPointer.iType==TPointerEvent::EButton1Up) - { - if (iButtonClickOn>0) - { - ButtonPressL(iButtonClickOn-1); - return; - } - } - else if (aPointer.iType==TPointerEvent::EButton1Down) - { - for(TInt index=0;indexiGroup, aClient->iGc); - TRAPD(err,dialog->ConstructLD()); - if (err==KErrNone) - { - dialog->SetTitle(aTitle); - dialog->SetLine1(aLine1); - dialog->SetLine2(aLine2); - dialog->SetNumButtons(1); - dialog->SetButtonText(0,_L("Okay")); - if (dialog->Display()!=0) // delete dialog - TbPanic(EDialogDisplay); - } - } - -void doDisplayDialog(TInt aScreenNumber,const TWindowTitle &aTitle, const TDesC &aLine1, const TDesC &aLine2, CTClient *&aClient, const RWindowGroup *aGroup) - { - aClient=new(ELeave) CTClient(); - aClient->SetScreenNumber(aScreenNumber); - aClient->ConstructL(); -// - aClient->iGroup=new(ELeave) CTWindowGroup(aClient); - aClient->iGroup->ConstructL(); - aClient->iGroup->GroupWin()->SetOrdinalPosition(0,10); - if (aGroup) - aClient->iGroup->GroupWin()->SetOwningWindowGroup(aGroup->Identifier()); -// - TRAP_IGNORE(DisplayDialog(aClient, aTitle, aLine1, aLine2)); - } - -void doDisplayDialog(const TWindowTitle &aTitle, const TDesC &aLine1, const TDesC &aLine2, CTClient *&aClient, const RWindowGroup *aGroup) - { - doDisplayDialog(KDefaultScreen,aTitle,aLine1,aLine2,aClient,aGroup); - } - -EXPORT_C void DisplayDialog(TInt aScreenNumber,const TWindowTitle &aTitle, const TDesC &aLine1, const TDesC &aLine2, const RWindowGroup *aGroup) - { - CTClient *client=NULL; - TRAP_IGNORE(doDisplayDialog(aScreenNumber,aTitle,aLine1,aLine2,client,aGroup)); - delete client; - } - -EXPORT_C void DisplayDialog(const TWindowTitle &aTitle, const TDesC &aLine1, const TDesC &aLine2, const RWindowGroup *aGroup) - { - DisplayDialog(KDefaultScreen,aTitle,aLine1,aLine2,aGroup); - } - - - -//CInfoDialog - -EXPORT_C CInfoDialog::CInfoDialog(CTWindowGroup *aGroupWin,CWindowGc *aGc) :CTDialog(), iGroupWin(aGroupWin), iGc(aGc) - {} - -EXPORT_C void CInfoDialog::ButtonPressL(TInt aButton) - { - if (aButton==0) - { - SetResult(0); - BaseWin()->SetVisible(EFalse); - CActiveScheduler::Stop(); - } - } - -EXPORT_C void CInfoDialog::ConstructLD() - { - _LIT(OK,"Okay"); - CTDialog::ConstructLD(*iGroupWin, *iGc); - SetNumButtons(1); - SetButtonText(0,OK); - SetTakeFocus(); - } - -EXPORT_C void CInfoDialog::TimerResults() - { - TProfile profile[eTimes]; - // TProfile only has default constructor - - // constructor of TProfile does not initialize its members - for (TInt jj=0; jj times; - TBuf<32> counts; - TInt ii=1; - FOREVER - { - AppendProfileTime(times,profile[ii].iTime); - AppendProfileCount(counts,profile[ii].iCount); - if (++ii==eTimes) - break; - AddComma(times); - AddComma(counts); - } - SetLine1(times); - SetLine2(counts); - times.Zero(); - AppendProfileTime(times,profile[0].iTime); - SetTitle(times); - } - -void CInfoDialog::AppendProfileTime(TDes &aDes, TInt aNum) - { - _LIT(ThreeDP,"%d.%03d"); - aDes.AppendFormat(ThreeDP,aNum/eSeconds,(aNum%eSeconds)/1000); - } - -void CInfoDialog::AppendProfileCount(TDes &aDes, TInt aNum) - { - _LIT(Int,"%d"); - aDes.AppendFormat(Int,aNum); - } - -void CInfoDialog::AddComma(TDes &aDes) - { - _LIT(Comma,", "); - aDes.Append(Comma); - } - -CTAutoKey::CTAutoKey(RWsSession& aWs): CActive(0), iWs(aWs) - { - CActiveScheduler::Add(this); - } - -CTAutoKey::~CTAutoKey() - { - Cancel(); - iTimer.Close(); - } - -void CTAutoKey::ConstructL() - { - User::LeaveIfError(iTimer.CreateLocal()); - } - -CTAutoKey* CTAutoKey::NewL(RWsSession& aWs) - { - CTAutoKey* self=new(ELeave) CTAutoKey(aWs); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -void CTAutoKey::Activate(TInt aDelay) - { - if (IsActive()) - Cancel(); - - iDelay=aDelay*1000000; - iTimer.After(iStatus,iDelay); - SetActive(); - } -void CTAutoKey::RunL() - { - // simulate key event, only needed to run once - TKeyEvent keyEvent; - keyEvent.iCode=EKeyEnter; - keyEvent.iScanCode=EKeyEnter; - keyEvent.iModifiers=0; - keyEvent.iRepeats=0; - iWs.SimulateKeyEvent(keyEvent); - iWs.Flush(); - } - -void CTAutoKey::DoCancel() - { - iTimer.Cancel(); - }