diff --git a/tests/manual/CMakeLists.txt b/tests/manual/CMakeLists.txt
index fb0b611f4f7..fde3cb962ea 100644
--- a/tests/manual/CMakeLists.txt
+++ b/tests/manual/CMakeLists.txt
@@ -17,5 +17,5 @@ add_subdirectory(proparser)
# add_subdirectory(search)
add_subdirectory(shootout)
add_subdirectory(subdirfileiterator)
-add_subdirectory(tasktree)
+add_subdirectory(tasking)
add_subdirectory(widgets)
diff --git a/tests/manual/manual.qbs b/tests/manual/manual.qbs
index 8e157a9216b..66c480c7a62 100644
--- a/tests/manual/manual.qbs
+++ b/tests/manual/manual.qbs
@@ -14,7 +14,7 @@ Project {
"proparser/testreader.qbs",
"shootout/shootout.qbs",
"subdirfileiterator/subdirfileiterator.qbs",
- "tasktree/tasktree.qbs",
+ "tasking/demo/demo.qbs",
"widgets/widgets.qbs",
]
}
diff --git a/tests/manual/tasking/CMakeLists.txt b/tests/manual/tasking/CMakeLists.txt
new file mode 100644
index 00000000000..a16f5f12201
--- /dev/null
+++ b/tests/manual/tasking/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(demo)
diff --git a/tests/manual/tasking/demo/CMakeLists.txt b/tests/manual/tasking/demo/CMakeLists.txt
new file mode 100644
index 00000000000..bdd790cd898
--- /dev/null
+++ b/tests/manual/tasking/demo/CMakeLists.txt
@@ -0,0 +1,11 @@
+add_qtc_test(tst_tasking_demo
+ MANUALTEST
+ DEPENDS Tasking Qt::Widgets
+ SOURCES
+ demo.qrc
+ main.cpp
+ progressindicator.h
+ progressindicator.cpp
+ taskwidget.h
+ taskwidget.cpp
+)
diff --git a/tests/manual/tasking/demo/demo.qbs b/tests/manual/tasking/demo/demo.qbs
new file mode 100644
index 00000000000..2a54143c415
--- /dev/null
+++ b/tests/manual/tasking/demo/demo.qbs
@@ -0,0 +1,18 @@
+import qbs.FileInfo
+
+QtcManualtest {
+ name: "Tasking demo"
+ type: ["application"]
+
+ Depends { name: "Qt"; submodules: ["widgets"] }
+ Depends { name: "Tasking" }
+
+ files: [
+ "demo.qrc",
+ "main.cpp",
+ "progressindicator.h",
+ "progressindicator.cpp",
+ "taskwidget.h",
+ "taskwidget.cpp",
+ ]
+}
diff --git a/tests/manual/tasking/demo/demo.qrc b/tests/manual/tasking/demo/demo.qrc
new file mode 100644
index 00000000000..5ea09fe25ec
--- /dev/null
+++ b/tests/manual/tasking/demo/demo.qrc
@@ -0,0 +1,6 @@
+
+
+ icons/progressindicator.png
+ icons/progressindicator@2x.png
+
+
diff --git a/tests/manual/tasking/demo/icons/progressindicator.png b/tests/manual/tasking/demo/icons/progressindicator.png
new file mode 100644
index 00000000000..c968ae8ac9f
Binary files /dev/null and b/tests/manual/tasking/demo/icons/progressindicator.png differ
diff --git a/tests/manual/tasking/demo/icons/progressindicator@2x.png b/tests/manual/tasking/demo/icons/progressindicator@2x.png
new file mode 100644
index 00000000000..36821a92e19
Binary files /dev/null and b/tests/manual/tasking/demo/icons/progressindicator@2x.png differ
diff --git a/tests/manual/tasktree/main.cpp b/tests/manual/tasking/demo/main.cpp
similarity index 55%
rename from tests/manual/tasktree/main.cpp
rename to tests/manual/tasking/demo/main.cpp
index 3976e3308dc..c4b885efe2f 100644
--- a/tests/manual/tasktree/main.cpp
+++ b/tests/manual/tasking/demo/main.cpp
@@ -1,53 +1,66 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "taskwidget.h"
-#include
-#include
-#include
-#include
+#include
#include
-#include
+#include
+#include
#include
#include
#include
#include
-using namespace Utils;
+using namespace Tasking;
-// TODO: make tasks cancellable
-static void sleepInThread(QPromise &promise, int seconds, bool reportSuccess)
+using namespace std::chrono;
+
+static QWidget *hr()
{
- QThread::sleep(seconds);
- if (!reportSuccess)
- promise.future().cancel();
+ auto frame = new QFrame;
+ frame->setFrameShape(QFrame::HLine);
+ frame->setFrameShadow(QFrame::Sunken);
+ return frame;
+}
+
+QWidget *taskGroup(QWidget *groupWidget, const QList &widgets)
+{
+ QWidget *widget = new QWidget;
+ QBoxLayout *layout = new QHBoxLayout(widget);
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->addWidget(groupWidget);
+ QGroupBox *groupBox = new QGroupBox;
+ QBoxLayout *subLayout = new QVBoxLayout(groupBox);
+ for (int i = 0; i < widgets.size(); ++i) {
+ if (i > 0)
+ subLayout->addWidget(hr());
+ subLayout->addWidget(widgets.at(i));
+ }
+ layout->addWidget(groupBox);
+ return widget;
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
- setCreatorTheme(new Theme("default", &app));
-
QWidget mainWidget;
mainWidget.setWindowTitle("Task Tree Demo");
// Non-task GUI
- QToolButton *startButton = new QToolButton();
+ QToolButton *startButton = new QToolButton;
startButton->setText("Start");
- QToolButton *stopButton = new QToolButton();
+ QToolButton *stopButton = new QToolButton;
stopButton->setText("Stop");
- QToolButton *resetButton = new QToolButton();
+ QToolButton *resetButton = new QToolButton;
resetButton->setText("Reset");
- QProgressBar *progressBar = new QProgressBar();
- QCheckBox *synchronizerCheckBox = new QCheckBox("Use Future Synchronizer");
- synchronizerCheckBox->setChecked(true);
- QScrollArea *scrollArea = new QScrollArea();
+ QProgressBar *progressBar = new QProgressBar;
+ QScrollArea *scrollArea = new QScrollArea;
scrollArea->setWidgetResizable(true);
- QWidget *scrollAreaWidget = new QWidget();
+ QWidget *scrollAreaWidget = new QWidget;
// Task GUI
@@ -100,120 +113,124 @@ int main(int argc, char *argv[])
task_4_4->setBusyTime(6);
task_4_4->setBusyTime(3);
- groupTask_1->setWorkflowPolicy(Tasking::WorkflowPolicy::ContinueOnDone);
- groupTask_4->setWorkflowPolicy(Tasking::WorkflowPolicy::FinishAllAndDone);
+ groupTask_1->setWorkflowPolicy(WorkflowPolicy::ContinueOnDone);
+ groupTask_4->setWorkflowPolicy(WorkflowPolicy::FinishAllAndDone);
groupTask_4_3->setExecuteMode(ExecuteMode::Parallel);
- groupTask_4_3->setWorkflowPolicy(Tasking::WorkflowPolicy::StopOnError);
+ groupTask_4_3->setWorkflowPolicy(WorkflowPolicy::StopOnError);
// Task layout
{
- using namespace Layouting;
-
- Column {
- TaskGroup { rootGroup, {
- TaskGroup { groupTask_1, {
- task_1_1, hr,
- task_1_2, hr,
- task_1_3,
- }}, hr,
- task_2, hr,
- task_3, hr,
- TaskGroup { groupTask_4, {
- task_4_1, hr,
- task_4_2, hr,
- TaskGroup { groupTask_4_3, {
- task_4_3_1, hr,
- task_4_3_2, hr,
- task_4_3_3, hr,
- task_4_3_4,
- }}, hr,
- task_4_4, hr,
- task_4_5,
- }}, hr,
- task_5
- }}, st
- }.attachTo(scrollAreaWidget);
-
+ QWidget *taskTree = taskGroup(rootGroup, {
+ taskGroup(groupTask_1, {
+ task_1_1,
+ task_1_2,
+ task_1_3
+ }),
+ task_2,
+ task_3,
+ taskGroup(groupTask_4, {
+ task_4_1,
+ task_4_2,
+ taskGroup(groupTask_4_3, {
+ task_4_3_1,
+ task_4_3_2,
+ task_4_3_3,
+ task_4_3_4,
+ }),
+ task_4_4,
+ task_4_5
+ }),
+ task_5
+ });
+ QBoxLayout *scrollLayout = new QVBoxLayout(scrollAreaWidget);
+ scrollLayout->addWidget(taskTree);
+ scrollLayout->addStretch();
scrollArea->setWidget(scrollAreaWidget);
- Column {
- Row { startButton, stopButton, resetButton, synchronizerCheckBox, progressBar },
- hr,
- scrollArea
- }.attachTo(&mainWidget);
+ QBoxLayout *mainLayout = new QVBoxLayout(&mainWidget);
+ QBoxLayout *subLayout = new QHBoxLayout;
+ subLayout->addWidget(startButton);
+ subLayout->addWidget(stopButton);
+ subLayout->addWidget(resetButton);
+ subLayout->addWidget(progressBar);
+ mainLayout->addLayout(subLayout);
+ mainLayout->addWidget(hr());
+ mainLayout->addWidget(scrollArea);
}
- // Task tree creator (takes configuation from GUI)
-
- using namespace Tasking;
+ // Task tree (takes initial configuation from GUI)
std::unique_ptr taskTree;
- FutureSynchronizer synchronizer;
+
+ const auto createTask = [](TaskWidget *widget) -> TaskItem {
+ const auto setupTask = [](TaskWidget *widget) {
+ return [widget](milliseconds &taskObject) {
+ taskObject = milliseconds{widget->busyTime() * 1000};
+ widget->setState(State::Running);
+ };
+ };
+ if (widget->isSuccess()) {
+ return TimeoutTask(setupTask(widget),
+ [widget](const milliseconds &) { widget->setState(State::Done); },
+ [widget](const milliseconds &) { widget->setState(State::Error); });
+ }
+ const Group root {
+ finishAllAndError,
+ TimeoutTask(setupTask(widget)),
+ onGroupDone([widget] { widget->setState(State::Done); }),
+ onGroupError([widget] { widget->setState(State::Error); })
+ };
+ return root;
+ };
auto treeRoot = [&] {
- auto taskItem = [sync = &synchronizer, synchronizerCheckBox](TaskWidget *widget) {
- const auto setupHandler = [=](Async &task) {
- task.setConcurrentCallData(sleepInThread, widget->busyTime(), widget->isSuccess());
- if (synchronizerCheckBox->isChecked())
- task.setFutureSynchronizer(sync);
- widget->setState(State::Running);
- };
- const auto doneHandler = [widget](const Async &) {
- widget->setState(State::Done);
- };
- const auto errorHandler = [widget](const Async &) {
- widget->setState(State::Error);
- };
- return AsyncTask(setupHandler, doneHandler, errorHandler);
- };
-
const Group root {
rootGroup->executeMode(),
- workflowPolicy(rootGroup->workflowPolicy()),
+ rootGroup->workflowPolicy(),
onGroupSetup([rootGroup] { rootGroup->setState(State::Running); }),
onGroupDone([rootGroup] { rootGroup->setState(State::Done); }),
onGroupError([rootGroup] { rootGroup->setState(State::Error); }),
Group {
groupTask_1->executeMode(),
- workflowPolicy(groupTask_1->workflowPolicy()),
+ groupTask_1->workflowPolicy(),
onGroupSetup([groupTask_1] { groupTask_1->setState(State::Running); }),
onGroupDone([groupTask_1] { groupTask_1->setState(State::Done); }),
onGroupError([groupTask_1] { groupTask_1->setState(State::Error); }),
- taskItem(task_1_1),
- taskItem(task_1_2),
- taskItem(task_1_3)
+ createTask(task_1_1),
+ createTask(task_1_2),
+ createTask(task_1_3)
},
- taskItem(task_2),
- taskItem(task_3),
+ createTask(task_2),
+ createTask(task_3),
Group {
groupTask_4->executeMode(),
- workflowPolicy(groupTask_4->workflowPolicy()),
+ groupTask_4->workflowPolicy(),
onGroupSetup([groupTask_4] { groupTask_4->setState(State::Running); }),
onGroupDone([groupTask_4] { groupTask_4->setState(State::Done); }),
onGroupError([groupTask_4] { groupTask_4->setState(State::Error); }),
- taskItem(task_4_1),
- taskItem(task_4_2),
+ createTask(task_4_1),
+ createTask(task_4_2),
Group {
groupTask_4_3->executeMode(),
- workflowPolicy(groupTask_4_3->workflowPolicy()),
+ groupTask_4_3->workflowPolicy(),
onGroupSetup([groupTask_4_3] { groupTask_4_3->setState(State::Running); }),
onGroupDone([groupTask_4_3] { groupTask_4_3->setState(State::Done); }),
onGroupError([groupTask_4_3] { groupTask_4_3->setState(State::Error); }),
- taskItem(task_4_3_1),
- taskItem(task_4_3_2),
- taskItem(task_4_3_3),
- taskItem(task_4_3_4)
+ createTask(task_4_3_1),
+ createTask(task_4_3_2),
+ createTask(task_4_3_3),
+ createTask(task_4_3_4)
},
- taskItem(task_4_4),
- taskItem(task_4_5)
+ createTask(task_4_4),
+ createTask(task_4_5)
},
- taskItem(task_5)
+ createTask(task_5)
};
return root;
};
@@ -258,7 +275,7 @@ int main(int argc, char *argv[])
// Hack in order to show initial size minimal, but without scrollbars.
// Apparently setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContentsOnFirstShow) doesn't work.
- const int margin = 2;
+ const int margin = 4;
scrollArea->setMinimumSize(scrollAreaWidget->minimumSizeHint().grownBy({0, 0, margin, margin}));
QTimer::singleShot(0, scrollArea, [&] { scrollArea->setMinimumSize({0, 0}); });
diff --git a/tests/manual/tasking/demo/progressindicator.cpp b/tests/manual/tasking/demo/progressindicator.cpp
new file mode 100644
index 00000000000..38f577f4ed7
--- /dev/null
+++ b/tests/manual/tasking/demo/progressindicator.cpp
@@ -0,0 +1,149 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "progressindicator.h"
+
+#include
+#include
+#include
+#include
+
+class OverlayWidget : public QWidget
+{
+public:
+ using PaintFunction = std::function;
+
+ explicit OverlayWidget(QWidget *parent = nullptr)
+ {
+ setAttribute(Qt::WA_TransparentForMouseEvents);
+ if (parent)
+ attachToWidget(parent);
+ }
+
+ void attachToWidget(QWidget *parent)
+ {
+ if (parentWidget())
+ parentWidget()->removeEventFilter(this);
+ setParent(parent);
+ if (parent) {
+ parent->installEventFilter(this);
+ resizeToParent();
+ raise();
+ }
+ }
+ void setPaintFunction(const PaintFunction &paint) { m_paint = paint; }
+
+protected:
+ bool eventFilter(QObject *obj, QEvent *ev) override
+ {
+ if (obj == parent() && ev->type() == QEvent::Resize)
+ resizeToParent();
+ return QWidget::eventFilter(obj, ev);
+ }
+ void paintEvent(QPaintEvent *ev) override
+ {
+ if (m_paint) {
+ QPainter p(this);
+ m_paint(this, p, ev);
+ }
+ }
+
+private:
+ void resizeToParent() { setGeometry(QRect(QPoint(0, 0), parentWidget()->size())); }
+
+ PaintFunction m_paint;
+};
+
+class ProgressIndicatorPainter
+{
+public:
+ using UpdateCallback = std::function;
+
+ ProgressIndicatorPainter();
+ virtual ~ProgressIndicatorPainter() = default;
+
+ void setUpdateCallback(const UpdateCallback &cb) { m_callback = cb; }
+
+ QSize size() const { return m_pixmap.size() / m_pixmap.devicePixelRatio(); }
+
+ void paint(QPainter &painter, const QRect &rect) const;
+ void startAnimation() { m_timer.start(); }
+ void stopAnimation() { m_timer.stop(); }
+
+protected:
+ void nextAnimationStep() { m_rotation = (m_rotation + m_rotationStep + 360) % 360; }
+
+private:
+ const int m_rotationStep = 45;
+ int m_rotation = 0;
+ QTimer m_timer;
+ QPixmap m_pixmap;
+ UpdateCallback m_callback;
+};
+
+ProgressIndicatorPainter::ProgressIndicatorPainter()
+{
+ m_timer.setSingleShot(false);
+ QObject::connect(&m_timer, &QTimer::timeout, &m_timer, [this] {
+ nextAnimationStep();
+ if (m_callback)
+ m_callback();
+ });
+
+ m_timer.setInterval(100);
+ m_pixmap = QPixmap(":/icons/progressindicator.png");
+}
+
+void ProgressIndicatorPainter::paint(QPainter &painter, const QRect &rect) const
+{
+ painter.save();
+ painter.setRenderHint(QPainter::SmoothPixmapTransform);
+ QPoint translate(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2);
+ QTransform t;
+ t.translate(translate.x(), translate.y());
+ t.rotate(m_rotation);
+ t.translate(-translate.x(), -translate.y());
+ painter.setTransform(t);
+ QSize pixmapUserSize(m_pixmap.size() / m_pixmap.devicePixelRatio());
+ painter.drawPixmap(QPoint(rect.x() + ((rect.width() - pixmapUserSize.width()) / 2),
+ rect.y() + ((rect.height() - pixmapUserSize.height()) / 2)),
+ m_pixmap);
+ painter.restore();
+}
+
+class ProgressIndicatorWidget : public OverlayWidget
+{
+public:
+ explicit ProgressIndicatorWidget(QWidget *parent = nullptr)
+ : OverlayWidget(parent)
+ {
+ setPaintFunction(
+ [this](QWidget *w, QPainter &p, QPaintEvent *) { m_paint.paint(p, w->rect()); });
+ m_paint.setUpdateCallback([this] { update(); });
+ updateGeometry();
+ }
+
+ QSize sizeHint() const final { return m_paint.size(); }
+
+protected:
+ void showEvent(QShowEvent *) final { m_paint.startAnimation(); }
+ void hideEvent(QHideEvent *) final { m_paint.stopAnimation(); }
+
+private:
+ ProgressIndicatorPainter m_paint;
+};
+
+ProgressIndicator::ProgressIndicator(QWidget *parent)
+ : QObject(parent)
+ , m_widget(new ProgressIndicatorWidget(parent)) {}
+
+
+void ProgressIndicator::show()
+{
+ m_widget->show();
+}
+
+void ProgressIndicator::hide()
+{
+ m_widget->hide();
+}
diff --git a/tests/manual/tasking/demo/progressindicator.h b/tests/manual/tasking/demo/progressindicator.h
new file mode 100644
index 00000000000..406ebc9e831
--- /dev/null
+++ b/tests/manual/tasking/demo/progressindicator.h
@@ -0,0 +1,21 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef PROGRESSINDICATOR_H
+#define PROGRESSINDICATOR_H
+
+#include
+
+class ProgressIndicator : public QObject
+{
+public:
+ ProgressIndicator(QWidget *parent = nullptr);
+
+ void show();
+ void hide();
+
+private:
+ class ProgressIndicatorWidget *m_widget = nullptr;
+};
+
+#endif // PROGRESSINDICATOR_H
diff --git a/tests/manual/tasktree/taskwidget.cpp b/tests/manual/tasking/demo/taskwidget.cpp
similarity index 59%
rename from tests/manual/tasktree/taskwidget.cpp
rename to tests/manual/tasking/demo/taskwidget.cpp
index ddc56aa77e2..6bc68db1a1b 100644
--- a/tests/manual/tasktree/taskwidget.cpp
+++ b/tests/manual/tasking/demo/taskwidget.cpp
@@ -1,20 +1,18 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+#include "progressindicator.h"
#include "taskwidget.h"
-#include
-#include
-#include
-
+#include
#include
#include
#include
#include
+#include
#include
-using namespace Utils;
-using namespace Layouting;
+using namespace Tasking;
static QString colorButtonStyleSheet(const QColor &bgColor)
{
@@ -37,10 +35,10 @@ static QColor stateToColor(State state) {
class StateIndicator : public QLabel
{
public:
- StateIndicator()
+ StateIndicator(QWidget *parent = nullptr)
+ : QLabel(parent)
{
- m_progressIndicator = new ProgressIndicator(ProgressIndicatorSize::Small);
- m_progressIndicator->attachToWidget(this);
+ m_progressIndicator = new ProgressIndicator(this);
m_progressIndicator->hide();
updateState();
}
@@ -67,9 +65,7 @@ private:
};
StateWidget::StateWidget()
- : m_stateIndicator(new StateIndicator)
-{
-}
+ : m_stateIndicator(new StateIndicator(this)) {}
void StateWidget::setState(State state)
{
@@ -86,14 +82,13 @@ TaskWidget::TaskWidget()
setBusyTime(1);
setSuccess(true);
- Row {
- m_stateIndicator,
- m_infoLabel,
- m_spinBox,
- m_checkBox,
- st,
- noMargin,
- }.attachTo(this);
+ QBoxLayout *layout = new QHBoxLayout(this);
+ layout->addWidget(m_stateIndicator);
+ layout->addWidget(m_infoLabel);
+ layout->addWidget(m_spinBox);
+ layout->addWidget(m_checkBox);
+ layout->addStretch();
+ layout->setContentsMargins(0, 0, 0, 0);
}
void TaskWidget::setBusyTime(int seconds)
@@ -122,34 +117,32 @@ GroupWidget::GroupWidget()
{
m_stateIndicator->setFixedWidth(30);
- m_executeCombo->addItem("Sequential", (int)ExecuteMode::Sequential);
- m_executeCombo->addItem("Parallel", (int)ExecuteMode::Parallel);
+ m_executeCombo->addItem("Sequential", int(ExecuteMode::Sequential));
+ m_executeCombo->addItem("Parallel", int(ExecuteMode::Parallel));
updateExecuteMode();
connect(m_executeCombo, &QComboBox::currentIndexChanged, this, [this](int index) {
m_executeMode = (ExecuteMode)m_executeCombo->itemData(index).toInt();
});
- m_workflowCombo->addItem("Stop On Error", (int)Tasking::WorkflowPolicy::StopOnError);
- m_workflowCombo->addItem("Cont On Error", (int)Tasking::WorkflowPolicy::ContinueOnError);
- m_workflowCombo->addItem("Stop On Done", (int)Tasking::WorkflowPolicy::StopOnDone);
- m_workflowCombo->addItem("Cont On Done", (int)Tasking::WorkflowPolicy::ContinueOnDone);
- m_workflowCombo->addItem("Optional", (int)Tasking::WorkflowPolicy::FinishAllAndDone);
+ const QMetaEnum workflow = QMetaEnum::fromType();
+ for (int i = 0; i < workflow.keyCount(); ++i)
+ m_workflowCombo->addItem(workflow.key(i), workflow.value(i));
+
updateWorkflowPolicy();
connect(m_workflowCombo, &QComboBox::currentIndexChanged, this, [this](int index) {
- m_workflowPolicy = (Tasking::WorkflowPolicy)m_workflowCombo->itemData(index).toInt();
+ m_workflowPolicy = (WorkflowPolicy)m_workflowCombo->itemData(index).toInt();
});
- Row {
- m_stateIndicator,
- Column {
- new QLabel("Execute:"),
- m_executeCombo,
- new QLabel("Workflow:"),
- m_workflowCombo,
- st,
- noMargin
- }
- }.attachTo(this);
+ QBoxLayout *layout = new QHBoxLayout(this);
+ layout->addWidget(m_stateIndicator);
+ QBoxLayout *subLayout = new QVBoxLayout;
+ subLayout->addWidget(new QLabel("Execute Mode:"));
+ subLayout->addWidget(m_executeCombo);
+ subLayout->addWidget(new QLabel("Workflow Policy:"));
+ subLayout->addWidget(m_workflowCombo);
+ subLayout->addStretch();
+ layout->addLayout(subLayout);
+ layout->setContentsMargins(0, 0, 0, 0);
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
}
@@ -165,12 +158,12 @@ void GroupWidget::updateExecuteMode()
m_executeCombo->setCurrentIndex(m_executeCombo->findData((int)m_executeMode));
}
-Tasking::TaskItem GroupWidget::executeMode() const
+TaskItem GroupWidget::executeMode() const
{
- return m_executeMode == ExecuteMode::Sequential ? Tasking::sequential : Tasking::parallel;
+ return m_executeMode == ExecuteMode::Sequential ? sequential : parallel;
}
-void GroupWidget::setWorkflowPolicy(Tasking::WorkflowPolicy policy)
+void GroupWidget::setWorkflowPolicy(WorkflowPolicy policy)
{
m_workflowPolicy = policy;
updateWorkflowPolicy();
@@ -181,13 +174,7 @@ void GroupWidget::updateWorkflowPolicy()
m_workflowCombo->setCurrentIndex(m_workflowCombo->findData((int)m_workflowPolicy));
}
-Tasking::WorkflowPolicy GroupWidget::workflowPolicy() const
+TaskItem GroupWidget::workflowPolicy() const
{
- return m_workflowPolicy;
+ return Tasking::workflowPolicy(m_workflowPolicy);
}
-
-void createItem(Layouting::LayoutItem *item, const TaskGroup &taskGroup)
-{
- item->addItems({taskGroup.group, Group { taskGroup.items }, br});
-}
-
diff --git a/tests/manual/tasktree/taskwidget.h b/tests/manual/tasking/demo/taskwidget.h
similarity index 75%
rename from tests/manual/tasktree/taskwidget.h
rename to tests/manual/tasking/demo/taskwidget.h
index c425f23965f..3ce210eb0d4 100644
--- a/tests/manual/tasktree/taskwidget.h
+++ b/tests/manual/tasking/demo/taskwidget.h
@@ -1,9 +1,10 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-#include
+#ifndef TASKWIDGET_H
+#define TASKWIDGET_H
-#include
+#include
#include
@@ -64,7 +65,7 @@ public:
Tasking::TaskItem executeMode() const;
void setWorkflowPolicy(Tasking::WorkflowPolicy policy);
- Tasking::WorkflowPolicy workflowPolicy() const;
+ Tasking::TaskItem workflowPolicy() const;
private:
void updateExecuteMode();
@@ -77,11 +78,4 @@ private:
Tasking::WorkflowPolicy m_workflowPolicy = Tasking::WorkflowPolicy::StopOnError;
};
-class TaskGroup
-{
-public:
- QWidget *group;
- Layouting::Column items;
-};
-
-void createItem(Layouting::LayoutItem *item, const TaskGroup &taskGroup);
+#endif // TASKWIDGET_H
diff --git a/tests/manual/tasktree/CMakeLists.txt b/tests/manual/tasktree/CMakeLists.txt
deleted file mode 100644
index 19bd81bfb2b..00000000000
--- a/tests/manual/tasktree/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-add_qtc_test(tst_manual_tasktree
- MANUALTEST
- DEPENDS Utils
- SOURCES
- main.cpp taskwidget.h taskwidget.cpp
-)
diff --git a/tests/manual/tasktree/tasktree.qbs b/tests/manual/tasktree/tasktree.qbs
deleted file mode 100644
index dad8e14763c..00000000000
--- a/tests/manual/tasktree/tasktree.qbs
+++ /dev/null
@@ -1,14 +0,0 @@
-import qbs.FileInfo
-
-QtcManualtest {
- name: "Manual TaskTree test"
- type: ["application"]
-
- Depends { name: "Utils" }
-
- files: [
- "main.cpp",
- "taskwidget.h",
- "taskwidget.cpp",
- ]
-}