perfapps/perfmon/ui/hb/datapopup/src/perfmondatapopupdialog.cpp
author hgs
Fri, 03 Sep 2010 17:11:21 +0300
changeset 51 b048e15729d6
child 52 36d60d12b4af
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) 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
hgs
parents:
diff changeset
    18
#include <QtDebug>
hgs
parents:
diff changeset
    19
#include <QIcon>
hgs
parents:
diff changeset
    20
#include <QVariant>
hgs
parents:
diff changeset
    21
#include <QList>
hgs
parents:
diff changeset
    22
#include <HbMainWindow>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include "perfmondatapopupdialog_p.h"
hgs
parents:
diff changeset
    25
#include "perfmondatapopuppluginerrors_p.h"
hgs
parents:
diff changeset
    26
#include "perfmondatapopupwidget_p.h"
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
// Constructor
hgs
parents:
diff changeset
    29
PerfMonDataPopupDialog::PerfMonDataPopupDialog(const QVariantMap &parameters) :
hgs
parents:
diff changeset
    30
        mLastError(NoError),
hgs
parents:
diff changeset
    31
        mShowEventReceived(false),
hgs
parents:
diff changeset
    32
        mLocation(LocationTopRight),
hgs
parents:
diff changeset
    33
        mWidget(new PerfMonDataPopupWidget(this))
hgs
parents:
diff changeset
    34
{
hgs
parents:
diff changeset
    35
    setTimeout(0);
hgs
parents:
diff changeset
    36
    setModal(false);
hgs
parents:
diff changeset
    37
    setDismissPolicy(HbPopup::NoDismiss);
hgs
parents:
diff changeset
    38
    setBackgroundItem(0);
hgs
parents:
diff changeset
    39
    setContentWidget(mWidget);
hgs
parents:
diff changeset
    40
    setBackgroundFaded(false);
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
    setDeviceDialogParameters(parameters);
hgs
parents:
diff changeset
    43
}
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
PerfMonDataPopupDialog::~PerfMonDataPopupDialog()
hgs
parents:
diff changeset
    46
{
hgs
parents:
diff changeset
    47
}
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
// Set parameters
hgs
parents:
diff changeset
    50
bool PerfMonDataPopupDialog::setDeviceDialogParameters(const QVariantMap &parameters)
hgs
parents:
diff changeset
    51
{
hgs
parents:
diff changeset
    52
    if (parameters.contains("lines"))
hgs
parents:
diff changeset
    53
    {
hgs
parents:
diff changeset
    54
        QVariant lines = parameters.value("lines");
hgs
parents:
diff changeset
    55
        if (!lines.canConvert(QVariant::StringList)) {
hgs
parents:
diff changeset
    56
            mLastError = ParameterError;
hgs
parents:
diff changeset
    57
            return false;
hgs
parents:
diff changeset
    58
        }
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
        setLines(lines.toStringList());
hgs
parents:
diff changeset
    61
    }
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    if (parameters.contains("location"))
hgs
parents:
diff changeset
    64
    {
hgs
parents:
diff changeset
    65
        QVariant location = parameters.value("location");
hgs
parents:
diff changeset
    66
        if (!location.canConvert<int>()) {
hgs
parents:
diff changeset
    67
            mLastError = ParameterError;
hgs
parents:
diff changeset
    68
            return false;
hgs
parents:
diff changeset
    69
        }
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
        if (location.toInt() != LocationTopRight &&
hgs
parents:
diff changeset
    72
            location.toInt() != LocationBottomMiddle)
hgs
parents:
diff changeset
    73
        {
hgs
parents:
diff changeset
    74
            mLastError = ParameterError;
hgs
parents:
diff changeset
    75
            return false;
hgs
parents:
diff changeset
    76
        }
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
        setLocation(static_cast<Location>(location.toInt()));
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
    update();
hgs
parents:
diff changeset
    81
    return true;
hgs
parents:
diff changeset
    82
}
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
// Get error
hgs
parents:
diff changeset
    85
int PerfMonDataPopupDialog::deviceDialogError() const
hgs
parents:
diff changeset
    86
{
hgs
parents:
diff changeset
    87
    return mLastError;
hgs
parents:
diff changeset
    88
}
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
// Close device dialog
hgs
parents:
diff changeset
    91
void PerfMonDataPopupDialog::closeDeviceDialog(bool byClient)
hgs
parents:
diff changeset
    92
{
hgs
parents:
diff changeset
    93
    Q_UNUSED(byClient);
hgs
parents:
diff changeset
    94
    close();
hgs
parents:
diff changeset
    95
    // If show event has been received, close is signalled from hide event. If not,
hgs
parents:
diff changeset
    96
    // hide event does not come and close is signalled from here.
hgs
parents:
diff changeset
    97
    if (!mShowEventReceived) {
hgs
parents:
diff changeset
    98
        emit deviceDialogClosed();
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
}
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
// Return display widget
hgs
parents:
diff changeset
   103
HbPopup *PerfMonDataPopupDialog::deviceDialogWidget() const
hgs
parents:
diff changeset
   104
{
hgs
parents:
diff changeset
   105
    return const_cast<PerfMonDataPopupDialog*>(this);
hgs
parents:
diff changeset
   106
}
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
// Widget is about to hide. Closing effect has ended.
hgs
parents:
diff changeset
   109
void PerfMonDataPopupDialog::hideEvent(QHideEvent *event)
hgs
parents:
diff changeset
   110
{
hgs
parents:
diff changeset
   111
    if (mainWindow()) {
hgs
parents:
diff changeset
   112
        disconnect(mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)),
hgs
parents:
diff changeset
   113
                   this, SLOT(reposition()));
hgs
parents:
diff changeset
   114
    }
hgs
parents:
diff changeset
   115
    HbPopup::hideEvent(event);
hgs
parents:
diff changeset
   116
    emit deviceDialogClosed();
hgs
parents:
diff changeset
   117
}
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
// Widget is about to show
hgs
parents:
diff changeset
   120
