electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit a199061462c7d2e62866b24dcdd7b51fd575e355
parent 2e8801fdda3936ec80b1d1f6fb41a101faed06a7
Author: ThomasV <thomasv@electrum.org>
Date:   Tue, 13 Oct 2015 19:09:12 +0200

add password_dialog

Diffstat:
Mgui/kivy/main_window.py | 22++++++++++++++++------
Mgui/kivy/uix/screens.py | 19++++++++-----------
Agui/kivy/uix/ui_screens/password.kv | 27+++++++++++++++++++++++++++
Mgui/kivy/uix/ui_screens/settings.kv | 11++++++++++-
4 files changed, 61 insertions(+), 18 deletions(-)

diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py @@ -381,15 +381,10 @@ class ElectrumWindow(App): ''' Initialize The Ux part of electrum. This function performs the basic tasks of setting up the ui. ''' - global ref - if not ref: - from weakref import ref - + from weakref import ref set_language(self.electrum_config.get('language')) self.funds_error = False - self.completions = [] - # setup UX self.screens = {} @@ -806,3 +801,18 @@ class ElectrumWindow(App): if not pos: pos = (win.center[0], win.center[1] - (info_bubble.height/2)) info_bubble.show(pos, duration, width, modal=modal, exit=exit) + + + def password_dialog(self, f, args): + if self.wallet.use_encryption: + popup = Builder.load_file('gui/kivy/uix/ui_screens/password.kv') + def callback(): + pw = popup.ids.text_input.text + Clock.schedule_once(lambda x: apply(f, args + (pw,)), 0.5) + popup.on_dismiss = callback + popup.open() + else: + apply(f, args + (None,)) + + + diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py @@ -2,6 +2,7 @@ from weakref import ref from decimal import Decimal import re import datetime +import traceback, sys from kivy.app import App from kivy.cache import Cache @@ -96,11 +97,9 @@ class HistoryScreen(CScreen): time_str = _("unknown") if conf > 0: try: - time_str = datetime.datetime.fromtimestamp( - timestamp).isoformat(' ')[:-3] + time_str = datetime.datetime.fromtimestamp(timestamp).isoformat(' ')[:-3] except Exception: time_str = _("error") - if conf == -1: time_str = _('unverified') icon = "atlas://gui/kivy/theming/light/close" @@ -153,7 +152,6 @@ class HistoryScreen(CScreen): ri = RecentActivityItem() ri.icon = icon ri.date = date_time - mintimestr = date_time.split()[0] ri.address = address ri.amount = amount ri.quote_text = quote_text @@ -223,17 +221,16 @@ class SendScreen(CScreen): app.show_error(_('Invalid Fee')) return - message = 'sending {} {} to {}'.format(self.app.base_unit, scrn.amount_e.text, r) - # assume no password and fee is None - password = None fee = None - self.send_tx([('address', to_address, amount)], fee, label, password) + message = 'sending {} {} to {}'.format(self.app.base_unit, scrn.amount_e.text, r) + outputs = [('address', to_address, amount)] + self.app.password_dialog(self.send_tx, (outputs, fee, label)) def send_tx(self, outputs, fee, label, password): # make unsigned transaction coins = self.app.wallet.get_spendable_coins() try: - tx = self.app.wallet.make_unsigned_transaction(coins, outputs, self.electrum_config, fee) + tx = self.app.wallet.make_unsigned_transaction(coins, outputs, self.app.electrum_config, fee) except Exception as e: traceback.print_exc(file=sys.stdout) self.app.show_error(str(e)) @@ -246,8 +243,8 @@ class SendScreen(CScreen): self.app.show_error(str(e)) return # broadcast - self.wallet.sendtx(tx) - + ok, txid = self.app.wallet.sendtx(tx) + self.app.show_info(txid) class ReceiveScreen(CScreen): diff --git a/gui/kivy/uix/ui_screens/password.kv b/gui/kivy/uix/ui_screens/password.kv @@ -0,0 +1,27 @@ +Popup: + id: pw + title: _('Password') + + BoxLayout: + + orientation: 'vertical' + size_hint: 1, None + + GridLayout: + size_hint: 1, None + cols: 2 + Label: + text: 'Password' + height: '48dp' + TextInput: + id: text_input + password:True + + Button: + size_hint_y: None + height: '48dp' + text: _('Close') + on_release: pw.dismiss() + + Widget: + size_hint_y: 1 diff --git a/gui/kivy/uix/ui_screens/settings.kv b/gui/kivy/uix/ui_screens/settings.kv @@ -5,17 +5,26 @@ Popup: BoxLayout: orientation: 'vertical' - size_hint_y: None + size_hint: 1, None GridLayout: cols: 2 Label: text: _('Base unit') height: '48dp' + size_hint: 1, None Spinner: text: 'BTC' values: ('BTC', 'mBTC') height: '48dp' + + Label: + size_hint: 1, None + text: 'OpenAlias' + height: '48dp' + TextInput: + size_hint: 1, None + Button: #size_hint_y: None