diff -r 000000000000 -r d6fe6244b863 perfmon/src/perfmon_datapopupcontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/perfmon/src/perfmon_datapopupcontainer.cpp Tue Feb 02 00:17:27 2010 +0200 @@ -0,0 +1,210 @@ +/* +* Copyright (c) 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: +* +*/ + + +// INCLUDE FILES +#include "perfmon_datapopupcontainer.h" +#include "perfmon.hrh" +#include "perfmon_document.h" +#include "perfmon_appui.h" +#include "perfmon_model.h" + +#include + +_LIT(KPercentageFormat,"%S %d%%"); +_LIT(KFreeFormat,"%S free %S%S"); + +const TInt KLeftMargin = 2; + + +// ===================================== MEMBER FUNCTIONS ===================================== + +void CPerfMonDataPopupContainer::ConstructL(const TRect& /*aRect*/) + { + iModel = static_cast(reinterpret_cast(iEikonEnv->AppUi())->Document())->Model(); + iFont = LatinPlain12(); + iFontSize = iFont->FontMaxHeight(); + + // set windowgroup so that it always on top and does not receive focus + iWindowGroup = RWindowGroup(iCoeEnv->WsSession()); + User::LeaveIfError(iWindowGroup.Construct((TUint32)&iWindowGroup)); + iWindowGroup.SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront); + iWindowGroup.EnableReceiptOfFocus(EFalse); + + CreateWindowL(&iWindowGroup); + //SetRect(aRect); + SetPositionAndSize(); + SetBlank(); + + ActivateL(); + } + +// -------------------------------------------------------------------------------------------- + +CPerfMonDataPopupContainer::~CPerfMonDataPopupContainer() + { + iWindowGroup.Close(); + } + +// -------------------------------------------------------------------------------------------- + +void CPerfMonDataPopupContainer::Draw(const TRect& aRect) const + { + CWindowGc& gc = SystemGc(); + gc.SetBrushColor(KRgbWhite); + gc.Clear(aRect); + + // check if sample array has been constructed + if (iModel->SampleEntryArray()) + { + // init font + gc.SetPenColor(KRgbBlack); + gc.UseFont( iFont ); + + // draw a rect around the popup + gc.DrawRect(aRect); + + TInt posCounter(1); + + for (TInt i=0; iSampleEntryArray()->Count(); i++) + { + // check if this setting has been enabled and it has some data + if (iModel->Settings().iDataPopupSources.iSrcEnabled[i] && iModel->SampleEntryArray()->At(i).iSampleDataArray->Count() > 0) + { + TSampleData& currentSample = iModel->SampleEntryArray()->At(i).iSampleDataArray->At(0); + TBuf<32> buf; + + // for CPU draw %, other amount of free memory + if (i == ESourceCPU) + { + buf.Format(KPercentageFormat, &iModel->SampleEntryArray()->At(i).iDescription, currentSample.iSize > 0 ? TInt( (1 - ((TReal)(currentSample.iFree) / (TReal)currentSample.iSize)) * 100) : 0 ); + gc.DrawText(buf, TPoint(KLeftMargin, iFontSize*posCounter)); + } + else + { + TBuf<32> freeBuf; + freeBuf.AppendNum(currentSample.iFree, TRealFormat(KDefaultRealWidth, 0)); + + TBuf<32> buf; + buf.Format(KFreeFormat, &iModel->SampleEntryArray()->At(i).iDescription, &freeBuf, &iModel->SampleEntryArray()->At(i).iUnitTypeShort); + gc.DrawText(buf, TPoint(KLeftMargin, iFontSize*posCounter)); + } + + posCounter++; + } + } + + gc.DiscardFont(); + } + } + +// -------------------------------------------------------------------------------------------- + +void CPerfMonDataPopupContainer::SizeChanged() + { + DrawNow(); + } + +// -------------------------------------------------------------------------------------------- + +void CPerfMonDataPopupContainer::SetPositionAndSize() + { + CWsScreenDevice* screenDevice = iEikonEnv->ScreenDevice(); + + // top right + if (iModel->Settings().iDataPopupLocation == EDataPopupLocationTopRight) + { + // screen orientation is landscape with softkeys on right + if (AknLayoutUtils::CbaLocation()==AknLayoutUtils::EAknCbaLocationRight) + { + SetRect( + TRect( + screenDevice->SizeInPixels().iWidth-102-15, + 0, + screenDevice->SizeInPixels().iWidth-15, + iModel->Settings().iDataPopupSources.EnabledSourcesCount()*iFontSize + 3 + )); + } + + // any other orientation + else + { + SetRect( + TRect( + screenDevice->SizeInPixels().iWidth-102, + 0, + screenDevice->SizeInPixels().iWidth, + iModel->Settings().iDataPopupSources.EnabledSourcesCount()*iFontSize + 3 + )); + } + } + + // bottom middle + else if (iModel->Settings().iDataPopupLocation == EDataPopupLocationBottomMiddle) + { + SetRect( + TRect( + screenDevice->SizeInPixels().iWidth/2-102/2, + screenDevice->SizeInPixels().iHeight - iModel->Settings().iDataPopupSources.EnabledSourcesCount()*iFontSize - 3, + screenDevice->SizeInPixels().iWidth/2+102/2, + screenDevice->SizeInPixels().iHeight + )); + } + } + +// -------------------------------------------------------------------------------------------- + +void CPerfMonDataPopupContainer::UpdateVisibility(TBool aForeground) + { + // application has been brought to foregound + if (aForeground) + { + if (iModel->Settings().iDataPopupVisibility==EDataPopupVisbilityAlwaysOn) + { + MakeVisible(ETrue); + } + else + { + MakeVisible(EFalse); + } + } + + // application has been sent to background + else + { + if (iModel->Settings().iDataPopupVisibility==EDataPopupVisbilityAlwaysOn + || iModel->Settings().iDataPopupVisibility==EDataPopupVisbilityBackgroundOnly) + { + MakeVisible(ETrue); + } + else + { + MakeVisible(EFalse); + } + } + } + +// -------------------------------------------------------------------------------------------- + +void CPerfMonDataPopupContainer::DrawUpdate() + { + DrawDeferred(); + } + +// -------------------------------------------------------------------------------------------- + +// End of File