Adding filters

This commit is contained in:
Aurélie Delhaie
2023-01-15 12:39:03 +01:00
parent 6206a16c9d
commit 43ecd2601e
7 changed files with 333 additions and 46 deletions

View File

@@ -1,13 +1,66 @@
#include "filterdialog.h" #include "filterdialog.h"
#include "ui_filterdialog.h" #include "ui_filterdialog.h"
#include <QMessageBox>
FilterDialog::FilterDialog(QString dialogTitle, QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities, QWidget *parent) : FilterDialog::FilterDialog(QString dialogTitle, QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities, 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);
}
FilterDialog::FilterDialog(QString dialogTitle, Filter f, QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities, QWidget *parent) :
QDialog(parent),
ui(new Ui::FilterDialog)
{
ui->setupUi(this);
this->setWindowTitle(dialogTitle);
init(boards, status, priorities);
ui->nameEdit->setText(f.getName());
ui->descriptionEdit->setPlainText(f.getDescription());
ui->dateComparationCombobox->setCurrentIndex(f.getExpectedForComparator());
foreach (QString uuid, f.getBoards())
{
for (int i = 0; i < ui->boardListWidget->count(); ++i)
{
QListWidgetItem *item = ui->boardListWidget->item(i);
if (item->data(1).toString() == uuid)
{
item->setCheckState(Qt::Checked);
}
}
}
foreach (QString uuid, f.getStatus())
{
for (int i = 0; i < ui->statusListWidget->count(); ++i)
{
QListWidgetItem *item = ui->statusListWidget->item(i);
if (item->data(1).toString() == uuid)
{
item->setCheckState(Qt::Checked);
}
}
}
foreach (QString uuid, f.getPriorities())
{
for (int i = 0; i < ui->priorityListWidget->count(); ++i)
{
QListWidgetItem *item = ui->priorityListWidget->item(i);
if (item->data(1).toString() == uuid)
{
item->setCheckState(Qt::Checked);
}
}
}
}
void FilterDialog::init(QVector<Board *> boards, QVector<Status> status, QVector<Priority> priorities)
{
for (Board *b : boards) for (Board *b : boards)
{ {
QListWidgetItem *item = new QListWidgetItem(); QListWidgetItem *item = new QListWidgetItem();
@@ -37,6 +90,8 @@ FilterDialog::FilterDialog(QString dialogTitle, QVector<Board*> boards, QVector<
item->setData(1, p.getUUID()); item->setData(1, p.getUUID());
ui->priorityListWidget->addItem(item); ui->priorityListWidget->addItem(item);
} }
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &FilterDialog::validateAndAccept);
} }
FilterDialog::~FilterDialog() FilterDialog::~FilterDialog()
@@ -47,6 +102,7 @@ FilterDialog::~FilterDialog()
const Filter FilterDialog::getFilter() const Filter FilterDialog::getFilter()
{ {
QString name = ui->nameEdit->text(); QString name = ui->nameEdit->text();
QString description = ui->descriptionEdit->toPlainText();
uint8_t dateComparation = 0; uint8_t dateComparation = 0;
if (ui->dateComparationCombobox->currentIndex() > -1) if (ui->dateComparationCombobox->currentIndex() > -1)
{ {
@@ -76,5 +132,15 @@ const Filter FilterDialog::getFilter()
priorities.append(item->data(1).toString()); priorities.append(item->data(1).toString());
} }
} }
return Filter(name, dateComparation, boards, status, priorities); return Filter(name, description, dateComparation, boards, status, priorities);
}
void FilterDialog::validateAndAccept()
{
if (ui->nameEdit->text().count() == 0)
{
QMessageBox::critical(this, "This filter needs a name", "You need to enter a name to save this filter");
return;
}
accept();
} }

View File

@@ -18,11 +18,17 @@ class FilterDialog : public QDialog
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, QVector<Status> status, QVector<Priority> priorities, QWidget *parent = nullptr);
FilterDialog(QString dialogTitle, Filter f, QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities, QWidget *parent = nullptr);
~FilterDialog(); ~FilterDialog();
const Filter getFilter(); const Filter getFilter();
private slots:
void validateAndAccept();
private: private:
Ui::FilterDialog *ui; Ui::FilterDialog *ui;
void init(QVector<Board*> boards, QVector<Status> status, QVector<Priority> priorities);
}; };
#endif // FILTERDIALOG_H #endif // FILTERDIALOG_H

