--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/perfmon/src/perfmon_datapopupcontainer.cpp Wed Sep 01 12:30:35 2010 +0100
@@ -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 <AknUtils.h>
+
+_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<CPerfMonDocument*>(reinterpret_cast<CEikAppUi*>(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; i<iModel->SampleEntryArray()->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