forked from qt-creator/qt-creator
Tracing: Add a manual test
A minimal application that displays the tracing view with some dummy data. Change-Id: Ie564a3be017731313659aef7958138613b0bb94d Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
add_subdirectory(crumblepath)
|
||||
add_subdirectory(infolabel)
|
||||
add_subdirectory(manhattanstyle)
|
||||
add_subdirectory(tracing)
|
||||
|
9
tests/manual/widgets/tracing/CMakeLists.txt
Normal file
9
tests/manual/widgets/tracing/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
add_qtc_executable(tst_manual_widgets_tracing
|
||||
CONDITION TARGET Tracing
|
||||
DEPENDS Tracing Utils Core Qt5::Gui Qt5::Quick
|
||||
SOURCES
|
||||
tst_manual_widgets_tracing.cpp
|
||||
../common/themeselector.cpp ../common/themeselector.h
|
||||
../common/themes.qrc
|
||||
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
16
tests/manual/widgets/tracing/tracing.qbs
Normal file
16
tests/manual/widgets/tracing/tracing.qbs
Normal file
@@ -0,0 +1,16 @@
|
||||
import "../common/common.qbs" as Common
|
||||
|
||||
CppApplication {
|
||||
name: "Manual Test Tracing"
|
||||
|
||||
Depends { name: "Qt.quick" }
|
||||
Depends { name: "Tracing" }
|
||||
Depends { name: "Utils" }
|
||||
Depends { name: "Core" }
|
||||
|
||||
files: [
|
||||
"tst_manual_widgets_tracing.cpp",
|
||||
]
|
||||
|
||||
Common {}
|
||||
}
|
175
tests/manual/widgets/tracing/tst_manual_widgets_tracing.cpp
Normal file
175
tests/manual/widgets/tracing/tst_manual_widgets_tracing.cpp
Normal file
@@ -0,0 +1,175 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QApplication>
|
||||
#include <QQuickView>
|
||||
#include <QQmlContext>
|
||||
|
||||
#include <tracing/timelinerenderer.h>
|
||||
#include <tracing/timelineoverviewrenderer.h>
|
||||
#include <tracing/timelinemodelaggregator.h>
|
||||
#include <tracing/timelinetheme.h>
|
||||
#include <tracing/timelineformattime.h>
|
||||
#include <tracing/timelinezoomcontrol.h>
|
||||
|
||||
#include "../common/themeselector.h"
|
||||
|
||||
using namespace Timeline;
|
||||
|
||||
static const qint64 oneMs = 1000 * 1000; // in nanoseconds
|
||||
|
||||
class DummyModel : public Timeline::TimelineModel
|
||||
{
|
||||
public:
|
||||
DummyModel(TimelineModelAggregator *parent)
|
||||
: TimelineModel(parent)
|
||||
{
|
||||
setDisplayName("Dummy Category");
|
||||
setCollapsedRowCount(1);
|
||||
setExpandedRowCount(3);
|
||||
setTooltip("This is a tool tip"); // Tooltip on the title on the left
|
||||
setCategoryColor(Qt::yellow);
|
||||
}
|
||||
|
||||
QRgb color(int index) const override
|
||||
{
|
||||
return QColor::fromHsl(index * 20, 96, 128).rgb(); // Red to green
|
||||
}
|
||||
|
||||
// Called when a range gets selected, requests index of row which a range belongs to
|
||||
int expandedRow(int index) const override
|
||||
{
|
||||
return selectionId(index) % expandedRowCount(); // Distribute selections among rows
|
||||
}
|
||||
|
||||
// Called when the category gets expanded
|
||||
QVariantList labels() const override
|
||||
{
|
||||
QVariantList result;
|
||||
|
||||
QVariantMap element;
|
||||
element.insert(QLatin1String("description"), QVariant("Dummy sub category 1"));
|
||||
element.insert(QLatin1String("id"), 0);
|
||||
result << element;
|
||||
|
||||
element.clear();
|
||||
element.insert(QLatin1String("description"), QVariant("Dummy sub category 2"));
|
||||
element.insert(QLatin1String("id"), 1);
|
||||
result << element;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Called when a range (or track) is selected
|
||||
QVariantMap details(int index) const override
|
||||
{
|
||||
QVariantMap result;
|
||||
result.insert(QLatin1String("displayName"),
|
||||
QString::fromLatin1("Details for range %1").arg(index));
|
||||
result.insert(QLatin1String("Foo A"), QString::fromLatin1("Bar %1a").arg(index));
|
||||
result.insert(QLatin1String("Foo B"), QString::fromLatin1("Bar %1b").arg(index));
|
||||
return result;
|
||||
}
|
||||
|
||||
float relativeHeight(int index) const override
|
||||
{
|
||||
return 1.0 - (index / 10.0); // Shrink over time
|
||||
}
|
||||
|
||||
void populateData()
|
||||
{
|
||||
// One region per selection
|
||||
insert(oneMs * 20, oneMs * 20, 0);
|
||||
insert(oneMs * 100, oneMs * 30, 1);
|
||||
|
||||
// Two regions in the same selection
|
||||
insert(oneMs * 40, oneMs * 20, 2);
|
||||
insert(oneMs * 120, oneMs * 30, 2);
|
||||
|
||||
// Three regions in the same selection
|
||||
insert(oneMs * 60, oneMs * 30, 3);
|
||||
insert(oneMs * 140, oneMs * 20, 3);
|
||||
insert(oneMs * 170, oneMs * 20, 3);
|
||||
|
||||
emit contentChanged();
|
||||
}
|
||||
};
|
||||
|
||||
class TraceView : public QQuickView
|
||||
{
|
||||
public:
|
||||
TraceView(QWindow *parent = 0)
|
||||
: QQuickView(parent)
|
||||
{
|
||||
setResizeMode(QQuickView::SizeRootObjectToView);
|
||||
|
||||
qmlRegisterType<TimelineRenderer>("TimelineRenderer", 1, 0, "TimelineRenderer");
|
||||
qmlRegisterType<TimelineOverviewRenderer>(
|
||||
"TimelineOverviewRenderer", 1, 0, "TimelineOverviewRenderer");
|
||||
qmlRegisterAnonymousType<TimelineZoomControl>("TimelineZoomControl", 1);
|
||||
qmlRegisterAnonymousType<TimelineModel>("TimelineModel", 1);
|
||||
qmlRegisterAnonymousType<TimelineNotesModel>("TimelineNotesModel", 1);
|
||||
|
||||
TimelineTheme::setupTheme(engine());
|
||||
TimeFormatter::setupTimeFormatter();
|
||||
|
||||
m_modelAggregator = new TimelineModelAggregator(this);
|
||||
m_model = new DummyModel(m_modelAggregator);
|
||||
m_model->populateData();
|
||||
m_modelAggregator->setModels({QVariant::fromValue(m_model)});
|
||||
rootContext()->setContextProperty(QLatin1String("timelineModelAggregator"),
|
||||
m_modelAggregator);
|
||||
|
||||
m_zoomControl = new TimelineZoomControl(this);
|
||||
m_zoomControl->setTrace(0, oneMs * 1000); // Total timeline length
|
||||
rootContext()->setContextProperty("zoomControl", m_zoomControl);
|
||||
setSource(QUrl(QLatin1String("qrc:/tracing/MainView.qml")));
|
||||
|
||||
// Zoom onto first timeline third. Needs to be done after loading setSource.
|
||||
m_zoomControl->setRange(0, oneMs * 1000 / 3.0);
|
||||
}
|
||||
|
||||
~TraceView() override = default;
|
||||
|
||||
DummyModel *m_model;
|
||||
TimelineModelAggregator *m_modelAggregator;
|
||||
TimelineZoomControl *m_zoomControl;
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||
|
||||
QApplication app(argc, argv);
|
||||
|
||||
ManualTest::ThemeSelector::setTheme(":/themes/flat.creatortheme");
|
||||
|
||||
auto view = new TraceView;
|
||||
view->resize(700, 300);
|
||||
view->show();
|
||||
|
||||
return app.exec();
|
||||
}
|
@@ -9,5 +9,6 @@ Project {
|
||||
"crumblepath/crumblepath.qbs",
|
||||
"infolabel/infolabel.qbs",
|
||||
"manhattanstyle/manhattanstyle.qbs",
|
||||
"tracing/tracing.qbs",
|
||||
]
|
||||
}
|
||||
|
Reference in New Issue
Block a user