View File

@@ -10,7 +10,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>449</width> <width>449</width>
<height>509</height> <height>656</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -32,6 +32,16 @@
<item> <item>
<widget class="QLineEdit" name="nameEdit"/> <widget class="QLineEdit" name="nameEdit"/>
</item> </item>
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>Description</string>
</property>
</widget>
</item>
<item>
<widget class="QPlainTextEdit" name="descriptionEdit"/>
</item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
@@ -133,22 +143,6 @@
</widget> </widget>
<resources/> <resources/>
<connections> <connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>FilterDialog</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> <connection>
<sender>buttonBox</sender> <sender>buttonBox</sender>
<signal>rejected()</signal> <signal>rejected()</signal>

View File

@@ -4,6 +4,7 @@
#define PRIORITIES_KEY "priorities" #define PRIORITIES_KEY "priorities"
#define STATUS_KEY "status" #define STATUS_KEY "status"
#define BOARDS_KEY "boards" #define BOARDS_KEY "boards"
#define FILTERS_KEY "filters"
#include <QUuid> #include <QUuid>
#include <QColor> #include <QColor>
@@ -36,10 +37,13 @@ MainWindow::MainWindow(QWidget *parent)
connect(ui->actionNew_filter, &QAction::triggered, this, &MainWindow::onNewFilterClick); connect(ui->actionNew_filter, &QAction::triggered, this, &MainWindow::onNewFilterClick);
connect(ui->boardList, &QListWidget::currentRowChanged, this, &MainWindow::onBoardSelected); connect(ui->boardList, &QListWidget::currentRowChanged, this, &MainWindow::onBoardSelected);
connect(ui->boardList, &QListWidget::customContextMenuRequested, this, &MainWindow::prepareBoardMenu); connect(ui->boardList, &QListWidget::customContextMenuRequested, this, &MainWindow::prepareBoardMenu);
connect(ui->filterListWidget, &QListWidget::currentRowChanged, this, &MainWindow::onFilterSelected);
connect(ui->filterListWidget, &QListWidget::customContextMenuRequested, this, &MainWindow::prepareFilterMenu);
connect(ui->taskList, &QTreeWidget::itemDoubleClicked, this, &MainWindow::onEditTask); connect(ui->taskList, &QTreeWidget::itemDoubleClicked, this, &MainWindow::onEditTask);
connect(ui->taskList, &QTreeWidget::customContextMenuRequested, this, &MainWindow::prepareTaskMenu); connect(ui->taskList, &QTreeWidget::customContextMenuRequested, this, &MainWindow::prepareTaskMenu);
ui->boardList->setContextMenuPolicy(Qt::CustomContextMenu); ui->boardList->setContextMenuPolicy(Qt::CustomContextMenu);
ui->taskList->setContextMenuPolicy(Qt::CustomContextMenu); ui->taskList->setContextMenuPolicy(Qt::CustomContextMenu);
ui->filterListWidget->setContextMenuPolicy(Qt::CustomContextMenu);
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
@@ -93,8 +97,10 @@ void MainWindow::prepareBoardMenu(const QPoint &pos)
void MainWindow::prepareTaskMenu(const QPoint &pos) void MainWindow::prepareTaskMenu(const QPoint &pos)
{ {
bool show = false;
QMenu menu(this); QMenu menu(this);
if (ui->taskList->selectedItems().length() == 1) { if (ui->taskList->selectedItems().length() == 1) {
show = true;
QAction *renameAction = new QAction(tr("Edit the task"), this); QAction *renameAction = new QAction(tr("Edit the task"), this);
connect(renameAction, &QAction::triggered, this, &MainWindow::onEditNameTaskMenu); connect(renameAction, &QAction::triggered, this, &MainWindow::onEditNameTaskMenu);
menu.addAction(renameAction); menu.addAction(renameAction);
@@ -105,11 +111,18 @@ void MainWindow::prepareTaskMenu(const QPoint &pos)
menu.addSeparator(); menu.addSeparator();
} }
QAction *addAction = new QAction(tr("New task"), this); if (selectedBoardIndex > -1)
connect(addAction, &QAction::triggered, this, &MainWindow::onNewTaskClick); {
menu.addAction(addAction); show = true;
QAction *addAction = new QAction(tr("New task"), this);
connect(addAction, &QAction::triggered, this, &MainWindow::onNewTaskClick);
menu.addAction(addAction);
}
menu.exec(ui->taskList->mapToGlobal(pos)); if (show)
{
menu.exec(ui->taskList->mapToGlobal(pos));
}
} }
void MainWindow::onNewBoardClick() void MainWindow::onNewBoardClick()
@@ -152,14 +165,24 @@ void MainWindow::onNewFilterClick()
if (dialog.exec() == QDialog::DialogCode::Accepted) if (dialog.exec() == QDialog::DialogCode::Accepted)
{ {
Filter f = dialog.getFilter(); Filter f = dialog.getFilter();
filters.append(f);
QListWidgetItem *item = new QListWidgetItem(f.getName()); QListWidgetItem *item = new QListWidgetItem(f.getName());
item->setToolTip(f.getDescription());
ui->filterListWidget->addItem(item); ui->filterListWidget->addItem(item);
save();
} }
} }
void MainWindow::onBoardSelected(int i) void MainWindow::onBoardSelected(int i)
{ {
selectedBoardIndex = i; selectedBoardIndex = i;
selectedFilterIndex = -1;
ui->filterListWidget->blockSignals(true);
ui->filterListWidget->setCurrentIndex(ui->filterListWidget->currentIndex().sibling(-1, -1));
ui->filterListWidget->blockSignals(false);
filterResult.clear();
if (selectedBoardIndex > -1) if (selectedBoardIndex > -1)
{ {
Board *b = boards[selectedBoardIndex]; Board *b = boards[selectedBoardIndex];
@@ -176,22 +199,46 @@ void MainWindow::onBoardSelected(int i)
redrawTaskTree(); redrawTaskTree();
} }
void MainWindow::onFilterSelected(int i)
{
selectedFilterIndex = i;
selectedBoardIndex = -1;
ui->boardList->blockSignals(true);
ui->boardList->setCurrentIndex(ui->boardList->currentIndex().sibling(-1, -1));
ui->boardList->blockSignals(false);
filterResult.clear();
ui->actionNew_task->setDisabled(true);
if (selectedFilterIndex > -1)
{
Filter f = filters[selectedFilterIndex];
ui->label->setText(f.getName());
ui->boardDescription->setText(f.getDescription());
}
else
{
ui->label->setText("No board selected");
ui->boardDescription->clear();
}
redrawTaskTree();
}
void MainWindow::onEditTask(QTreeWidgetItem *item) void MainWindow::onEditTask(QTreeWidgetItem *item)
{ {
if (item != nullptr && selectedBoardIndex > -1) Task *t = getSelectedTask();
if (t != nullptr)
{ {
Board *b = boards[selectedBoardIndex]; TaskDialog dialog(t, status, priorities, this);
int row = ui->taskList->indexOfTopLevelItem(item); if (dialog.exec() == QDialog::DialogCode::Accepted)
Task *t = b->taskAt(row);
if (t != nullptr)
{ {
TaskDialog dialog(t, status, priorities, this); Task editedTask = dialog.getTask();
if (dialog.exec() == QDialog::DialogCode::Accepted) t->update(editedTask);
updateTaskRow(item, editedTask);
save();
if (selectedFilterIndex > -1)
{ {
Task editedTask = dialog.getTask(); redrawTaskTree();
t->update(editedTask);
updateTaskRow(item, editedTask);
save();
} }
} }
} }
@@ -229,6 +276,22 @@ void MainWindow::onRemoveTaskMenu()
} }
} }
void MainWindow::onRemoveFilterMenu()
{
if (selectedFilterIndex > -1)
{
QMessageBox::StandardButton result = QMessageBox::question(this, "Delete a filter", "Do you want to delete this filter?");
if (result == QMessageBox::Yes)
{
filters.removeAt(selectedFilterIndex);
delete ui->filterListWidget->takeItem(selectedFilterIndex);
selectedFilterIndex = -1;
redrawTaskTree();
save();
}
}
}
void MainWindow::onEditNameBoardMenu() void MainWindow::onEditNameBoardMenu()
{ {
if (selectedBoardIndex > -1) if (selectedBoardIndex > -1)
@@ -253,12 +316,55 @@ void MainWindow::onEditNameBoardMenu()
void MainWindow::onEditNameTaskMenu() void MainWindow::onEditNameTaskMenu()
{ {
if (selectedBoardIndex > -1 && ui->taskList->selectedItems().length() == 1) Task *t = getSelectedTask();
if (t != nullptr)
{ {
onEditTask(ui->taskList->currentItem()); onEditTask(ui->taskList->currentItem());
} }
} }
void MainWindow::onEditFilterMenu()
{
if (selectedFilterIndex > -1)
{
Filter f = filters[selectedFilterIndex];
FilterDialog dialog("Edit the filter", f, boards, status, priorities, this);
if (dialog.exec() == QDialog::DialogCode::Accepted)
{
Filter f = dialog.getFilter();
filters[selectedFilterIndex] = f;
QListWidgetItem *item = ui->filterListWidget->item(selectedFilterIndex);
item->setText(f.getName());
item->setToolTip(f.getDescription());
ui->label->setText(f.getName());
ui->boardDescription->setText(f.getDescription());
redrawTaskTree();
save();
}
}
}
void MainWindow::prepareFilterMenu(const QPoint &pos)
{
QMenu menu(this);
if (ui->filterListWidget->selectedItems().length() == 1) {
QAction *renameAction = new QAction(tr("Edit the filter"), this);
connect(renameAction, &QAction::triggered, this, &MainWindow::onEditFilterMenu);
menu.addAction(renameAction);
QAction *deleteAction = new QAction(tr("Delete"), this);
connect(deleteAction, &QAction::triggered, this, &MainWindow::onRemoveFilterMenu);
menu.addAction(deleteAction);
menu.addSeparator();
}
QAction *addAction = new QAction(tr("New filter"), this);
connect(addAction, &QAction::triggered, this, &MainWindow::onNewFilterClick);
menu.addAction(addAction);
menu.exec(ui->filterListWidget->mapToGlobal(pos));
}
void MainWindow::init() void MainWindow::init()
{ {
if (Tools::isSaveFileExist()) if (Tools::isSaveFileExist())
@@ -270,15 +376,24 @@ void MainWindow::init()
QJsonArray jsonPriorities = save[PRIORITIES_KEY].toArray(); QJsonArray jsonPriorities = save[PRIORITIES_KEY].toArray();
QJsonArray jsonStatus = save[STATUS_KEY].toArray(); QJsonArray jsonStatus = save[STATUS_KEY].toArray();
QJsonArray jsonBoards = save[BOARDS_KEY].toArray(); QJsonArray jsonBoards = save[BOARDS_KEY].toArray();
for (QJsonValueRef value : jsonPriorities) { QJsonArray jsonFilters = save[FILTERS_KEY].toArray();
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())); status.append(Status(value.toObject()));
} }
for (QJsonValueRef value : jsonBoards) { for (QJsonValueRef value : jsonBoards)
{
boards.append(new Board(value.toObject())); boards.append(new Board(value.toObject()));
} }
for (QJsonValueRef value : jsonFilters)
{
filters.append(Filter(value.toObject()));
}
redrawFilterList();
redrawBoardList(); redrawBoardList();
return; return;
} }
@@ -381,13 +496,46 @@ const QJsonDocument MainWindow::getJsonSave()
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)
{
jsonFilters.append(f.toJson());
}
obj[PRIORITIES_KEY] = jsonPriorities; obj[PRIORITIES_KEY] = jsonPriorities;
obj[STATUS_KEY] = jsonStatus; obj[STATUS_KEY] = jsonStatus;
obj[BOARDS_KEY] = jsonBoards; obj[BOARDS_KEY] = jsonBoards;
obj[FILTERS_KEY] = jsonFilters;
doc.setObject(obj); doc.setObject(obj);
return doc; return doc;
} }
Task *MainWindow::getSelectedTask()
{
if (selectedBoardIndex > -1)
{
Board *b = boards[selectedBoardIndex];
QList<QTreeWidgetItem*> items = ui->taskList->selectedItems();
if (items.count() == 1)
{
int16_t i = ui->taskList->indexOfTopLevelItem(items[0]);
return b->taskAt(i);
}
}
else if (selectedFilterIndex > -1)
{
if (!filterResult.empty())
{
QList<QTreeWidgetItem*> items = ui->taskList->selectedItems();
if (items.count() == 1)
{
int16_t i = ui->taskList->indexOfTopLevelItem(items[0]);
return filterResult[i];
}
}
}
return nullptr;
}
void MainWindow::updateTaskRow(QTreeWidgetItem *item, Task t) void MainWindow::updateTaskRow(QTreeWidgetItem *item, Task t)
{ {
item->setText(0, t.getTitle()); item->setText(0, t.getTitle());
@@ -453,6 +601,22 @@ void MainWindow::redrawBoardList()
} }
} }
void MainWindow::redrawFilterList()
{
QListWidget *l = ui->filterListWidget;
uint16_t itemCount = l->count();
for (int16_t i = itemCount; i >= 0; i--)
{
delete l->takeItem(i);
}
foreach (Filter f, filters)
{
QListWidgetItem *item = new QListWidgetItem(f.getName());
item->setToolTip(f.getDescription());
l->addItem(item);
}
}
void MainWindow::redrawTaskTree() void MainWindow::redrawTaskTree()
{ {
QTreeWidget *l = ui->taskList; QTreeWidget *l = ui->taskList;
@@ -471,7 +635,17 @@ void MainWindow::redrawTaskTree()
ui->taskList->addTopLevelItem(item); ui->taskList->addTopLevelItem(item);
} }
} }
else if (selectedFilterIndex > -1)
{
Filter f = filters[selectedFilterIndex];
filterResult = f.filter(boards);
foreach (Task *t, filterResult)
{
QTreeWidgetItem *item = new QTreeWidgetItem();
updateTaskRow(item, *t);
ui->taskList->addTopLevelItem(item);
}
}
} }
void MainWindow::save() void MainWindow::save()

