perfapps/perfmon/ui/avkon/src/perfmon_datapopupcontainer.cpp
author hgs
Fri, 03 Sep 2010 17:11:21 +0300
changeset 51 b048e15729d6
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
// INCLUDE FILES
hgs
parents:
diff changeset
    20
#include "perfmon_datapopupcontainer.h"
hgs
parents:
diff changeset
    21
#include "perfmon.hrh"
hgs
parents:
diff changeset
    22
#include "perfmon_document.h"
hgs
parents:
diff changeset
    23
#include "perfmon_appui.h"
hgs
parents:
diff changeset
    24
#include "perfmon_model.h"
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#include <AknUtils.h>
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
_LIT(KFreeFormat,"%S free %S%S");
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
const TInt KLeftMargin = 2;
hgs
parents:
diff changeset
    31
const TInt KPopupWidth = 94;
hgs
parents:
diff changeset
    32
const TInt KCPUExtraLength = 8;
hgs
parents:
diff changeset
    33
const TInt KPopupExtraSpaceBig = 15;
hgs
parents:
diff changeset
    34
const TInt KPopupExtraSpace = 3;
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
// ===================================== MEMBER FUNCTIONS =====================================
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
void CPerfMonDataPopupContainer::ConstructL(const TRect& /*aRect*/)
hgs
parents:
diff changeset
    40
    {
hgs
parents:
diff changeset
    41
    iModel = static_cast<CPerfMonDocument*>(reinterpret_cast<CEikAppUi*>(iEikonEnv->AppUi())->Document())->Model();
hgs
parents:
diff changeset
    42
    iFont = LatinPlain12();
hgs
parents:
diff changeset
    43
    iFontSize = iFont->FontMaxHeight();
hgs
parents:
diff changeset
    44
 
hgs
parents:
diff changeset
    45
    // set windowgroup so that it always on top and does not receive focus
hgs
parents:
diff changeset
    46
    iWindowGroup = RWindowGroup(iCoeEnv->WsSession());
hgs
parents:
diff changeset
    47
    User::LeaveIfError(iWindowGroup.Construct((TUint32)&iWindowGroup));
hgs
parents:
diff changeset
    48
    iWindowGroup.SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront);
hgs
parents:
diff changeset
    49
    iWindowGroup.EnableReceiptOfFocus(EFalse);
hgs
parents:
diff changeset
    50
    
hgs
parents:
diff changeset
    51
    CreateWindowL(&iWindowGroup);
hgs
parents:
diff changeset
    52
    //SetRect(aRect);
hgs
parents:
diff changeset
    53
    SetPositionAndSize();
hgs
parents:
diff changeset
    54
    SetBlank();
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
    ActivateL();
hgs
parents:
diff changeset
    57
    }
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
CPerfMonDataPopupContainer::~CPerfMonDataPopupContainer()
hgs
parents:
diff changeset
    62
    {
hgs
parents:
diff changeset
    63
    iWindowGroup.Close();    
hgs
parents:
diff changeset
    64
    }
hgs
parents:
diff changeset
    65
    
