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(crumblepath)
|
||||||
add_subdirectory(infolabel)
|
add_subdirectory(infolabel)
|
||||||
add_subdirectory(manhattanstyle)
|
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",
|
"crumblepath/crumblepath.qbs",
|
||||||
"infolabel/infolabel.qbs",
|
"infolabel/infolabel.qbs",
|
||||||
"manhattanstyle/manhattanstyle.qbs",
|
"manhattanstyle/manhattanstyle.qbs",
|
||||||
|
"tracing/tracing.qbs",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user