#include "prefdialog.h" #include "ui_prefdialog.h" #include #include #include "../tools.h" #include "../services/taskstateservice.h" PrefDialog::PrefDialog(QWidget *parent) : QDialog(parent), ui(new Ui::PrefDialog) { ui->setupUi(this); QVector 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 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 PrefDialog::getPriorities() { uint16_t count = ui->priorityListWidget->count(); QVector 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 PrefDialog::getStatus() { uint16_t count = ui->statusListWidget->count(); QVector 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(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(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(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); }