URI: 
       tkivy: show payment request details - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit d56ec05b9bc381f0d5d443980215e208fc177b07
   DIR parent 27ecab9ef018c7c0f4e500ff0f15efbf5a58d62c
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Mon, 15 Feb 2016 13:49:33 +0100
       
       kivy: show payment request details
       
       Diffstat:
         M gui/kivy/main_window.py             |      26 ++++++++++++++++++++++++++
         M gui/kivy/uix/screens.py             |      32 +++++++++++++++++--------------
         M gui/kivy/uix/ui_screens/invoice.kv  |      44 ++++++++++++++++++-------------
         M lib/paymentrequest.py               |      10 ++++++++++
       
       4 files changed, 79 insertions(+), 33 deletions(-)
       ---
   DIR diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py
       t@@ -278,6 +278,32 @@ class ElectrumWindow(App):
                self.switch_to('receive')
                self.receive_screen.screen.address = addr
        
       +    def show_pr_details(self, req, status, is_invoice):
       +        from electrum.util import format_time
       +        requestor = req.get('requestor')
       +        exp = req.get('exp')
       +        memo = req.get('memo')
       +        amount = req.get('amount')
       +        popup = Builder.load_file('gui/kivy/uix/ui_screens/invoice.kv')
       +        if is_invoice:
       +            popup.title = _('Invoice')
       +            popup.ids.requestor_label.text = _("Requestor") + ': ' + requestor
       +        else:
       +            popup.title = _('Request')
       +            popup.ids.requestor_label.text = _("Address") + ': ' + req.get('address')
       +
       +        popup.ids.amount_label.text = _('Amount') + ': ' + self.format_amount_and_units(amount) if amount else ''
       +        popup.ids.expiration_label.text = _('Expires') + ': ' + format_time(exp) if exp else ''
       +        popup.ids.memo_label.text = _("Description") + ': ' + memo if memo else _("No Description")
       +        popup.ids.signature_label.text = req.get('signature', '')
       +
       +        popup.ids.txid_label.text = status
       +        txid = req.get('txid')
       +        if txid:
       +            popup.ids.txid_label.text += '\n' + _("Transaction ID") + ':\n' + ' '.join(map(''.join, zip(*[iter(txid)]*4)))
       +        popup.open()
       +
       +
            def qr_dialog(self, title, data):
                from uix.dialogs.qr_dialog import QRDialog
                popup = QRDialog(title, data)
   DIR diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py
       t@@ -444,19 +444,8 @@ class InvoicesScreen(CScreen):
            def do_view(self, obj):
                pr = self.app.invoices.get(obj.key)
                pr.verify({})
       -        exp = pr.get_expiration_date()
       -        memo = pr.get_memo()
       -        amount = pr.get_amount()
       -        popup = Builder.load_file('gui/kivy/uix/ui_screens/invoice.kv')
       -        popup.ids.requestor_label.text = _("Requestor") + ': ' + pr.get_requestor()
       -        popup.ids.amount_label.text = _('Amount') + ': ' + self.app.format_amount_and_units(amount) if amount else ''
       -        popup.ids.expiration_label.text = _('Expires') + ': ' + (format_time(exp) if exp else _('Never'))
       -        popup.ids.memo_label.text = _("Description") + ': ' + memo if memo else _("No Description")
       -        popup.ids.signature_label.text = pr.get_verify_status()
       -        if pr.tx:
       -            popup.ids.txid_label.text = _("Transaction ID") + ':\n' + ' '.join(map(''.join, zip(*[iter(pr.tx)]*4)))
       -
       -        popup.open()
       +        status = _('Status') + ': ' + obj.status
       +        self.app.show_pr_details(pr.get_dict(), status, True)
        
            def do_delete(self, obj):
                from dialogs.question import Question
       t@@ -472,7 +461,8 @@ class RequestsScreen(CScreen):
        
            def update(self):
        
       -        self.menu_actions = [('View/Edit', self.do_show), ('Delete', self.do_delete)]
       +        self.menu_actions = [('Show', self.do_show), ('Details', self.do_view), ('Delete', self.do_delete)]
       +
                requests_list = self.screen.ids.requests_container
                requests_list.clear_widgets()
                _list = self.app.wallet.get_sorted_requests(self.app.electrum_config)
       t@@ -507,6 +497,20 @@ class RequestsScreen(CScreen):
            def do_show(self, obj):
                self.app.show_request(obj.address)
        
       +    def do_view(self, obj):
       +        req = self.app.wallet.get_payment_request(obj.address, self.app.electrum_config)
       +        status = req.get('status')
       +        amount = req.get('amount')
       +        address = req['address']
       +        if amount:
       +            status = req.get('status')
       +            status = _('Status') + ': ' + request_text[status]
       +        else:
       +            received = self.app.wallet.get_addr_received(address)
       +            status = _('Amount received') + ': ' + self.app.format_amount_and_units(amount)
       +
       +        self.app.show_pr_details(req, status, False)
       +
            def do_delete(self, obj):
                from dialogs.question import Question
                def cb():
   DIR diff --git a/gui/kivy/uix/ui_screens/invoice.kv b/gui/kivy/uix/ui_screens/invoice.kv
       t@@ -3,10 +3,15 @@
        Popup:
            id: popup
            title: _('Invoice')
       -    AnchorLayout:
       -        anchor_x: 'center'
       -        BoxLayout:
       -            orientation: 'vertical'
       +    BoxLayout:
       +        orientation: 'vertical'
       +        spacing: '1dp'
       +        Widget:
       +            size_hint: 1, 0.1
       +
       +        GridLayout:
       +            cols:1
       +            size_hint: 1, 1
                    Label:
                        id: requestor_label
                        text_size: self.width, None
       t@@ -16,32 +21,33 @@ Popup:
                        text_size: self.width, None
                        size_hint: 1, 0.3
                    Label:
       -                id: expiration_label
       +                id: signature_label
                        text_size: self.width, None
                        size_hint: 1, 0.3
                    Label:
       -                id: memo_label
       +                id: expiration_label
                        text_size: self.width, None
                        size_hint: 1, 0.3
                    Label:
       -                id: signature_label
       +                id: memo_label
                        text_size: self.width, None
                        size_hint: 1, 0.3
                    Label:
                        id: txid_label
                        text_size: self.width, None
                        size: self.texture_size
       -            Widget:
       -                size_hint: 1, 0.3
        
       -            BoxLayout:
       -                size_hint: 1, None
       +        Widget:
       +            size_hint: 1, 0.5
       +
       +        BoxLayout:
       +            size_hint: 1, None
       +            height: '48dp'
       +            Widget:
       +                size_hint: 0.5, None
       +                height: '48dp'
       +            Button:
       +                size_hint: 0.5, None
                        height: '48dp'
       -                Widget:
       -                    size_hint: 0.5, None
       -                    height: '48dp'
       -                Button:
       -                    size_hint: 0.5, None
       -                    height: '48dp'
       -                    text: _('OK')
       -                    on_release: popup.dismiss()
       +                text: _('Close')
       +                on_release: popup.dismiss()
   DIR diff --git a/lib/paymentrequest.py b/lib/paymentrequest.py
       t@@ -200,6 +200,16 @@ class PaymentRequest:
            def get_memo(self):
                return self.memo
        
       +    def get_dict(self):
       +        return {
       +            'requestor': self.get_requestor(),
       +            'memo':self.get_memo(),
       +            'exp': self.get_expiration_date(),
       +            'amount': self.get_amount(),
       +            'signature': self.get_verify_status(),
       +            'txid': self.tx
       +        }
       +
            def get_id(self):
                return self.id if self.requestor else self.get_address()