hgs
parents:
diff changeset
    66
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
void CPerfMonDataPopupContainer::Draw(const TRect& aRect) const
hgs
parents:
diff changeset
    69
    {
hgs
parents:
diff changeset
    70
    CWindowGc& gc = SystemGc();
hgs
parents:
diff changeset
    71
    gc.SetBrushColor(KRgbWhite);
hgs
parents:
diff changeset
    72
    gc.Clear(aRect);
hgs
parents:
diff changeset
    73
    
hgs
parents:
diff changeset
    74
    // check if sample array has been constructed
hgs
parents:
diff changeset
    75
    if (iModel->SampleEntryArray())
hgs
parents:
diff changeset
    76
        {
hgs
parents:
diff changeset
    77
        // init font
hgs
parents:
diff changeset
    78
        gc.SetPenColor(KRgbBlack);
hgs
parents:
diff changeset
    79
        gc.UseFont( iFont );
hgs
parents:
diff changeset
    80
        
hgs
parents:
diff changeset
    81
        // draw a rect around the popup
hgs
parents:
diff changeset
    82
        gc.DrawRect(aRect);
hgs
parents:
diff changeset
    83
        
hgs
parents:
diff changeset
    84
        TInt posCounter(1);
hgs
parents:
diff changeset
    85
        
hgs
parents:
diff changeset
    86
        // draw CPU % if enabled
hgs
parents:
diff changeset
    87
        if (iModel->Settings().iDataPopupSources.iSrcEnabled[ESourceCPU])
hgs
parents:
diff changeset
    88
            {
hgs
parents:
diff changeset
    89
            TBuf<64> cpuText;
hgs
parents:
diff changeset
    90
            cpuText.Copy(_L("CPU: "));
hgs
parents:
diff changeset
    91
            
hgs
parents:
diff changeset
    92
            // loop all CPUs
hgs
parents:
diff changeset
    93
            for (TInt i=iModel->CPU0PositionInSamples(); i<iModel->CPU0PositionInSamples()+iModel->AmountOfCPUs(); i++)
hgs
parents:
diff changeset
    94
                {
hgs
parents:
diff changeset
    95
                // check samples available
hgs
parents:
diff changeset
    96
                if (iModel->SampleEntryArray()->At(i).iSampleDataArray->Count() > 0)
hgs
parents:
diff changeset
    97
                    {
hgs
parents:
diff changeset
    98
                    TSampleData& currentSample = iModel->SampleEntryArray()->At(i).iSampleDataArray->At(0);
hgs
parents:
diff changeset
    99
                    
hgs
parents:
diff changeset
   100
                    // append % value
hgs
parents:
diff changeset
   101
                    cpuText.AppendNum( currentSample.iSize > 0 ? TInt( (1 - ((TReal)(currentSample.iFree) / (TReal)currentSample.iSize)) * 100) : 0 );
hgs
parents:
diff changeset
   102
                    cpuText.Append(_L("% "));
hgs
parents:
diff changeset
   103
                    }
hgs
parents:
diff changeset
   104
                }
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
            gc.DrawText(cpuText, TPoint(KLeftMargin, iFontSize*posCounter));
hgs
parents:
diff changeset
   107
            posCounter++;
hgs
parents:
diff changeset
   108
            }
hgs
parents:
diff changeset
   109
        
hgs
parents:
diff changeset
   110
        // draw RAM and Drive values
hgs
parents:
diff changeset
   111
        for (TInt i=iModel->RAMPositionInSamples(); i<iModel->PowerPositionInSamples(); i++)
hgs
parents:
diff changeset
   112
            {
hgs
parents:
diff changeset
   113
            // check if this setting has been enabled and it has some data
hgs
parents:
diff changeset
   114
            if (iModel->Settings().iDataPopupSources.iSrcEnabled[ESourceRAM + i - iModel->RAMPositionInSamples()] && iModel->SampleEntryArray()->At(i).iSampleDataArray->Count() > 0)
hgs
parents:
diff changeset
   115
                {
hgs
parents:
diff changeset
   116
                TSampleData& currentSample = iModel->SampleEntryArray()->At(i).iSampleDataArray->At(0);    
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
                TBuf<32> freeBuf;
hgs
parents:
diff changeset
   119
                freeBuf.AppendNum(currentSample.iFree, TRealFormat(KDefaultRealWidth, 0));
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
                TBuf<32> buf;
hgs
parents:
diff changeset
   122
                buf.Format(KFreeFormat, &iModel->SampleEntryArray()->At(i).iDescription, &freeBuf, &iModel->SampleEntryArray()->At(i).iUnitTypeShort);
hgs
parents:
diff changeset
   123
                gc.DrawText(buf, TPoint(KLeftMargin, iFontSize*posCounter));
hgs
parents:
diff changeset
   124
                
hgs
parents:
diff changeset
   125
                posCounter++;
hgs
parents:
diff changeset
   126
                }
hgs
parents:
diff changeset
   127
            }
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
        // draw power value
hgs
parents:
diff changeset
   130
        // check if this setting has been enabled and it has some data
hgs
parents:
diff changeset
   131
        if (iModel->Settings().iDataPopupSources.iSrcEnabled[ESourcePwr] && iModel->SampleEntryArray()->At(iModel->PowerPositionInSamples()).iSampleDataArray->Count() > 0)
hgs
parents:
diff changeset
   132
            {
hgs
parents:
diff changeset
   133
            TSampleData& currentSample = iModel->SampleEntryArray()->At(iModel->PowerPositionInSamples()).iSampleDataArray->At(0);    
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
            TBuf<32> powerText;
hgs
parents:
diff changeset
   136
            powerText.Copy(_L("Power "));
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
            powerText.AppendNum(currentSample.iSize - currentSample.iFree, TRealFormat(KDefaultRealWidth, 0));
hgs
parents:
diff changeset
   139
            powerText.AppendFormat(_L("%S"), &iModel->SampleEntryArray()->At(iModel->PowerPositionInSamples()).iUnitTypeShort);
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
            gc.DrawText(powerText, TPoint(KLeftMargin,iFontSize*posCounter));
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
            posCounter++;
hgs
parents:
diff changeset
   144
            }
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
        gc.DiscardFont();        
hgs
parents:
diff changeset
   147
        }
hgs
parents:
diff changeset
   148
    }
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
void CPerfMonDataPopupContainer::SizeChanged()
hgs
parents:
diff changeset
   153
    {
hgs
parents:
diff changeset
   154
    DrawNow();
hgs
parents:
diff changeset
   155
    }   
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
void CPerfMonDataPopupContainer::SetPositionAndSize()
hgs
parents:
diff changeset
   160
    {
hgs
parents:
diff changeset
   161
    CWsScreenDevice* screenDevice = iEikonEnv->ScreenDevice();
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
    const TInt popupWidth = iModel->AmountOfCPUs() * KCPUExtraLength + KPopupWidth;
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    // top right
hgs
parents:
diff changeset
   166
    if (iModel->Settings().iDataPopupLocation == EDataPopupLocationTopRight)
hgs
parents:
diff changeset
   167
        {
hgs
parents:
diff changeset
   168
        // screen orientation is landscape with softkeys on right
hgs
parents:
diff changeset
   169
        if (AknLayoutUtils::CbaLocation()==AknLayoutUtils::EAknCbaLocationRight)
hgs
parents:
diff changeset
   170
            {
hgs
parents:
diff changeset
   171
            SetRect(
hgs
parents:
diff changeset
   172
                TRect(
hgs
parents:
diff changeset
   173
                    screenDevice->SizeInPixels().iWidth-popupWidth-KPopupExtraSpaceBig,
hgs
parents:
diff changeset
   174
                    0,
hgs
parents:
diff changeset
   175
                    screenDevice->SizeInPixels().iWidth-KPopupExtraSpaceBig,
hgs
parents:
diff changeset
   176
                    iModel->Settings().iDataPopupSources.EnabledSourcesCount()*iFontSize + KPopupExtraSpace
hgs
parents:
diff changeset
   177
                    ));
hgs
parents:
diff changeset
   178
            }
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
        // any other orientation
hgs
parents:
diff changeset
   181
        else
hgs
parents:
diff changeset
   182
            {
hgs
parents:
diff changeset
   183
            SetRect(
hgs
parents:
diff changeset
   184
                TRect(
hgs
parents:
diff changeset
   185
                    screenDevice->SizeInPixels().iWidth-popupWidth,
hgs
parents:
diff changeset
   186
                    0,
hgs
parents:
diff changeset
   187
                    screenDevice->SizeInPixels().iWidth,
hgs
parents:
diff changeset
   188
                    iModel->Settings().iDataPopupSources.EnabledSourcesCount()*iFontSize + KPopupExtraSpace
hgs
parents:
diff changeset
   189
                    ));
hgs
parents:
diff changeset
   190
            }        
hgs
parents:
diff changeset
   191
        }
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
    // bottom middle
hgs
parents:
diff changeset
   194
    else if (iModel->Settings().iDataPopupLocation == EDataPopupLocationBottomMiddle)
hgs
parents:
diff changeset
   195
        {
hgs
parents:
diff changeset
   196
        SetRect(
hgs
parents:
diff changeset
   197
            TRect(
hgs
parents:
diff changeset
   198
                screenDevice->SizeInPixels().iWidth/2-popupWidth/2,
hgs
parents:
diff changeset
   199
                screenDevice->SizeInPixels().iHeight - iModel->Settings().iDataPopupSources.EnabledSourcesCount()*iFontSize - KPopupExtraSpace,
hgs
parents:
diff changeset
   200
                screenDevice->SizeInPixels().iWidth/2+popupWidth/2,
hgs
parents:
diff changeset
   201
                screenDevice->SizeInPixels().iHeight
hgs
parents:
diff changeset
   202
                ));
hgs
parents:
diff changeset
   203
        }
hgs
parents:
diff changeset
   204
    }
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
void CPerfMonDataPopupContainer::UpdateVisibility(TBool aForeground)
hgs
parents:
diff changeset
   209
    {
hgs
parents:
diff changeset
   210
    // application has been brought to foregound
hgs
parents:
diff changeset
   211
    if (aForeground)
hgs
parents:
diff changeset
   212
        {
hgs
parents:
diff changeset
   213
        if (iModel->Settings().iDataPopupVisibility==EDataPopupVisbilityAlwaysOn)
hgs
parents:
diff changeset
   214
            {
hgs
parents:
diff changeset
   215
            MakeVisible(ETrue);
hgs
parents:
diff changeset
   216
            }
hgs
parents:
diff changeset
   217
        else
hgs
parents:
diff changeset
   218
            {
hgs
parents:
diff changeset
   219
            MakeVisible(EFalse);
hgs
parents:
diff changeset
   220
            }    
hgs
parents:
diff changeset
   221
        }
hgs
parents:
diff changeset
   222
    
hgs
parents:
diff changeset
   223
    // application has been sent to background
hgs
parents:
diff changeset
   224
    else
hgs
parents:
diff changeset
   225
        {
hgs
parents:
diff changeset
   226
        if (iModel->Settings().iDataPopupVisibility==EDataPopupVisbilityAlwaysOn
hgs
parents:
diff changeset
   227
            || iModel->Settings().iDataPopupVisibility==EDataPopupVisbilityBackgroundOnly)
hgs
parents:
diff changeset
   228
            {
hgs
parents:
diff changeset
   229
            MakeVisible(ETrue);
hgs
parents:
diff changeset
   230
            }
hgs
parents:
diff changeset
   231
        else
hgs
parents:
diff changeset
   232
            {
hgs
parents:
diff changeset
   233
            MakeVisible(EFalse);
hgs
parents:
diff changeset
   234
            }              
hgs
parents:
diff changeset
   235
        }    
hgs
parents:
diff changeset
   236
    }
hgs
parents:
diff changeset
   237
            
hgs
parents:
diff changeset
   238
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
void CPerfMonDataPopupContainer::DrawUpdate()
hgs
parents:
diff changeset
   241
    {
hgs
parents:
diff changeset
   242
    DrawDeferred(); 
hgs
parents:
diff changeset
   243
    }
hgs
parents:
diff changeset
   244
    
hgs
parents:
diff changeset
   245
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   246
       
hgs
parents:
diff changeset
   247
// End of File