From b910d0cb720dacc71f081b370773158a69bdf8ff Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Thu, 6 Apr 2017 23:38:13 +0530 Subject: [PATCH] Add support for hashable ListWidgetItem --- picard/ui/__init__.py | 13 +++++++++++++ picard/ui/options/scripting.py | 5 +++-- picard/webservice.py | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/picard/ui/__init__.py b/picard/ui/__init__.py index bffca0f14..3c374d62f 100644 --- a/picard/ui/__init__.py +++ b/picard/ui/__init__.py @@ -44,3 +44,16 @@ class HashableTreeWidgetItem(QtWidgets.QTreeWidgetItem): def __hash__(self): return hash(str(self.id)) + + +class HashableListWidgetItem(QtWidgets.QListWidgetItem): + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.id = uuid.uuid4() + + def __eq__(self, other): + return self.id == other.id + + def __hash__(self): + return hash(str(self.id)) diff --git a/picard/ui/options/scripting.py b/picard/ui/options/scripting.py index b1333c5a7..48fd8bbba 100644 --- a/picard/ui/options/scripting.py +++ b/picard/ui/options/scripting.py @@ -21,6 +21,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets from picard import config from picard.const import PICARD_URLS from picard.script import ScriptParser +from picard.ui import HashableListWidgetItem from picard.ui.options import OptionsPage, OptionsCheckError, register_options_page from picard.ui.ui_options_script import Ui_ScriptingOptionsPage @@ -272,7 +273,7 @@ class ScriptingOptionsPage(OptionsPage): numbered_name = _(DEFAULT_NUMBERED_SCRIPT_NAME) % (count + 1) script = ScriptItem(pos=count, name=numbered_name) - list_item = QtWidgets.QListWidgetItem() + list_item = HashableListWidgetItem() list_widget = AdvancedScriptItem(numbered_name) self.setSignals(list_widget, list_item) self.ui.script_list.addItem(list_item) @@ -388,7 +389,7 @@ class ScriptingOptionsPage(OptionsPage): self.list_of_scripts = config.setting["list_of_scripts"] for s_pos, s_name, s_enabled, s_text in self.list_of_scripts: script = ScriptItem(s_pos, s_name, s_enabled, s_text) - list_item = QtWidgets.QListWidgetItem() + list_item = HashableListWidgetItem() list_widget = AdvancedScriptItem(name=s_name, state=s_enabled) self.setSignals(list_widget, list_item) self.ui.script_list.addItem(list_item) diff --git a/picard/webservice.py b/picard/webservice.py index 6a63b49f9..c67459027 100644 --- a/picard/webservice.py +++ b/picard/webservice.py @@ -337,7 +337,7 @@ class XmlWebService(QtCore.QObject): return self.add_task(func, host, port, priority, important=important) def stop(self): - for reply in self._active_requests.keys(): + for reply in list(self._active_requests.keys()): reply.abort() self._init_queues()