From 953ce4bd153a13e449ffdaa43632c44f92388031 Mon Sep 17 00:00:00 2001 From: tntscreed Date: Tue, 7 Mar 2023 20:56:54 +0100 Subject: [PATCH] Multi-Deletion of Characters + Confirmation Dialog -Since multi-selection of characters is now possible, it's more intuitive that all selected characters should be deleted. -Added a confirmation dialog before character-deletion? Why the heck was this not a thing before? It was way too easy to accidentally delete characters, with no way to restore them without external source-control or backups. --- manuskript/mainWindow.py | 2 +- manuskript/ui/views/characterTreeView.py | 28 ++++++++++++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index c2f7887..8df50d2 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -514,7 +514,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): pass def deleteCharacter(self): - ID = self.lstCharacters.removeCharacter() + ID = self.lstCharacters.removeCharacters() if ID is None: return for itemID in self.mdlOutline.findItemsByPOV(ID): diff --git a/manuskript/ui/views/characterTreeView.py b/manuskript/ui/views/characterTreeView.py index c02b875..a70c9fd 100644 --- a/manuskript/ui/views/characterTreeView.py +++ b/manuskript/ui/views/characterTreeView.py @@ -2,7 +2,7 @@ # --!-- coding: utf8 --!-- from PyQt5.QtCore import QSize, QModelIndex, Qt from PyQt5.QtGui import QPixmap, QColor, QIcon, QBrush -from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QColorDialog, QDialog +from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QColorDialog, QDialog, QMessageBox from manuskript.enums import Character from manuskript.functions import iconColor, mainWindow @@ -138,15 +138,29 @@ class characterTreeView(QTreeWidget): self._model.addCharacter(importance=curr_importance) - def removeCharacter(self): + def removeCharacters(self): """ - Removes selected character. + Removes selected characters. """ - ID = self.currentCharacterID() - if ID is None: + IDs = self.currentCharacterIDs() + + # If none of the IDs are valid, do nothing. + if not any(IDs): return None - self._model.removeCharacter(ID) - return ID + + #Get confirmation from user + confirm = QMessageBox.warning( + self, "Delete selected character(s)?", + "Are you sure you want to delete the selected character(s)?", + QMessageBox.Yes | QMessageBox.No + ) + if confirm != QMessageBox.Yes: + return None + + #Delete all selected characters + for ID in IDs: + self._model.removeCharacter(ID) + return IDs def choseCharacterColor(self): ID = self.currentCharacterID()