tadd base_unit to amount fields - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit aa83f5fdcad96c684e42033525b49ab288d16e78 (DIR) parent 67bc6da7947a80800b4363f7050d32a4eafe089d (HTM) Author: ThomasV <thomasv@electrum.org> Date: Fri, 16 Oct 2015 11:18:24 +0200 add base_unit to amount fields Diffstat: M gui/kivy/__init__.py | 4 ---- M gui/kivy/main_window.py | 73 ++++++------------------------- M gui/kivy/uix/screens.py | 18 +++++++++++++----- M gui/kivy/uix/ui_screens/amount.kv | 36 ++++++++++++++++++------------- 4 files changed, 48 insertions(+), 83 deletions(-) --- (DIR) diff --git a/gui/kivy/__init__.py b/gui/kivy/__init__.py t@@ -73,10 +73,6 @@ class ElectrumGui: # base #init_plugins(self) - def set_url(self, url): - #self.current_window.pary_from_URI - pass - def main(self): ''' The main entry point of the kivy ux :param url: 'bitcoin:' uri as mentioned in bip0021 (DIR) diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py t@@ -5,6 +5,7 @@ import datetime import traceback from decimal import Decimal +import electrum from electrum import WalletStorage, Wallet from electrum.i18n import _, set_language from electrum.contacts import Contacts t@@ -93,10 +94,10 @@ class ElectrumWindow(App): ''' def get_amount(self, amount_str): - from electrum.bitcoin import COIN - from decimal import Decimal + a, u = amount_str.split() + assert u == self.base_unit try: - x = Decimal(str(amount_str)) + x = Decimal(a) except: return None p = pow(10, self.decimal_point()) t@@ -168,9 +169,9 @@ class ElectrumWindow(App): self.bind(url=self.set_url) # were we sent a url? - url = kwargs.get('url', None) + url = self.electrum_config.get('url', None) if url: - self.gui_object.set_url(url) + self.set_url(url) # create triggers so as to minimize updation a max of 2 times a sec self._trigger_update_wallet =\ t@@ -180,10 +181,10 @@ class ElectrumWindow(App): self._trigger_notify_transactions = \ Clock.create_trigger(self.notify_transactions, 5) - - - def set_url(self, instance, url): - self.gui_object.set_url(url) + def set_url(self, url): + print "set url", url + url = electrum.util.parse_URI(url) + self.send_screen.set_qr_data(url) def scan_qr(self, on_complete): from jnius import autoclass t@@ -197,7 +198,7 @@ class ElectrumWindow(App): if resultCode == -1: # RESULT_OK: contents = intent.getStringExtra("SCAN_RESULT") if intent.getStringExtra("SCAN_RESULT_FORMAT") == 'QR_CODE': - uri = App.get_running_app().decode_uri(contents) + uri = electrum.util.parse_URI(contents) on_complete(uri) activity.bind(on_activity_result=on_qr_result) PythonActivity.mActivity.startActivityForResult(intent, 0) t@@ -638,54 +639,6 @@ class ElectrumWindow(App): self.do_clear() self.show_info(self.gui_object.payment_request.error) - def encode_uri(self, addr, amount=0, label='', - message='', size='', currency='btc'): - ''' Convert to BIP0021 compatible URI - ''' - uri = 'bitcoin:{}'.format(addr) - first = True - if amount: - uri += '{}amount={}'.format('?' if first else '&', amount) - first = False - if label: - uri += '{}label={}'.format('?' if first else '&', label) - first = False - if message: - uri += '{}?message={}'.format('?' if first else '&', message) - first = False - if size: - uri += '{}size={}'.format('?' if not first else '&', size) - return uri - - def decode_uri(self, uri): - if ':' not in uri: - # It's just an address (not BIP21) - return {'address': uri} - - if '//' not in uri: - # Workaround for urlparse, it don't handle bitcoin: URI properly - uri = uri.replace(':', '://') - - try: - uri = urlparse(uri) - except NameError: - # delayed import - from urlparse import urlparse, parse_qs - uri = urlparse(uri) - - result = {'address': uri.netloc} - - if uri.path.startswith('?'): - params = parse_qs(uri.path[1:]) - else: - params = parse_qs(uri.path) - - for k,v in params.items(): - if k in ('amount', 'label', 'message', 'size'): - result[k] = v[0] - - return result - def show_error(self, error, width='200dp', pos=None, arrow_pos=None, exit=False, icon='atlas://gui/kivy/theming/light/error', duration=0, modal=False): t@@ -757,7 +710,9 @@ class ElectrumWindow(App): def amount_dialog(self, label, callback): popup = Builder.load_file('gui/kivy/uix/ui_screens/amount.kv') if label.text != label.default_text: - popup.ids.amount_label.text = label.text + a, u = label.text.split() + assert u == self.base_unit + popup.ids.amount_label.value = a def cb(): o = popup.ids.amount_label.text label.text = o if o else label.default_text (DIR) diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py t@@ -193,12 +193,15 @@ class SendScreen(CScreen): def set_qr_data(self, uri): self.ids.payto_e.text = uri.get('address', '') self.ids.message_e.text = uri.get('message', '') - self.ids.amount_e.text = uri.get('amount', '') + amount = uri.get('amount') + if amount: + amount_str = str( a / Decimal(self.app.decimal_point())) + self.ids.amount_e.text = amount_str + ' ' + self.app.base_unit def do_clear(self): - cts = self.ids - cts.payto_e.text = cts.message_e.text = '' - cts.amount_e.text = 'Amount' + self.ids.payto_e.text = '' + self.ids.message_e.text = '' + self.ids.amount_e.text = 'Amount' #self.set_frozen(content, False) #self.update_status() t@@ -268,7 +271,12 @@ class ReceiveScreen(CScreen): address = self.screen.ids.get('address').text amount = self.screen.ids.get('amount').text default_text = self.screen.ids.get('amount').default_text - amount = None if amount == default_text else 100000000 * Decimal(amount) + if amount == default_text: + amount = None + else: + a, u = amount.split() + assert u == self.app.base_unit + amount = Decimal(a) * pow(10, self.app.decimal_point()) msg = self.screen.ids.get('message').text uri = create_URI(address, amount, msg) qr = self.screen.ids.get('qr') (DIR) diff --git a/gui/kivy/uix/ui_screens/amount.kv b/gui/kivy/uix/ui_screens/amount.kv t@@ -12,49 +12,55 @@ Popup: halign: 'center' - Label: - id: amount_label - text: '' + BoxLayout: + Label: + id: amount_label + text: '' + value: '' + on_value: + self.text = self.value + ' ' + app.base_unit + Widget: + size_hint_x: 1 GridLayout: cols: 3 size_hint: 0.5, 1 KButton: text: '1' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '2' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '3' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '4' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '5' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '6' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '7' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '8' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '9' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '.' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '0' - on_release: amount_label.text += self.text + on_release: amount_label.value += self.text KButton: text: '<' - on_release: amount_label.text = amount_label.text[:-1] + on_release: amount_label.value = amount_label.value[:-1] BoxLayout: size_hint: 0.5, None