282 lines
8.2 KiB
C++
282 lines
8.2 KiB
C++
#include "prefdialog.h"
|
|
#include "ui_prefdialog.h"
|
|
|
|
#include <QColorDialog>
|
|
#include <QUuid>
|
|
|
|
#include "../tools.h"
|
|
#include "../services/taskstateservice.h"
|
|
|
|
PrefDialog::PrefDialog(QWidget *parent) :
|
|
QDialog(parent),
|
|
ui(new Ui::PrefDialog)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
QVector<Status> status = TaskStateService::getInstance()->getStatuses();
|
|
foreach (Status s, status)
|
|
{
|
|
QListWidgetItem *item = new QListWidgetItem(s.getName());
|
|
statusUUIDRef.append(s.getUUID());
|
|
setItemColor(item, s.getColor());
|
|
ui->statusListWidget->addItem(item);
|
|
}
|
|
|
|
QVector<Priority> priorities = TaskStateService::getInstance()->getPriorities();
|
|
foreach (Priority p, priorities)
|
|
{
|
|
QListWidgetItem *item = new QListWidgetItem(p.getName());
|
|
priorityUUIDRef.append(p.getUUID());
|
|
setItemColor(item, p.getColor());
|
|
ui->priorityListWidget->addItem(item);
|
|
}
|
|
|
|
connect(ui->addStatusButton, &QPushButton::clicked, this, &PrefDialog::onAddStatusButtonClick);
|
|
connect(ui->addPriorityButton, &QPushButton::clicked, this, &PrefDialog::onAddPriorityButtonClick);
|
|
connect(ui->statusListWidget, &QListWidget::currentRowChanged, this, &PrefDialog::onItemSelectionChange);
|
|
connect(ui->priorityListWidget, &QListWidget::currentRowChanged, this, &PrefDialog::onItemSelectionChange);
|
|
connect(ui->colorStatusButton, &QToolButton::clicked, this, &PrefDialog::onButtonColorButtonClick);
|
|
connect(ui->colorPriorityButton, &QToolButton::clicked, this, &PrefDialog::onButtonColorButtonClick);
|
|
connect(ui->nameStatusEdit, &QLineEdit::textEdited, this, &PrefDialog::onNameChange);
|
|
connect(ui->namePriorityEdit, &QLineEdit::textEdited, this, &PrefDialog::onNameChange);
|
|
connect(ui->removeStatusButton, &QPushButton::clicked, this, &PrefDialog::onRemoveStatusButtonClick);
|
|
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()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
QVector<Priority> PrefDialog::getPriorities()
|
|
{
|
|
uint16_t count = ui->priorityListWidget->count();
|
|
QVector<Priority> res;
|
|
|
|
for (uint16_t i = 0; i < count; i++)
|
|
{
|
|
QListWidgetItem *item = ui->priorityListWidget->item(i);
|
|
Priority p(priorityUUIDRef[i], item->text(), item->background().color());
|
|
res.append(p);
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
QVector<Status> PrefDialog::getStatus()
|
|
{
|
|
uint16_t count = ui->statusListWidget->count();
|
|
QVector<Status> res;
|
|
|
|
for (uint16_t i = 0; i < count; i++)
|
|
{
|
|
QListWidgetItem *item = ui->statusListWidget->item(i);
|
|
Status s(statusUUIDRef[i], item->text(), item->background().color());
|
|
res.append(s);
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
void PrefDialog::onAddStatusButtonClick()
|
|
{
|
|
QColor bgColor = Tools::getRandomColor();
|
|
QListWidgetItem *item = new QListWidgetItem("New status");
|
|
QUuid uuid = QUuid::createUuid();
|
|
statusUUIDRef.append(uuid.toString(QUuid::WithoutBraces));
|
|
|
|
setItemColor(item, bgColor);
|
|
|
|
ui->statusListWidget->addItem(item);
|
|
}
|
|
|
|
void PrefDialog::onAddPriorityButtonClick()
|
|
{
|
|
QColor bgColor = Tools::getRandomColor();
|
|
QListWidgetItem *item = new QListWidgetItem("Low");
|
|
QUuid uuid = QUuid::createUuid();
|
|
priorityUUIDRef.append(uuid.toString(QUuid::WithoutBraces));
|
|
|
|
setItemColor(item, bgColor);
|
|
|
|
ui->priorityListWidget->addItem(item);
|
|
}
|
|
|
|
void PrefDialog::onItemSelectionChange(int index)
|
|
{
|
|
QListWidget *listWidget = static_cast<QListWidget*>(QObject::sender());
|
|
QPushButton *removeBtn;
|
|
QToolButton *colorBtn;
|
|
QLineEdit *nameEdit;
|
|
QLineEdit *colorEdit;
|
|
|
|
if (listWidget == ui->statusListWidget)
|
|
{
|
|
removeBtn = ui->removeStatusButton;
|
|
colorBtn = ui->colorStatusButton;
|
|
nameEdit = ui->nameStatusEdit;
|
|
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
|
|
{
|
|
removeBtn = ui->removePriorityButton;
|
|
colorBtn = ui->colorPriorityButton;
|
|
nameEdit = ui->namePriorityEdit;
|
|
colorEdit = ui->colorPriorityEdit;
|
|
}
|
|
bool d = (index == -1);
|
|
removeBtn->setDisabled(d);
|
|
colorBtn->setDisabled(d);
|
|
nameEdit->setDisabled(d);
|
|
colorEdit->setDisabled(d);
|
|
if (!d)
|
|
{
|
|
QListWidgetItem *current = listWidget->item(index);
|
|
nameEdit->setText(current->text());
|
|
colorEdit->setText(current->background().color().name());
|
|
}
|
|
else
|
|
{
|
|
nameEdit->clear();
|
|
colorEdit->clear();
|
|
}
|
|
}
|
|
|
|
void PrefDialog::onButtonColorButtonClick()
|
|
{
|
|
QColorDialog dialog(this);
|
|
if (dialog.exec() == DialogCode::Accepted)
|
|
{
|
|
QToolButton *sender = static_cast<QToolButton*>(QObject::sender());
|
|
QLineEdit *colorEdit;
|
|
QListWidgetItem *item;
|
|
if (sender == ui->colorStatusButton)
|
|
{
|
|
colorEdit = ui->colorStatusEdit;
|
|
item = ui->statusListWidget->currentItem();
|
|
}
|
|
else
|
|
{
|
|
colorEdit = ui->colorPriorityEdit;
|
|
item = ui->priorityListWidget->currentItem();
|
|
}
|
|
QColor selectedColor = dialog.selectedColor();
|
|
colorEdit->setText(selectedColor.name());
|
|
setItemColor(item, selectedColor);
|
|
}
|
|
}
|
|
|
|
void PrefDialog::onNameChange()
|
|
{
|
|
QLineEdit *sender = static_cast<QLineEdit*>(QObject::sender());
|
|
QListWidgetItem *item;
|
|
if (sender == ui->nameStatusEdit)
|
|
{
|
|
if (ui->statusListWidget->selectedItems().size() != 1)
|
|
{
|
|
return;
|
|
}
|
|
item = ui->statusListWidget->currentItem();
|
|
}
|
|
else
|
|
{
|
|
if (ui->priorityListWidget->selectedItems().size() != 1)
|
|
{
|
|
return;
|
|
}
|
|
item = ui->priorityListWidget->currentItem();
|
|
}
|
|
item->setText(sender->text());
|
|
}
|
|
|
|
void PrefDialog::onRemoveStatusButtonClick()
|
|
{
|
|
if (ui->statusListWidget->selectedItems().size() != 1)
|
|
{
|
|
return;
|
|
}
|
|
int index = ui->statusListWidget->currentRow();
|
|
delete ui->statusListWidget->takeItem(index);
|
|
statusUUIDRef.removeAt(index);
|
|
}
|
|
|
|
void PrefDialog::onRemovePriorityButtonClick()
|
|
{
|
|
if (ui->priorityListWidget->selectedItems().size() != 1)
|
|
{
|
|
return;
|
|
}
|
|
int index = ui->priorityListWidget->currentRow();
|
|
delete ui->priorityListWidget->takeItem(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)
|
|
{
|
|
QColor fgColor = Tools::getForegroundColor(bgColor);
|
|
|
|
// Set background
|
|
QBrush bg = item->background();
|
|
bg.setStyle(Qt::BrushStyle::SolidPattern);
|
|
bg.setColor(bgColor);
|
|
item->setBackground(bg);
|
|
|
|
// Set foreground
|
|
QBrush fg = item->foreground();
|
|
fg.setStyle(Qt::BrushStyle::SolidPattern);
|
|
fg.setColor(fgColor);
|
|
item->setForeground(fg);
|
|
}
|