View File

@@ -30,11 +30,15 @@ private slots:
void onNewTaskClick(); void onNewTaskClick();
void onNewFilterClick(); void onNewFilterClick();
void onBoardSelected(int i); void onBoardSelected(int i);
void onFilterSelected(int i);
void onEditTask(QTreeWidgetItem*); void onEditTask(QTreeWidgetItem*);
void onRemoveBoardMenu(); void onRemoveBoardMenu();
void onRemoveTaskMenu(); void onRemoveTaskMenu();
void onRemoveFilterMenu();
void onEditNameBoardMenu(); void onEditNameBoardMenu();
void onEditNameTaskMenu(); void onEditNameTaskMenu();
void onEditFilterMenu();
void prepareFilterMenu(const QPoint &pos);
void prepareBoardMenu(const QPoint &pos); void prepareBoardMenu(const QPoint &pos);
void prepareTaskMenu(const QPoint &pos); void prepareTaskMenu(const QPoint &pos);
@@ -44,6 +48,10 @@ private:
void init(); void init();
int16_t selectedBoardIndex; int16_t selectedBoardIndex;
int16_t selectedFilterIndex;
QVector<Task*> filterResult;
QVector<Priority> priorities; QVector<Priority> priorities;
QVector<Status> status; QVector<Status> status;
QVector<Board*> boards; QVector<Board*> boards;
@@ -61,8 +69,11 @@ private:
const QJsonDocument getJsonSave(); const QJsonDocument getJsonSave();
Task *getSelectedTask();
void updateTaskRow(QTreeWidgetItem *item, Task t); void updateTaskRow(QTreeWidgetItem *item, Task t);
void redrawBoardList(); void redrawBoardList();
void redrawFilterList();
void redrawTaskTree(); void redrawTaskTree();
void save(); void save();
}; };

