aboutsummaryrefslogtreecommitdiffstats
path: root/tests/manual/tasktree/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/tasktree/main.cpp')
-rw-r--r--tests/manual/tasktree/main.cpp268
1 files changed, 0 insertions, 268 deletions
diff --git a/tests/manual/tasktree/main.cpp b/tests/manual/tasktree/main.cpp
deleted file mode 100644
index b57481bfc41..00000000000
--- a/tests/manual/tasktree/main.cpp
+++ /dev/null
@@ -1,268 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#include "taskwidget.h"
-
-#include <utils/asynctask.h>
-#include <utils/futuresynchronizer.h>
-#include <utils/layoutbuilder.h>
-#include <utils/theme/theme_p.h>
-
-#include <QApplication>
-#include <QCheckBox>
-#include <QProgressBar>
-#include <QScrollArea>
-#include <QTimer>
-#include <QToolButton>
-
-using namespace Utils;
-
-// TODO: make tasks cancellable
-static void sleepInThread(QFutureInterface<void> &fi, int seconds, bool reportSuccess)
-{
- QThread::sleep(seconds);
- if (!reportSuccess)
- fi.reportCanceled();
-}
-
-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();
- startButton->setText("Start");
- QToolButton *stopButton = new QToolButton();
- stopButton->setText("Stop");
- 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();
- scrollArea->setWidgetResizable(true);
- QWidget *scrollAreaWidget = new QWidget();
-
- // Task GUI
-
- QList<StateWidget *> allStateWidgets;
-
- auto createGroupWidget = [&allStateWidgets] {
- auto *widget = new GroupWidget();
- allStateWidgets.append(widget);
- return widget;
- };
- auto createTaskWidget = [&allStateWidgets] {
- auto *widget = new TaskWidget();
- allStateWidgets.append(widget);
- return widget;
- };
-
- GroupWidget *rootGroup = createGroupWidget();
-
- GroupWidget *groupTask_1 = createGroupWidget();
- TaskWidget *task_1_1 = createTaskWidget();
- TaskWidget *task_1_2 = createTaskWidget();
- TaskWidget *task_1_3 = createTaskWidget();
-
- TaskWidget *task_2 = createTaskWidget();
- TaskWidget *task_3 = createTaskWidget();
-
- GroupWidget *groupTask_4 = createGroupWidget();
- TaskWidget *task_4_1 = createTaskWidget();
- TaskWidget *task_4_2 = createTaskWidget();
- GroupWidget *groupTask_4_3 = createGroupWidget();
- TaskWidget *task_4_3_1 = createTaskWidget();
- TaskWidget *task_4_3_2 = createTaskWidget();
- TaskWidget *task_4_3_3 = createTaskWidget();
- TaskWidget *task_4_3_4 = createTaskWidget();
- TaskWidget *task_4_4 = createTaskWidget();
- TaskWidget *task_4_5 = createTaskWidget();
-
- TaskWidget *task_5 = createTaskWidget();
-
- // Task initial configuration
-
- task_1_2->setBusyTime(2);
- task_1_2->setSuccess(false);
- task_1_3->setBusyTime(3);
- task_4_3_1->setBusyTime(4);
- task_4_3_2->setBusyTime(2);
- task_4_3_3->setBusyTime(1);
- task_4_3_4->setBusyTime(3);
- task_4_3_4->setSuccess(false);
- task_4_4->setBusyTime(6);
- task_4_4->setBusyTime(3);
-
- groupTask_1->setWorkflowPolicy(Tasking::WorkflowPolicy::ContinueOnDone);
- groupTask_4->setWorkflowPolicy(Tasking::WorkflowPolicy::Optional);
- groupTask_4_3->setExecuteMode(ExecuteMode::Parallel);
- groupTask_4_3->setWorkflowPolicy(Tasking::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);
-
- scrollArea->setWidget(scrollAreaWidget);
-
- Column {
- Row { startButton, stopButton, resetButton, synchronizerCheckBox, progressBar },
- hr,
- scrollArea
- }.attachTo(&mainWidget);
- }
-
- // Task tree creator (takes configuation from GUI)
-
- std::unique_ptr<TaskTree> taskTree;
- FutureSynchronizer synchronizer;
- synchronizer.setCancelOnWait(true);
-
- auto treeRoot = [&] {
- using namespace Tasking;
-
- auto taskItem = [sync = &synchronizer, synchronizerCheckBox](TaskWidget *widget) {
- const auto setupHandler = [=](AsyncTask<void> &task) {
- task.setAsyncCallData(sleepInThread, widget->busyTime(), widget->isSuccess());
- if (synchronizerCheckBox->isChecked())
- task.setFutureSynchronizer(sync);
- widget->setState(State::Running);
- };
- const auto doneHandler = [widget](const AsyncTask<void> &) {
- widget->setState(State::Done);
- };
- const auto errorHandler = [widget](const AsyncTask<void> &) {
- widget->setState(State::Error);
- };
- return Async<void>(setupHandler, doneHandler, errorHandler);
- };
-
- const Group root {
- rootGroup->executeMode(),
- Workflow(rootGroup->workflowPolicy()),
- OnGroupSetup([rootGroup] { rootGroup->setState(State::Running); }),
- OnGroupDone([rootGroup] { rootGroup->setState(State::Done); }),
- OnGroupError([rootGroup] { rootGroup->setState(State::Error); }),
-
- Group {
- groupTask_1->executeMode(),
- Workflow(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)
- },
- taskItem(task_2),
- taskItem(task_3),
- Group {
- groupTask_4->executeMode(),
- Workflow(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),
- Group {
- groupTask_4_3->executeMode(),
- Workflow(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)
- },
- taskItem(task_4_4),
- taskItem(task_4_5)
- },
- taskItem(task_5)
- };
- return root;
- };
-
- // Non-task GUI handling
-
- auto createTaskTree = [&] {
- TaskTree *taskTree = new TaskTree(treeRoot());
- progressBar->setMaximum(taskTree->progressMaximum());
- QObject::connect(taskTree, &TaskTree::progressValueChanged,
- progressBar, &QProgressBar::setValue);
- return taskTree;
- };
-
- auto stopTaskTree = [&] {
- if (taskTree)
- taskTree->stop();
- // TODO: unlock GUI controls?
- };
-
- auto resetTaskTree = [&] {
- if (!taskTree)
- return;
-
- stopTaskTree();
- taskTree.reset();
- for (StateWidget *widget : allStateWidgets)
- widget->setState(State::Initial);
- progressBar->setValue(0);
- };
-
- auto startTaskTree = [&] {
- resetTaskTree();
- taskTree.reset(createTaskTree());
- taskTree->start();
- // TODO: lock GUI controls?
- };
-
- QObject::connect(startButton, &QAbstractButton::clicked, startTaskTree);
- QObject::connect(stopButton, &QAbstractButton::clicked, stopTaskTree);
- QObject::connect(resetButton, &QAbstractButton::clicked, resetTaskTree);
-
- // Hack in order to show initial size minimal, but without scrollbars.
- // Apparently setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContentsOnFirstShow) doesn't work.
- const int margin = 2;
- scrollArea->setMinimumSize(scrollAreaWidget->minimumSizeHint().grownBy({0, 0, margin, margin}));
- QTimer::singleShot(0, scrollArea, [&] { scrollArea->setMinimumSize({0, 0}); });
-
- mainWidget.show();
-
- return app.exec();
-}