perfapps/perfmon/ui/hb/app/src/datapopup.cpp
author hgs
Mon, 04 Oct 2010 10:09:02 +0300
changeset 53 819e59dfc032
parent 51 b048e15729d6
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 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
53
hgs
parents: 51
diff changeset
    18
#include <HbMainWindow>
51
hgs
parents:
diff changeset
    19
#include <HbView>
hgs
parents:
diff changeset
    20
#include <HbEvent>
hgs
parents:
diff changeset
    21
#include <QFontMetrics>
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include "datapopup.h"
hgs
parents:
diff changeset
    24
#include "enginewrapper.h"
hgs
parents:
diff changeset
    25
#include "popupdatacontainer.h"
hgs
parents:
diff changeset
    26
53
hgs
parents: 51
diff changeset
    27
DataPopup::DataPopup(EngineWrapper &engine, HbMainWindow &mainWindow) :
51
hgs
parents:
diff changeset
    28
        mEngine(engine),
53
hgs
parents: 51
diff changeset
    29
        mMainWindow(mainWindow),
51
hgs
parents:
diff changeset
    30
        mPopupCreated(false),
hgs
parents:
diff changeset
    31
        mPopupVisible(false)
hgs
parents:
diff changeset
    32
{
hgs
parents:
diff changeset
    33
    connect(&mEngine, SIGNAL(samplesUpdated()), this, SLOT(updateSamples()));
hgs
parents:
diff changeset
    34
    connect(&mEngine, SIGNAL(settingsUpdated()), this, SLOT(updateSettings()));
hgs
parents:
diff changeset
    35
    connect(this, SIGNAL(dataReceived(QVariantMap)), this, SLOT(triggerAction(QVariantMap)));
53
hgs
parents: 51
diff changeset
    36
    connect(&mainWindow, SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(orientationChanged(Qt::Orientation)));
hgs
parents: 51
diff changeset
    37
    connect(&mainWindow, SIGNAL(obscured()), this, SLOT(inBackground()));
hgs
parents: 51
diff changeset
    38
    connect(&mainWindow, SIGNAL(revealed()), this, SLOT(inForeground()));
51
hgs
parents:
diff changeset
    39
}
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
void DataPopup::show()
hgs
parents:
diff changeset
    42
{
hgs
parents:
diff changeset
    43
    mPopupVisible = true;
hgs
parents:
diff changeset
    44
    if (!mPopupCreated &&
hgs
parents:
diff changeset
    45
        mEngine.sampleEntries().length() &&
hgs
parents:
diff changeset
    46
        mEngine.settings().dataPopupSources().enabledIndexes().length())
hgs
parents:
diff changeset
    47
    {
hgs
parents:
diff changeset
    48
        bool anyData = false;
hgs
parents:
diff changeset
    49
        foreach (QVariant index, mEngine.settings().dataPopupSources().enabledIndexes())
hgs
parents:
diff changeset
    50
            anyData = anyData || mEngine.sampleEntries().at(index.toInt()).sampleCount();
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
        if (anyData) {
hgs
parents:
diff changeset
    53
            mPopupCreated = HbDeviceDialog::show("com.nokia.rnd.perfmondatapopup/1.0",
hgs
parents:
diff changeset
    54
                                                 collectParams());
hgs
parents:
diff changeset
    55
        }
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
}
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
void DataPopup::hide()
hgs
parents:
diff changeset
    60
{
hgs
parents:
diff changeset
    61
    mPopupVisible = false;
hgs
parents:
diff changeset
    62
    if (mPopupCreated) {
hgs
parents:
diff changeset
    63
        mPopupCreated = !cancel();
hgs
parents:
diff changeset
    64
    }
hgs
parents:
diff changeset
    65
}
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
void DataPopup::updateSamples()
hgs
parents:
diff changeset
    68
{
hgs
parents:
diff changeset
    69
    updateData();
hgs
parents:
diff changeset
    70
}
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
void DataPopup::updateSettings()
hgs
parents:
diff changeset
    73
{
53
hgs
parents: 51
diff changeset
    74
    updateVisibility(!mMainWindow.isObscured());
51
hgs
parents:
diff changeset
    75
    updateData();
hgs
parents:
diff changeset
    76
}
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
void DataPopup::updateVisibility(bool foreground)
hgs
parents:
diff changeset
    79
{
hgs
parents:
diff changeset
    80
    if (mEngine.settings().dataPopupVisibility() == EDataPopupVisbilityAlwaysOn ||
hgs
parents:
diff changeset
    81
        (mEngine.settings().dataPopupVisibility() == EDataPopupVisbilityBackgroundOnly && !foreground)) {
hgs
parents:
diff changeset
    82
        show();
hgs
parents:
diff changeset
    83
    } else {
hgs
parents:
diff changeset
    84
        hide();
hgs
parents:
diff changeset
    85
    }
hgs
parents:
diff changeset
    86
}
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
void DataPopup::triggerAction(QVariantMap data)
hgs
parents:
diff changeset
    89
{
hgs
parents:
diff changeset
    90
    if (data.contains("mouseEvent") && data["mouseEvent"].toString() == "press") {
hgs
parents:
diff changeset
    91
        // data popup was clicked, move it to other position
53
hgs
parents: 51
diff changeset
    92
        hide();
hgs
parents: 51
diff changeset
    93
        
51
hgs
parents:
diff changeset
    94
        mEngine.settings().setDataPopupLocation(
hgs
parents:
diff changeset
    95
                EDataPopupLocationBottomMiddle - mEngine.settings().dataPopupLocation());
hgs
parents:
diff changeset
    96
        mEngine.updateSettings();
53
hgs
parents: 51
diff changeset
    97
        
hgs
parents: 51
diff changeset
    98
        show();
51
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
}
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
QVariantMap DataPopup::collectParams() const
hgs
parents:
diff changeset
   103
{
hgs
parents:
diff changeset
   104
    QVariantMap result;
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
    // add location param
hgs
parents:
diff changeset
   107
    result["location"] = mEngine.settings().dataPopupLocation();
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
    // add lines param
hgs
parents:
diff changeset
   110
    QStringList lines;
hgs
parents:
diff changeset
   111
    QList<SampleEntry> entries = mEngine.sampleEntries();
hgs
parents:
diff changeset
   112
    int posCounter(ESourceCPU);
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
    if (mEngine.settings().dataPopupSources().isEnabled(posCounter))
hgs
parents:
diff changeset
   115
    {
hgs
parents:
diff changeset
   116
        // loop all CPUs
hgs
parents:
diff changeset
   117
        for (TInt i = mEngine.CPU0PositionInSamples(); i < mEngine.CPU0PositionInSamples() + mEngine.AmountOfCPUs(); i++)
hgs
parents:
diff changeset
   118
        {
hgs
parents:
diff changeset
   119
            // check samples available
hgs
parents:
diff changeset
   120
            if (entries.at(i).sampleCount() > 0)
hgs
parents:
diff changeset
   121
            {
hgs
parents:
diff changeset
   122
                const SampleEntry &entry = entries.at(i);
hgs
parents:
diff changeset
   123
                const SampleData &sample = entry.sample(0);
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
                double perc = sample.mSize > 0 ?
hgs
parents:
diff changeset
   126
                              100. - 100. * sample.mFree / sample.mSize : 0;
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
                QString text = tr("%1 %2%").arg(entry.description()).
hgs
parents:
diff changeset
   129
                               arg(perc, 0, 'f', 0);
hgs
parents:
diff changeset
   130
                lines.append(text);
hgs
parents:
diff changeset
   131
            }
hgs
parents:
diff changeset
   132
        }
hgs
parents:
diff changeset
   133
    }
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    posCounter++;
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
    // draw RAM and Drive values
hgs
parents:
diff changeset
   138
    for (TInt i = mEngine.RAMPositionInSamples(); i < mEngine.PowerPositionInSamples(); i++)
hgs
parents:
diff changeset
   139
    {
hgs
parents:
diff changeset
   140
        // check if this setting has been enabled and it has some data
hgs
parents:
diff changeset
   141
        if (mEngine.settings().dataPopupSources().isEnabled(posCounter) && entries.at(i).sampleCount() > 0)
hgs
parents:
diff changeset
   142
        {
hgs
parents:
diff changeset
   143
            const SampleEntry &entry = entries.at(i);
hgs
parents:
diff changeset
   144
            const SampleData &sample = entry.sample(0);
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
            QString text = tr("%1 free %L2%3").arg(entry.description()).
hgs
parents:
diff changeset
   147
                           arg(sample.mFree).arg(entry.unitShort());
hgs
parents:
diff changeset
   148
            lines.append(text);
hgs
parents:
diff changeset
   149
        }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
        posCounter++;
hgs
parents:
diff changeset
   152
    }
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    // draw power value
hgs
parents:
diff changeset
   155
    // check if this setting has been enabled and it has some data
hgs
parents:
diff changeset
   156
    if (mEngine.settings().dataPopupSources().isEnabled(posCounter) && entries.at(mEngine.PowerPositionInSamples()).sampleCount() > 0)
hgs
parents:
diff changeset
   157
    {
hgs
parents:
diff changeset
   158
        const SampleEntry &entry = entries.at(mEngine.PowerPositionInSamples());
hgs
parents:
diff changeset
   159
        const SampleData &sample = entry.sample(0);
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
        QString text = tr("%1 %L2%3").arg(entry.description()).
hgs
parents:
diff changeset
   162
                       arg(sample.mSize - sample.mFree).arg(entry.unitShort());
hgs
parents:
diff changeset
   163
        lines.append(text);
hgs
parents:
diff changeset
   164
    }
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
    result["lines"] = lines;
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
    return result;
hgs
parents:
diff changeset
   169
}
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
void DataPopup::updateData()
hgs
parents:
diff changeset
   172
{
hgs
parents:
diff changeset
   173
    if (!mPopupVisible)
hgs
parents:
diff changeset
   174
        return;
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
    if (!mPopupCreated) {
hgs
parents:
diff changeset
   177
        show();
hgs
parents:
diff changeset
   178
    } else {
hgs
parents:
diff changeset
   179
        HbDeviceDialog::update(collectParams());
hgs
parents:
diff changeset
   180
    }
hgs
parents:
diff changeset
   181
}
53
hgs
parents: 51
diff changeset
   182
hgs
parents: 51
diff changeset
   183
void DataPopup::orientationChanged(Qt::Orientation /*newOrientation*/)
hgs
parents: 51
diff changeset
   184
    {
hgs
parents: 51
diff changeset
   185
    // force the reposition of the window
hgs
parents: 51
diff changeset
   186
    if( mEngine.settings().dataPopupVisibility() == EDataPopupVisbilityAlwaysOn ||
hgs
parents: 51
diff changeset
   187
        (mEngine.settings().dataPopupVisibility() == EDataPopupVisbilityBackgroundOnly && mMainWindow.isObscured()) ) {
hgs
parents: 51
diff changeset
   188
        hide();
hgs
parents: 51
diff changeset
   189
        show();
hgs
parents: 51
diff changeset
   190
        }
hgs
parents: 51
diff changeset
   191
    }
hgs
parents: 51
diff changeset
   192
hgs
parents: 51
diff changeset
   193
void DataPopup::inForeground()
hgs
parents: 51
diff changeset
   194
    {
hgs
parents: 51
diff changeset
   195
    updateVisibility(true);
hgs
parents: 51
diff changeset
   196
    }
hgs
parents: 51
diff changeset
   197
hgs
parents: 51
diff changeset
   198
void DataPopup::inBackground()
hgs
parents: 51
diff changeset
   199
    {
hgs
parents: 51
diff changeset
   200
    updateVisibility(false);
hgs
parents: 51
diff changeset
   201
    }