View File

@@ -2,14 +2,16 @@
#include "qjsonarray.h" #include "qjsonarray.h"
#define NAME_KEY "name" #define NAME_KEY "name"
#define DESCRIPTION_KEY "description"
#define DATE_KEY "date" #define DATE_KEY "date"
#define BOARDS_KEY "boards" #define BOARDS_KEY "boards"
#define STATUS_KEY "status" #define STATUS_KEY "status"
#define PRIORITY_KEY "priority" #define PRIORITY_KEY "priority"
Filter::Filter(QString name, uint8_t expectedForComparator, QVector<QString> boards, QVector<QString> status, QVector<QString> priorities) Filter::Filter(QString name, QString description, uint8_t expectedForComparator, QVector<QString> boards, QVector<QString> status, QVector<QString> priorities)
{ {
this->name = name; this->name = name;
this->description = description;
this->expectedForComparator = expectedForComparator; this->expectedForComparator = expectedForComparator;
this->boards = boards; this->boards = boards;
this->status = status; this->status = status;
@@ -19,6 +21,7 @@ Filter::Filter(QString name, uint8_t expectedForComparator, QVector<QString> boa
Filter::Filter(QJsonObject obj) Filter::Filter(QJsonObject obj)
{ {
this->name = obj[NAME_KEY].toString("!Missing name!"); this->name = obj[NAME_KEY].toString("!Missing name!");
this->description = obj[DESCRIPTION_KEY].toString();
this->expectedForComparator = obj[DATE_KEY].toInt(); this->expectedForComparator = obj[DATE_KEY].toInt();
QJsonArray b = obj[BOARDS_KEY].toArray(); QJsonArray b = obj[BOARDS_KEY].toArray();
QJsonArray s = obj[STATUS_KEY].toArray(); QJsonArray s = obj[STATUS_KEY].toArray();
@@ -46,7 +49,7 @@ Filter::Filter(QJsonObject obj)
} }
} }
QVector<Task *> Filter::get(QVector<Board *> allBoards) QVector<Task *> Filter::filter(QVector<Board *> allBoards)
{ {
QDate now = QDate::currentDate(); QDate now = QDate::currentDate();
QVector<Board*> selectedBoards; QVector<Board*> selectedBoards;
@@ -140,10 +143,36 @@ const QString Filter::getName()
return name; return name;
} }
const QString Filter::getDescription()
{
return description;
}
uint8_t Filter::getExpectedForComparator()
{
return expectedForComparator;
}
const QVector<QString> Filter::getBoards()
{
return boards;
}
const QVector<QString> Filter::getStatus()
{
return status;
}
const QVector<QString> Filter::getPriorities()
{
return priorities;
}
const QJsonObject Filter::toJson() const QJsonObject Filter::toJson()
{ {
QJsonObject obj; QJsonObject obj;
obj[name] = name; obj[NAME_KEY] = name;
obj[DESCRIPTION_KEY] = description;
obj[DATE_KEY] = expectedForComparator; obj[DATE_KEY] = expectedForComparator;
QJsonArray b; QJsonArray b;
foreach (QString uuid, boards) foreach (QString uuid, boards)

View File

@@ -12,23 +12,30 @@ class Filter
{ {
private: private:
QString name; QString name;
QString description;
// 0 none, 1 lower, 2 equal, 3 upper // 0 none, 1 lower, 2 equal, 3 upper
uint8_t expectedForComparator; uint8_t expectedForComparator;
// if empty => all // if empty => all
QVector<QString> boards; QVector<QString> boards;
QVector<QString> status; QVector<QString> status;
QVector<QString> priorities; QVector<QString> priorities;
public:
Filter(QString name, uint8_t expectedForComparator,QVector<QString> boards,QVector<QString> status,QVector<QString> priorities);
Filter(QJsonObject obj);
QVector<Task*> get(QVector<Board*>);
bool filterStatus(Task *t); bool filterStatus(Task *t);
bool filterPriority(Task *t); bool filterPriority(Task *t);
bool filterDate(Task *t, QDate now); bool filterDate(Task *t, QDate now);
public:
Filter(QString name, QString description, uint8_t expectedForComparator,QVector<QString> boards,QVector<QString> status,QVector<QString> priorities);
Filter(QJsonObject obj);
QVector<Task*> filter(QVector<Board*>);
const QString getName(); const QString getName();
const QString getDescription();
uint8_t getExpectedForComparator();
const QVector<QString> getBoards();
const QVector<QString> getStatus();
const QVector<QString> getPriorities();
const QJsonObject toJson(); const QJsonObject toJson();
}; };