tkivy: wallets and settings menus - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit ff163e34d8f57e54218d66e1f10709a772d5f75f (DIR) parent 3bed2e3106b171f6807f985945d2cb3e41488991 (HTM) Author: ThomasV <thomasv@electrum.org> Date: Fri, 18 Dec 2015 10:53:50 +0100 kivy: wallets and settings menus Diffstat: M gui/kivy/__init__.py | 2 ++ M gui/kivy/main.kv | 30 +++++------------------------- M gui/kivy/main_window.py | 47 ++++++++----------------------- M gui/kivy/uix/dialogs/create_restor… | 4 ++-- M gui/kivy/uix/dialogs/settings.py | 81 +++++++++++++++++++++++++++++-- A gui/kivy/uix/ui_screens/about.kv | 12 ++++++++++++ D gui/kivy/uix/ui_screens/plugins.kv | 27 --------------------------- M gui/kivy/uix/ui_screens/wallets.kv | 47 ++++++++++++++++++------------- 8 files changed, 137 insertions(+), 113 deletions(-) --- (DIR) diff --git a/gui/kivy/__init__.py b/gui/kivy/__init__.py t@@ -29,6 +29,7 @@ except ImportError: # minimum required version for kivy kivy.require('1.8.0') +from electrum.i18n import set_language from kivy.logger import Logger from main_window import ElectrumWindow t@@ -39,6 +40,7 @@ class ElectrumGui: self.network = network self.config = config self.plugins = plugins + set_language(config.get('language')) def main(self): w = ElectrumWindow(config=self.config, (DIR) diff --git a/gui/kivy/main.kv b/gui/kivy/main.kv t@@ -358,28 +358,8 @@ Clock.schedule_once(lambda dt: self.parent.parent.dismiss() if self.parent else None, 0.05) Clock.schedule_once(lambda dt: app.popup_dialog(self.name), 0.05) -<SettingsItem@ButtonBehavior+BoxLayout> - orientation: 'vertical' - title: '' - description: '' - size_hint: 1, 1 - Label: - id: title - text: self.parent.title - size_hint: 1, 1 - bold: True - text_size: self.size - halign: 'left' - Label: - text: self.parent.description - size_hint: 1, 1 - text_size: self.width, None - color: 0.8, 0.8, 0.8, 1 - halign: 'left' - BoxLayout: - orientation: 'vertical' canvas.before: t@@ -417,6 +397,9 @@ BoxLayout: ActionOverflow: id: ao ActionOvrButton: + name: 'about' + text: _('About') + ActionOvrButton: name: 'network' text: _('Network') on_parent: t@@ -424,14 +407,11 @@ BoxLayout: parent = args[1] if parent: ao._dropdown.width = sp(200) ActionOvrButton: - name: 'settings' - text: _('Settings') - ActionOvrButton: name: 'wallets' text: _('Wallets') ActionOvrButton: - name: 'plugins' - text: _('Plugins') + name: 'settings' + text: _('Settings') ScreenManager: id: manager ScreenTabs: (DIR) diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py t@@ -7,7 +7,7 @@ from decimal import Decimal import electrum from electrum import WalletStorage, Wallet -from electrum.i18n import _, set_language +from electrum.i18n import _ from electrum.contacts import Contacts from electrum.paymentrequest import InvoiceStore from electrum.util import profiler, InvalidPassword t@@ -253,22 +253,6 @@ class ElectrumWindow(App): activity.bind(on_activity_result=on_qr_result) PythonActivity.mActivity.startActivityForResult(intent, 0) - def show_plugins(self, plugins_list): - def on_active(sw, value): - self.plugins.toggle_enabled(self.electrum_config, sw.name) - run_hook('init_kivy', self) - for item in self.plugins.descriptions: - if 'kivy' not in item.get('available_for', []): - continue - name = item.get('__name__') - label = Label(text=item.get('fullname'), height='48db', size_hint=(1, None)) - plugins_list.add_widget(label) - sw = Switch() - sw.name = name - p = self.plugins.get(name) - sw.active = (p is not None) and p.is_enabled() - sw.bind(active=on_active) - plugins_list.add_widget(sw) def build(self): return Builder.load_file('gui/kivy/main.kv') t@@ -305,6 +289,7 @@ class ElectrumWindow(App): win.bind(keyboard_height=self.on_keyboard_height) self.on_size(win, win.size) + self.init_ui() self.load_wallet_by_name(self.electrum_config.get_wallet_path()) def load_wallet_by_name(self, wallet_path): t@@ -324,16 +309,20 @@ class ElectrumWindow(App): # start installation wizard Logger.debug('Electrum: Wallet not found. Launching install wizard') wizard = Factory.InstallWizard(config, self.network, storage) - wizard.bind(on_wizard_complete=self.on_wizard_complete) + wizard.bind(on_wizard_complete=lambda instance, wallet: self.load_wallet(wallet)) wizard.run(action) else: wallet.start_threads(self.network) - self.on_wizard_complete(None, wallet) + self.load_wallet(wallet) + self.on_resume() - def create_wallet_dialog(self): + def create_wallet_dialog(self, l): from uix.dialogs.label_dialog import LabelDialog - d = LabelDialog(_('Enter wallet name'), '', self.load_wallet_by_name) + def f(text): + if text: + l.text = text + d = LabelDialog(_('Enter wallet name'), '', f) d.open() def settings_dialog(self): t@@ -364,7 +353,6 @@ class ElectrumWindow(App): active_widg = self.root.children[0] except IndexError: return - try: fw = self._focused_widget except AttributeError: t@@ -398,16 +386,6 @@ class ElectrumWindow(App): self.gui.main_gui.toggle_settings(self) return True - def on_wizard_complete(self, instance, wallet): - if not wallet: - Logger.debug('Electrum: No Wallet set/found. Exiting...') - app = App.get_running_app() - app.show_error('Electrum: No Wallet set/found. Exiting...', - exit=True) - - self.init_ui() - self.load_wallet(wallet) - def popup_dialog(self, name): if name == 'settings': self.settings_dialog() t@@ -415,15 +393,12 @@ class ElectrumWindow(App): popup = Builder.load_file('gui/kivy/uix/ui_screens/'+name+'.kv') popup.open() - - @profiler def init_ui(self): ''' Initialize The Ux part of electrum. This function performs the basic tasks of setting up the ui. ''' from weakref import ref - set_language(self.electrum_config.get('language')) self.funds_error = False # setup UX t@@ -540,6 +515,7 @@ class ElectrumWindow(App): @profiler def update_wallet(self, *dt): + print "update wallet" self._trigger_update_status() if self.wallet.up_to_date or not self.network or not self.network.is_connected(): self.update_history_tab() t@@ -549,6 +525,7 @@ class ElectrumWindow(App): @profiler def update_history_tab(self, see_all=False): if self.history_screen: + print "blah" self.history_screen.update(see_all) def update_contacts_tab(self): (DIR) diff --git a/gui/kivy/uix/dialogs/create_restore.py b/gui/kivy/uix/dialogs/create_restore.py t@@ -140,11 +140,11 @@ Builder.load_string(''' height: self.minimum_height CreateAccountButton: id: create - text: _('Create a Wallet') + text: _('Create a new seed') root: root CreateAccountButton: id: restore - text: _('I already have a wallet') + text: _('I already have a seed') root: root (DIR) diff --git a/gui/kivy/uix/dialogs/settings.py b/gui/kivy/uix/dialogs/settings.py t@@ -8,6 +8,49 @@ from electrum.util import base_units from electrum.i18n import languages, set_language Builder.load_string(''' +<SettingsItem@ButtonBehavior+BoxLayout> + orientation: 'vertical' + title: '' + description: '' + size_hint: 1, 1 + Label: + id: title + text: self.parent.title + size_hint: 1, 1 + bold: True + text_size: self.size + halign: 'left' + Label: + text: self.parent.description + size_hint: 1, 1 + text_size: self.width, None + color: 0.8, 0.8, 0.8, 1 + halign: 'left' + +<PluginItem@ButtonBehavior+BoxLayout> + orientation: 'vertical' + title: '' + description: '' + size_hint: 1, 1 + BoxLayout: + orientation: 'horizontal' + Label: + id: title + text: self.parent.title + size_hint: 1, 1 + bold: True + text_size: self.size + halign: 'left' + Switch: + id: sw + name: '' + Label: + text: self.parent.description + size_hint: 1, 1 + text_size: self.width, None + color: 0.8, 0.8, 0.8, 1 + halign: 'left' + <SettingsDialog@Popup> id: settings title: _('Settings') t@@ -15,13 +58,13 @@ Builder.load_string(''' orientation: 'vertical' SettingsItem: lang: settings.get_language_name() - title: _('Language') + ' (%s)'%self.lang + title: _('Language') + ': %s'%self.lang description: _("Language") on_release: settings.language_dialog(self) CardSeparator SettingsItem: - title: _('PIN Code') + ' (%s)'%('ON' if app.wallet.use_encryption else 'OFF') + title: _('PIN Code') + ': %s'%('ON' if app.wallet.use_encryption else 'OFF') description: _("Your PIN code will be required in order to spend bitcoins.") on_release: app.change_password() t@@ -29,13 +72,13 @@ Builder.load_string(''' CardSeparator SettingsItem: bu: app.base_unit - title: _('Denomination') + ' (' + self.bu + ')' + title: _('Denomination') + ': ' + self.bu description: _("Base unit for Bitcoin amounts.") on_release: settings.unit_dialog(self) CardSeparator SettingsItem: - title: _('Fiat Currency') + title: _('Fiat Currency') + ': ' + app.fiat_unit description: "Select the local fiat currency." on_release: settings.fiat_dialog(self) t@@ -71,9 +114,9 @@ class SettingsDialog(Factory.Popup): from choice_dialog import ChoiceDialog l = self.app.electrum_config.get('language', 'en_UK') def cb(key): - set_language(key) self.app.electrum_config.set_key("language", key, True) item.lang = self.get_language_name() + set_language(key) d = ChoiceDialog(_('Language'), languages, l, cb) d.open() t@@ -98,3 +141,31 @@ class SettingsDialog(Factory.Popup): pass d = LabelDialog(_('OpenAlias'), '', callback) d.open() + + + def show_plugins(self, plugins_list): + + def on_active(sw, value): + self.plugins.toggle_enabled(self.electrum_config, sw.name) + run_hook('init_kivy', self) + + for item in self.plugins.descriptions: + if 'kivy' not in item.get('available_for', []): + continue + name = item.get('__name__') + label = Label(text=item.get('fullname'), height='48db', size_hint=(1, None)) + plugins_list.add_widget(label) + sw = Switch() + sw.name = name + p = self.plugins.get(name) + sw.active = (p is not None) and p.is_enabled() + sw.bind(active=on_active) + plugins_list.add_widget(sw) + +class PluginItem(): + def __init__(self, name): + p = self.plugins.get(name) + sw.active = (p is not None) and p.is_enabled() + sw.bind(active=on_active) + plugins_list.add_widget(sw) + (DIR) diff --git a/gui/kivy/uix/ui_screens/about.kv b/gui/kivy/uix/ui_screens/about.kv t@@ -0,0 +1,12 @@ +Popup: + title: "About Electrum" + BoxLayout: + orientation: 'vertical' + spacing: '1dp' + Label: + text: "Lightweight Bitcoin Wallet" + Label: + text: "Author: Thomas Voegtlin" + Label: + text: "https://electrum.org" + Widget (DIR) diff --git a/gui/kivy/uix/ui_screens/plugins.kv b/gui/kivy/uix/ui_screens/plugins.kv t@@ -1,27 +0,0 @@ -Popup: - title: _('Plugins') - id: popup - BoxLayout: - orientation: 'vertical' - - GridLayout: - cols: 2 - size_hint: 1, None - height: '100dp' - id: plugins_list - on_parent: - app.show_plugins(plugins_list) - - Widget: - size_hint: 1, 1 - - BoxLayout: - Widget: - size_hint: 0.5, None - Button: - size_hint: 0.5, None - height: '48dp' - text: _('OK') - on_release: - popup.dismiss() - (DIR) diff --git a/gui/kivy/uix/ui_screens/wallets.kv b/gui/kivy/uix/ui_screens/wallets.kv t@@ -3,43 +3,52 @@ Popup: title: _('Wallets') id: popup + path: app.wallet.storage.path + on_path: + button.text = _('Open') if os.path.exists(popup.path) else _('Create') BoxLayout: orientation: 'vertical' - Label: - id: text_input - height: '32dp' + BoxLayout: + height: '48dp' size_hint_y: None - text: os.path.basename(app.wallet.storage.path) + orientation: 'horizontal' + Label: + text: _('Wallet') + ': ' + height: '48dp' + size_hint_y: None + Button: + id: wallet_name + height: '48dp' + size_hint_y: None + text: os.path.basename(app.wallet.storage.path) + on_release: + app.create_wallet_dialog(self) + on_text: + popup.path = os.path.join(wallet_selector.path, self.text) Widget size_hint_y: None - 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 '' - size_hint: 1, 1 - + wallet_name.text = os.path.basename(self.selection[0]) if self.selection else '' + size_hint_y: 0.5 + Widget + size_hint_y: 0.1 GridLayout: - cols: 3 + cols: 2 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') + text: _('Cancel') on_release: popup.dismiss() - app.open_wallet(text_input.text) Button: + id: button size_hint: 0.5, None height: '48dp' - text: _('Cancel') + text: _('Open') if os.path.exists(popup.path) else _('Create') on_release: popup.dismiss() + app.load_wallet_by_name(popup.path)