void PerfMonDataPopupDialog::showEvent(QShowEvent *event)
hgs
parents:
diff changeset
   121
{
hgs
parents:
diff changeset
   122
    if (mainWindow()) {
hgs
parents:
diff changeset
   123
        connect(mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)),
hgs
parents:
diff changeset
   124
                this, SLOT(reposition()));
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
    reposition();
hgs
parents:
diff changeset
   127
    HbPopup::showEvent(event);
hgs
parents:
diff changeset
   128
    mShowEventReceived = true;
hgs
parents:
diff changeset
   129
}
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
void PerfMonDataPopupDialog::mousePressEvent(QGraphicsSceneMouseEvent *event)
hgs
parents:
diff changeset
   133
{
hgs
parents:
diff changeset
   134
    Q_UNUSED(event);
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
    QVariantMap data;
hgs
parents:
diff changeset
   137
    data["mouseEvent"] = "press";
hgs
parents:
diff changeset
   138
    emit deviceDialogData(data);
hgs
parents:
diff changeset
   139
}
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
PerfMonDataPopupDialog::Location PerfMonDataPopupDialog::location() const
hgs
parents:
diff changeset
   143
{
hgs
parents:
diff changeset
   144
    return mLocation;
hgs
parents:
diff changeset
   145
}
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
void PerfMonDataPopupDialog::setLocation(Location location)
hgs
parents:
diff changeset
   148
{
hgs
parents:
diff changeset
   149
    if (location != mLocation) {
hgs
parents:
diff changeset
   150
        mLocation = location;
hgs
parents:
diff changeset
   151
        reposition();
hgs
parents:
diff changeset
   152
    }
hgs
parents:
diff changeset
   153
}
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
QStringList PerfMonDataPopupDialog::lines() const
hgs
parents:
diff changeset
   156
{
hgs
parents:
diff changeset
   157
    return mWidget->lines();
hgs
parents:
diff changeset
   158
}
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
void PerfMonDataPopupDialog::setLines(const QStringList &lines)
hgs
parents:
diff changeset
   161
{
hgs
parents:
diff changeset
   162
    mWidget->setLines(lines);
hgs
parents:
diff changeset
   163
}
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
void PerfMonDataPopupDialog::reposition()
hgs
parents:
diff changeset
   166
{
hgs
parents:
diff changeset
   167
    if (mainWindow()) {
hgs
parents:
diff changeset
   168
        QSize screenSize = HbDeviceProfile::profile(mainWindow()).logicalSize();
hgs
parents:
diff changeset
   169
        switch (mLocation) {
hgs
parents:
diff changeset
   170
            case LocationTopRight:
hgs
parents:
diff changeset
   171
                setPreferredPos(QPointF(screenSize.width(), 0),
hgs
parents:
diff changeset
   172
                                HbPopup::TopRightCorner);
hgs
parents:
diff changeset
   173
                break;
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
            case LocationBottomMiddle:
hgs
parents:
diff changeset
   176
                setPreferredPos(QPointF(screenSize.width() / 2, screenSize.height()),
hgs
parents:
diff changeset
   177
                                HbPopup::BottomEdgeCenter);
hgs
parents:
diff changeset
   178
                break;
hgs
parents:
diff changeset
   179
        }
hgs
parents:
diff changeset
   180
    }
hgs
parents:
diff changeset
   181
}