Expected for color, add filter model

This commit is contained in:
Aurelie Delhaie
2023-01-08 20:43:24 +01:00
parent 32a25f9b55
commit a86ece9c9a
10 changed files with 261 additions and 17 deletions

View File

@@ -1,11 +1,11 @@
QT += core gui QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 5): QT += widgets
CONFIG += c++17 CONFIG += c++17
win32:VERSION = 0.1.1.0 # major.minor.patch.build win32:VERSION = 0.2.0.0 # major.minor.patch.build
else:VERSION = 0.1.1 # major.minor.patch else:VERSION = 0.2.0 # major.minor.patch
DEFINES += APP_VERSION=\"\\\"$${VERSION}\\\"\" DEFINES += APP_VERSION=\"\\\"$${VERSION}\\\"\"
DEFINES += APP_NAME=\"\\\"TaskBoard\\\"\" DEFINES += APP_NAME=\"\\\"TaskBoard\\\"\"
@@ -74,6 +74,7 @@ SOURCES += \
src/frames/mainwindow.cpp \ src/frames/mainwindow.cpp \
src/frames/namedialog.cpp \ src/frames/namedialog.cpp \
src/frames/prefdialog.cpp \ src/frames/prefdialog.cpp \
src/models/filter.cpp \
src/models/priority.cpp \ src/models/priority.cpp \
src/models/status.cpp \ src/models/status.cpp \
src/models/task.cpp \ src/models/task.cpp \
@@ -86,6 +87,7 @@ HEADERS += \
src/frames/mainwindow.h \ src/frames/mainwindow.h \
src/frames/namedialog.h \ src/frames/namedialog.h \
src/frames/prefdialog.h \ src/frames/prefdialog.h \
src/models/filter.h \
src/models/priority.h \ src/models/priority.h \
src/models/status.h \ src/models/status.h \
src/models/task.h \ src/models/task.h \

View File

