Compare commits
10 Commits
v0.2.1-bet
...
v0.3.1.1-b
| Author | SHA1 | Date | |
|---|---|---|---|
| 9832b2b275 | |||
| 34cb5776f6 | |||
| 3112e16326 | |||
| 09e5f4cd41 | |||
| e40dfb8f69 | |||
|
|
e961e7642e | ||
|
|
22ebe6eded | ||
|
|
93026b1373 | ||
|
|
1b56b5eec5 | ||
|
|
35dee6684f |
@@ -4,8 +4,8 @@ greaterThan(QT_MAJOR_VERSION, 5): QT += widgets
|
|||||||
|
|
||||||
CONFIG += c++17
|
CONFIG += c++17
|
||||||
|
|
||||||
win32:VERSION = 0.2.1.0 # major.minor.patch.build
|
win32:VERSION = 0.3.1.1 # major.minor.patch.build
|
||||||
else:VERSION = 0.2.1 # major.minor.patch
|
else:VERSION = 0.3.1.1 # major.minor.patch
|
||||||
|
|
||||||
DEFINES += APP_VERSION=\"\\\"$${VERSION}\\\"\"
|
DEFINES += APP_VERSION=\"\\\"$${VERSION}\\\"\"
|
||||||
DEFINES += APP_NAME=\"\\\"TaskBoard\\\"\"
|
DEFINES += APP_NAME=\"\\\"TaskBoard\\\"\"
|
||||||
@@ -63,11 +63,29 @@ linux-* {
|
|||||||
QMAKE_CXXFLAGS_RELEASE *= -O3
|
QMAKE_CXXFLAGS_RELEASE *= -O3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
freebsd-* {
|
||||||
|
message("Build for FreeBSD")
|
||||||
|
DEFINES += APP_OS=\"\\\"$$system(freebsd-version -u)\\\"\"
|
||||||
|
DEFINES += APP_OS_VERSION=\"\\\"$$system(uname -r)\\\"\"
|
||||||
|
DEFINES += APP_ARCH=\"\\\"$$system(uname -m)\\\"\"
|
||||||
|
ARCH = $$system(uname -m)
|
||||||
|
equals(ARCH, aarch64) {
|
||||||
|
message("CPU Architecture : aarch64")
|
||||||
|
QMAKE_CXXFLAGS_RELEASE += -mtune=cortex-a72
|
||||||
|
}
|
||||||
|
equals(ARCH, amd64) {
|
||||||
|
message("CPU Architecture : amd64")
|
||||||
|
QMAKE_CXXFLAGS_RELEASE += -march=skylake
|
||||||
|
}
|
||||||
|
QMAKE_CXXFLAGS_RELEASE *= -O3
|
||||||
|
}
|
||||||
|
|
||||||
# You can make your code fail to compile if it uses deprecated APIs.
|
# You can make your code fail to compile if it uses deprecated APIs.
|
||||||
# In order to do so, uncomment the following line.
|
# In order to do so, uncomment the following line.
|
||||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
src/frames/boardconfigdialog.cpp \
|
||||||
src/frames/filterdialog.cpp \
|
src/frames/filterdialog.cpp \
|
||||||
src/frames/aboutdialog.cpp \
|
src/frames/aboutdialog.cpp \
|
||||||
src/models/board.cpp \
|
src/models/board.cpp \
|
||||||
@@ -80,9 +98,11 @@ SOURCES += \
|
|||||||
src/models/status.cpp \
|
src/models/status.cpp \
|
||||||
src/models/task.cpp \
|
src/models/task.cpp \
|
||||||
src/frames/taskdialog.cpp \
|
src/frames/taskdialog.cpp \
|
||||||
|
src/services/taskstateservice.cpp \
|
||||||
src/tools.cpp
|
src/tools.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
src/frames/boardconfigdialog.h \
|
||||||
src/frames/filterdialog.h \
|
src/frames/filterdialog.h \
|
||||||
src/frames/aboutdialog.h \
|
src/frames/aboutdialog.h \
|
||||||
src/models/board.h \
|
src/models/board.h \
|
||||||
@@ -94,9 +114,11 @@ HEADERS += \
|
|||||||
src/models/status.h \
|
src/models/status.h \
|
||||||
src/models/task.h \
|
src/models/task.h \
|
||||||
src/frames/taskdialog.h \
|
src/frames/taskdialog.h \
|
||||||
|
src/services/taskstateservice.h \
|
||||||
src/tools.h
|
src/tools.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
|
src/frames/boardconfigdialog.ui \
|
||||||
src/frames/filterdialog.ui \
|
src/frames/filterdialog.ui \
|
||||||
src/frames/aboutdialog.ui \
|
src/frames/aboutdialog.ui \
|
||||||
src/frames/mainwindow.ui \
|
src/frames/mainwindow.ui \
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
#include "aboutdialog.h"
|
#include "aboutdialog.h"
|
||||||
#include "ui_aboutdialog.h"
|
#include "ui_aboutdialog.h"
|
||||||
|
|
||||||
#ifdef unix
|
|
||||||
#include <gnu/libc-version.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AboutDialog::AboutDialog(QWidget *parent) :
|
AboutDialog::AboutDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::AboutDialog)
|
ui(new Ui::AboutDialog)
|
||||||
@@ -32,8 +28,10 @@ QString AboutDialog::getCompilerInfo()
|
|||||||
#elif __GNUC__
|
#elif __GNUC__
|
||||||
#ifdef __MINGW32__
|
#ifdef __MINGW32__
|
||||||
return QString("MinGW_%1.%2").arg(QString::number(__MINGW32_MAJOR_VERSION), QString::number(__MINGW32_MINOR_VERSION));
|
return QString("MinGW_%1.%2").arg(QString::number(__MINGW32_MAJOR_VERSION), QString::number(__MINGW32_MINOR_VERSION));
|
||||||
|
#elif __linux__
|
||||||
|
return QString("GLIBC_%1.%2").arg(QString::number(__GLIBC__), QString::number(__GLIBC_MINOR__));
|
||||||
#else
|
#else
|
||||||
return QString("GLIBC_%1").arg(gnu_get_libc_version());
|
return "unknown";
|
||||||
#endif
|
#endif
|
||||||
#elif _MSC_VER
|
#elif _MSC_VER
|
||||||
return QString("MSVC_%1").arg(_MSC_VER);
|
return QString("MSVC_%1").arg(_MSC_VER);
|
||||||
|
|||||||
81
src/frames/boardconfigdialog.cpp
Normal file
81
src/frames/boardconfigdialog.cpp
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#include "boardconfigdialog.h"
|
||||||
|
#include "ui_boardconfigdialog.h"
|
||||||
|
|
||||||
|
#include "../services/taskstateservice.h"
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
BoardConfigDialog::BoardConfigDialog(Board *b, QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::BoardConfigDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
ui->nameField->setText(b->getName());
|
||||||
|
ui->descriptionField->setPlainText(b->getDescription());
|
||||||
|
ui->showStatusCheckbox->setChecked(b->isShowingStatus());
|
||||||
|
if (!b->isAutoStatus())
|
||||||
|
{
|
||||||
|
QVector<Status> statuses = TaskStateService::getInstance()->getStatuses();
|
||||||
|
foreach (Status s, statuses)
|
||||||
|
{
|
||||||
|
ui->statusCombobox->addItem(s.getName(), s.getUUID());
|
||||||
|
}
|
||||||
|
ui->autoStatusCheckbox->setChecked(false);
|
||||||
|
ui->statusCombobox->setEnabled(true);
|
||||||
|
}
|
||||||
|
connect(ui->autoStatusCheckbox, &QCheckBox::stateChanged, this, &BoardConfigDialog::onAutoStatusCheckboxChange);
|
||||||
|
}
|
||||||
|
|
||||||
|
BoardConfigDialog::~BoardConfigDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString BoardConfigDialog::getName()
|
||||||
|
{
|
||||||
|
return ui->nameField->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString BoardConfigDialog::getDescription()
|
||||||
|
{
|
||||||
|
return ui->descriptionField->toPlainText();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BoardConfigDialog::isAutoStatus()
|
||||||
|
{
|
||||||
|
return ui->autoStatusCheckbox->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BoardConfigDialog::isShowingStatus()
|
||||||
|
{
|
||||||
|
return ui->showStatusCheckbox->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString BoardConfigDialog::getStatus()
|
||||||
|
{
|
||||||
|
if (!ui->autoStatusCheckbox->isChecked())
|
||||||
|
{
|
||||||
|
if (!ui->statusCombobox->currentData().isNull())
|
||||||
|
{
|
||||||
|
return ui->statusCombobox->currentData().toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
void BoardConfigDialog::onAutoStatusCheckboxChange(int state)
|
||||||
|
{
|
||||||
|
if (state == Qt::CheckState::Unchecked)
|
||||||
|
{
|
||||||
|
QVector<Status> statuses = TaskStateService::getInstance()->getStatuses();
|
||||||
|
foreach (Status s, statuses)
|
||||||
|
{
|
||||||
|
ui->statusCombobox->addItem(s.getName(), s.getUUID());
|
||||||
|
}
|
||||||
|
ui->statusCombobox->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->statusCombobox->setEnabled(false);
|
||||||
|
ui->statusCombobox->clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
33
src/frames/boardconfigdialog.h
Normal file
33
src/frames/boardconfigdialog.h
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#ifndef BOARDCONFIGDIALOG_H
|
||||||
|
#define BOARDCONFIGDIALOG_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
#include "../models/board.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class BoardConfigDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class BoardConfigDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit BoardConfigDialog(Board *b, QWidget *parent = nullptr);
|
||||||
|
~BoardConfigDialog();
|
||||||
|
|
||||||
|
const QString getName();
|
||||||
|
const QString getDescription();
|
||||||
|
bool isAutoStatus();
|
||||||
|
bool isShowingStatus();
|
||||||
|
const QString getStatus();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onAutoStatusCheckboxChange(int);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::BoardConfigDialog *ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BOARDCONFIGDIALOG_H
|
||||||
126
src/frames/boardconfigdialog.ui
Normal file
126
src/frames/boardconfigdialog.ui
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>BoardConfigDialog</class>
|
||||||
|
<widget class="QDialog" name="BoardConfigDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>379</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Board Configuration</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="nameField"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Description</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPlainTextEdit" name="descriptionField"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="showStatusCheckbox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show the board status</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="autoStatusCheckbox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Auto determine status</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Status</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="statusCombobox">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>BoardConfigDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>BoardConfigDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
@@ -3,22 +3,24 @@
|
|||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
|
||||||
FilterDialog::FilterDialog(QString dialogTitle, QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities, QWidget *parent) :
|
#include "../services/taskstateservice.h"
|
||||||
|
|
||||||
|
FilterDialog::FilterDialog(QString dialogTitle, QVector<Board*> boards, QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::FilterDialog)
|
ui(new Ui::FilterDialog)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
this->setWindowTitle(dialogTitle);
|
this->setWindowTitle(dialogTitle);
|
||||||
init(boards, status, priorities);
|
init(boards);
|
||||||
}
|
}
|
||||||
|
|
||||||
FilterDialog::FilterDialog(QString dialogTitle, Filter f, QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities, QWidget *parent) :
|
FilterDialog::FilterDialog(QString dialogTitle, Filter f, QVector<Board*> boards, QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::FilterDialog)
|
ui(new Ui::FilterDialog)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
this->setWindowTitle(dialogTitle);
|
this->setWindowTitle(dialogTitle);
|
||||||
init(boards, status, priorities);
|
init(boards);
|
||||||
|
|
||||||
ui->nameEdit->setText(f.getName());
|
ui->nameEdit->setText(f.getName());
|
||||||
ui->descriptionEdit->setPlainText(f.getDescription());
|
ui->descriptionEdit->setPlainText(f.getDescription());
|
||||||
@@ -59,7 +61,7 @@ FilterDialog::FilterDialog(QString dialogTitle, Filter f, QVector<Board*> boards
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void FilterDialog::init(QVector<Board *> boards, QVector<Status> status, QVector<Priority> priorities)
|
void FilterDialog::init(QVector<Board *> boards)
|
||||||
{
|
{
|
||||||
for (Board *b : boards)
|
for (Board *b : boards)
|
||||||
{
|
{
|
||||||
@@ -71,7 +73,8 @@ void FilterDialog::init(QVector<Board *> boards, QVector<Status> status, QVector
|
|||||||
ui->boardListWidget->addItem(item);
|
ui->boardListWidget->addItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Status s : status)
|
QVector<Status> statuses = TaskStateService::getInstance()->getStatuses();
|
||||||
|
for (Status s : statuses)
|
||||||
{
|
{
|
||||||
QListWidgetItem *item = new QListWidgetItem();
|
QListWidgetItem *item = new QListWidgetItem();
|
||||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||||
@@ -81,6 +84,7 @@ void FilterDialog::init(QVector<Board *> boards, QVector<Status> status, QVector
|
|||||||
ui->statusListWidget->addItem(item);
|
ui->statusListWidget->addItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<Priority> priorities = TaskStateService::getInstance()->getPriorities();
|
||||||
for (Priority p : priorities)
|
for (Priority p : priorities)
|
||||||
{
|
{
|
||||||
QListWidgetItem *item = new QListWidgetItem();
|
QListWidgetItem *item = new QListWidgetItem();
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ class FilterDialog : public QDialog
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit FilterDialog(QString dialogTitle, QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities, QWidget *parent = nullptr);
|
explicit FilterDialog(QString dialogTitle, QVector<Board*> boards, QWidget *parent = nullptr);
|
||||||
FilterDialog(QString dialogTitle, Filter f, QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities, QWidget *parent = nullptr);
|
FilterDialog(QString dialogTitle, Filter f, QVector<Board*> boards, QWidget *parent = nullptr);
|
||||||
~FilterDialog();
|
~FilterDialog();
|
||||||
const Filter getFilter();
|
const Filter getFilter();
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
Ui::FilterDialog *ui;
|
Ui::FilterDialog *ui;
|
||||||
|
|
||||||
void init(QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities);
|
void init(QVector<Board*> boards);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FILTERDIALOG_H
|
#endif // FILTERDIALOG_H
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#define STATUS_KEY "status"
|
#define STATUS_KEY "status"
|
||||||
#define BOARDS_KEY "boards"
|
#define BOARDS_KEY "boards"
|
||||||
#define FILTERS_KEY "filters"
|
#define FILTERS_KEY "filters"
|
||||||
|
#define DEFAULT_STATUS "default_status"
|
||||||
|
|
||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
@@ -17,13 +18,16 @@
|
|||||||
#include "namedialog.h"
|
#include "namedialog.h"
|
||||||
#include "taskdialog.h"
|
#include "taskdialog.h"
|
||||||
#include "filterdialog.h"
|
#include "filterdialog.h"
|
||||||
|
#include "boardconfigdialog.h"
|
||||||
#include "../tools.h"
|
#include "../tools.h"
|
||||||
|
#include "../services/taskstateservice.h"
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
: QMainWindow(parent)
|
: QMainWindow(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;
|
||||||
@@ -61,11 +65,12 @@ MainWindow::~MainWindow()
|
|||||||
|
|
||||||
void MainWindow::openPreferences()
|
void MainWindow::openPreferences()
|
||||||
{
|
{
|
||||||
PrefDialog dialog(status, priorities, this);
|
PrefDialog dialog(this);
|
||||||
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
||||||
{
|
{
|
||||||
this->priorities = dialog.getPriorities();
|
TaskStateService::getInstance()->updatePriorities(dialog.getPriorities());
|
||||||
this->status = dialog.getStatus();
|
TaskStateService::getInstance()->updateStatuses(dialog.getStatus());
|
||||||
|
TaskStateService::getInstance()->setDefaultStatus(dialog.getDefaultStatus());
|
||||||
save();
|
save();
|
||||||
redrawTaskTree();
|
redrawTaskTree();
|
||||||
}
|
}
|
||||||
@@ -153,7 +158,7 @@ void MainWindow::onNewTaskClick()
|
|||||||
{
|
{
|
||||||
if (selectedBoardIndex > -1)
|
if (selectedBoardIndex > -1)
|
||||||
{
|
{
|
||||||
TaskDialog dialog(status, priorities, this);
|
TaskDialog dialog(this);
|
||||||
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
||||||
{
|
{
|
||||||
Task t = dialog.getTask();
|
Task t = dialog.getTask();
|
||||||
@@ -169,7 +174,7 @@ void MainWindow::onNewTaskClick()
|
|||||||
|
|
||||||
void MainWindow::onNewFilterClick()
|
void MainWindow::onNewFilterClick()
|
||||||
{
|
{
|
||||||
FilterDialog dialog("New filter", boards, status, priorities, this);
|
FilterDialog dialog("New filter", boards, this);
|
||||||
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
||||||
{
|
{
|
||||||
Filter f = dialog.getFilter();
|
Filter f = dialog.getFilter();
|
||||||
@@ -195,7 +200,16 @@ void MainWindow::onBoardSelected(int i)
|
|||||||
{
|
{
|
||||||
Board *b = boards[selectedBoardIndex];
|
Board *b = boards[selectedBoardIndex];
|
||||||
ui->label->setText(b->getName());
|
ui->label->setText(b->getName());
|
||||||
|
if (b->getDescription().length() > 0)
|
||||||
|
{
|
||||||
ui->boardDescription->setText(b->getDescription());
|
ui->boardDescription->setText(b->getDescription());
|
||||||
|
ui->boardDescription->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->boardDescription->setText("No description");
|
||||||
|
ui->boardDescription->setEnabled(false);
|
||||||
|
}
|
||||||
ui->actionNew_task->setDisabled(false);
|
ui->actionNew_task->setDisabled(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -222,7 +236,16 @@ void MainWindow::onFilterSelected(int i)
|
|||||||
{
|
{
|
||||||
Filter f = filters[selectedFilterIndex];
|
Filter f = filters[selectedFilterIndex];
|
||||||
ui->label->setText(f.getName());
|
ui->label->setText(f.getName());
|
||||||
|
if (f.getDescription().length() > 0)
|
||||||
|
{
|
||||||
ui->boardDescription->setText(f.getDescription());
|
ui->boardDescription->setText(f.getDescription());
|
||||||
|
ui->boardDescription->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->boardDescription->setText("No description");
|
||||||
|
ui->boardDescription->setEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -237,13 +260,14 @@ void MainWindow::onEditTask(QTreeWidgetItem *item)
|
|||||||
Task *t = getSelectedTask();
|
Task *t = getSelectedTask();
|
||||||
if (t != nullptr)
|
if (t != nullptr)
|
||||||
{
|
{
|
||||||
TaskDialog dialog(t, status, priorities, this);
|
TaskDialog dialog(t, this);
|
||||||
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
||||||
{
|
{
|
||||||
Task editedTask = dialog.getTask();
|
Task editedTask = dialog.getTask();
|
||||||
t->update(editedTask);
|
t->update(editedTask);
|
||||||
updateTaskRow(item, editedTask);
|
updateTaskRow(item, editedTask);
|
||||||
save();
|
save();
|
||||||
|
redrawBoardStatus();
|
||||||
if (selectedFilterIndex > -1)
|
if (selectedFilterIndex > -1)
|
||||||
{
|
{
|
||||||
redrawTaskTree();
|
redrawTaskTree();
|
||||||
@@ -256,7 +280,11 @@ void MainWindow::onRemoveBoardMenu()
|
|||||||
{
|
{
|
||||||
if (menuSelectedBoardItem != nullptr)
|
if (menuSelectedBoardItem != nullptr)
|
||||||
{
|
{
|
||||||
int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row();
|
int i = ui->boardList->indexFromItem(menuSelectedBoardItem).row();
|
||||||
|
if (i == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
QMessageBox::StandardButton result = QMessageBox::question(this, "Delete a board", "Do you want to delete this board?");
|
QMessageBox::StandardButton result = QMessageBox::question(this, "Delete a board", "Do you want to delete this board?");
|
||||||
if (result == QMessageBox::Yes)
|
if (result == QMessageBox::Yes)
|
||||||
{
|
{
|
||||||
@@ -293,6 +321,10 @@ void MainWindow::onRemoveFilterMenu()
|
|||||||
if (menuSelectedFilterItem != nullptr)
|
if (menuSelectedFilterItem != nullptr)
|
||||||
{
|
{
|
||||||
int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row();
|
int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row();
|
||||||
|
if (i == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
QMessageBox::StandardButton result = QMessageBox::question(this, "Delete a filter", "Do you want to delete this filter?");
|
QMessageBox::StandardButton result = QMessageBox::question(this, "Delete a filter", "Do you want to delete this filter?");
|
||||||
if (result == QMessageBox::Yes)
|
if (result == QMessageBox::Yes)
|
||||||
{
|
{
|
||||||
@@ -312,20 +344,51 @@ void MainWindow::onEditNameBoardMenu()
|
|||||||
{
|
{
|
||||||
if (menuSelectedBoardItem != nullptr)
|
if (menuSelectedBoardItem != nullptr)
|
||||||
{
|
{
|
||||||
int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row();
|
int i = ui->boardList->indexFromItem(menuSelectedBoardItem).row();
|
||||||
|
if (i == -1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
Board *b = boards.at(i);
|
Board *b = boards.at(i);
|
||||||
NameDialog dialog("Edit board name", b->getName(), b->getDescription(), this);
|
BoardConfigDialog dialog(b, this);
|
||||||
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
||||||
{
|
{
|
||||||
QString newName = dialog.getChoosenName();
|
QString newName = dialog.getName();
|
||||||
QString newDesc = dialog.getDescription();
|
QString newDesc = dialog.getDescription();
|
||||||
b->setName(newName);
|
b->setName(newName);
|
||||||
b->setDescription(newDesc);
|
b->setDescription(newDesc);
|
||||||
|
b->setShowingStatus(dialog.isShowingStatus());
|
||||||
|
if (!dialog.isAutoStatus())
|
||||||
|
{
|
||||||
|
std::optional<Status> status = TaskStateService::getInstance()->getStatusByUUID(dialog.getStatus());
|
||||||
|
if (status.has_value())
|
||||||
|
{
|
||||||
|
b->setDirtyStatus(status.value());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
b->removeDirtyStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
b->removeDirtyStatus();
|
||||||
|
}
|
||||||
QListWidgetItem *item = ui->boardList->item(i);
|
QListWidgetItem *item = ui->boardList->item(i);
|
||||||
item->setText(newName);
|
item->setText(newName);
|
||||||
item->setToolTip(newDesc);
|
item->setToolTip(newDesc);
|
||||||
ui->label->setText(newName);
|
ui->label->setText(newName);
|
||||||
|
if (newDesc.length() > 0)
|
||||||
|
{
|
||||||
ui->boardDescription->setText(newDesc);
|
ui->boardDescription->setText(newDesc);
|
||||||
|
ui->boardDescription->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->boardDescription->setText("No description");
|
||||||
|
ui->boardDescription->setEnabled(false);
|
||||||
|
}
|
||||||
|
redrawBoardStatus();
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -346,7 +409,7 @@ void MainWindow::onEditFilterMenu()
|
|||||||
{
|
{
|
||||||
int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row();
|
int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row();
|
||||||
Filter f = filters[i];
|
Filter f = filters[i];
|
||||||
FilterDialog dialog("Edit the filter", f, boards, status, priorities, this);
|
FilterDialog dialog("Edit the filter", f, boards, this);
|
||||||
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
if (dialog.exec() == QDialog::DialogCode::Accepted)
|
||||||
{
|
{
|
||||||
Filter f = dialog.getFilter();
|
Filter f = dialog.getFilter();
|
||||||
@@ -355,7 +418,16 @@ void MainWindow::onEditFilterMenu()
|
|||||||
item->setText(f.getName());
|
item->setText(f.getName());
|
||||||
item->setToolTip(f.getDescription());
|
item->setToolTip(f.getDescription());
|
||||||
ui->label->setText(f.getName());
|
ui->label->setText(f.getName());
|
||||||
|
if (f.getDescription().length() > 0)
|
||||||
|
{
|
||||||
ui->boardDescription->setText(f.getDescription());
|
ui->boardDescription->setText(f.getDescription());
|
||||||
|
ui->boardDescription->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->boardDescription->setText("No description");
|
||||||
|
ui->boardDescription->setEnabled(false);
|
||||||
|
}
|
||||||
redrawTaskTree();
|
redrawTaskTree();
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
@@ -396,13 +468,15 @@ void MainWindow::init()
|
|||||||
QJsonArray jsonStatus = save[STATUS_KEY].toArray();
|
QJsonArray jsonStatus = save[STATUS_KEY].toArray();
|
||||||
QJsonArray jsonBoards = save[BOARDS_KEY].toArray();
|
QJsonArray jsonBoards = save[BOARDS_KEY].toArray();
|
||||||
QJsonArray jsonFilters = save[FILTERS_KEY].toArray();
|
QJsonArray jsonFilters = save[FILTERS_KEY].toArray();
|
||||||
|
QVector<Priority> priorities;
|
||||||
|
QVector<Status> statuses;
|
||||||
for (QJsonValueRef value : jsonPriorities)
|
for (QJsonValueRef value : jsonPriorities)
|
||||||
{
|
{
|
||||||
priorities.append(Priority(value.toObject()));
|
priorities.append(Priority(value.toObject()));
|
||||||
}
|
}
|
||||||
for (QJsonValueRef value : jsonStatus)
|
for (QJsonValueRef value : jsonStatus)
|
||||||
{
|
{
|
||||||
status.append(Status(value.toObject()));
|
statuses.append(Status(value.toObject()));
|
||||||
}
|
}
|
||||||
for (QJsonValueRef value : jsonBoards)
|
for (QJsonValueRef value : jsonBoards)
|
||||||
{
|
{
|
||||||
@@ -412,35 +486,24 @@ void MainWindow::init()
|
|||||||
{
|
{
|
||||||
filters.append(Filter(value.toObject()));
|
filters.append(Filter(value.toObject()));
|
||||||
}
|
}
|
||||||
|
TaskStateService::getInstance()->updatePriorities(priorities);
|
||||||
|
TaskStateService::getInstance()->updateStatuses(statuses);
|
||||||
|
QString defaultStatusUUID = save[DEFAULT_STATUS].toString("");
|
||||||
|
for (Status s : TaskStateService::getInstance()->getStatuses())
|
||||||
|
{
|
||||||
|
if (s.getUUID() == defaultStatusUUID)
|
||||||
|
{
|
||||||
|
TaskStateService::getInstance()->setDefaultStatus(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
redrawFilterList();
|
redrawFilterList();
|
||||||
redrawBoardList();
|
redrawBoardList();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->priorities = defaultPriorities();
|
|
||||||
this->status = defaultStatus();
|
|
||||||
save();
|
save();
|
||||||
}
|
}
|
||||||
|
|
||||||
QVector<Priority> MainWindow::defaultPriorities()
|
|
||||||
{
|
|
||||||
QVector<Priority> res;
|
|
||||||
res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "None", QColor(217, 217, 217)));
|
|
||||||
res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "Low", QColor(48, 157, 176)));
|
|
||||||
res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "Medium", QColor(176, 142, 48)));
|
|
||||||
res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "High", QColor(176, 67, 48)));
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVector<Status> MainWindow::defaultStatus()
|
|
||||||
{
|
|
||||||
QVector<Status> res;
|
|
||||||
res.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "To Do", QColor(143, 143, 143)));
|
|
||||||
res.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "Working on", QColor(95, 48, 176)));
|
|
||||||
res.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "Completed", QColor(48, 176, 73)));
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVector<Filter> MainWindow::defaultFilters()
|
QVector<Filter> MainWindow::defaultFilters()
|
||||||
{
|
{
|
||||||
QVector<Filter> res;
|
QVector<Filter> res;
|
||||||
@@ -449,54 +512,42 @@ QVector<Filter> MainWindow::defaultFilters()
|
|||||||
|
|
||||||
const QString MainWindow::getPriorityLabel(QString uuid)
|
const QString MainWindow::getPriorityLabel(QString uuid)
|
||||||
{
|
{
|
||||||
QString res = "";
|
std::optional<Priority> p = TaskStateService::getInstance()->getPriorityByUUID(uuid);
|
||||||
foreach (Priority p, priorities)
|
if (p.has_value())
|
||||||
{
|
{
|
||||||
if (p.getUUID() == uuid)
|
return p.value().getName();
|
||||||
{
|
|
||||||
res = p.getName();
|
|
||||||
}
|
}
|
||||||
}
|
return "";
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString MainWindow::getStatusLabel(QString uuid)
|
const QString MainWindow::getStatusLabel(QString uuid)
|
||||||
{
|
{
|
||||||
QString res = "";
|
std::optional<Status> s = TaskStateService::getInstance()->getStatusByUUID(uuid);
|
||||||
foreach (Status s, status)
|
if (s.has_value())
|
||||||
{
|
{
|
||||||
if (s.getUUID() == uuid)
|
return s.value().getName();
|
||||||
{
|
|
||||||
res = s.getName();
|
|
||||||
}
|
}
|
||||||
}
|
return "";
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const QColor MainWindow::getPriorityColor(QString uuid, QColor defaultColor)
|
const QColor MainWindow::getPriorityColor(QString uuid, QColor defaultColor)
|
||||||
{
|
{
|
||||||
QColor color = defaultColor;
|
std::optional<Priority> p = TaskStateService::getInstance()->getPriorityByUUID(uuid);
|
||||||
foreach (Priority p, priorities)
|
if (p.has_value())
|
||||||
{
|
{
|
||||||
if (p.getUUID() == uuid)
|
return p.value().getColor();
|
||||||
{
|
|
||||||
color = p.getColor();
|
|
||||||
}
|
}
|
||||||
}
|
return defaultColor;
|
||||||
return color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const QColor MainWindow::getStatusColor(QString uuid, QColor defaultColor)
|
const QColor MainWindow::getStatusColor(QString uuid, QColor defaultColor)
|
||||||
{
|
{
|
||||||
QColor color = defaultColor;
|
std::optional<Status> s = TaskStateService::getInstance()->getStatusByUUID(uuid);
|
||||||
foreach (Status s, status)
|
if (s.has_value())
|
||||||
{
|
{
|
||||||
if (s.getUUID() == uuid)
|
return s.value().getColor();
|
||||||
{
|
|
||||||
color = s.getColor();
|
|
||||||
}
|
}
|
||||||
}
|
return defaultColor;
|
||||||
return color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const QJsonDocument MainWindow::getJsonSave()
|
const QJsonDocument MainWindow::getJsonSave()
|
||||||
@@ -504,18 +555,24 @@ const QJsonDocument MainWindow::getJsonSave()
|
|||||||
QJsonDocument doc;
|
QJsonDocument doc;
|
||||||
QJsonObject obj;
|
QJsonObject obj;
|
||||||
QJsonArray jsonPriorities;
|
QJsonArray jsonPriorities;
|
||||||
foreach (Priority p, this->priorities) {
|
QJsonArray jsonStatus;
|
||||||
|
QJsonArray jsonBoards;
|
||||||
|
QJsonArray jsonFilters;
|
||||||
|
|
||||||
|
QVector<Priority> priorities = TaskStateService::getInstance()->getPriorities();
|
||||||
|
foreach (Priority p, priorities) {
|
||||||
jsonPriorities.append(p.toJson());
|
jsonPriorities.append(p.toJson());
|
||||||
}
|
}
|
||||||
QJsonArray jsonStatus;
|
|
||||||
foreach (Status s, this->status) {
|
QVector<Status> statuses = TaskStateService::getInstance()->getStatuses();
|
||||||
|
foreach (Status s, statuses) {
|
||||||
jsonStatus.append(s.toJson());
|
jsonStatus.append(s.toJson());
|
||||||
}
|
}
|
||||||
QJsonArray jsonBoards;
|
|
||||||
foreach (Board *b, this->boards) {
|
foreach (Board *b, this->boards) {
|
||||||
jsonBoards.append(b->toJson());
|
jsonBoards.append(b->toJson());
|
||||||
}
|
}
|
||||||
QJsonArray jsonFilters;
|
|
||||||
foreach (Filter f, this->filters)
|
foreach (Filter f, this->filters)
|
||||||
{
|
{
|
||||||
jsonFilters.append(f.toJson());
|
jsonFilters.append(f.toJson());
|
||||||
@@ -524,6 +581,7 @@ const QJsonDocument MainWindow::getJsonSave()
|
|||||||
obj[STATUS_KEY] = jsonStatus;
|
obj[STATUS_KEY] = jsonStatus;
|
||||||
obj[BOARDS_KEY] = jsonBoards;
|
obj[BOARDS_KEY] = jsonBoards;
|
||||||
obj[FILTERS_KEY] = jsonFilters;
|
obj[FILTERS_KEY] = jsonFilters;
|
||||||
|
obj[DEFAULT_STATUS] = TaskStateService::getInstance()->getDefaultStatus().getUUID();
|
||||||
doc.setObject(obj);
|
doc.setObject(obj);
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
@@ -648,9 +706,16 @@ void MainWindow::redrawTaskTree()
|
|||||||
{
|
{
|
||||||
delete l->takeTopLevelItem(i);
|
delete l->takeTopLevelItem(i);
|
||||||
}
|
}
|
||||||
if (selectedBoardIndex > -1)
|
if (selectedBoardIndex > -1 && selectedBoardIndex < boards.count())
|
||||||
{
|
{
|
||||||
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();
|
||||||
@@ -658,7 +723,7 @@ void MainWindow::redrawTaskTree()
|
|||||||
ui->taskList->addTopLevelItem(item);
|
ui->taskList->addTopLevelItem(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (selectedFilterIndex > -1)
|
else if (selectedFilterIndex > -1 && selectedFilterIndex < filters.count())
|
||||||
{
|
{
|
||||||
Filter f = filters[selectedFilterIndex];
|
Filter f = filters[selectedFilterIndex];
|
||||||
filterResult = f.filter(boards);
|
filterResult = f.filter(boards);
|
||||||
@@ -669,6 +734,26 @@ 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];
|
||||||
|
if (b->isShowingStatus())
|
||||||
|
{
|
||||||
|
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()
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ private:
|
|||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
|
// properties
|
||||||
|
|
||||||
int16_t selectedBoardIndex;
|
int16_t selectedBoardIndex;
|
||||||
int16_t selectedFilterIndex;
|
int16_t selectedFilterIndex;
|
||||||
|
|
||||||
@@ -57,11 +59,11 @@ private:
|
|||||||
|
|
||||||
QVector<Task*> filterResult;
|
QVector<Task*> filterResult;
|
||||||
|
|
||||||
QVector<Priority> priorities;
|
|
||||||
QVector<Status> status;
|
|
||||||
QVector<Board*> boards;
|
QVector<Board*> boards;
|
||||||
QVector<Filter> filters;
|
QVector<Filter> filters;
|
||||||
|
|
||||||
|
// functions
|
||||||
|
|
||||||
QVector<Priority> defaultPriorities();
|
QVector<Priority> defaultPriorities();
|
||||||
QVector<Status> defaultStatus();
|
QVector<Status> defaultStatus();
|
||||||
QVector<Filter> defaultFilters();
|
QVector<Filter> defaultFilters();
|
||||||
@@ -80,6 +82,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
|
||||||
|
|||||||
@@ -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">
|
||||||
@@ -52,6 +52,9 @@
|
|||||||
<height>250</height>
|
<height>250</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@@ -87,6 +90,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 +113,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">
|
||||||
|
|||||||
@@ -5,21 +5,25 @@
|
|||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
|
|
||||||
#include "../tools.h"
|
#include "../tools.h"
|
||||||
|
#include "../services/taskstateservice.h"
|
||||||
|
|
||||||
PrefDialog::PrefDialog(QVector<Status> status, QVector<Priority> priorities, QWidget *parent) :
|
PrefDialog::PrefDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::PrefDialog)
|
ui(new Ui::PrefDialog)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
QVector<Status> status = TaskStateService::getInstance()->getStatuses();
|
||||||
foreach (Status s, status)
|
foreach (Status s, status)
|
||||||
{
|
{
|
||||||
QListWidgetItem *item = new QListWidgetItem(s.getName());
|
QListWidgetItem *item = new QListWidgetItem(s.getName());
|
||||||
statusUUIDRef.append(s.getUUID());
|
statusUUIDRef.append(s.getUUID());
|
||||||
setItemColor(item, s.getColor());
|
setItemColor(item, s.getColor());
|
||||||
ui->statusListWidget->addItem(item);
|
ui->statusListWidget->addItem(item);
|
||||||
|
ui->defaultStatusCombobox->addItem(s.getName(), s.getUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<Priority> priorities = TaskStateService::getInstance()->getPriorities();
|
||||||
foreach (Priority p, priorities)
|
foreach (Priority p, priorities)
|
||||||
{
|
{
|
||||||
QListWidgetItem *item = new QListWidgetItem(p.getName());
|
QListWidgetItem *item = new QListWidgetItem(p.getName());
|
||||||
@@ -28,6 +32,8 @@ PrefDialog::PrefDialog(QVector<Status> status, QVector<Priority> priorities, QWi
|
|||||||
ui->priorityListWidget->addItem(item);
|
ui->priorityListWidget->addItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui->defaultStatusCombobox->setCurrentText(TaskStateService::getInstance()->getDefaultStatus().getName());
|
||||||
|
|
||||||
connect(ui->addStatusButton, &QPushButton::clicked, this, &PrefDialog::onAddStatusButtonClick);
|
connect(ui->addStatusButton, &QPushButton::clicked, this, &PrefDialog::onAddStatusButtonClick);
|
||||||
connect(ui->addPriorityButton, &QPushButton::clicked, this, &PrefDialog::onAddPriorityButtonClick);
|
connect(ui->addPriorityButton, &QPushButton::clicked, this, &PrefDialog::onAddPriorityButtonClick);
|
||||||
connect(ui->statusListWidget, &QListWidget::currentRowChanged, this, &PrefDialog::onItemSelectionChange);
|
connect(ui->statusListWidget, &QListWidget::currentRowChanged, this, &PrefDialog::onItemSelectionChange);
|
||||||
@@ -38,6 +44,8 @@ PrefDialog::PrefDialog(QVector<Status> status, QVector<Priority> priorities, QWi
|
|||||||
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()
|
||||||
@@ -75,6 +83,24 @@ QVector<Status> PrefDialog::getStatus()
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status PrefDialog::getDefaultStatus()
|
||||||
|
{
|
||||||
|
QVector<Status> status = TaskStateService::getInstance()->getStatuses();
|
||||||
|
QString uuid = ui->defaultStatusCombobox->currentData().toString();
|
||||||
|
for (Status s : status)
|
||||||
|
{
|
||||||
|
if (uuid == s.getUUID())
|
||||||
|
{
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (status.count() > 0)
|
||||||
|
{
|
||||||
|
return status[0];
|
||||||
|
}
|
||||||
|
return Status("", "", QColor::fromRgb(0, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
void PrefDialog::onAddStatusButtonClick()
|
void PrefDialog::onAddStatusButtonClick()
|
||||||
{
|
{
|
||||||
QColor bgColor = Tools::getRandomColor();
|
QColor bgColor = Tools::getRandomColor();
|
||||||
@@ -113,6 +139,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
|
||||||
{
|
{
|
||||||
@@ -208,6 +244,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);
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ class PrefDialog : public QDialog
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PrefDialog(QVector<Status> status, QVector<Priority> priorities, QWidget *parent = nullptr);
|
explicit PrefDialog(QWidget *parent = nullptr);
|
||||||
~PrefDialog();
|
~PrefDialog();
|
||||||
|
|
||||||
QVector<Priority> getPriorities();
|
QVector<Priority> getPriorities();
|
||||||
QVector<Status> getStatus();
|
QVector<Status> getStatus();
|
||||||
|
Status getDefaultStatus();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onAddStatusButtonClick();
|
void onAddStatusButtonClick();
|
||||||
@@ -31,7 +32,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;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<class>PrefDialog</class>
|
<class>PrefDialog</class>
|
||||||
<widget class="QDialog" name="PrefDialog">
|
<widget class="QDialog" name="PrefDialog">
|
||||||
<property name="windowModality">
|
<property name="windowModality">
|
||||||
<enum>Qt::ApplicationModal</enum>
|
<enum>Qt::WindowModality::ApplicationModal</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
@@ -41,10 +41,10 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="standardButtons">
|
<property name="standardButtons">
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
@@ -66,10 +66,10 @@
|
|||||||
<widget class="QListWidget" name="statusListWidget">
|
<widget class="QListWidget" name="statusListWidget">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>40</x>
|
||||||
<y>10</y>
|
<y>64</y>
|
||||||
<width>601</width>
|
<width>571</width>
|
||||||
<height>291</height>
|
<height>161</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>90</x>
|
<x>90</x>
|
||||||
<y>350</y>
|
<y>290</y>
|
||||||
<width>521</width>
|
<width>521</width>
|
||||||
<height>21</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>10</x>
|
||||||
<y>352</y>
|
<y>292</y>
|
||||||
<width>58</width>
|
<width>58</width>
|
||||||
<height>16</height>
|
<height>16</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>10</x>
|
<x>10</x>
|
||||||
<y>390</y>
|
<y>330</y>
|
||||||
<width>58</width>
|
<width>58</width>
|
||||||
<height>16</height>
|
<height>16</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -119,7 +119,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>90</x>
|
<x>90</x>
|
||||||
<y>390</y>
|
<y>330</y>
|
||||||
<width>113</width>
|
<width>113</width>
|
||||||
<height>21</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>210</x>
|
<x>210</x>
|
||||||
<y>390</y>
|
<y>330</y>
|
||||||
<width>26</width>
|
<width>26</width>
|
||||||
<height>22</height>
|
<height>22</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -148,9 +148,9 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>570</x>
|
<x>570</x>
|
||||||
<y>310</y>
|
<y>240</y>
|
||||||
<width>41</width>
|
<width>41</width>
|
||||||
<height>32</height>
|
<height>31</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>520</x>
|
<x>520</x>
|
||||||
<y>310</y>
|
<y>240</y>
|
||||||
<width>41</width>
|
<width>41</width>
|
||||||
<height>31</height>
|
<height>31</height>
|
||||||
</rect>
|
</rect>
|
||||||
@@ -173,6 +173,138 @@
|
|||||||
<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>10</x>
|
||||||
|
<y>240</y>
|
||||||
|
<width>51</width>
|
||||||
|
<height>31</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>240</y>
|
||||||
|
<width>51</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Up</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>11</x>
|
||||||
|
<y>4</y>
|
||||||
|
<width>601</width>
|
||||||
|
<height>41</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string><html><head/><body><p>Sort status by display priority. The lowest status will only be displayed if higher statuses are not assigned to the board.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>79</y>
|
||||||
|
<width>20</width>
|
||||||
|
<height>121</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>41</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Low</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>204</y>
|
||||||
|
<width>41</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>High</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="Line" name="line_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>360</y>
|
||||||
|
<width>591</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>390</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>18</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Default (for new task)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="defaultStatusCombobox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>440</x>
|
||||||
|
<y>384</y>
|
||||||
|
<width>171</width>
|
||||||
|
<height>26</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tab_2">
|
<widget class="QWidget" name="tab_2">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
|
|||||||
@@ -3,48 +3,29 @@
|
|||||||
|
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
|
|
||||||
TaskDialog::TaskDialog(QVector<Status> status, QVector<Priority> priorities, QWidget *parent) :
|
#include "../services/taskstateservice.h"
|
||||||
|
|
||||||
|
TaskDialog::TaskDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::TaskDialog)
|
ui(new Ui::TaskDialog)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
init();
|
||||||
this->setWindowTitle("New task");
|
this->setWindowTitle("New task");
|
||||||
this->status = status;
|
|
||||||
this->priorities = priorities;
|
|
||||||
|
|
||||||
foreach (Status s, this->status)
|
|
||||||
{
|
|
||||||
ui->statusCombo->addItem(s.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (Priority p, this->priorities)
|
|
||||||
{
|
|
||||||
ui->priorityCombo->addItem(p.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
QDate expectedFor = QDate::currentDate();
|
QDate expectedFor = QDate::currentDate();
|
||||||
expectedFor = expectedFor.addDays(10);
|
expectedFor = expectedFor.addDays(10);
|
||||||
ui->expectedForEdit->setDate(expectedFor);
|
ui->expectedForEdit->setDate(expectedFor);
|
||||||
|
ui->statusCombo->setCurrentText(TaskStateService::getInstance()->getDefaultStatus().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskDialog::TaskDialog(Task *t, QVector<Status> status, QVector<Priority> priorities, QWidget *parent) :
|
TaskDialog::TaskDialog(Task *t, QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::TaskDialog)
|
ui(new Ui::TaskDialog)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
init();
|
||||||
this->setWindowTitle("Edit task");
|
this->setWindowTitle("Edit task");
|
||||||
this->status = status;
|
|
||||||
this->priorities = priorities;
|
|
||||||
|
|
||||||
foreach (Status s, this->status)
|
|
||||||
{
|
|
||||||
ui->statusCombo->addItem(s.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (Priority p, this->priorities)
|
|
||||||
{
|
|
||||||
ui->priorityCombo->addItem(p.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
// set fields
|
// set fields
|
||||||
ui->nameEdit->setText(t->getTitle());
|
ui->nameEdit->setText(t->getTitle());
|
||||||
@@ -53,34 +34,12 @@ TaskDialog::TaskDialog(Task *t, QVector<Status> status, QVector<Priority> priori
|
|||||||
|
|
||||||
if (t->getPriorityUUID().length() > 0)
|
if (t->getPriorityUUID().length() > 0)
|
||||||
{
|
{
|
||||||
int16_t refindex = -1;
|
initSelectionCombobox(t->getPriorityUUID(), ui->priorityCombo);
|
||||||
for (uint16_t i = 0; i < this->priorities.count(); i++)
|
|
||||||
{
|
|
||||||
if (this->priorities[i].getUUID() == t->getPriorityUUID())
|
|
||||||
{
|
|
||||||
refindex = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (refindex > -1)
|
|
||||||
{
|
|
||||||
ui->priorityCombo->setCurrentIndex(refindex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (t->getStatusUUID().length() > 0)
|
if (t->getStatusUUID().length() > 0)
|
||||||
{
|
{
|
||||||
int16_t refindex = -1;
|
initSelectionCombobox(t->getStatusUUID(), ui->statusCombo);
|
||||||
for (uint16_t i = 0; i < this->status.count(); i++)
|
|
||||||
{
|
|
||||||
if (this->status[i].getUUID() == t->getStatusUUID())
|
|
||||||
{
|
|
||||||
refindex = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (refindex > -1)
|
|
||||||
{
|
|
||||||
ui->statusCombo->setCurrentIndex(refindex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -96,16 +55,42 @@ Task TaskDialog::getTask()
|
|||||||
QString description = ui->descriptionEdit->toMarkdown(QTextDocument::MarkdownFeature::MarkdownDialectCommonMark);
|
QString description = ui->descriptionEdit->toMarkdown(QTextDocument::MarkdownFeature::MarkdownDialectCommonMark);
|
||||||
QDate expectedFor = ui->expectedForEdit->date();
|
QDate expectedFor = ui->expectedForEdit->date();
|
||||||
QString priorityUUID = "";
|
QString priorityUUID = "";
|
||||||
if (ui->priorityCombo->currentIndex() > -1)
|
if (!ui->priorityCombo->currentData().isNull())
|
||||||
{
|
{
|
||||||
Priority priority = priorities[ui->priorityCombo->currentIndex()];
|
priorityUUID = ui->priorityCombo->currentData().toString();
|
||||||
priorityUUID = priority.getUUID();
|
|
||||||
}
|
}
|
||||||
QString statusUUID = "";
|
QString statusUUID = "";
|
||||||
if (ui->statusCombo->currentIndex() > -1)
|
if (!ui->statusCombo->currentData().isNull())
|
||||||
{
|
{
|
||||||
Status s = status[ui->statusCombo->currentIndex()];
|
statusUUID = ui->statusCombo->currentData().toString();
|
||||||
statusUUID = s.getUUID();
|
|
||||||
}
|
}
|
||||||
return Task(title, description, expectedFor, priorityUUID, statusUUID);
|
return Task(title, description, expectedFor, priorityUUID, statusUUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TaskDialog::init()
|
||||||
|
{
|
||||||
|
QVector<Status> statuses = TaskStateService::getInstance()->getStatuses();
|
||||||
|
QVector<Priority> priorities = TaskStateService::getInstance()->getPriorities();
|
||||||
|
|
||||||
|
foreach (Status s, statuses)
|
||||||
|
{
|
||||||
|
ui->statusCombo->addItem(s.getName(), s.getUUID());
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Priority p, priorities)
|
||||||
|
{
|
||||||
|
ui->priorityCombo->addItem(p.getName(), p.getUUID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskDialog::initSelectionCombobox(QString uuid, QComboBox *cbx)
|
||||||
|
{
|
||||||
|
for (uint16_t i = 0; i < cbx->count(); i++)
|
||||||
|
{
|
||||||
|
if (cbx->itemData(i).toString() == uuid)
|
||||||
|
{
|
||||||
|
cbx->setCurrentIndex(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
|
#include <QComboBox>
|
||||||
|
|
||||||
#include "../models/status.h"
|
#include "../models/status.h"
|
||||||
#include "../models/priority.h"
|
#include "../models/priority.h"
|
||||||
@@ -17,8 +18,8 @@ class TaskDialog : public QDialog
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit TaskDialog(QVector<Status>, QVector<Priority>, QWidget *parent = nullptr);
|
explicit TaskDialog(QWidget *parent = nullptr);
|
||||||
TaskDialog(Task*, QVector<Status>, QVector<Priority>, QWidget *parent = nullptr);
|
TaskDialog(Task *t, QWidget *parent = nullptr);
|
||||||
~TaskDialog();
|
~TaskDialog();
|
||||||
|
|
||||||
Task getTask();
|
Task getTask();
|
||||||
@@ -26,8 +27,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
Ui::TaskDialog *ui;
|
Ui::TaskDialog *ui;
|
||||||
|
|
||||||
QVector<Status> status;
|
void init();
|
||||||
QVector<Priority> priorities;
|
void initSelectionCombobox(QString uuid, QComboBox *cbx);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TASKDIALOG_H
|
#endif // TASKDIALOG_H
|
||||||
|
|||||||
@@ -4,11 +4,16 @@
|
|||||||
#define TASKS_KEY "tasks"
|
#define TASKS_KEY "tasks"
|
||||||
#define UUID_KEY "uuid"
|
#define UUID_KEY "uuid"
|
||||||
#define DESCRIPTION_KEY "description"
|
#define DESCRIPTION_KEY "description"
|
||||||
|
#define AUTOSTATUS_KEY "auto_status"
|
||||||
|
#define STATUS_KEY "status"
|
||||||
|
#define SHOW_STATUS_KEY "show_status"
|
||||||
|
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#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();
|
||||||
@@ -23,6 +28,9 @@ Board::Board(QJsonObject obj)
|
|||||||
this->uuid = obj[UUID_KEY].toString(uuid.toString(QUuid::WithoutBraces));
|
this->uuid = obj[UUID_KEY].toString(uuid.toString(QUuid::WithoutBraces));
|
||||||
this->name = obj[NAME_KEY].toString("!Missing name!");
|
this->name = obj[NAME_KEY].toString("!Missing name!");
|
||||||
this->description = obj[DESCRIPTION_KEY].toString("");
|
this->description = obj[DESCRIPTION_KEY].toString("");
|
||||||
|
this->autoStatus = obj[AUTOSTATUS_KEY].toBool(true);
|
||||||
|
this->statusUUID = obj[STATUS_KEY].toString();
|
||||||
|
this->showStatus = obj[SHOW_STATUS_KEY].toBool(!this->autoStatus);
|
||||||
QJsonArray jsonTasks = obj[TASKS_KEY].toArray();
|
QJsonArray jsonTasks = obj[TASKS_KEY].toArray();
|
||||||
foreach (QJsonValue value, jsonTasks) {
|
foreach (QJsonValue value, jsonTasks) {
|
||||||
Task *t = new Task(value.toObject());
|
Task *t = new Task(value.toObject());
|
||||||
@@ -54,6 +62,37 @@ const QString Board::getDescription()
|
|||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Board::isShowingStatus()
|
||||||
|
{
|
||||||
|
return showStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Board::isAutoStatus()
|
||||||
|
{
|
||||||
|
return autoStatus;
|
||||||
|
}
|
||||||
|
|
||||||
void Board::setName(const QString name)
|
void Board::setName(const QString name)
|
||||||
{
|
{
|
||||||
this->name = name;
|
this->name = name;
|
||||||
@@ -64,6 +103,23 @@ void Board::setDescription(const QString description)
|
|||||||
this->description = description;
|
this->description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Board::setDirtyStatus(Status s)
|
||||||
|
{
|
||||||
|
this->autoStatus = false;
|
||||||
|
this->statusUUID = s.getUUID();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Board::setShowingStatus(bool v)
|
||||||
|
{
|
||||||
|
this->showStatus = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Board::removeDirtyStatus()
|
||||||
|
{
|
||||||
|
this->autoStatus = true;
|
||||||
|
this->statusUUID = "";
|
||||||
|
}
|
||||||
|
|
||||||
void Board::add(Task t)
|
void Board::add(Task t)
|
||||||
{
|
{
|
||||||
tasks.append(new Task(t));
|
tasks.append(new Task(t));
|
||||||
@@ -100,8 +156,11 @@ const QJsonObject Board::toJson()
|
|||||||
QJsonObject obj;
|
QJsonObject obj;
|
||||||
obj[NAME_KEY] = this->name;
|
obj[NAME_KEY] = this->name;
|
||||||
obj[UUID_KEY] = this->uuid;
|
obj[UUID_KEY] = this->uuid;
|
||||||
|
obj[STATUS_KEY] = this->statusUUID;
|
||||||
|
obj[AUTOSTATUS_KEY] = this->autoStatus;
|
||||||
obj[TASKS_KEY] = array;
|
obj[TASKS_KEY] = array;
|
||||||
obj[DESCRIPTION_KEY] = description;
|
obj[DESCRIPTION_KEY] = description;
|
||||||
|
obj[SHOW_STATUS_KEY] = this->showStatus;
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
#include "status.h"
|
||||||
|
|
||||||
class Board
|
class Board
|
||||||
{
|
{
|
||||||
@@ -17,10 +18,19 @@ public:
|
|||||||
const QString getUuid();
|
const QString getUuid();
|
||||||
const QString getName();
|
const QString getName();
|
||||||
const QString getDescription();
|
const QString getDescription();
|
||||||
|
const QString getStatus();
|
||||||
|
bool isShowingStatus();
|
||||||
|
bool isAutoStatus();
|
||||||
|
|
||||||
void setName(const QString name);
|
void setName(const QString name);
|
||||||
void setDescription(const QString description);
|
void setDescription(const QString description);
|
||||||
|
void setDirtyStatus(Status s);
|
||||||
|
void setShowingStatus(bool);
|
||||||
|
void removeDirtyStatus();
|
||||||
|
|
||||||
void add(Task);
|
void add(Task);
|
||||||
void remove(uint16_t index);
|
void remove(uint16_t index);
|
||||||
|
|
||||||
Task *taskAt(uint16_t);
|
Task *taskAt(uint16_t);
|
||||||
const QVector<Task*> getTasks();
|
const QVector<Task*> getTasks();
|
||||||
|
|
||||||
@@ -32,6 +42,10 @@ private:
|
|||||||
QString name;
|
QString name;
|
||||||
QString description;
|
QString description;
|
||||||
|
|
||||||
|
QString statusUUID;
|
||||||
|
bool autoStatus;
|
||||||
|
bool showStatus;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BOARD_H
|
#endif // BOARD_H
|
||||||
|
|||||||
92
src/services/taskstateservice.cpp
Normal file
92
src/services/taskstateservice.cpp
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
#include "taskstateservice.h"
|
||||||
|
|
||||||
|
TaskStateService *TaskStateService::instance = nullptr;
|
||||||
|
|
||||||
|
TaskStateService *TaskStateService::getInstance()
|
||||||
|
{
|
||||||
|
if (instance == nullptr)
|
||||||
|
{
|
||||||
|
instance = new TaskStateService();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskStateService::updateStatuses(QVector<Status> statuses)
|
||||||
|
{
|
||||||
|
this->statuses = statuses;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskStateService::updatePriorities(QVector<Priority> priorities)
|
||||||
|
{
|
||||||
|
this->priorities = priorities;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskStateService::setDefaultStatus(Status s)
|
||||||
|
{
|
||||||
|
this->defaultStatus = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<Status> TaskStateService::getStatuses()
|
||||||
|
{
|
||||||
|
return statuses;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<Priority> TaskStateService::getPriorities()
|
||||||
|
{
|
||||||
|
return priorities;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status TaskStateService::getDefaultStatus()
|
||||||
|
{
|
||||||
|
return this->defaultStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::optional<Status> TaskStateService::getStatusByUUID(QString uuid)
|
||||||
|
{
|
||||||
|
foreach (Status s, statuses) {
|
||||||
|
if (s.getUUID() == uuid)
|
||||||
|
{
|
||||||
|
return std::optional{s};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return std::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::optional<Priority> TaskStateService::getPriorityByUUID(QString uuid)
|
||||||
|
{
|
||||||
|
foreach (Priority p, priorities) {
|
||||||
|
if (p.getUUID() == uuid)
|
||||||
|
{
|
||||||
|
return std::optional{p};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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)));
|
||||||
|
priorities.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "Low", QColor(48, 157, 176)));
|
||||||
|
priorities.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "Medium", QColor(176, 142, 48)));
|
||||||
|
priorities.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "High", QColor(176, 67, 48)));
|
||||||
|
|
||||||
|
Status defaultStatus = Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "To Do", QColor(143, 143, 143));
|
||||||
|
statuses.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "Completed", QColor(48, 176, 73)));
|
||||||
|
statuses.append(defaultStatus);
|
||||||
|
statuses.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "Working on", QColor(95, 48, 176)));
|
||||||
|
this->defaultStatus = defaultStatus;
|
||||||
|
}
|
||||||
37
src/services/taskstateservice.h
Normal file
37
src/services/taskstateservice.h
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#ifndef TASKSTATESERVICE_H
|
||||||
|
#define TASKSTATESERVICE_H
|
||||||
|
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
#include "../models/priority.h"
|
||||||
|
#include "../models/status.h"
|
||||||
|
|
||||||
|
class TaskStateService
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static TaskStateService *getInstance();
|
||||||
|
|
||||||
|
void updateStatuses(QVector<Status>);
|
||||||
|
void updatePriorities(QVector<Priority>);
|
||||||
|
void setDefaultStatus(Status s);
|
||||||
|
|
||||||
|
QVector<Status> getStatuses();
|
||||||
|
QVector<Priority> getPriorities();
|
||||||
|
Status getDefaultStatus();
|
||||||
|
|
||||||
|
std::optional<Status> getStatusByUUID(QString);
|
||||||
|
std::optional<Priority> getPriorityByUUID(QString);
|
||||||
|
int16_t getStatusWeight(QString uuid);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
TaskStateService();
|
||||||
|
static TaskStateService *instance;
|
||||||
|
|
||||||
|
Status defaultStatus = Status("", "", QColor::fromRgb(0,0,0));
|
||||||
|
|
||||||
|
QVector<Priority> priorities;
|
||||||
|
QVector<Status> statuses;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TASKSTATESERVICE_H
|
||||||
@@ -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));
|
||||||
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user