From 5f5c01f319822aea436d332b2dfd0d8e2f0e66ef Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Wed, 21 Dec 2022 22:41:14 +0100 Subject: [PATCH] added right-click menu for deleting all/selected list items --- grum/dictlist/dictlistwidget.py | 24 ++++++++++++++++++++++++ grum/rclickmenu.py | 23 +++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 grum/rclickmenu.py diff --git a/grum/dictlist/dictlistwidget.py b/grum/dictlist/dictlistwidget.py index 1c75676..370bf5a 100644 --- a/grum/dictlist/dictlistwidget.py +++ b/grum/dictlist/dictlistwidget.py @@ -2,6 +2,7 @@ from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QListWidget from .dictlistitem import DictListItem +from ..rclickmenu import RClickMenu class DictListWidget(QListWidget): @@ -9,6 +10,29 @@ class DictListWidget(QListWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.items = {} + self._add_menu() + + + def _add_menu(self): + self.menu = menu = RClickMenu(self) + menu.addAction("delete selected", self.delete_selected) + menu.addAction("delete all", self.delete_all) + + def delete_selected(self): + selected = self.selectedItems() + for i in selected: + self.items.pop(i.key) + self.deleteItem(i) + + def deleteItem(self, itm): + index = self.indexFromItem(itm) + row = index.row() + self.takeItem(row) + + def delete_all(self): + self.items.clear() + super().clear() + def get(self, key): return self.items[key] diff --git a/grum/rclickmenu.py b/grum/rclickmenu.py new file mode 100644 index 0000000..c6e72c7 --- /dev/null +++ b/grum/rclickmenu.py @@ -0,0 +1,23 @@ +from PyQt5.QtCore import Qt, QPoint +from PyQt5.QtWidgets import QMenu, QAction +from PyQt5.QtGui import QCursor + + +class RClickMenu: + + def __init__(self, obj): + self.obj = obj + self.menu = QMenu() + obj.setContextMenuPolicy(Qt.CustomContextMenu) + obj.customContextMenuRequested[QPoint].connect(self.on_show) + + def on_show(self): + pos = QCursor.pos() + self.menu.exec(pos) + + def addAction(self, name, func): + action = QAction(name, triggered=func, parent=self.obj) # here, parent needs to be set + self.menu.addAction(action) + + +