diff --git a/src/frames/mainwindow.cpp b/src/frames/mainwindow.cpp index ae52a69..eac6c84 100644 --- a/src/frames/mainwindow.cpp +++ b/src/frames/mainwindow.cpp @@ -25,6 +25,7 @@ MainWindow::MainWindow(QWidget *parent) , ui(new Ui::MainWindow) { ui->setupUi(this); + ui->boardStatus->setVisible(false); this->menuSelectedBoardItem = nullptr; this->menuSelectedFilterItem = nullptr; this->menuSelectedTaskItem = nullptr; @@ -245,6 +246,7 @@ void MainWindow::onEditTask(QTreeWidgetItem *item) t->update(editedTask); updateTaskRow(item, editedTask); save(); + redrawBoardStatus(); if (selectedFilterIndex > -1) { redrawTaskTree(); @@ -629,6 +631,13 @@ void MainWindow::redrawTaskTree() if (selectedBoardIndex > -1) { Board *b = boards[selectedBoardIndex]; + std::optional boardStatus = TaskStateService::getInstance()->getStatusByUUID(b->getStatus()); + if (boardStatus.has_value()) + { + ui->boardStatus->setStyleSheet(Tools::getStatusLabelStylesheet(boardStatus.value())); + ui->boardStatus->setText(boardStatus.value().getName()); + ui->boardStatus->setVisible(true); + } foreach (Task *t, b->getTasks()) { QTreeWidgetItem *item = new QTreeWidgetItem(); @@ -647,6 +656,23 @@ void MainWindow::redrawTaskTree() ui->taskList->addTopLevelItem(item); } } + redrawBoardStatus(); +} + +void MainWindow::redrawBoardStatus() +{ + ui->boardStatus->setVisible(false); + if (selectedBoardIndex > -1) + { + Board *b = boards[selectedBoardIndex]; + std::optional boardStatus = TaskStateService::getInstance()->getStatusByUUID(b->getStatus()); + if (boardStatus.has_value()) + { + ui->boardStatus->setStyleSheet(Tools::getStatusLabelStylesheet(boardStatus.value())); + ui->boardStatus->setText(boardStatus.value().getName()); + ui->boardStatus->setVisible(true); + } + } } void MainWindow::save() diff --git a/src/frames/mainwindow.h b/src/frames/mainwindow.h index b3ea50d..7aaf725 100644 --- a/src/frames/mainwindow.h +++ b/src/frames/mainwindow.h @@ -78,6 +78,7 @@ private: void redrawBoardList(); void redrawFilterList(); void redrawTaskTree(); + void redrawBoardStatus(); void save(); }; #endif // MAINWINDOW_H diff --git a/src/frames/mainwindow.ui b/src/frames/mainwindow.ui index 7c1ccf6..f0702e0 100644 --- a/src/frames/mainwindow.ui +++ b/src/frames/mainwindow.ui @@ -24,7 +24,7 @@ - + @@ -88,23 +88,60 @@ QLayout::SetMaximumSize - - - - 19 - - - - No board selected - - - - - - - Create or select a board to start - - + + + + + + + + 19 + + + + No board selected + + + + + + + Create or select a board to start + + + + + + + + + + 100 + 24 + + + + + 100 + 24 + + + + border-color: rgb(87, 227, 137); +border: solid; +background-color: rgb(87, 227, 137); +border-radius: 4px; +color: white; + + + TextLabel + + + Qt::AlignCenter + + + + diff --git a/src/frames/prefdialog.cpp b/src/frames/prefdialog.cpp index 6b21ce1..5bef786 100644 --- a/src/frames/prefdialog.cpp +++ b/src/frames/prefdialog.cpp @@ -41,6 +41,8 @@ PrefDialog::PrefDialog(QWidget *parent) : connect(ui->namePriorityEdit, &QLineEdit::textEdited, this, &PrefDialog::onNameChange); connect(ui->removeStatusButton, &QPushButton::clicked, this, &PrefDialog::onRemoveStatusButtonClick); connect(ui->removePriorityButton, &QPushButton::clicked, this, &PrefDialog::onRemovePriorityButtonClick); + connect(ui->upStatus, &QPushButton::clicked, this, &PrefDialog::onUpStatusButtonClick); + connect(ui->downStatus, &QPushButton::clicked, this, &PrefDialog::onDownStatusButtonClick); } PrefDialog::~PrefDialog() @@ -116,6 +118,16 @@ void PrefDialog::onItemSelectionChange(int index) colorBtn = ui->colorStatusButton; nameEdit = ui->nameStatusEdit; colorEdit = ui->colorStatusEdit; + if (index > -1) + { + ui->downStatus->setEnabled((index > 0)); + ui->upStatus->setEnabled((index < statusUUIDRef.size()-1)); + } + else + { + ui->downStatus->setEnabled(false); + ui->upStatus->setEnabled(false); + } } else { @@ -211,6 +223,46 @@ void PrefDialog::onRemovePriorityButtonClick() priorityUUIDRef.removeAt(index); } +void PrefDialog::onUpStatusButtonClick() +{ + if (ui->statusListWidget->selectedItems().size() != 1) + { + return; + } + int i = ui->statusListWidget->indexFromItem(ui->statusListWidget->selectedItems()[0]).row(); + if (i < statusUUIDRef.size()) + { + QListWidgetItem *item = ui->statusListWidget->takeItem(i); + i++; + ui->statusListWidget->insertItem(i, item); + statusUUIDRef.move(i-1, i); + + ui->downStatus->setEnabled((i > 0)); + ui->upStatus->setEnabled((i < statusUUIDRef.size()-1)); + ui->statusListWidget->setCurrentRow(i); + } +} + +void PrefDialog::onDownStatusButtonClick() +{ + if (ui->statusListWidget->selectedItems().size() != 1) + { + return; + } + int i = ui->statusListWidget->indexFromItem(ui->statusListWidget->selectedItems()[0]).row(); + if (i > 0) + { + QListWidgetItem *item = ui->statusListWidget->takeItem(i); + i--; + ui->statusListWidget->insertItem(i, item); + statusUUIDRef.move(i+1, i); + + ui->downStatus->setEnabled((i > 0)); + ui->upStatus->setEnabled((i < statusUUIDRef.size()-1)); + ui->statusListWidget->setCurrentRow(i); + } +} + void PrefDialog::setItemColor(QListWidgetItem *item, QColor bgColor) { QColor fgColor = Tools::getForegroundColor(bgColor); diff --git a/src/frames/prefdialog.h b/src/frames/prefdialog.h index 9e2c622..67f62bb 100644 --- a/src/frames/prefdialog.h +++ b/src/frames/prefdialog.h @@ -31,7 +31,8 @@ private slots: void onNameChange(); void onRemoveStatusButtonClick(); void onRemovePriorityButtonClick(); - + void onUpStatusButtonClick(); + void onDownStatusButtonClick(); private: Ui::PrefDialog *ui; diff --git a/src/frames/prefdialog.ui b/src/frames/prefdialog.ui index dde847f..5b20809 100644 --- a/src/frames/prefdialog.ui +++ b/src/frames/prefdialog.ui @@ -150,7 +150,7 @@ 570 310 41 - 32 + 21 @@ -166,13 +166,45 @@ 520 310 41 - 31 + 21 - + + + false + + + + 20 + 310 + 41 + 21 + + + + Down + + + + + false + + + + 70 + 310 + 41 + 21 + + + + Up + + diff --git a/src/models/board.cpp b/src/models/board.cpp index 0a7f734..b05365f 100644 --- a/src/models/board.cpp +++ b/src/models/board.cpp @@ -11,6 +11,8 @@ #include #include +#include "../services/taskstateservice.h" + Board::Board(QString name, QString description) { QUuid uuid = QUuid::createUuid(); @@ -60,6 +62,22 @@ const QString Board::getDescription() const QString Board::getStatus() { + if (autoStatus) + { + TaskStateService *tss = TaskStateService::getInstance(); + int16_t h = -1; + QString suuid = ""; + for (Task *t : tasks) + { + int16_t w = tss->getStatusWeight(t->getStatusUUID()); + if (w > -1 && h < w) + { + h = w; + suuid = t->getStatusUUID(); + } + } + return suuid; + } return statusUUID; } diff --git a/src/services/taskstateservice.cpp b/src/services/taskstateservice.cpp index e7632a6..a17d8ee 100644 --- a/src/services/taskstateservice.cpp +++ b/src/services/taskstateservice.cpp @@ -53,6 +53,20 @@ std::optional TaskStateService::getPriorityByUUID(QString uuid) return std::nullopt; } +int16_t TaskStateService::getStatusWeight(QString uuid) +{ + int16_t weight = -1; + for (uint16_t i = 0; i < statuses.count(); i++) + { + if (statuses[i].getUUID() == uuid) + { + weight = i; + break; + } + } + return weight; +} + TaskStateService::TaskStateService() { priorities.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "None", QColor(217, 217, 217))); diff --git a/src/services/taskstateservice.h b/src/services/taskstateservice.h index a5011c0..8e4863b 100644 --- a/src/services/taskstateservice.h +++ b/src/services/taskstateservice.h @@ -19,6 +19,7 @@ public: std::optional getStatusByUUID(QString); std::optional getPriorityByUUID(QString); + int16_t getStatusWeight(QString uuid); private: diff --git a/src/tools.cpp b/src/tools.cpp index 3dd196f..5d24b1e 100644 --- a/src/tools.cpp +++ b/src/tools.cpp @@ -8,6 +8,8 @@ #include #include +#include "services/taskstateservice.h" + Tools::Tools() { @@ -95,3 +97,14 @@ bool Tools::readSaveFile(QJsonDocument &doc) { doc = QJsonDocument::fromJson(json.toUtf8()); return true; } + +const QString Tools::getStatusLabelStylesheet(Status status) +{ + QColor bg = status.getColor(); + QColor fg = Tools::getForegroundColor(bg); + return QString("border-color: %1; \ + border: solid; \ + background-color: %1; \ + border-radius: 4px; \ + color: %2;").arg(bg.name(QColor::HexRgb), fg.name(QColor::HexRgb)); +} diff --git a/src/tools.h b/src/tools.h index 86ca753..3f6fd98 100644 --- a/src/tools.h +++ b/src/tools.h @@ -4,6 +4,8 @@ #include #include +#include "models/status.h" + class Tools { public: @@ -14,6 +16,7 @@ public: static bool isSaveFileExist(); static bool writeSaveToFile(QJsonDocument doc); static bool readSaveFile(QJsonDocument &doc); + static const QString getStatusLabelStylesheet(Status); private: static const QString getSaveFilePath();