URI: 
       tkivy: improve settings dialog - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 8ed443b4c8b2c7a4d8e152d82d19800e6e3d1d9b
   DIR parent 6aea1e8a79c4d2638b58b80e719386c306b8ce78
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Tue, 19 Jan 2016 12:37:40 +0100
       
       kivy: improve settings dialog
       
       Diffstat:
         A gui/kivy/uix/dialogs/checkbox_dial… |      52 +++++++++++++++++++++++++++++++
         M gui/kivy/uix/dialogs/settings.py    |      71 +++++++++++++++++--------------
         M plugins/exchange_rate/exchange_rat… |       2 +-
       
       3 files changed, 93 insertions(+), 32 deletions(-)
       ---
   DIR diff --git a/gui/kivy/uix/dialogs/checkbox_dialog.py b/gui/kivy/uix/dialogs/checkbox_dialog.py
       t@@ -0,0 +1,52 @@
       +from kivy.app import App
       +from kivy.factory import Factory
       +from kivy.properties import ObjectProperty
       +from kivy.lang import Builder
       +
       +Builder.load_string('''
       +<CheckBoxDialog@Popup>
       +    id: popup
       +    title: ''
       +    size_hint: 0.8, 0.5
       +    pos_hint: {'top':0.9}
       +    BoxLayout:
       +        orientation: 'vertical'
       +        Label:
       +            id: description
       +            text: ''
       +            size_hint: 1, 1
       +            halign: 'left'
       +            text_size: self.width, None
       +        BoxLayout:
       +            orientation: 'horizontal'
       +            size_hint: 1, 1
       +            Label:
       +                text: _('Enable')
       +            CheckBox:
       +                id:cb
       +        Widget:
       +            size_hint: 1, 1
       +        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(cb.active)
       +                    popup.dismiss()
       +''')
       +
       +class CheckBoxDialog(Factory.Popup):
       +    def __init__(self, title, text, status, callback):
       +        Factory.Popup.__init__(self)
       +        self.ids.cb.active = status
       +        self.ids.description.text = text
       +        self.callback = callback
       +        self.title = title
   DIR diff --git a/gui/kivy/uix/dialogs/settings.py b/gui/kivy/uix/dialogs/settings.py
       t@@ -6,6 +6,7 @@ from kivy.lang import Builder
        from electrum.i18n import _
        from electrum.util import base_units
        from electrum.i18n import languages, set_language
       +from electrum.plugins import run_hook
        
        Builder.load_string('''
        <SettingsItem@ButtonBehavior+BoxLayout>
       t@@ -16,16 +17,16 @@ Builder.load_string('''
            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
       +    Label:
       +        text: self.parent.description
                color: 0.8, 0.8, 0.8, 1
       +        size_hint: 1, 1
                halign: 'left'
       +        text_size: self.width, None
        
        <PluginItem@ButtonBehavior+BoxLayout>
            orientation: 'vertical'
       t@@ -64,11 +65,12 @@ Builder.load_string('''
                        settings.language_dialog(self)
                CardSeparator
                SettingsItem:
       -            title: _('PIN Code') + ': %s'%('ON' if app.wallet.use_encryption else 'OFF')
       -            description: _("Your PIN code will be required in order to spend bitcoins.")
       +            status: 'ON' if app.wallet.use_encryption else 'OFF'
       +            title: _('PIN code') + ': ' + self.status
       +            description: _("Change your PIN code.")
                    on_release:
                        app.change_password()
       -                self.title = _('PIN Code') + ' (%s)'%('ON' if app.wallet.use_encryption else 'OFF')
       +                self.status = 'ON' if app.wallet.use_encryption else 'OFF'
                CardSeparator
                SettingsItem:
                    bu: app.base_unit
       t@@ -84,8 +86,15 @@ Builder.load_string('''
                        settings.fiat_dialog(self)
                CardSeparator
                SettingsItem:
       +            status: 'ON' if bool(app.plugins.get('labels')) else 'OFF'
       +            title: _('Labels Sync') + ': ' + self.status
       +            description: "Synchronize labels."
       +            on_release:
       +                settings.labelsync_dialog(self)
       +        CardSeparator
       +        SettingsItem:
                    title: _('OpenAlias')
       -            description: "Email-like address."
       +            description: "DNS record that stores one of your Bitcoin addresses."
                    on_release:
                        settings.openalias_dialog()
                Widget:
       t@@ -105,16 +114,18 @@ class SettingsDialog(Factory.Popup):
        
            def __init__(self, app):
                self.app = app
       +        self.plugins = self.app.plugins
       +        self.config = self.app.electrum_config
                Factory.Popup.__init__(self)
        
            def get_language_name(self):
       -        return languages.get(self.app.electrum_config.get('language', 'en_UK'), '')
       +        return languages.get(self.config.get('language', 'en_UK'), '')
        
            def language_dialog(self, item):
                from choice_dialog import ChoiceDialog
       -        l = self.app.electrum_config.get('language', 'en_UK')
       +        l = self.config.get('language', 'en_UK')
                def cb(key):
       -            self.app.electrum_config.set_key("language", key, True)
       +            self.config.set_key("language", key, True)
                    item.lang = self.get_language_name()
                    set_language(key)
                d = ChoiceDialog(_('Language'), languages, l, cb)
       t@@ -131,8 +142,14 @@ class SettingsDialog(Factory.Popup):
            def fiat_dialog(self, item):
                from choice_dialog import ChoiceDialog
                def cb(text):
       -            pass
       -        d = ChoiceDialog(_('Fiat Currency'), {}, '', cb)
       +            if text == 'None':
       +                self.plugins.disable('exchange_rate')
       +            else:
       +                self.config.set_key('currency', text, True)
       +                p = self.app.plugins.enable('exchange_rate')
       +                p.init_kivy(self.app)
       +
       +        d = ChoiceDialog(_('Fiat Currency'), { 'None': 'None', 'USD':'USD', 'EUR':'EUR'}, '', cb)
                d.open()
        
            def openalias_dialog(self):
       t@@ -142,25 +159,17 @@ class SettingsDialog(Factory.Popup):
                d = LabelDialog(_('OpenAlias'), '', callback)
                d.open()
        
       +    def labelsync_dialog(self, label):
       +        from checkbox_dialog import CheckBoxDialog
       +        def callback(status):
       +            self.plugins.enable('labels') if status else self.plugins.disable('labels')
       +            status = bool(self.plugins.get('labels'))
       +            label.status = 'ON' if status else 'OFF'
       +        status = bool(self.plugins.get('labels'))
       +        descr = _('Save your labels on a remote server, and synchronizes them between various instances of your wallet.')
       +        d = CheckBoxDialog(_('Labels Sync'), descr, status, 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):
   DIR diff --git a/plugins/exchange_rate/exchange_rate.py b/plugins/exchange_rate/exchange_rate.py
       t@@ -294,7 +294,7 @@ class FxPlugin(BasePlugin, ThreadJob):
                return self.config.get("currency", "EUR")
        
            def config_exchange(self):
       -        return self.config.get('use_exchange', 'Blockchain')
       +        return self.config.get('use_exchange', 'BitcoinAverage')
        
            def config_history(self):
                return self.config.get('history_rates', 'unchecked') != 'unchecked'