aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/qmlprofilerextension/inputeventsmodel.cpp
blob: 8ee322c3645921129b7fcf5cc63f4f7662f54bd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com <http://qt.digia.com/>
**
** This file is part of the Qt Enterprise Qt Quick Profiler Add-on.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com <http://qt.digia.com/>
**
****************************************************************************/

#include "inputeventsmodel.h"
#include "qmldebug/qmlprofilereventtypes.h"
#include "qmlprofiler/qmlprofilermodelmanager.h"
#include "qmlprofiler/abstracttimelinemodel_p.h"

namespace QmlProfilerExtension {
namespace Internal {

using namespace QmlProfiler;

class InputEventsModel::InputEventsModelPrivate : public AbstractTimelineModelPrivate
{
    Q_DECLARE_PUBLIC(InputEventsModel)
};

InputEventsModel::InputEventsModel(QObject *parent)
    : AbstractTimelineModel(new InputEventsModelPrivate(),
                            tr(QmlProfilerModelManager::featureName(QmlDebug::ProfileInputEvents)),
                            QmlDebug::Event, QmlDebug::MaximumRangeType, parent)
{
}

quint64 InputEventsModel::features() const
{
    return 1 << QmlDebug::ProfileInputEvents;
}

int InputEventsModel::selectionId(int index) const
{
    Q_D(const InputEventsModel);
    return d->modelManager->qmlModel()->getEventTypes()[range(index).typeId].detailType;
}

QColor InputEventsModel::color(int index) const
{
    return colorBySelectionId(index);
}

QVariantList InputEventsModel::labels() const
{
    Q_D(const InputEventsModel);
    QVariantList result;

    if (d->expanded && !d->hidden && !isEmpty()) {
        {
            QVariantMap element;
            element.insert(QLatin1String("description"), QVariant(tr("Mouse Events")));
            element.insert(QLatin1String("id"), QVariant(QmlDebug::Mouse));
            result << element;
        }

        {
            QVariantMap element;
            element.insert(QLatin1String("description"), QVariant(tr("Keyboard Events")));
            element.insert(QLatin1String("id"), QVariant(QmlDebug::Key));
            result << element;
        }
    }

    return result;
}

QVariantMap InputEventsModel::details(int index) const
{
    QVariantMap result;
    result.insert(QLatin1String("displayName"),
                  selectionId(index) == QmlDebug::Key ? tr("Keyboard Event") : tr("Mouse Event"));
    result.insert(QLatin1String("Timestamp"), QmlProfilerBaseModel::formatTime(startTime(index)));
    return result;
}

int InputEventsModel::row(int index) const
{
    if (!expanded())
        return 1;
    return selectionId(index) == QmlDebug::Mouse ? 1 : 2;
}

void InputEventsModel::loadData()
{
    Q_D(InputEventsModel);
    clear();
    QmlProfilerDataModel *simpleModel = d->modelManager->qmlModel();
    if (simpleModel->isEmpty())
        return;

    const QVector<QmlProfilerDataModel::QmlEventTypeData> &types = simpleModel->getEventTypes();
    foreach (const QmlProfilerDataModel::QmlEventData &event, simpleModel->getEvents()) {
        const QmlProfilerDataModel::QmlEventTypeData &type = types[event.typeIndex];
        if (!accepted(type))
            continue;
        insert(event.startTime, 0, event.typeIndex);
        d->modelManager->modelProxyCountUpdated(d->modelId, count(),
                                                simpleModel->getEvents().count());
    }
    d->collapsedRowCount = 2;
    d->expandedRowCount = 3;
    d->modelManager->modelProxyCountUpdated(d->modelId, 1, 1);
}

bool InputEventsModel::accepted(const QmlProfilerDataModel::QmlEventTypeData &event) const
{
    return AbstractTimelineModel::accepted(event) &&
            (event.detailType == QmlDebug::Mouse || event.detailType == QmlDebug::Key);
}

}
}