URI: 
       tfx_dialog.py - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
       tfx_dialog.py (4298B)
       ---
            1 from kivy.app import App
            2 from kivy.factory import Factory
            3 from kivy.properties import ObjectProperty, BooleanProperty
            4 from kivy.lang import Builder
            5 
            6 Builder.load_string('''
            7 <FxDialog@Popup>
            8     id: popup
            9     title: 'Fiat Currency'
           10     size_hint: 0.8, 0.8
           11     pos_hint: {'top':0.9}
           12     BoxLayout:
           13         orientation: 'vertical'
           14 
           15         Widget:
           16             size_hint: 1, 0.1
           17 
           18         BoxLayout:
           19             orientation: 'horizontal'
           20             size_hint: 1, 0.1
           21             Label:
           22                 text: _('Currency')
           23                 height: '48dp'
           24             Spinner:
           25                 height: '48dp'
           26                 id: ccy
           27                 on_text: popup.on_currency(self.text)
           28 
           29         Widget:
           30             size_hint: 1, 0.05
           31 
           32         BoxLayout:
           33             orientation: 'horizontal'
           34             size_hint: 1, 0.2
           35             Label:
           36                 text: _('History rates')
           37             CheckBox:
           38                 id:hist
           39                 active: popup.has_history_rates
           40                 on_active: popup.on_checkbox_history(self.active)
           41 
           42         Widget:
           43             size_hint: 1, 0.05
           44 
           45         BoxLayout:
           46             orientation: 'horizontal'
           47             size_hint: 1, 0.1
           48             Label:
           49                 text: _('Source')
           50                 height: '48dp'
           51             Spinner:
           52                 height: '48dp'
           53                 id: exchanges
           54                 on_text: popup.on_exchange(self.text)
           55 
           56         Widget:
           57             size_hint: 1, 0.1
           58 
           59         BoxLayout:
           60             orientation: 'horizontal'
           61             size_hint: 1, 0.2
           62             Button:
           63                 text: 'Cancel'
           64                 size_hint: 0.5, None
           65                 height: '48dp'
           66                 on_release: popup.dismiss()
           67             Button:
           68                 text: 'OK'
           69                 size_hint: 0.5, None
           70                 height: '48dp'
           71                 on_release:
           72                     root.callback()
           73                     popup.dismiss()
           74 ''')
           75 
           76 
           77 from kivy.uix.label import Label
           78 from kivy.uix.checkbox import CheckBox
           79 from kivy.uix.widget import Widget
           80 from kivy.clock import Clock
           81 
           82 from electrum.gui.kivy.i18n import _
           83 from functools import partial
           84 
           85 class FxDialog(Factory.Popup):
           86 
           87     def __init__(self, app, plugins, config, callback):
           88         self.app = app
           89         self.config = config
           90         self.callback = callback
           91         self.fx = self.app.fx
           92         if self.fx.get_history_config(allow_none=True) is None:
           93             # If nothing is set, force-enable it. (Note that as fiat rates itself
           94             # are disabled by default, it is enough to set this here. If they
           95             # were enabled by default, this would be too late.)
           96             self.fx.set_history_config(True)
           97         self.has_history_rates = self.fx.get_history_config()
           98 
           99         Factory.Popup.__init__(self)
          100         self.add_currencies()
          101 
          102     def add_exchanges(self):
          103         ex = self.ids.exchanges
          104         if self.fx.is_enabled():
          105             exchanges = sorted(self.fx.get_exchanges_by_ccy(self.fx.get_currency(), self.has_history_rates))
          106             mx = self.fx.exchange.name()
          107             if mx in exchanges:
          108                 ex.text = mx
          109             elif exchanges:
          110                 ex.text = exchanges[0]
          111             else:
          112                 ex.text = ''
          113         else:
          114             exchanges = []
          115             ex.text = ''
          116         ex.values = exchanges
          117 
          118     def on_exchange(self, text):
          119         if not text:
          120             return
          121         if self.fx.is_enabled() and text != self.fx.exchange.name():
          122             self.fx.set_exchange(text)
          123 
          124     def add_currencies(self):
          125         currencies = [_('None')] + self.fx.get_currencies(self.has_history_rates)
          126         my_ccy = self.fx.get_currency() if self.fx.is_enabled() else _('None')
          127         self.ids.ccy.values = currencies
          128         self.ids.ccy.text = my_ccy
          129 
          130     def on_checkbox_history(self, checked):
          131         self.fx.set_history_config(checked)
          132         self.has_history_rates = checked
          133         self.add_currencies()
          134         self.on_currency(self.ids.ccy.text)
          135 
          136     def on_currency(self, ccy):
          137         b = (ccy != _('None'))
          138         self.fx.set_enabled(b)
          139         if b:
          140             if ccy != self.fx.get_currency():
          141                 self.fx.set_currency(ccy)
          142             self.app.fiat_unit = ccy
          143         else:
          144             self.app.is_fiat = False
          145         Clock.schedule_once(lambda dt: self.add_exchanges())