tUse TaskThread to simplify ThreadedButton - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 144f53be1845db3fc839fd0c9509602c6a8f4693 DIR parent c714acf73935eb0063c53c48d7ef614ee95226bd HTML Author: Neil Booth <kyuupichan@gmail.com> Date: Sun, 17 Jan 2016 16:13:32 +0900 Use TaskThread to simplify ThreadedButton And improve labels dialog Diffstat: M gui/qt/util.py | 40 ++++++++----------------------- M plugins/labels/qt.py | 35 ++++++++++++++++--------------- 2 files changed, 28 insertions(+), 47 deletions(-) --- DIR diff --git a/gui/qt/util.py b/gui/qt/util.py t@@ -51,41 +51,21 @@ class EnterButton(QPushButton): class ThreadedButton(QPushButton): - def __init__(self, text, func, on_success=None, before=None): + def __init__(self, text, task, on_success=None, on_error=None): QPushButton.__init__(self, text) - self.before = before - self.run_task = func + self.task = task self.on_success = on_success - self.clicked.connect(self.do_exec) - self.connect(self, SIGNAL('done'), self.done) - self.connect(self, SIGNAL('error'), self.on_error) + self.on_error = on_error + self.clicked.connect(self.run_task) - def done(self): - if self.on_success: - self.on_success() - self.setEnabled(True) + def run_task(self): + self.setEnabled(False) + self.thread = TaskThread(self) + self.thread.add(self.task, self.on_success, self.done, self.on_error) - def on_error(self): - QMessageBox.information(None, _("Error"), self.error) + def done(self): self.setEnabled(True) - - def do_func(self): - self.setEnabled(False) - try: - self.result = self.run_task() - except BaseException as e: - traceback.print_exc(file=sys.stdout) - self.error = str(e.message) - self.emit(SIGNAL('error')) - return - self.emit(SIGNAL('done')) - - def do_exec(self): - if self.before: - self.before() - t = threading.Thread(target=self.do_func) - t.setDaemon(True) - t.start() + self.thread.stop() class WWLabel(QLabel): DIR diff --git a/plugins/labels/qt.py b/plugins/labels/qt.py t@@ -6,7 +6,7 @@ from PyQt4.QtCore import * from electrum.plugins import hook from electrum.i18n import _ from electrum_gui.qt import EnterButton -from electrum_gui.qt.util import ThreadedButton, Buttons, CancelButton +from electrum_gui.qt.util import ThreadedButton, Buttons from electrum_gui.qt.util import WindowModalDialog, OkButton from labels import LabelsPlugin t@@ -28,28 +28,29 @@ class Plugin(LabelsPlugin): def settings_dialog(self, window): wallet = window.parent().wallet d = WindowModalDialog(window, _("Label Settings")) + hbox = QHBoxLayout() + hbox.addWidget(QLabel("Label sync options:")) + upload = ThreadedButton("Force upload", + partial(self.push_thread, wallet), + partial(self.done_processing, d)) + download = ThreadedButton("Force download", + partial(self.pull_thread, wallet, True), + partial(self.done_processing, d)) + vbox = QVBoxLayout() + vbox.addWidget(upload) + vbox.addWidget(download) + hbox.addLayout(vbox) vbox = QVBoxLayout(d) - layout = QGridLayout() - vbox.addLayout(layout) - layout.addWidget(QLabel("Label sync options: "), 2, 0) - self.upload = ThreadedButton("Force upload", - partial(self.push_thread, wallet), - self.done_processing) - layout.addWidget(self.upload, 2, 1) - self.download = ThreadedButton("Force download", - partial(self.pull_thread, wallet, True), - self.done_processing) - layout.addWidget(self.download, 2, 2) - self.accept = OkButton(d, _("Done")) - vbox.addLayout(Buttons(CancelButton(d), self.accept)) + vbox.addLayout(hbox) + vbox.addSpacing(20) + vbox.addLayout(Buttons(OkButton(d))) return bool(d.exec_()) def on_pulled(self, wallet): self.obj.emit(SIGNAL('labels_changed'), wallet) - def done_processing(self): - QMessageBox.information(None, _("Labels synchronised"), - _("Your labels have been synchronised.")) + def done_processing(self, dialog, result): + dialog.show_message(_("Your labels have been synchronised.")) @hook def on_new_window(self, window):