dialog parents, fix settings dialog, use gtk textview

This commit is contained in:
thomasv 2011-12-06 12:39:42 +01:00
parent 5e677b0e97
commit abbd4e065e
1 changed files with 50 additions and 51 deletions

View File

@ -39,7 +39,7 @@ def numbify(entry, is_int = False):
entry.set_text(s) entry.set_text(s)
def show_seed_dialog(wallet, password): def show_seed_dialog(wallet, password, parent):
import mnemonic import mnemonic
try: try:
seed = wallet.pw_decode( wallet.seed, password) seed = wallet.pw_decode( wallet.seed, password)
@ -48,12 +48,13 @@ def show_seed_dialog(wallet, password):
show_message("Incorrect password") show_message("Incorrect password")
return return
dialog = gtk.MessageDialog( dialog = gtk.MessageDialog(
parent = None, parent = parent,
flags = gtk.DIALOG_MODAL, flags = gtk.DIALOG_MODAL,
buttons = gtk.BUTTONS_OK, buttons = gtk.BUTTONS_OK,
message_format = "Your wallet generation seed is:\n\n" + seed \ message_format = "Your wallet generation seed is:\n\n" + seed \
+ "\n\nPlease keep it in a safe place; if you lose it, you will not be able to restore your wallet.\n\n" \ + "\n\nPlease keep it in a safe place; if you lose it, you will not be able to restore your wallet.\n\n" \
+ "Equivalently, your wallet seed can be stored and recovered with the following mnemonic code:\n\n\"" + ' '.join(mnemonic.mn_encode(seed)) + "\"" ) + "Equivalently, your wallet seed can be stored and recovered with the following mnemonic code:\n\n\"" + ' '.join(mnemonic.mn_encode(seed)) + "\"" )
dialog.set_title("Seed")
dialog.show() dialog.show()
dialog.run() dialog.run()
dialog.destroy() dialog.destroy()
@ -84,20 +85,20 @@ def init_wallet(wallet):
wallet.new_seed(None) wallet.new_seed(None)
# ask for the server. # ask for the server.
run_settings_dialog(wallet, is_create=True, is_recovery=False) run_settings_dialog(wallet, is_create=True, is_recovery=False, parent=None)
# generate first key # generate first key
wallet.create_new_address(False, None) wallet.create_new_address(False, None)
# run a dialog indicating the seed, ask the user to remember it # run a dialog indicating the seed, ask the user to remember it
show_seed_dialog(wallet, None) show_seed_dialog(wallet, None, None)
#ask for password #ask for password
change_password_dialog(wallet, None) change_password_dialog(wallet, None, None)
else: else:
# ask for the server, seed and gap. # ask for the server, seed and gap.
run_settings_dialog(wallet, is_create=True, is_recovery=True) run_settings_dialog(wallet, is_create=True, is_recovery=True, parent=None)
dialog = gtk.MessageDialog( dialog = gtk.MessageDialog(
parent = None, parent = None,
@ -120,24 +121,26 @@ def init_wallet(wallet):
show_message("No transactions found for this seed") show_message("No transactions found for this seed")
def settings_dialog(wallet, is_create, is_recovery): def run_settings_dialog(wallet, is_create, is_recovery, parent):
if is_create: if is_recovery:
dialog = gtk.MessageDialog( message = "Please enter your wallet seed or the corresponding mnemonic list of words, the server and the gap limit"
parent = None, elif is_create:
flags = gtk.DIALOG_MODAL, message = "Please indicate the server and port number"
buttons = gtk.BUTTONS_OK_CANCEL,
message_format = "Please indicate the server and port number" if not is_recovery else 'Please enter your wallet seed or the corresponding mnemonic list of words, the server and the gap limit')
else: else:
dialog = gtk.MessageDialog( None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, message = "These are the settings of your wallet. For more explanations, click on the question mark buttons next to each input field."
gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, "These are the settings of your wallet. For more explanations, click on the question mark buttons next to each input field.")
dialog.get_image().set_visible(False) dialog = gtk.MessageDialog(
dialog.set_title("Settings") parent = parent,
flags = gtk.DIALOG_MODAL,
buttons = gtk.BUTTONS_OK_CANCEL,
message_format = message)
image = gtk.Image() image = gtk.Image()
image.set_from_stock(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_DIALOG) image.set_from_stock(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_DIALOG)
image.show() image.show()
dialog.set_image(image) dialog.set_image(image)
dialog.set_title("Settings")
vbox = dialog.vbox vbox = dialog.vbox
dialog.set_default_response(gtk.RESPONSE_OK) dialog.set_default_response(gtk.RESPONSE_OK)
@ -201,22 +204,6 @@ def settings_dialog(wallet, is_create, is_recovery):
fee.show() fee.show()
vbox.pack_start(fee, False,False, 5) vbox.pack_start(fee, False,False, 5)
if not is_create:
return dialog, fee_entry, gap_entry
elif is_recovery:
return dialog, seed_entry, gap_entry, host_entry
else:
return dialog, host_entry
def run_settings_dialog( wallet, is_create, is_recovery):
if not is_create:
dialog, fee_entry, gap_entry = settings_dialog(wallet, is_create, is_recovery)
elif is_recovery:
dialog, seed_entry, gap_entry, host_entry = settings_dialog(wallet, is_create, is_recovery)
else:
dialog, host_entry, = settings_dialog(wallet, is_create, is_recovery)
dialog.show() dialog.show()
r = dialog.run() r = dialog.run()
@ -231,6 +218,10 @@ def run_settings_dialog( wallet, is_create, is_recovery):
import mnemonic import mnemonic
print "not hex, trying decode" print "not hex, trying decode"
seed = mnemonic.mn_decode( seed.split(' ') ) seed = mnemonic.mn_decode( seed.split(' ') )
if not is_create:
fee = fee_entry.get_text()
gap = gap_entry.get_text()
dialog.destroy() dialog.destroy()
if r==gtk.RESPONSE_CANCEL: if r==gtk.RESPONSE_CANCEL:
if is_create: sys.exit(1) if is_create: sys.exit(1)
@ -243,17 +234,25 @@ def run_settings_dialog( wallet, is_create, is_recovery):
port = int(port) port = int(port)
else: else:
host = hh host = hh
port = 80 port = 50000
if is_recovery: gap = int(gap) if is_recovery:
gap = int(gap)
if not is_create:
fee = float(fee)
gap = int(gap)
except: except:
show_message("error") show_message("error")
return return
wallet.host = host if is_create:
wallet.port = port wallet.host = host
wallet.port = port
if is_recovery: if is_recovery:
wallet.seed = seed wallet.seed = seed
wallet.gap_limit = gap wallet.gap_limit = gap
if not is_create:
wallet.fee = fee
wallet.gap_limit = gap
wallet.save() wallet.save()
@ -296,13 +295,13 @@ def password_dialog():
dialog.destroy() dialog.destroy()
if result: return pw if result: return pw
def change_password_dialog(wallet, icon): def change_password_dialog(wallet, parent, icon):
if icon: if parent:
msg = 'Your wallet is encrypted. Use this dialog to change the password. To disable wallet encryption, enter an empty new password.' if wallet.use_encryption else 'Your wallet keys are not encrypted' msg = 'Your wallet is encrypted. Use this dialog to change the password. To disable wallet encryption, enter an empty new password.' if wallet.use_encryption else 'Your wallet keys are not encrypted'
else: else:
msg = "Please choose a password to encrypt your wallet keys" msg = "Please choose a password to encrypt your wallet keys"
dialog = gtk.MessageDialog( None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, msg) dialog = gtk.MessageDialog( parent, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, msg)
dialog.set_title("Change password") dialog.set_title("Change password")
image = gtk.Image() image = gtk.Image()
image.set_from_stock(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_DIALOG) image.set_from_stock(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_DIALOG)
@ -410,7 +409,7 @@ class BitcoinGUI:
password = password_dialog() password = password_dialog()
if not password: return if not password: return
else: password = None else: password = None
show_seed_dialog(wallet, password) show_seed_dialog(wallet, password, self.window)
button = gtk.Button('S') button = gtk.Button('S')
button.connect("clicked", seedb, wallet ) button.connect("clicked", seedb, wallet )
button.set_relief(gtk.RELIEF_NONE) button.set_relief(gtk.RELIEF_NONE)
@ -424,7 +423,7 @@ class BitcoinGUI:
settings_icon.show() settings_icon.show()
prefs_button = gtk.Button() prefs_button = gtk.Button()
prefs_button.connect("clicked", lambda x: run_settings_dialog(self.wallet, False, False) ) prefs_button.connect("clicked", lambda x: run_settings_dialog(self.wallet, False, False, self.window) )
prefs_button.add(settings_icon) prefs_button.add(settings_icon)
prefs_button.set_tooltip_text("Settings") prefs_button.set_tooltip_text("Settings")
prefs_button.set_relief(gtk.RELIEF_NONE) prefs_button.set_relief(gtk.RELIEF_NONE)
@ -438,7 +437,7 @@ class BitcoinGUI:
pw_icon.show() pw_icon.show()
password_button = gtk.Button() password_button = gtk.Button()
password_button.connect("clicked", lambda x: change_password_dialog(self.wallet, pw_icon)) password_button.connect("clicked", lambda x: change_password_dialog(self.wallet, self.window, pw_icon))
password_button.add(pw_icon) password_button.add(pw_icon)
password_button.set_relief(gtk.RELIEF_NONE) password_button.set_relief(gtk.RELIEF_NONE)
password_button.show() password_button.show()
@ -557,14 +556,14 @@ class BitcoinGUI:
def create_about_tab(self): def create_about_tab(self):
page = gtk.VBox() page = gtk.VBox()
page.show() page.show()
self.info = gtk.Label('') #self.info = gtk.Label('')
self.info.set_selectable(True) #self.info.set_selectable(True)
page.pack_start(self.info) #page.pack_start(self.info)
#tv = gtk.TextView() tv = gtk.TextView()
#tv.set_editable(False) tv.set_editable(False)
#tv.set_cursor_visible(False) tv.set_cursor_visible(False)
#page.pack_start(tv) page.pack_start(tv)
#self.info = tv.get_buffer() self.info = tv.get_buffer()
self.add_tab(page, 'Wall') self.add_tab(page, 'Wall')
def do_send(self, w, data): def do_send(self, w, data):