forked from bitcoinafterlife/bal-electrum-plugin
init
This commit is contained in:
119
balqt/baldialog.py
Normal file
119
balqt/baldialog.py
Normal file
@@ -0,0 +1,119 @@
|
||||
from typing import Callable,Any
|
||||
|
||||
from . import qt_resources
|
||||
if qt_resources.QT_VERSION == 5:
|
||||
from PyQt5.QtCore import Qt,pyqtSignal
|
||||
from PyQt5.QtWidgets import QLabel, QVBoxLayout, QCheckBox
|
||||
else:
|
||||
from PyQt6.QtCore import Qt,pyqtSignal
|
||||
from PyQt6.QtWidgets import QLabel, QVBoxLayout, QCheckBox
|
||||
|
||||
from electrum.gui.qt.util import WindowModalDialog, TaskThread
|
||||
from electrum.i18n import _
|
||||
from electrum.logging import get_logger
|
||||
|
||||
_logger = get_logger(__name__)
|
||||
|
||||
class BalDialog(WindowModalDialog):
|
||||
|
||||
def __init__(self,parent,title=None, icon = 'bal32x32.png'):
|
||||
self.parent=parent
|
||||
WindowModalDialog.__init__(self,self.parent,title)
|
||||
self.setWindowIcon(qt_resources.read_QIcon(icon))
|
||||
|
||||
class BalWaitingDialog(BalDialog):
|
||||
updatemessage=pyqtSignal([str], arguments=['message'])
|
||||
def __init__(self, bal_window: 'BalWindow', message: str, task, on_success=None, on_error=None, on_cancel=None,exe=True):
|
||||
assert bal_window
|
||||
BalDialog.__init__(self, bal_window.window, _("Please wait"))
|
||||
self.message_label = QLabel(message)
|
||||
vbox = QVBoxLayout(self)
|
||||
vbox.addWidget(self.message_label)
|
||||
self.updatemessage.connect(self.update_message)
|
||||
if on_cancel:
|
||||
self.cancel_button = CancelButton(self)
|
||||
self.cancel_button.clicked.connect(on_cancel)
|
||||
vbox.addLayout(Buttons(self.cancel_button))
|
||||
self.accepted.connect(self.on_accepted)
|
||||
self.task=task
|
||||
self.on_success = on_success
|
||||
self.on_error = on_error
|
||||
self.on_cancel = on_cancel
|
||||
if exe:
|
||||
self.exe()
|
||||
|
||||
def exe(self):
|
||||
self.thread = TaskThread(self)
|
||||
self.thread.finished.connect(self.deleteLater) # see #3956
|
||||
self.thread.finished.connect(self.finished)
|
||||
self.thread.add(self.task, self.on_success, self.accept, self.on_error)
|
||||
self.exec()
|
||||
|
||||
def hello(self):
|
||||
pass
|
||||
def finished(self):
|
||||
_logger.info("finished")
|
||||
def wait(self):
|
||||
self.thread.wait()
|
||||
|
||||
def on_accepted(self):
|
||||
self.thread.stop()
|
||||
def update_message(self,msg):
|
||||
self.message_label.setText(msg)
|
||||
|
||||
def update(self, msg):
|
||||
self.updatemessage.emit(msg)
|
||||
|
||||
def getText(self):
|
||||
return self.message_label.text()
|
||||
|
||||
def closeEvent(self,event):
|
||||
self.thread.stop()
|
||||
|
||||
|
||||
|
||||
class BalBlockingWaitingDialog(BalDialog):
|
||||
def __init__(self, bal_window: 'BalWindow', message: str, task: Callable[[], Any]):
|
||||
BalDialog.__init__(self, bal_window, _("Please wait"))
|
||||
self.message_label = QLabel(message)
|
||||
vbox = QVBoxLayout(self)
|
||||
vbox.addWidget(self.message_label)
|
||||
self.finished.connect(self.deleteLater) # see #3956
|
||||
# show popup
|
||||
self.show()
|
||||
# refresh GUI; needed for popup to appear and for message_label to get drawn
|
||||
QCoreApplication.processEvents()
|
||||
QCoreApplication.processEvents()
|
||||
try:
|
||||
# block and run given task
|
||||
task()
|
||||
finally:
|
||||
# close popup
|
||||
self.accept()
|
||||
|
||||
class bal_checkbox(QCheckBox):
|
||||
def __init__(self, plugin,variable,window=None):
|
||||
QCheckBox.__init__(self)
|
||||
self.setChecked(plugin.config_get(variable))
|
||||
window=window
|
||||
def on_check(v):
|
||||
plugin.config.set_key(variable, v == Qt.CheckState.Checked, save=True)
|
||||
if window:
|
||||
plugin._hide_invalidated= plugin.config_get(plugin.HIDE_INVALIDATED)
|
||||
plugin._hide_replaced= plugin.config_get(plugin.HIDE_REPLACED)
|
||||
|
||||
window.update_all()
|
||||
self.stateChanged.connect(on_check)
|
||||
|
||||
#TODO IMPLEMENT PREVIEW DIALOG
|
||||
#tx list display txid, willexecutor, qrcode, button to sign
|
||||
# :def preview_dialog(self, txs):
|
||||
def preview_dialog(self, txs):
|
||||
w=PreviewDialog(self,txs)
|
||||
w.exec()
|
||||
return w
|
||||
def add_info_from_will(self,tx):
|
||||
for input in tx.inputs():
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user