@@ -265,19 +265,19 @@ void MainWindow::init()
QVector<Priority> MainWindow::defaultPriorities() QVector<Priority> MainWindow::defaultPriorities()
{ {
QVector<Priority> res; QVector<Priority> res;
res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "None", QColor("#d9d9d9"))); res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "None", QColor(217, 217, 217)));
res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "Low", QColor("#309db0"))); res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "Low", QColor(48, 157, 176)));
res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "Medium", QColor("#b08e30"))); res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "Medium", QColor(176, 142, 48)));
res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "High", QColor("#b04330"))); res.append(Priority(QUuid::createUuid().toString(QUuid::WithoutBraces), "High", QColor(176, 67, 48)));
return res; return res;
} }
QVector<Status> MainWindow::defaultStatus() QVector<Status> MainWindow::defaultStatus()
{ {
QVector<Status> res; QVector<Status> res;
res.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "To Do", QColor("#8f8f8f"))); 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("#5f30b0"))); res.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "Working on", QColor(95, 48, 176)));
res.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "Completed", QColor("#30b049"))); res.append(Status(QUuid::createUuid().toString(QUuid::WithoutBraces), "Completed", QColor(48, 176, 73)));
return res; return res;
} }
@@ -362,6 +362,21 @@ void MainWindow::updateTaskRow(QTreeWidgetItem *item, Task t)
item->setToolTip(0, t.getDescription()); item->setToolTip(0, t.getDescription());
item->setText(3, t.getExpectedFor().toString()); item->setText(3, t.getExpectedFor().toString());
if (t.getExpectedFor() < QDate::currentDate())
{
QBrush fgColor = item->foreground(3);
fgColor.setColor(QColor(176, 67, 48));
fgColor.setStyle(Qt::BrushStyle::SolidPattern);
item->setForeground(3, fgColor);
}
else if (t.getExpectedFor() == QDate::currentDate())
{
QBrush fgColor = item->foreground(3);
fgColor.setColor(QColor(176, 142, 48));
fgColor.setStyle(Qt::BrushStyle::SolidPattern);
item->setForeground(3, fgColor);
}
if (!t.getStatusUUID().isEmpty()) if (!t.getStatusUUID().isEmpty())
{ {
item->setText(1, getStatusLabel(t.getStatusUUID())); item->setText(1, getStatusLabel(t.getStatusUUID()));

View File

@@ -2,18 +2,24 @@
#define NAME_KEY "name" #define NAME_KEY "name"
#define TASKS_KEY "tasks" #define TASKS_KEY "tasks"
#define UUID_KEY "uuid"
#include <QJsonArray> #include <QJsonArray>
#include <QJsonValue> #include <QJsonValue>
#include <QUuid>
Board::Board(QString name) Board::Board(QString name)
{ {
QUuid uuid = QUuid::createUuid();
this->uuid = uuid.toString(QUuid::WithoutBraces);
this->name = name; this->name = name;
} }
Board::Board(QJsonObject obj) Board::Board(QJsonObject obj)
{ {
this->name = obj[NAME_KEY].toString(); QUuid uuid = QUuid::createUuid();
this->uuid = obj[UUID_KEY].toString(uuid.toString(QUuid::WithoutBraces));
this->name = obj[NAME_KEY].toString("!Missing name!");
QJsonArray jsonTasks = obj[TASKS_KEY].toArray(); QJsonArray jsonTasks = obj[TASKS_KEY].toArray();
for (QJsonValue value : jsonTasks) { for (QJsonValue value : jsonTasks) {
Task *t = new Task(value.toObject()); Task *t = new Task(value.toObject());
@@ -30,6 +36,11 @@ Board::~Board()
} }
} }
const QString Board::getUuid()
{
return uuid;
}
const QString Board::getName() const QString Board::getName()
{ {
return name; return name;

View File

@@ -14,6 +14,7 @@ public:
Board(QJsonObject); Board(QJsonObject);
~Board(); ~Board();
const QString getUuid();
const QString getName(); const QString getName();
void setName(const QString name); void setName(const QString name);
void add(Task); void add(Task);
@@ -25,6 +26,7 @@ public:
private: private:
QVector<Task*> tasks; QVector<Task*> tasks;
QString uuid;
QString name; QString name;
}; };

161
src/models/filter.cpp Normal file
View File

@@ -0,0 +1,161 @@
#include "filter.h"
#define NAME_KEY "name"
#define DATE_KEY "date"
#define BOARDS_KEY "boards"
#define STATUS_KEY "status"
#define PRIORITY_KEY "priority"
filter::filter(QString name, uint8 expectedForComparator, QVector<QString> boards, QVector<QString> status, QVector<QString> priorities)
{
this->name = name;
this->expectedForComparator = expectedForComparator;
this->boards = boards;
this->status = status;
this->priorities = priorities;
}
filter::filter(QJsonObject obj)
{
this->name = obj[NAME_KEY].toString("!Missing name!");
this->expectedForComparator = obj[DATE_KEY].toInt();
QJsonArray b = obj[BOARDS_KEY].toArray();
QJsonArray s = obj[STATUS_KEY].toArray();
QJsonArray p = obj[PRIORITY_KEY].toArray();
foreach (QJsonValue value, b)
{
if (value.isString())
{
boards.append(value.toString());
}
}
foreach (QJsonValue value, s)
{
if (value.isString())
{
status.append(value.toString());
}
}
foreach (QJsonValue value, p)
{
if (value.isString())
{
priorities.append(value.toString());
}
}
}
QVector<Task *> filter::get(QVector<Board *> allBoards)
{
QDate now = QDate::currentDate();
QVector<Board*> selectedBoards;
if (this->boards.count() > 0)
{
for (Board *b : allBoards)
{
foreach (QString boardUuid, this->boards)
{
if (b->getUuid() == boardUuid)
{
selectedBoards.append(b);
}
}
}
}
else
{
selectedBoards = allBoards;
}
bool fstatus, fpriority, fdate;
QVector<Task*> result;
for (Board *b : selectedBoards)
{
for (Task *t : b->getTasks())
{
fstatus = filterStatus(t);
fpriority = filterPriority(t);
fdate = filterDate(t, now);
if (fstatus && fpriority && fdate)
{
result.append(t);
}
}
}
return result;
}
bool filter::filterStatus(Task *t)
{
if (status.count() == 0)
{
return true;
}
bool result = false;
foreach (QString s, status)
{
if (t->getStatusUUID() == s)
{
result = true;
}
}
return result;
}
bool filter::filterPriority(Task *t)
{
if (priorities.count() == 0)
{
return true;
}
bool result = false;
foreach (QString p, priorities)
{
if (t->getPriorityUUID() == p)
{
result = true;
}
}
return result;
}
bool filter::filterDate(Task *t, QDate now)
{
switch (expectedForComparator) {
case 0:
return true;
case 1:
return t->getExpectedFor() < now;
case 2:
return t->getExpectedFor() == now;
case 3:
return t->getExpectedFor() > now;
}
return false;
}
const QJsonObject filter::toJson()
{
QJsonObject obj;
obj[name] = name;
obj[DATE_KEY] = expectedForComparator;
QJsonArray b;
foreach (QString uuid, boards)
{
b.append(uuid);
}
QJsonArray s;
foreach (QString uuid, status)
{
s.append(uuid);
}
QJsonArray p;
foreach (QString uuid, priorities)
{
p.append(uuid);
}
obj[BOARDS_KEY] = b;
obj[STATUS_KEY] = s;
obj[PRIORITY_KEY] = p;
return obj;
}

33
src/models/filter.h Normal file
View File

@@ -0,0 +1,33 @@
#ifndef FILTER_H
#define FILTER_H
#include <QVector>
#include <QString>
#include <QJsonObject>
#include "task.h"
#include "board.h"
class filter
{
private:
QString name;
// 0 none, 1 lower, 2 equal, 3 upper
uint8_t expectedForComparator;
// if empty => all
QVector<QString> boards;
QVector<QString> status;
QVector<QString> priorities;
public:
filter(QString name, uint8 expectedForComparator,QVector<QString> boards,QVector<QString> status,QVector<QString> priorities);
filter(QJsonObject obj);
QVector<Task*> get(QVector<Board*>);
bool filterStatus(Task *t);
bool filterPriority(Task *t);
bool filterDate(Task *t, QDate now);
const QJsonObject toJson();
};
#endif // FILTER_H

View File

@@ -4,6 +4,8 @@
#define NAME_KEY "name" #define NAME_KEY "name"
#define COLOR_KEY "color" #define COLOR_KEY "color"
#include <QUuid>
Priority::Priority(QString uuid, QString name, QColor color) Priority::Priority(QString uuid, QString name, QColor color)
{ {
this->uuid = uuid; this->uuid = uuid;
@@ -13,9 +15,10 @@ Priority::Priority(QString uuid, QString name, QColor color)
Priority::Priority(QJsonObject obj) Priority::Priority(QJsonObject obj)
{ {
this->uuid = obj[UUID_KEY].toString(); QUuid uuid = QUuid::createUuid();
this->name = obj[NAME_KEY].toString(); this->uuid = obj[UUID_KEY].toString(uuid.toString(QUuid::WithoutBraces));
this->color = QColor(obj[COLOR_KEY].toString()); this->name = obj[NAME_KEY].toString("!Missing name!");
this->color = QColor(obj[COLOR_KEY].toString("#ffffff"));
} }
const QString Priority::getName() const QString Priority::getName()

View File

@@ -4,6 +4,8 @@
#define NAME_KEY "name" #define NAME_KEY "name"
#define COLOR_KEY "color" #define COLOR_KEY "color"
#include <QUuid>
Status::Status(QString uuid, QString name, QColor color) Status::Status(QString uuid, QString name, QColor color)
{ {
this->uuid = uuid; this->uuid = uuid;
@@ -13,9 +15,10 @@ Status::Status(QString uuid, QString name, QColor color)
Status::Status(QJsonObject obj) Status::Status(QJsonObject obj)
{ {
this->uuid = obj[UUID_KEY].toString(); QUuid uuid = QUuid::createUuid();
this->name = obj[NAME_KEY].toString(); this->uuid = obj[UUID_KEY].toString(uuid.toString(QUuid::WithoutBraces));
this->color = QColor(obj[COLOR_KEY].toString()); this->name = obj[NAME_KEY].toString("!Missing name!");
this->color = QColor(obj[COLOR_KEY].toString("#ffffff"));
} }
const QString Status::getName() const QString Status::getName()

View File

@@ -5,9 +5,14 @@
#define EXPECTEDFOR_KEY "expected_for" #define EXPECTEDFOR_KEY "expected_for"
#define PRIORITY_KEY "priority" #define PRIORITY_KEY "priority"
#define STATUS_KEY "status" #define STATUS_KEY "status"
#define UUID_KEY "uuid"
#include <QUuid>
Task::Task(QString title, QString description, QDate expectedFor, QString priorityUUID, QString statusUUID) Task::Task(QString title, QString description, QDate expectedFor, QString priorityUUID, QString statusUUID)
{ {
QUuid uuid = QUuid::createUuid();
this->uuid = uuid.toString(QUuid::WithoutBraces);
this->title = title; this->title = title;
this->description = description; this->description = description;
this->expectedFor = expectedFor; this->expectedFor = expectedFor;
@@ -17,6 +22,8 @@ Task::Task(QString title, QString description, QDate expectedFor, QString priori
Task::Task(QJsonObject obj) Task::Task(QJsonObject obj)
{ {
QUuid uuid = QUuid::createUuid();
this->uuid = obj[UUID_KEY].toString(uuid.toString(QUuid::WithoutBraces));
this->title = obj[TITLE_KEY].toString(); this->title = obj[TITLE_KEY].toString();
this->description = obj[DESCRIPTION_KEY].toString(); this->description = obj[DESCRIPTION_KEY].toString();
this->expectedFor = QDate::fromString(obj[EXPECTEDFOR_KEY].toString(), Qt::DateFormat::ISODate); this->expectedFor = QDate::fromString(obj[EXPECTEDFOR_KEY].toString(), Qt::DateFormat::ISODate);
@@ -24,6 +31,11 @@ Task::Task(QJsonObject obj)
this->statusUUID = obj[STATUS_KEY].toString(); this->statusUUID = obj[STATUS_KEY].toString();
} }
const QString Task::getUuid()
{
return this->uuid;
}
const QString Task::getTitle() const QString Task::getTitle()
{ {
return this->title; return this->title;

View File

@@ -11,6 +11,7 @@ public:
Task(QString title, QString description, QDate expectedFor, QString priorityUUID, QString statusUUID); Task(QString title, QString description, QDate expectedFor, QString priorityUUID, QString statusUUID);
Task(QJsonObject); Task(QJsonObject);
const QString getUuid();
const QString getTitle(); const QString getTitle();
const QString getDescription(); const QString getDescription();
const QDate getExpectedFor(); const QDate getExpectedFor();
@@ -21,6 +22,7 @@ public:
void update(Task); void update(Task);
private: private:
QString uuid;
QString title; QString title;
QString description; QString description;
QDate expectedFor; QDate expectedFor;