v0.3.0 #1

Merged
mojitaurelie merged 4 commits from dev_0.3 into main 2023-02-21 18:29:54 +01:00
11 changed files with 219 additions and 21 deletions
Showing only changes of commit 1b56b5eec5 - Show all commits

View File

@@ -25,6 +25,7 @@ MainWindow::MainWindow(QWidget *parent)
, ui(new Ui::MainWindow) , ui(new Ui::MainWindow)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->boardStatus->setVisible(false);
this->menuSelectedBoardItem = nullptr; this->menuSelectedBoardItem = nullptr;
this->menuSelectedFilterItem = nullptr; this->menuSelectedFilterItem = nullptr;
this->menuSelectedTaskItem = nullptr; this->menuSelectedTaskItem = nullptr;
@@ -245,6 +246,7 @@ void MainWindow::onEditTask(QTreeWidgetItem *item)
t->update(editedTask); t->update(editedTask);
updateTaskRow(item, editedTask); updateTaskRow(item, editedTask);
save(); save();
redrawBoardStatus();
if (selectedFilterIndex > -1) if (selectedFilterIndex > -1)
{ {
redrawTaskTree(); redrawTaskTree();
@@ -629,6 +631,13 @@ void MainWindow::redrawTaskTree()
if (selectedBoardIndex > -1) if (selectedBoardIndex > -1)
{ {
Board *b = boards[selectedBoardIndex]; Board *b = boards[selectedBoardIndex];
std::optional<Status> 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()) foreach (Task *t, b->getTasks())
{ {
QTreeWidgetItem *item = new QTreeWidgetItem(); QTreeWidgetItem *item = new QTreeWidgetItem();
@@ -647,6 +656,23 @@ void MainWindow::redrawTaskTree()
ui->taskList->addTopLevelItem(item); ui->taskList->addTopLevelItem(item);
} }
} }
redrawBoardStatus();
}
void MainWindow::redrawBoardStatus()
{
ui->boardStatus->setVisible(false);
if (selectedBoardIndex > -1)
{
Board *b = boards[selectedBoardIndex];
std::optional<Status> 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() void MainWindow::save()

View File

@@ -78,6 +78,7 @@ private:
void redrawBoardList(); void redrawBoardList();
void redrawFilterList(); void redrawFilterList();
void redrawTaskTree(); void redrawTaskTree();
void redrawBoardStatus();
void save(); void save();
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

View File

@@ -24,7 +24,7 @@
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0"> <item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
@@ -87,6 +87,10 @@
<property name="sizeConstraint"> <property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum> <enum>QLayout::SetMaximumSize</enum>
</property> </property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item> <item>
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="font"> <property name="font">
@@ -106,6 +110,39 @@
</property> </property>
</widget> </widget>
</item> </item>
</layout>
</item>
<item>
<widget class="QLabel" name="boardStatus">
<property name="minimumSize">
<size>
<width>100</width>
<height>24</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>24</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">border-color: rgb(87, 227, 137);
border: solid;
background-color: rgb(87, 227, 137);
border-radius: 4px;
color: white;</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<widget class="QTreeWidget" name="taskList"> <widget class="QTreeWidget" name="taskList">
<property name="alternatingRowColors"> <property name="alternatingRowColors">

View File

@@ -41,6 +41,8 @@ PrefDialog::PrefDialog(QWidget *parent) :
connect(ui->namePriorityEdit, &QLineEdit::textEdited, this, &PrefDialog::onNameChange); connect(ui->namePriorityEdit, &QLineEdit::textEdited, this, &PrefDialog::onNameChange);
connect(ui->removeStatusButton, &QPushButton::clicked, this, &PrefDialog::onRemoveStatusButtonClick); connect(ui->removeStatusButton, &QPushButton::clicked, this, &PrefDialog::onRemoveStatusButtonClick);
connect(ui->removePriorityButton, &QPushButton::clicked, this, &PrefDialog::onRemovePriorityButtonClick); 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() PrefDialog::~PrefDialog()
@@ -116,6 +118,16 @@ void PrefDialog::onItemSelectionChange(int index)
colorBtn = ui->colorStatusButton; colorBtn = ui->colorStatusButton;
nameEdit = ui->nameStatusEdit; nameEdit = ui->nameStatusEdit;
colorEdit = ui->colorStatusEdit; 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 else
{ {
@@ -211,6 +223,46 @@ void PrefDialog::onRemovePriorityButtonClick()
priorityUUIDRef.removeAt(index); 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) void PrefDialog::setItemColor(QListWidgetItem *item, QColor bgColor)
{ {
QColor fgColor = Tools::getForegroundColor(bgColor); QColor fgColor = Tools::getForegroundColor(bgColor);

View File

@@ -31,7 +31,8 @@ private slots:
void onNameChange(); void onNameChange();
void onRemoveStatusButtonClick(); void onRemoveStatusButtonClick();
void onRemovePriorityButtonClick(); void onRemovePriorityButtonClick();
void onUpStatusButtonClick();
void onDownStatusButtonClick();
private: private:
Ui::PrefDialog *ui; Ui::PrefDialog *ui;

View File

@@ -150,7 +150,7 @@
<x>570</x> <x>570</x>
<y>310</y> <y>310</y>
<width>41</width> <width>41</width>
<height>32</height> <height>21</height>
</rect> </rect>
</property> </property>
<property name="text"> <property name="text">
@@ -166,13 +166,45 @@
<x>520</x> <x>520</x>
<y>310</y> <y>310</y>
<width>41</width> <width>41</width>
<height>31</height> <height>21</height>
</rect> </rect>
</property> </property>
<property name="text"> <property name="text">
<string>-</string> <string>-</string>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="downStatus">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>20</x>
<y>310</y>
<width>41</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Down</string>
</property>
</widget>
<widget class="QPushButton" name="upStatus">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>70</x>
<y>310</y>
<width>41</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Up</string>
</property>
</widget>
</widget> </widget>
<widget class="QWidget" name="tab_2"> <widget class="QWidget" name="tab_2">
<attribute name="title"> <attribute name="title">

View File

@@ -11,6 +11,8 @@
#include <QJsonValue> #include <QJsonValue>
#include <QUuid> #include <QUuid>
#include "../services/taskstateservice.h"
Board::Board(QString name, QString description) Board::Board(QString name, QString description)
{ {
QUuid uuid = QUuid::createUuid(); QUuid uuid = QUuid::createUuid();
@@ -60,6 +62,22 @@ const QString Board::getDescription()
const QString Board::getStatus() 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; return statusUUID;
} }

View File

@@ -53,6 +53,20 @@ std::optional<Priority> TaskStateService::getPriorityByUUID(QString uuid)
return std::nullopt; 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() TaskStateService::TaskStateService()
{ {
priorities.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "None", QColor(217, 217, 217))); priorities.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "None", QColor(217, 217, 217)));

View File

@@ -19,6 +19,7 @@ public:
std::optional<Status> getStatusByUUID(QString); std::optional<Status> getStatusByUUID(QString);
std::optional<Priority> getPriorityByUUID(QString); std::optional<Priority> getPriorityByUUID(QString);
int16_t getStatusWeight(QString uuid);
private: private:

View File

@@ -8,6 +8,8 @@
#include <QStandardPaths> #include <QStandardPaths>
#include <QDir> #include <QDir>
#include "services/taskstateservice.h"
Tools::Tools() Tools::Tools()
{ {
@@ -95,3 +97,14 @@ bool Tools::readSaveFile(QJsonDocument &doc) {
doc = QJsonDocument::fromJson(json.toUtf8()); doc = QJsonDocument::fromJson(json.toUtf8());
return true; 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));
}

View File

@@ -4,6 +4,8 @@
#include <QColor> #include <QColor>
#include <QJsonDocument> #include <QJsonDocument>
#include "models/status.h"
class Tools class Tools
{ {
public: public:
@@ -14,6 +16,7 @@ public:
static bool isSaveFileExist(); static bool isSaveFileExist();
static bool writeSaveToFile(QJsonDocument doc); static bool writeSaveToFile(QJsonDocument doc);
static bool readSaveFile(QJsonDocument &doc); static bool readSaveFile(QJsonDocument &doc);
static const QString getStatusLabelStylesheet(Status);
private: private:
static const QString getSaveFilePath(); static const QString getSaveFilePath();