From 69f4ec570ae6d9ecaf9ad9cf3df38291c483043d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lie=20Delhaie?= Date: Mon, 12 Jun 2023 17:34:39 +0200 Subject: [PATCH] No status option for boards, starting dev general prefs --- TaskBoard.pro | 8 +++-- src/frames/boardconfigdialog.cpp | 16 ++++----- src/frames/boardconfigdialog.h | 2 +- src/frames/boardconfigdialog.ui | 38 ++++++++++++++++----- src/frames/mainwindow.cpp | 18 +++------- src/frames/prefdialog.ui | 46 ++++++++++++++++++++++++++ src/models/board.cpp | 42 +++++++++++++++++------ src/models/board.h | 13 +++++--- src/models/generalpreferences.cpp | 55 +++++++++++++++++++++++++++++++ src/models/generalpreferences.h | 31 +++++++++++++++++ src/services/configservice.cpp | 33 +++++++++++++++++++ src/services/configservice.h | 22 +++++++++++++ 12 files changed, 275 insertions(+), 49 deletions(-) create mode 100644 src/models/generalpreferences.cpp create mode 100644 src/models/generalpreferences.h create mode 100644 src/services/configservice.cpp create mode 100644 src/services/configservice.h diff --git a/TaskBoard.pro b/TaskBoard.pro index f00e34e..b350fbd 100644 --- a/TaskBoard.pro +++ b/TaskBoard.pro @@ -4,8 +4,8 @@ greaterThan(QT_MAJOR_VERSION, 5): QT += widgets CONFIG += c++17 -win32:VERSION = 0.3.0.0 # major.minor.patch.build -else:VERSION = 0.3.0 # major.minor.patch +win32:VERSION = 0.3.1.0 # major.minor.patch.build +else:VERSION = 0.3.1 # major.minor.patch DEFINES += APP_VERSION=\"\\\"$${VERSION}\\\"\" DEFINES += APP_NAME=\"\\\"TaskBoard\\\"\" @@ -77,10 +77,12 @@ SOURCES += \ src/frames/namedialog.cpp \ src/frames/prefdialog.cpp \ src/models/filter.cpp \ + src/models/generalpreferences.cpp \ src/models/priority.cpp \ src/models/status.cpp \ src/models/task.cpp \ src/frames/taskdialog.cpp \ + src/services/configservice.cpp \ src/services/taskstateservice.cpp \ src/tools.cpp @@ -93,10 +95,12 @@ HEADERS += \ src/frames/namedialog.h \ src/frames/prefdialog.h \ src/models/filter.h \ + src/models/generalpreferences.h \ src/models/priority.h \ src/models/status.h \ src/models/task.h \ src/frames/taskdialog.h \ + src/services/configservice.h \ src/services/taskstateservice.h \ src/tools.h diff --git a/src/frames/boardconfigdialog.cpp b/src/frames/boardconfigdialog.cpp index f2ebdd6..468f6af 100644 --- a/src/frames/boardconfigdialog.cpp +++ b/src/frames/boardconfigdialog.cpp @@ -11,17 +11,17 @@ BoardConfigDialog::BoardConfigDialog(Board *b, QWidget *parent) : ui->setupUi(this); ui->nameField->setText(b->getName()); ui->descriptionField->setPlainText(b->getDescription()); - if (!b->isAutoStatus()) + ui->boardStatusModeComboBox->setCurrentIndex(b->getStatusMode()); + if (b->getStatusMode() == CUSTOM_STATUS_MODE) { QVector 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); + connect(ui->boardStatusModeComboBox, &QComboBox::currentIndexChanged, this, &BoardConfigDialog::onAutoStatusCheckboxChange); } BoardConfigDialog::~BoardConfigDialog() @@ -39,14 +39,14 @@ const QString BoardConfigDialog::getDescription() return ui->descriptionField->toPlainText(); } -bool BoardConfigDialog::isAutoStatus() +uint8_t BoardConfigDialog::getBoardStatusMode() { - return ui->autoStatusCheckbox->isChecked(); + return ui->boardStatusModeComboBox->currentIndex(); } const QString BoardConfigDialog::getStatus() { - if (!ui->autoStatusCheckbox->isChecked()) + if (ui->boardStatusModeComboBox->currentIndex() == CUSTOM_STATUS_MODE) { if (!ui->statusCombobox->currentData().isNull()) { @@ -56,9 +56,9 @@ const QString BoardConfigDialog::getStatus() return ""; } -void BoardConfigDialog::onAutoStatusCheckboxChange(int state) +void BoardConfigDialog::onAutoStatusCheckboxChange(int status) { - if (state == Qt::CheckState::Unchecked) + if (status == CUSTOM_STATUS_MODE) { QVector statuses = TaskStateService::getInstance()->getStatuses(); foreach (Status s, statuses) diff --git a/src/frames/boardconfigdialog.h b/src/frames/boardconfigdialog.h index fe2c88f..3e84056 100644 --- a/src/frames/boardconfigdialog.h +++ b/src/frames/boardconfigdialog.h @@ -19,7 +19,7 @@ public: const QString getName(); const QString getDescription(); - bool isAutoStatus(); + uint8_t getBoardStatusMode(); const QString getStatus(); private slots: diff --git a/src/frames/boardconfigdialog.ui b/src/frames/boardconfigdialog.ui index 4eab8d5..eb07636 100644 --- a/src/frames/boardconfigdialog.ui +++ b/src/frames/boardconfigdialog.ui @@ -42,17 +42,37 @@ - - - Auto determine status - - - true - - + + + + + Board status mode + + + + + + + + Auto + + + + + Manual + + + + + None + + + + + - + diff --git a/src/frames/mainwindow.cpp b/src/frames/mainwindow.cpp index eaec679..5add94a 100644 --- a/src/frames/mainwindow.cpp +++ b/src/frames/mainwindow.cpp @@ -355,22 +355,12 @@ void MainWindow::onEditNameBoardMenu() QString newDesc = dialog.getDescription(); b->setName(newName); b->setDescription(newDesc); - if (!dialog.isAutoStatus()) + std::optional status = TaskStateService::getInstance()->getStatusByUUID(dialog.getStatus()); + if (status.has_value()) { - std::optional status = TaskStateService::getInstance()->getStatusByUUID(dialog.getStatus()); - if (status.has_value()) - { - b->setDirtyStatus(status.value()); - } - else - { - b->removeDirtyStatus(); - } - } - else - { - b->removeDirtyStatus(); + b->setStatus(status.value()); } + b->setStatusMode(dialog.getBoardStatusMode()); QListWidgetItem *item = ui->boardList->item(i); item->setText(newName); item->setToolTip(newDesc); diff --git a/src/frames/prefdialog.ui b/src/frames/prefdialog.ui index 5b20809..64ba40a 100644 --- a/src/frames/prefdialog.ui +++ b/src/frames/prefdialog.ui @@ -59,6 +59,52 @@ 0 + + + General + + + + + 10 + 10 + 161 + 18 + + + + + true + + + + At startup + + + + + + 10 + 40 + 81 + 18 + + + + Open... + + + + + + 100 + 35 + 521 + 26 + + + + Status diff --git a/src/models/board.cpp b/src/models/board.cpp index c6a61e5..a21ed08 100644 --- a/src/models/board.cpp +++ b/src/models/board.cpp @@ -5,6 +5,7 @@ #define UUID_KEY "uuid" #define DESCRIPTION_KEY "description" #define AUTOSTATUS_KEY "auto_status" +#define STATUSMODE_KEY "status_mode" #define STATUS_KEY "status" #include @@ -19,6 +20,7 @@ Board::Board(QString name, QString description) this->uuid = uuid.toString(QUuid::WithoutBraces); this->name = name; this->description = description; + this->statusMode = NO_STATUS_MODE; } Board::Board(QJsonObject obj) @@ -27,7 +29,19 @@ Board::Board(QJsonObject obj) this->uuid = obj[UUID_KEY].toString(uuid.toString(QUuid::WithoutBraces)); this->name = obj[NAME_KEY].toString("!Missing name!"); this->description = obj[DESCRIPTION_KEY].toString(""); - this->autoStatus = obj[AUTOSTATUS_KEY].toBool(true); + if (obj.contains(AUTOSTATUS_KEY)) + { + this->statusMode = obj[AUTOSTATUS_KEY].toBool(true) ? AUTO_STATUS_MODE : CUSTOM_STATUS_MODE; + } + else + { + int val = obj[STATUSMODE_KEY].toInt(NO_STATUS_MODE); + if (val > std::numeric_limits::max() || val < 0) + { + val = AUTO_STATUS_MODE; + } + this->statusMode = val; + } this->statusUUID = obj[STATUS_KEY].toString(); QJsonArray jsonTasks = obj[TASKS_KEY].toArray(); foreach (QJsonValue value, jsonTasks) { @@ -62,7 +76,7 @@ const QString Board::getDescription() const QString Board::getStatus() { - if (autoStatus) + if (statusMode == AUTO_STATUS_MODE) { TaskStateService *tss = TaskStateService::getInstance(); int16_t h = -1; @@ -78,12 +92,16 @@ const QString Board::getStatus() } return suuid; } + else if (statusMode == NO_STATUS_MODE) + { + return ""; + } return statusUUID; } -bool Board::isAutoStatus() +uint8_t Board::getStatusMode() { - return autoStatus; + return statusMode; } void Board::setName(const QString name) @@ -96,16 +114,20 @@ void Board::setDescription(const QString description) this->description = description; } -void Board::setDirtyStatus(Status s) +void Board::setStatus(Status s) { - this->autoStatus = false; + this->statusMode = CUSTOM_STATUS_MODE; this->statusUUID = s.getUUID(); } -void Board::removeDirtyStatus() + +void Board::setStatusMode(uint8_t mode) { - this->autoStatus = true; - this->statusUUID = ""; + this->statusMode = mode; + if (mode != CUSTOM_STATUS_MODE) + { + this->statusUUID = ""; + } } void Board::add(Task t) @@ -145,7 +167,7 @@ const QJsonObject Board::toJson() obj[NAME_KEY] = this->name; obj[UUID_KEY] = this->uuid; obj[STATUS_KEY] = this->statusUUID; - obj[AUTOSTATUS_KEY] = this->autoStatus; + obj[STATUSMODE_KEY] = this->statusMode; obj[TASKS_KEY] = array; obj[DESCRIPTION_KEY] = description; return obj; diff --git a/src/models/board.h b/src/models/board.h index 3f1343d..250340b 100644 --- a/src/models/board.h +++ b/src/models/board.h @@ -8,6 +8,10 @@ #include "task.h" #include "status.h" +#define AUTO_STATUS_MODE 0 +#define CUSTOM_STATUS_MODE 1 +#define NO_STATUS_MODE 2 + class Board { public: @@ -19,12 +23,12 @@ public: const QString getName(); const QString getDescription(); const QString getStatus(); - bool isAutoStatus(); + uint8_t getStatusMode(); void setName(const QString name); void setDescription(const QString description); - void setDirtyStatus(Status s); - void removeDirtyStatus(); + void setStatus(Status s); + void setStatusMode(uint8_t mode); void add(Task); void remove(uint16_t index); @@ -41,8 +45,7 @@ private: QString description; QString statusUUID; - bool autoStatus; - + uint8_t statusMode; }; #endif // BOARD_H diff --git a/src/models/generalpreferences.cpp b/src/models/generalpreferences.cpp new file mode 100644 index 0000000..fe91916 --- /dev/null +++ b/src/models/generalpreferences.cpp @@ -0,0 +1,55 @@ +#include "generalpreferences.h" + +#define PRELOAD_TYPE_KEY "preload_type" +#define PRELOAD_FACE_UUID_KEY "pr_face_uuid" + +GeneralPreferences::GeneralPreferences() +{ + this->preloadType = NO_PRELOAD_TYPE; + this->preloadUUID = ""; +} + +GeneralPreferences::GeneralPreferences(QJsonObject obj) +{ + int val = obj[PRELOAD_TYPE_KEY].toInt(NO_PRELOAD_TYPE); + if (val > std::numeric_limits::max() || val < 0) + { + val = NO_PRELOAD_TYPE; + } + this->preloadType = val; + this->preloadUUID = obj[PRELOAD_FACE_UUID_KEY].toString(""); +} + +uint8_t GeneralPreferences::getPreloadType() +{ + return this->preloadType; +} + +std::optional GeneralPreferences::getPreloadUUID() +{ + if (this->preloadType == NO_PRELOAD_TYPE || this->preloadUUID.isEmpty()) + { + return std::nullopt; + } + return std::optional {this->preloadUUID}; +} + +void GeneralPreferences::setPreloadType(uint8_t type) +{ + this->preloadType = type; +} + +void GeneralPreferences::setPreloadUUID(QString uuid) +{ + this->preloadUUID = uuid; +} + +const QJsonObject GeneralPreferences::toJson() +{ + QJsonObject obj; + + obj[PRELOAD_TYPE_KEY] = this->preloadType; + obj[PRELOAD_FACE_UUID_KEY] = this->preloadUUID; + + return obj; +} diff --git a/src/models/generalpreferences.h b/src/models/generalpreferences.h new file mode 100644 index 0000000..f914167 --- /dev/null +++ b/src/models/generalpreferences.h @@ -0,0 +1,31 @@ +#ifndef GENERALPREFERENCES_H +#define GENERALPREFERENCES_H + +#include +#include +#include + +#define NO_PRELOAD_TYPE 0 +#define FILTER_PRELOAD_TYPE 1 +#define BOARD_PRELOAD_TYPE 2 + +class GeneralPreferences +{ +public: + GeneralPreferences(); + GeneralPreferences(QJsonObject); + + uint8_t getPreloadType(); + std::optional getPreloadUUID(); + + void setPreloadType(uint8_t type); + void setPreloadUUID(QString uuid); + + const QJsonObject toJson(); + +private: + uint8_t preloadType; + QString preloadUUID; +}; + +#endif // GENERALPREFERENCES_H diff --git a/src/services/configservice.cpp b/src/services/configservice.cpp new file mode 100644 index 0000000..c712ef6 --- /dev/null +++ b/src/services/configservice.cpp @@ -0,0 +1,33 @@ +#include "configservice.h" + +ConfigService *ConfigService::instance = nullptr; + +ConfigService::~ConfigService() +{ + delete data; +} + +ConfigService *ConfigService::getInstance() +{ + if (instance == nullptr) + { + instance = new ConfigService(); + } + return instance; +} + +void ConfigService::loadConfig(GeneralPreferences data) +{ + delete this->data; + this->data = new GeneralPreferences(data); +} + +GeneralPreferences *ConfigService::getConfig() +{ + return data; +} + +ConfigService::ConfigService() +{ + data = new GeneralPreferences(); +} diff --git a/src/services/configservice.h b/src/services/configservice.h new file mode 100644 index 0000000..467bc3e --- /dev/null +++ b/src/services/configservice.h @@ -0,0 +1,22 @@ +#ifndef CONFIGSERVICE_H +#define CONFIGSERVICE_H + +#include "../models/generalpreferences.h" + +class ConfigService +{ +public: + ~ConfigService(); + static ConfigService *getInstance(); + + void loadConfig(GeneralPreferences); + GeneralPreferences *getConfig(); + +private: + static ConfigService *instance; + ConfigService(); + + GeneralPreferences *data; +}; + +#endif // CONFIGSERVICE_H