commit c2d3968ebe86692ece6212d70855db7123503127
parent bd34995d9d7f2e5728a81541cb61cdbd36587ad5
Author: ThomasV <thomasv@electrum.org>
Date: Wed, 17 Feb 2016 10:53:14 +0100
kivy: improve tx dialog
Diffstat:
2 files changed, 104 insertions(+), 54 deletions(-)
diff --git a/gui/kivy/uix/dialogs/tx_dialog.py b/gui/kivy/uix/dialogs/tx_dialog.py
@@ -3,6 +3,7 @@ from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from kivy.clock import Clock
+from kivy.uix.label import Label
from electrum_gui.kivy.i18n import _
from datetime import datetime
@@ -17,63 +18,97 @@ Builder.load_string('''
fee_str: ''
date_str: ''
amount_str: ''
- txid_str: ''
+ tx_hash: ''
status_str: ''
description: ''
- BoxLayout:
- orientation: 'vertical'
- GridLayout:
- cols: 2
+ outputs_str: ''
+ ScrollView:
+ BoxLayout:
+ orientation: 'vertical'
spacing: '10dp'
+ padding: '10dp'
+ GridLayout:
+ size_hint: 1, None
+ height: self.minimum_height
+ cols: 2
+ spacing: '10dp'
+ TopLabel:
+ text: _('Status')
+ TopLabel:
+ text: root.status_str
+ TopLabel:
+ text: _('Description') if root.description else ''
+ TopLabel:
+ text: root.description
+ TopLabel:
+ text: _('Date') if root.date_str else ''
+ TopLabel:
+ text: root.date_str
+ TopLabel:
+ text: _('Amount sent') if root.is_mine else _('Amount received')
+ TopLabel:
+ text: root.amount_str
+ TopLabel:
+ text: _('Transaction fee') if root.fee_str else ''
+ TopLabel:
+ text: root.fee_str
+
TopLabel:
- text: _('Status')
- TopLabel:
- text: root.status_str
- TopLabel:
- text: _('Description') if root.description else ''
- TopLabel:
- text: root.description
- TopLabel:
- text: _('Date') if root.date_str else ''
- TopLabel:
- text: root.date_str
- TopLabel:
- text: _('Amount sent') if root.is_mine else _('Amount received')
- TopLabel:
- text: root.amount_str
+ text: _('Outputs') + ':'
+
+ GridLayout:
+ id: outputs
+ size_hint: 1, None
+ height: self.minimum_height
+ cols: 2
+ spacing: '10dp'
+ padding: '10dp'
+ canvas.before:
+ Color:
+ rgb: .3, .3, .3
+ Rectangle:
+ size: self.size
+ pos: self.pos
TopLabel:
- text: _('Transaction fee') if root.fee_str else ''
+ text: _('Transaction ID') + ':' if root.tx_hash else ''
TopLabel:
- text: root.fee_str
-
- TopLabel:
- text: root.txid_str
+ font_size: '6pt'
+ text: '[ref=x]%s[/ref]' %' '.join(map(''.join, zip(*[iter(root.tx_hash)]*4))) if root.tx_hash else ''
+ padding: '10dp', '10dp'
+ on_ref_press:
+ app._clipboard.copy(self.text)
+ app.show_info(_('Transaction ID copied to clipboard'))
+ canvas.before:
+ Color:
+ rgb: .3, .3, .3
+ Rectangle:
+ size: self.size
+ pos: self.pos
+ Widget:
+ size_hint: 1, 0.2
- Widget:
- size_hint: 1, 0.2
-
- BoxLayout:
- size_hint: 1, None
- height: '48dp'
- Button:
- size_hint: 0.5, None
+ BoxLayout:
+ size_hint: 1, None
height: '48dp'
- text: _('Sign') if root.can_sign else _('Broadcast') if root.can_broadcast else ''
- opacity: 1 if root.can_sign or root.can_broadcast else 0
- disabled: not( root.can_sign or root.can_broadcast )
- on_release:
- if root.can_sign: root.do_sign()
- if root.can_broadcast: root.do_broadcast()
- IconButton:
- size_hint: 0.5, None
- height: '48dp'
- icon: 'atlas://gui/kivy/theming/light/qrcode'
- on_release: root.show_qr()
- Button:
- size_hint: 0.5, None
- height: '48dp'
- text: _('Close')
- on_release: popup.dismiss()
+ Button:
+ size_hint: 0.5, None
+ height: '48dp'
+ text: _('Sign') if root.can_sign else _('Broadcast') if root.can_broadcast else ''
+ opacity: 1 if root.can_sign or root.can_broadcast else 0
+ disabled: not( root.can_sign or root.can_broadcast )
+ on_release:
+ if root.can_sign: root.do_sign()
+ if root.can_broadcast: root.do_broadcast()
+ IconButton:
+ size_hint: 0.5, None
+ height: '48dp'
+ icon: 'atlas://gui/kivy/theming/light/qrcode'
+ on_release: root.show_qr()
+ Button:
+ size_hint: 0.5, None
+ height: '48dp'
+ text: _('Close')
+ on_release: popup.dismiss()
''')
class TxDialog(Factory.Popup):
@@ -88,11 +123,10 @@ class TxDialog(Factory.Popup):
def update(self):
self.can_broadcast = False
if self.tx.is_complete():
- tx_hash = self.tx.hash()
- self.description = self.wallet.get_label(tx_hash)
- self.txid_str = _('Transaction ID') + ' :\n' + ' '.join(map(''.join, zip(*[iter(tx_hash)]*4)))
- if tx_hash in self.wallet.transactions.keys():
- conf, timestamp = self.wallet.get_confirmations(tx_hash)
+ self.tx_hash = self.tx.hash()
+ self.description = self.wallet.get_label(self.tx_hash)
+ if self.tx_hash in self.wallet.transactions.keys():
+ conf, timestamp = self.wallet.get_confirmations(self.tx_hash)
self.status_str = _("%d confirmations")%conf if conf else _('Pending')
if timestamp:
self.date_str = datetime.fromtimestamp(timestamp).isoformat(' ')[:-3]
@@ -121,6 +155,21 @@ class TxDialog(Factory.Popup):
self.fee_str = ''
self.can_sign = self.wallet.can_sign(self.tx)
+ for (type, address, amount) in self.tx.outputs():
+ t = Factory.CardLabel(text = '[ref=%s]%s[/ref]'%(address,address), font_size = '6pt')
+ t.shorten = True
+ t.size_hint_x = 0.65
+ t.on_ref_press = self.do_copy_address
+ self.ids.outputs.add_widget(t)
+ t = Factory.CardLabel(text = self.app.format_amount_and_units(amount), font_size='6pt')
+ t.size_hint_x = 0.35
+ t.halign = 'right'
+ self.ids.outputs.add_widget(t)
+
+ def do_copy_address(self, text):
+ self.app._clipboard.copy(text)
+ self.app.show_info(_('Address copied to clipboard'))
+
def do_sign(self):
self.app.protected(_("Enter your PIN code in order to sign this transaction"), self._do_sign, ())
diff --git a/gui/kivy/uix/ui_screens/invoice.kv b/gui/kivy/uix/ui_screens/invoice.kv
@@ -16,6 +16,7 @@ Popup:
orientation: 'vertical'
GridLayout:
spacing: '10dp'
+ padding: '10dp'
cols: 2
TopLabel:
text: _('Requestor') if popup.is_invoice else _('Address')