URI: 
       tkivy: improve tx dialog - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit c2d3968ebe86692ece6212d70855db7123503127
   DIR parent bd34995d9d7f2e5728a81541cb61cdbd36587ad5
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Wed, 17 Feb 2016 10:53:14 +0100
       
       kivy: improve tx dialog
       
       Diffstat:
         M gui/kivy/uix/dialogs/tx_dialog.py   |     157 ++++++++++++++++++++-----------
         M gui/kivy/uix/ui_screens/invoice.kv  |       1 +
       
       2 files changed, 104 insertions(+), 54 deletions(-)
       ---
   DIR diff --git a/gui/kivy/uix/dialogs/tx_dialog.py b/gui/kivy/uix/dialogs/tx_dialog.py
       t@@ -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
       t@@ -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):
       t@@ -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]
       t@@ -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, ())
        
   DIR diff --git a/gui/kivy/uix/ui_screens/invoice.kv b/gui/kivy/uix/ui_screens/invoice.kv
       t@@ -16,6 +16,7 @@ Popup:
                orientation: 'vertical'
                GridLayout:
                    spacing: '10dp'
       +            padding: '10dp'
                    cols: 2
                    TopLabel:
                        text: _('Requestor') if popup.is_invoice else _('Address')