Files
TaskBoard/src/frames/filterdialog.cpp
2023-02-12 22:33:22 +01:00

151 lines
4.5 KiB
C++

#include "filterdialog.h"
#include "ui_filterdialog.h"
#include <QMessageBox>
#include "../services/taskstateservice.h"
FilterDialog::FilterDialog(QString dialogTitle, QVector<Board*> boards, QWidget *parent) :
QDialog(parent),
ui(new Ui::FilterDialog)
{
ui->setupUi(this);
this->setWindowTitle(dialogTitle);
init(boards);
}
FilterDialog::FilterDialog(QString dialogTitle, Filter f, QVector<Board*> boards, QWidget *parent) :
QDialog(parent),
ui(new Ui::FilterDialog)
{
ui->setupUi(this);
this->setWindowTitle(dialogTitle);
init(boards);
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)
{
for (Board *b : boards)
{
QListWidgetItem *item = new QListWidgetItem();
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(Qt::Unchecked);
item->setText(b->getName());
item->setData(1, b->getUuid());
ui->boardListWidget->addItem(item);
}
QVector<Status> statuses = TaskStateService::getInstance()->getStatuses();
for (Status s : statuses)
{
QListWidgetItem *item = new QListWidgetItem();
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(Qt::Unchecked);
item->setText(s.getName());
item->setData(1, s.getUUID());
ui->statusListWidget->addItem(item);
}
QVector<Priority> priorities = TaskStateService::getInstance()->getPriorities();
for (Priority p : priorities)
{
QListWidgetItem *item = new QListWidgetItem();
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(Qt::Unchecked);
item->setText(p.getName());
item->setData(1, p.getUUID());
ui->priorityListWidget->addItem(item);
}
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &FilterDialog::validateAndAccept);
}
FilterDialog::~FilterDialog()
{
delete ui;
}
const Filter FilterDialog::getFilter()
{
QString name = ui->nameEdit->text();
QString description = ui->descriptionEdit->toPlainText();
uint8_t dateComparation = 0;
if (ui->dateComparationCombobox->currentIndex() > -1)
{
dateComparation = ui->dateComparationCombobox->currentIndex();
}
QVector<QString> boards;
for (int i = 0; i < ui->boardListWidget->count(); ++i) {
QListWidgetItem *item = ui->boardListWidget->item(i);
if (item->checkState() == Qt::Checked)
{
boards.append(item->data(1).toString());
}
}
QVector<QString> status;
for (int i = 0; i < ui->statusListWidget->count(); ++i) {
QListWidgetItem *item = ui->statusListWidget->item(i);
if (item->checkState() == Qt::Checked)
{
status.append(item->data(1).toString());
}
}
QVector<QString> priorities;
for (int i = 0; i < ui->priorityListWidget->count(); ++i) {
QListWidgetItem *item = ui->priorityListWidget->item(i);
if (item->checkState() == Qt::Checked)
{
priorities.append(item->data(1).toString());
}
}
return Filter(name, description, dateComparation, boards, status, priorities);
}
void FilterDialog::validateAndAccept()
{
if (ui->nameEdit->text().length() == 0)
{
QMessageBox::critical(this, "This filter needs a name", "You need to enter a name to save this filter");
return;
}
accept();
}