From 30ace570d37097cf532910e9fa9b3f42cc488c5a Mon Sep 17 00:00:00 2001 From: ThomasV Date: Wed, 16 Dec 2015 08:57:47 +0100 Subject: [PATCH] kivy: choice_dialog and load_wallet_by_name --- gui/kivy/main_window.py | 31 +++++++++++--- gui/kivy/uix/dialogs/choice_dialog.py | 62 +++++++++++++++++++++++++++ gui/kivy/uix/ui_screens/settings.kv | 9 ++-- gui/kivy/uix/ui_screens/wallets.kv | 42 +++++++++++------- lib/transaction.py | 1 + 5 files changed, 117 insertions(+), 28 deletions(-) create mode 100644 gui/kivy/uix/dialogs/choice_dialog.py diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py index 1af3dfd05..c5c9cc385 100644 --- a/gui/kivy/main_window.py +++ b/gui/kivy/main_window.py @@ -310,17 +310,21 @@ class ElectrumWindow(App): win.bind(keyboard_height=self.on_keyboard_height) self.on_size(win, win.size) - config = self.electrum_config - storage = WalletStorage(config.get_wallet_path()) + self.load_wallet_by_name(self.electrum_config.get_wallet_path()) - Logger.info('Electrum: Check for existing wallet') + def load_wallet_by_name(self, wallet_path): + if not wallet_path: + return + self.stop_wallet() + config = self.electrum_config + storage = WalletStorage(wallet_path) + Logger.info('Electrum: Check for existing wallet') if storage.file_exists: wallet = Wallet(storage) action = wallet.get_action() else: action = 'new' - if action is not None: # start installation wizard Logger.debug('Electrum: Wallet not found. Launching install wizard') @@ -330,10 +334,25 @@ class ElectrumWindow(App): else: wallet.start_threads(self.network) self.on_wizard_complete(None, wallet) - self.on_resume() + def create_wallet_dialog(self): + from uix.dialogs.label_dialog import LabelDialog + d = LabelDialog(_('Enter wallet name'), '', self.load_wallet_by_name) + d.open() + + def unit_dialog(self, item): + from uix.dialogs.choice_dialog import ChoiceDialog + def cb(text): + self._set_bu(text) + item.bu = self.base_unit + d = ChoiceDialog(_('Denomination'), sorted(base_units.keys()), self.base_unit, cb) + d.open() + def on_stop(self): + self.stop_wallet() + + def stop_wallet(self): if self.wallet: self.wallet.stop_threads() @@ -438,7 +457,7 @@ class ElectrumWindow(App): interests = ['updated', 'status', 'new_transaction'] self.network.register_callback(self.on_network, interests) - self.wallet = None + #self.wallet = None self.tabs = self.root.ids['tabs'] def on_network(self, event, *args): diff --git a/gui/kivy/uix/dialogs/choice_dialog.py b/gui/kivy/uix/dialogs/choice_dialog.py new file mode 100644 index 000000000..57344ffcc --- /dev/null +++ b/gui/kivy/uix/dialogs/choice_dialog.py @@ -0,0 +1,62 @@ +from kivy.app import App +from kivy.factory import Factory +from kivy.properties import ObjectProperty +from kivy.lang import Builder +from kivy.uix.checkbox import CheckBox +from kivy.uix.label import Label + +Builder.load_string(''' + + id: popup + title: '' + size_hint: 0.8, 0.8 + pos_hint: {'top':0.9} + BoxLayout: + orientation: 'vertical' + Widget: + size_hint: 1, 0.2 + GridLayout: + orientation: 'vertical' + id: choices + cols: 2 + size_hint: 1, 0.8 + Widget: + size_hint: 1, 0.8 + BoxLayout: + orientation: 'horizontal' + size_hint: 1, 0.5 + Button: + text: 'Cancel' + size_hint: 0.5, None + height: '48dp' + on_release: popup.dismiss() + Button: + text: 'OK' + size_hint: 0.5, None + height: '48dp' + on_release: + root.callback(popup.value) + popup.dismiss() +''') + +class ChoiceDialog(Factory.Popup): + + def __init__(self, title, choices, value, callback): + Factory.Popup.__init__(self) + for k in choices: + l = Label(text=k) + l.height = '48dp' + l.size_hint_y = 1 + cb = CheckBox(group='choices') + cb.value = k + cb.size_hint_y = 1 + def f(cb, x): + if x: self.value = cb.value + cb.bind(active=f) + if k == value: + cb.active = True + self.ids.choices.add_widget(l) + self.ids.choices.add_widget(cb) + self.callback = callback + self.title = title + self.value = value diff --git a/gui/kivy/uix/ui_screens/settings.kv b/gui/kivy/uix/ui_screens/settings.kv index 0f211f9e3..5365b8012 100644 --- a/gui/kivy/uix/ui_screens/settings.kv +++ b/gui/kivy/uix/ui_screens/settings.kv @@ -1,7 +1,6 @@ Popup: id: settings title: _('Settings') - BoxLayout: orientation: 'vertical' SettingsItem: @@ -12,19 +11,17 @@ Popup: self.title = _('PIN Code') + ' (%s)'%('ON' if app.wallet.use_encryption else 'OFF') CardSeparator SettingsItem: - title: _('Denomination') + ' (' + app.base_unit + ')' + bu: app.base_unit + title: _('Denomination') + ' (' + self.bu + ')' description: _("Base unit for Bitcoin amounts.") on_release: - app._rotate_bu() - self.title = _('Denomination') + ' (' + app.base_unit + ')' + app.unit_dialog(self) CardSeparator SettingsItem: title: _('OpenAlias') description: "Email-like address." - Widget: size_hint: 1, 1 - BoxLayout: Widget: size_hint: 0.5, None diff --git a/gui/kivy/uix/ui_screens/wallets.kv b/gui/kivy/uix/ui_screens/wallets.kv index aae9fdd67..55289f523 100644 --- a/gui/kivy/uix/ui_screens/wallets.kv +++ b/gui/kivy/uix/ui_screens/wallets.kv @@ -5,31 +5,41 @@ Popup: id: popup BoxLayout: orientation: 'vertical' - GridLayout: + Label: + id: text_input + height: '32dp' + size_hint_y: None + text: os.path.basename(app.wallet.storage.path) + Widget size_hint_y: None - cols: 2 - Label: - height: '32dp' - size_hint_y: None - text: _('Wallet file') + ':' - TextInput: - id: text_input - height: '32dp' - size_hint_y: None - text: os.path.basename(app.wallet.storage.path) - FileChooserIconView: + FileChooserListView: id: wallet_selector path: os.path.dirname(app.wallet.storage.path) - on_selection: text_input.text = os.path.basename(self.selection[0]) if self.selection else '' + on_selection: + text_input.text = os.path.basename(self.selection[0]) if self.selection else '' size_hint: 1, 1 - BoxLayout: - Widget: + GridLayout: + cols: 3 + size_hint_y: None + Button: size_hint: 0.5, None + height: '48dp' + text: _('Create') + on_release: + popup.dismiss() + app.create_wallet_dialog() + Button: + size_hint: 0.5, None + height: '48dp' + text: _('Open') + on_release: + popup.dismiss() + app.open_wallet(text_input.text) Button: size_hint: 0.5, None height: '48dp' - text: _('OK') + text: _('Cancel') on_release: popup.dismiss() diff --git a/lib/transaction.py b/lib/transaction.py index b5d903bc4..d8bd0aeab 100644 --- a/lib/transaction.py +++ b/lib/transaction.py @@ -761,6 +761,7 @@ class Transaction: return out def sign(self, keypairs): + print "sign" for i, txin in enumerate(self.inputs): num = txin['num_sig'] for x_pubkey in txin['x_pubkeys']: