diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-11-11 10:11:22 +0100 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2022-11-18 16:36:59 +0000 |
commit | 292e8f510e0b302377e6df43c39d7a214035b072 (patch) | |
tree | 0fdc7c1b8e5f7178e424ff66ef1cc913c0a88fef /tests/manual/tasktree/taskwidget.cpp | |
parent | 34a7ada66b7c0485bb6143ec174a55257f38306b (diff) | |
download | qt-creator-292e8f510e0b302377e6df43c39d7a214035b072.tar.gz |
Add manual test for TaskTree
Change-Id: I92ea4d949729f59d2d1e262ecd38fc3be4f463fe
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'tests/manual/tasktree/taskwidget.cpp')
-rw-r--r-- | tests/manual/tasktree/taskwidget.cpp | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/tests/manual/tasktree/taskwidget.cpp b/tests/manual/tasktree/taskwidget.cpp new file mode 100644 index 0000000000..b01fba612f --- /dev/null +++ b/tests/manual/tasktree/taskwidget.cpp @@ -0,0 +1,189 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#include "taskwidget.h" + +#include <utils/layoutbuilder.h> +#include <utils/progressindicator.h> +#include <utils/qtcassert.h> + +#include <QCheckBox> +#include <QComboBox> +#include <QGroupBox> +#include <QLabel> +#include <QSpinBox> + +using namespace Utils; +using namespace Layouting; + +static QString colorButtonStyleSheet(const QColor &bgColor) +{ + QString rc("border-width: 2px; border-radius: 2px; border-color: black; "); + rc += bgColor.isValid() ? "border-style: solid; background:" + bgColor.name() + ";" + : QString("border-style: dotted;"); + return rc; +} + +static QColor stateToColor(State state) { + switch (state) { + case State::Initial: return Qt::gray; + case State::Running: return Qt::yellow; + case State::Done: return Qt::green; + case State::Error: return Qt::red; + } + return {}; +} + +class StateIndicator : public QLabel +{ +public: + StateIndicator() + { + m_progressIndicator = new ProgressIndicator(ProgressIndicatorSize::Small); + m_progressIndicator->attachToWidget(this); + m_progressIndicator->hide(); + updateState(); + } + + void setState(State state) + { + if (m_state == state) + return; + m_state = state; + updateState(); + } + +private: + void updateState() + { + setStyleSheet(colorButtonStyleSheet(stateToColor(m_state))); + if (m_state == State::Running) + m_progressIndicator->show(); + else + m_progressIndicator->hide(); + } + State m_state = State::Initial; + ProgressIndicator *m_progressIndicator = nullptr; +}; + +StateWidget::StateWidget() + : m_stateIndicator(new StateIndicator) +{ +} + +void StateWidget::setState(State state) +{ + m_stateIndicator->setState(state); +} + +TaskWidget::TaskWidget() + : m_infoLabel(new QLabel("Sleep:")) + , m_spinBox(new QSpinBox) + , m_checkBox(new QCheckBox("Report success")) +{ + m_stateIndicator->setFixedSize(30, 30); + m_spinBox->setSuffix(" sec"); + setBusyTime(1); + setSuccess(true); + + Row { + m_stateIndicator, + m_infoLabel, + m_spinBox, + m_checkBox, + st + }.attachTo(this, WithoutMargins); +} + +void TaskWidget::setBusyTime(int seconds) +{ + m_spinBox->setValue(seconds); +} + +int TaskWidget::busyTime() const +{ + return m_spinBox->value(); +} + +void TaskWidget::setSuccess(bool success) +{ + m_checkBox->setChecked(success); +} + +bool TaskWidget::isSuccess() const +{ + return m_checkBox->isChecked(); +} + +GroupWidget::GroupWidget() + : m_executeCombo(new QComboBox) + , m_workflowCombo(new QComboBox) +{ + m_stateIndicator->setFixedWidth(30); + + m_executeCombo->addItem("Sequential", (int)Tasking::ExecuteMode::Sequential); + m_executeCombo->addItem("Parallel", (int)Tasking::ExecuteMode::Parallel); + updateExecuteMode(); + connect(m_executeCombo, &QComboBox::currentIndexChanged, this, [this](int index) { + m_executeMode = (Tasking::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::Optional); + updateWorkflowPolicy(); + connect(m_workflowCombo, &QComboBox::currentIndexChanged, this, [this](int index) { + m_workflowPolicy = (Tasking::WorkflowPolicy)m_workflowCombo->itemData(index).toInt(); + }); + + Row { + m_stateIndicator, + Column { + new QLabel("Execute:"), + m_executeCombo, + new QLabel("Workflow:"), + m_workflowCombo, + st + } + }.attachTo(this, WithoutMargins); + + setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); +} + +void GroupWidget::setExecuteMode(Tasking::ExecuteMode mode) +{ + m_executeMode = mode; + updateExecuteMode(); +} + +void GroupWidget::updateExecuteMode() +{ + m_executeCombo->setCurrentIndex(m_executeCombo->findData((int)m_executeMode)); +} + +Tasking::ExecuteMode GroupWidget::executeMode() const +{ + return m_executeMode; +} + +void GroupWidget::setWorkflowPolicy(Tasking::WorkflowPolicy policy) +{ + m_workflowPolicy = policy; + updateWorkflowPolicy(); +} + +void GroupWidget::updateWorkflowPolicy() +{ + m_workflowCombo->setCurrentIndex(m_workflowCombo->findData((int)m_workflowPolicy)); +} + +Tasking::WorkflowPolicy GroupWidget::workflowPolicy() const +{ + return m_workflowPolicy; +} + +TaskGroup::TaskGroup(QWidget *group, std::initializer_list<LayoutBuilder::LayoutItem> items) + : Row({ group, Group { Column { items } } }) {} + |