@ -31,8 +31,11 @@ from electrum.plugins import run_hook
from util import *
from util import *
dialogs = [ ] # Otherwise python randomly garbage collects the dialogs...
def show_transaction ( tx , parent , desc = None , prompt_if_unsaved = False ) :
def show_transaction ( tx , parent , desc = None , prompt_if_unsaved = False ) :
d = TxDialog ( tx , parent , desc , prompt_if_unsaved )
d = TxDialog ( tx , parent , desc , prompt_if_unsaved )
dialogs . append ( d )
d . show ( )
d . show ( )
class TxDialog ( QWidget ) :
class TxDialog ( QWidget ) :
@ -45,7 +48,9 @@ class TxDialog(QWidget):
tx_dict = tx . as_dict ( )
tx_dict = tx . as_dict ( )
self . parent = parent
self . parent = parent
self . wallet = parent . wallet
self . wallet = parent . wallet
self . saved = not prompt_if_unsaved
self . prompt_if_unsaved = prompt_if_unsaved
self . saved = False
self . broadcast = False
self . desc = desc
self . desc = desc
QWidget . __init__ ( self )
QWidget . __init__ ( self )
@ -82,7 +87,6 @@ class TxDialog(QWidget):
self . broadcast_button = b = QPushButton ( _ ( " Broadcast " ) )
self . broadcast_button = b = QPushButton ( _ ( " Broadcast " ) )
b . clicked . connect ( self . do_broadcast )
b . clicked . connect ( self . do_broadcast )
b . hide ( )
self . save_button = b = QPushButton ( _ ( " Save " ) )
self . save_button = b = QPushButton ( _ ( " Save " ) )
b . clicked . connect ( self . save )
b . clicked . connect ( self . save )
@ -113,15 +117,19 @@ class TxDialog(QWidget):
def do_broadcast ( self ) :
def do_broadcast ( self ) :
self . parent . broadcast_transaction ( self . tx , self . desc )
self . parent . broadcast_transaction ( self . tx , self . desc )
self . saved = True
self . broadcast = True
self . update ( )
def close ( self ) :
def closeEvent ( self , event ) :
if not self . saved :
if ( self . prompt_if_unsaved and not self . saved and not self . broadcast
if QMessageBox . question (
and QMessageBox . question (
self , _ ( ' Message ' ) , _ ( ' This transaction is not saved. Close anyway? ' ) ,
self , _ ( ' Warning ' ) ,
QMessageBox . Yes | QMessageBox . No , QMessageBox . No ) == QMessageBox . No :
_ ( ' This transaction is not saved. Close anyway? ' ) ,
return
QMessageBox . Yes | QMessageBox . No ) == QMessageBox . No ) :
QWidget . close ( self )
event . ignore ( )
else :
event . accept ( )
dialogs . remove ( self )
def show_qr ( self ) :
def show_qr ( self ) :
text = self . tx . raw . decode ( ' hex ' )
text = self . tx . raw . decode ( ' hex ' )
@ -134,6 +142,8 @@ class TxDialog(QWidget):
def sign ( self ) :
def sign ( self ) :
def sign_done ( success ) :
def sign_done ( success ) :
self . prompt_if_unsaved = True
self . saved = False
self . update ( )
self . update ( )
self . parent . send_tx ( self . tx , sign_done )
self . parent . send_tx ( self . tx , sign_done )
@ -152,6 +162,7 @@ class TxDialog(QWidget):
tx_hash = self . tx . hash ( )
tx_hash = self . tx . hash ( )
desc = self . desc
desc = self . desc
time_str = None
time_str = None
self . broadcast_button . hide ( )
if self . tx . is_complete ( ) :
if self . tx . is_complete ( ) :
status = _ ( " Signed " )
status = _ ( " Signed " )
@ -164,8 +175,7 @@ class TxDialog(QWidget):
else :
else :
time_str = _ ( ' Pending ' )
time_str = _ ( ' Pending ' )
status = _ ( " %d confirmations " ) % conf
status = _ ( " %d confirmations " ) % conf
self . broadcast_button . hide ( )
elif not self . broadcast :
else :
self . broadcast_button . show ( )
self . broadcast_button . show ( )
# cannot broadcast when offline
# cannot broadcast when offline
if self . parent . network is None :
if self . parent . network is None :
@ -173,7 +183,6 @@ class TxDialog(QWidget):
else :
else :
s , r = self . tx . signature_count ( )
s , r = self . tx . signature_count ( )
status = _ ( " Unsigned " ) if s == 0 else _ ( ' Partially signed ' ) + ' ( %d / %d ) ' % ( s , r )
status = _ ( " Unsigned " ) if s == 0 else _ ( ' Partially signed ' ) + ' ( %d / %d ) ' % ( s , r )
self . broadcast_button . hide ( )
tx_hash = _ ( ' Unknown ' ) ;
tx_hash = _ ( ' Unknown ' ) ;
if self . wallet . can_sign ( self . tx ) :
if self . wallet . can_sign ( self . tx ) :