From 3af0771b55010fa2d0c37ebe7180f9b7b9c99a2e Mon Sep 17 00:00:00 2001 From: Aurelie Delhaie Date: Sun, 12 Feb 2023 19:06:09 +0100 Subject: [PATCH] fix context menu, fix filter on boards --- src/frames/mainwindow.cpp | 79 ++++++++++++++++++++++++--------------- src/frames/mainwindow.h | 5 +++ src/frames/mainwindow.ui | 1 + src/models/board.cpp | 1 + 4 files changed, 55 insertions(+), 31 deletions(-) diff --git a/src/frames/mainwindow.cpp b/src/frames/mainwindow.cpp index 232cb3e..bf83d87 100644 --- a/src/frames/mainwindow.cpp +++ b/src/frames/mainwindow.cpp @@ -24,6 +24,9 @@ MainWindow::MainWindow(QWidget *parent) , ui(new Ui::MainWindow) { ui->setupUi(this); + this->menuSelectedBoardItem = nullptr; + this->menuSelectedFilterItem = nullptr; + this->menuSelectedTaskItem = nullptr; init(); this->selectedBoardIndex = -1; // Change "name" column size @@ -77,7 +80,8 @@ void MainWindow::openAbout() void MainWindow::prepareBoardMenu(const QPoint &pos) { QMenu menu(this); - if (ui->boardList->selectedItems().length() == 1) { + this->menuSelectedBoardItem = ui->boardList->itemAt(pos); + if (this->menuSelectedBoardItem != nullptr) { QAction *renameAction = new QAction(tr("Edit board"), this); connect(renameAction, &QAction::triggered, this, &MainWindow::onEditNameBoardMenu); menu.addAction(renameAction); @@ -99,15 +103,19 @@ void MainWindow::prepareTaskMenu(const QPoint &pos) { bool show = false; QMenu menu(this); - if (ui->taskList->selectedItems().length() == 1) { + this->menuSelectedTaskItem = ui->taskList->itemAt(pos); + if (menuSelectedTaskItem != nullptr) { show = true; QAction *renameAction = new QAction(tr("Edit the task"), this); connect(renameAction, &QAction::triggered, this, &MainWindow::onEditNameTaskMenu); menu.addAction(renameAction); - QAction *deleteAction = new QAction(tr("Delete from the board"), this); - connect(deleteAction, &QAction::triggered, this, &MainWindow::onRemoveTaskMenu); - menu.addAction(deleteAction); + if (selectedBoardIndex > -1) + { + QAction *deleteAction = new QAction(tr("Delete from the board"), this); + connect(deleteAction, &QAction::triggered, this, &MainWindow::onRemoveTaskMenu); + menu.addAction(deleteAction); + } menu.addSeparator(); } @@ -246,14 +254,18 @@ void MainWindow::onEditTask(QTreeWidgetItem *item) void MainWindow::onRemoveBoardMenu() { - if (selectedBoardIndex > -1) + if (menuSelectedBoardItem != nullptr) { + int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row(); QMessageBox::StandardButton result = QMessageBox::question(this, "Delete a board", "Do you want to delete this board?"); if (result == QMessageBox::Yes) { - boards.removeAt(selectedBoardIndex); - delete ui->boardList->takeItem(selectedBoardIndex); - selectedBoardIndex = -1; + boards.removeAt(i); + delete ui->boardList->takeItem(i); + if (selectedBoardIndex == i) + { + selectedBoardIndex = -1; + } redrawTaskTree(); save(); } @@ -278,14 +290,18 @@ void MainWindow::onRemoveTaskMenu() void MainWindow::onRemoveFilterMenu() { - if (selectedFilterIndex > -1) + if (menuSelectedFilterItem != nullptr) { + int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row(); 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; + filters.removeAt(i); + delete ui->filterListWidget->takeItem(i); + if (selectedFilterIndex == i) + { + selectedFilterIndex = -1; + } redrawTaskTree(); save(); } @@ -294,9 +310,10 @@ void MainWindow::onRemoveFilterMenu() void MainWindow::onEditNameBoardMenu() { - if (selectedBoardIndex > -1) + if (menuSelectedBoardItem != nullptr) { - Board *b = boards.at(selectedBoardIndex); + int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row(); + Board *b = boards.at(i); NameDialog dialog("Edit board name", b->getName(), b->getDescription(), this); if (dialog.exec() == QDialog::DialogCode::Accepted) { @@ -304,7 +321,7 @@ void MainWindow::onEditNameBoardMenu() QString newDesc = dialog.getDescription(); b->setName(newName); b->setDescription(newDesc); - QListWidgetItem *item = ui->boardList->item(selectedBoardIndex); + QListWidgetItem *item = ui->boardList->item(i); item->setText(newName); item->setToolTip(newDesc); ui->label->setText(newName); @@ -325,9 +342,10 @@ void MainWindow::onEditNameTaskMenu() void MainWindow::onEditFilterMenu() { - if (selectedFilterIndex > -1) + if (menuSelectedFilterItem != nullptr) { - Filter f = filters[selectedFilterIndex]; + int i = ui->filterListWidget->indexFromItem(menuSelectedFilterItem).row(); + Filter f = filters[i]; FilterDialog dialog("Edit the filter", f, boards, status, priorities, this); if (dialog.exec() == QDialog::DialogCode::Accepted) { @@ -347,7 +365,8 @@ void MainWindow::onEditFilterMenu() void MainWindow::prepareFilterMenu(const QPoint &pos) { QMenu menu(this); - if (ui->filterListWidget->selectedItems().length() == 1) { + this->menuSelectedFilterItem = ui->filterListWidget->itemAt(pos); + if (this->menuSelectedFilterItem != nullptr) { QAction *renameAction = new QAction(tr("Edit the filter"), this); connect(renameAction, &QAction::triggered, this, &MainWindow::onEditFilterMenu); menu.addAction(renameAction); @@ -511,26 +530,24 @@ const QJsonDocument MainWindow::getJsonSave() Task *MainWindow::getSelectedTask() { + + QList items = ui->taskList->selectedItems(); + if (items.count() != 1) + { + return nullptr; + } if (selectedBoardIndex > -1) { Board *b = boards[selectedBoardIndex]; - QList items = ui->taskList->selectedItems(); - if (items.count() == 1) - { - int16_t i = ui->taskList->indexOfTopLevelItem(items[0]); - return b->taskAt(i); - } + int16_t i = ui->taskList->indexOfTopLevelItem(items[0]); + return b->taskAt(i); } else if (selectedFilterIndex > -1) { if (!filterResult.empty()) { - QList items = ui->taskList->selectedItems(); - if (items.count() == 1) - { - int16_t i = ui->taskList->indexOfTopLevelItem(items[0]); - return filterResult[i]; - } + int16_t i = ui->taskList->indexOfTopLevelItem(items[0]); + return filterResult[i]; } } return nullptr; diff --git a/src/frames/mainwindow.h b/src/frames/mainwindow.h index af2b6d5..6dae9f6 100644 --- a/src/frames/mainwindow.h +++ b/src/frames/mainwindow.h @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -50,6 +51,10 @@ private: int16_t selectedBoardIndex; int16_t selectedFilterIndex; + QListWidgetItem *menuSelectedFilterItem; + QListWidgetItem *menuSelectedBoardItem; + QTreeWidgetItem *menuSelectedTaskItem; + QVector filterResult; QVector priorities; diff --git a/src/frames/mainwindow.ui b/src/frames/mainwindow.ui index 4d7effd..7c1ccf6 100644 --- a/src/frames/mainwindow.ui +++ b/src/frames/mainwindow.ui @@ -164,6 +164,7 @@ Board + diff --git a/src/models/board.cpp b/src/models/board.cpp index 79bedf2..7b120b0 100644 --- a/src/models/board.cpp +++ b/src/models/board.cpp @@ -99,6 +99,7 @@ const QJsonObject Board::toJson() } QJsonObject obj; obj[NAME_KEY] = this->name; + obj[UUID_KEY] = this->uuid; obj[TASKS_KEY] = array; obj[DESCRIPTION_KEY] = description; return obj;