URI: 
       tkivy: improve channel detaild dialog - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 7c77d7c1761d8a399ab16c33647d78132b9d5ffb
   DIR parent a059fa0c1f3655f010db30cde543ae236586982c
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Fri,  6 Mar 2020 05:50:45 +0100
       
       kivy: improve channel detaild dialog
       
       Diffstat:
         M electrum/gui/kivy/main.kv           |       3 ++-
         M electrum/gui/kivy/main_window.py    |       5 +++++
         M electrum/gui/kivy/uix/dialogs/ligh… |     118 +++++++++++++++++++++----------
       
       3 files changed, 86 insertions(+), 40 deletions(-)
       ---
   DIR diff --git a/electrum/gui/kivy/main.kv b/electrum/gui/kivy/main.kv
       t@@ -155,10 +155,11 @@
            touched: False
            padding: '10dp', '10dp'
            background_color: .3, .3, .3, 1
       +    touch_callback: lambda: app.on_ref_label(self)
            on_touch_down:
                touch = args[1]
                touched = bool(self.collide_point(*touch.pos))
       -        if touched: app.on_ref_label(self)
       +        if touched: self.touch_callback()
                if touched: self.touched = True
            canvas.before:
                Color:
   DIR diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py
       t@@ -1038,6 +1038,11 @@ class ElectrumWindow(App):
                d = TxDialog(self, tx)
                d.open()
        
       +    def show_transaction(self, txid):
       +        tx = self.wallet.db.get_transaction(txid)
       +        if tx:
       +            self.tx_dialog(tx)
       +
            def lightning_tx_dialog(self, tx):
                from .uix.dialogs.lightning_tx_dialog import LightningTxDialog
                d = LightningTxDialog(self, tx)
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/lightning_channels.py b/electrum/gui/kivy/uix/dialogs/lightning_channels.py
       t@@ -85,31 +85,81 @@ Builder.load_string(r'''
                        text: _('New...')
                        on_press: popup.app.popup_dialog('lightning_open_channel_dialog')
        
       -<ChannelDetailsList@RecycleView>:
       -    scroll_type: ['bars', 'content']
       -    scroll_wheel_distance: dp(114)
       -    bar_width: dp(10)
       -    viewclass: 'BoxLabel'
       -    RecycleBoxLayout:
       -        default_size: None, dp(56)
       -        default_size_hint: 1, None
       -        size_hint_y: None
       -        height: self.minimum_height
       -        orientation: 'vertical'
       -        spacing: dp(2)
        
        <ChannelDetailsPopup@Popup>:
            id: popuproot
            data: []
            is_closed: False
            is_redeemed: False
       +    node_id:''
       +    short_id:''
       +    initiator:''
       +    capacity:''
       +    funding_txid:''
       +    state:''
       +    local_ctn:0
       +    remote_ctn:0
       +    local_csv:0
       +    remote_csv:0
       +    feerate:0
       +    can_send:''
       +    can_receive:''
            BoxLayout:
       +        padding: '12dp', '12dp', '12dp', '12dp'
       +        spacing: '12dp'
                orientation: 'vertical'
                ScrollView:
       -            ChannelDetailsList:
       -                data: popuproot.data
       +            scroll_type: ['bars', 'content']
       +            scroll_wheel_distance: dp(114)
       +            BoxLayout:
       +                orientation: 'vertical'
       +                height: self.minimum_height
       +                size_hint_y: None
       +                spacing: '5dp'
       +                BoxLabel:
       +                    text: _('Channel ID')
       +                    value: root.short_id
       +                BoxLabel:
       +                    text: _('State')
       +                    value: root.state
       +                BoxLabel:
       +                    text: _('Initiator')
       +                    value: root.initiator
       +                BoxLabel:
       +                    text: _('Capacity')
       +                    value: root.capacity
       +                BoxLabel:
       +                    text: _('Can send')
       +                    value: root.can_send
       +                BoxLabel:
       +                    text: _('Can receive')
       +                    value: root.can_receive
       +                BoxLabel:
       +                    text: _('CSV delay')
       +                    value: 'Local: %d\nRemote: %d' % (root.local_csv, root.remote_csv)
       +                BoxLabel:
       +                    text: _('CTN')
       +                    value: 'Local: %d\nRemote: %d' % (root.local_ctn, root.remote_ctn)
       +                BoxLabel:
       +                    text: _('Fee rate')
       +                    value: '%d sat/kilobyte' % (root.feerate)
       +                Widget:
       +                    size_hint: 1, 0.1
       +                TopLabel:
       +                    text: _('Remote Node ID')
       +                TxHashLabel:
       +                    data: root.node_id
       +                    name: _('Remote Node ID')
       +                TopLabel:
       +                    text: _('Funding Transaction')
       +                TxHashLabel:
       +                    data: root.funding_txid
       +                    name: _('Funding Transaction')
       +                    touch_callback: lambda: app.show_transaction(root.funding_txid)
       +                Widget:
       +                    size_hint: 1, 0.1
                Widget:
       -            size_hint: 1, 0.1
       +            size_hint: 1, 0.05
                BoxLayout:
                    size_hint: 1, None
                    height: '48dp'
       t@@ -131,11 +181,6 @@ Builder.load_string(r'''
                        text: _('Delete')
                        on_release: root.remove_channel()
                        disabled: not root.is_redeemed
       -            Button:
       -                size_hint: 0.5, None
       -                height: '48dp'
       -                text: _('Dismiss')
       -                on_release: root.dismiss()
        ''')
        
        
       t@@ -148,25 +193,20 @@ class ChannelDetailsPopup(Popup):
                self.app = app
                self.chan = chan
                self.title = _('Channel details')
       -        self.data = [{'text': key, 'value': str(value)} for key, value in self.details().items()]
       -
       -    def details(self):
       -        chan = self.chan
       -        status = self.app.wallet.lnworker.get_channel_status(chan)
       -        return {
       -            _('Short Chan ID'): format_short_channel_id(chan.short_channel_id),
       -            _('Initiator'): 'Local' if chan.constraints.is_initiator else 'Remote',
       -            _('State'): status,
       -            _('Local CTN'): chan.get_latest_ctn(LOCAL),
       -            _('Remote CTN'): chan.get_latest_ctn(REMOTE),
       -            _('Capacity'): self.app.format_amount_and_units(chan.constraints.capacity),
       -            _('Can send'): self.app.format_amount_and_units(chan.available_to_spend(LOCAL) // 1000),
       -            _('Can receive'): self.app.format_amount_and_units(chan.available_to_spend(REMOTE) // 1000),
       -            _('Current feerate'): str(chan.get_latest_feerate(LOCAL)),
       -            _('Node ID'): bh2u(chan.node_id),
       -            _('Channel ID'): bh2u(chan.channel_id),
       -            _('Funding TXID'): chan.funding_outpoint.txid,
       -        }
       +        self.node_id = bh2u(chan.node_id)
       +        self.channel_id = bh2u(chan.channel_id)
       +        self.funding_txid = chan.funding_outpoint.txid
       +        self.short_id = format_short_channel_id(chan.short_channel_id)
       +        self.capacity = self.app.format_amount_and_units(chan.constraints.capacity)
       +        self.state = self.app.wallet.lnworker.get_channel_status(chan)
       +        self.local_ctn = chan.get_latest_ctn(LOCAL)
       +        self.remote_ctn = chan.get_latest_ctn(REMOTE)
       +        self.local_csv = chan.config[LOCAL].to_self_delay
       +        self.remote_csv = chan.config[REMOTE].to_self_delay
       +        self.initiator = 'Local' if chan.constraints.is_initiator else 'Remote'
       +        self.feerate = chan.get_latest_feerate(LOCAL)
       +        self.can_send = self.app.format_amount_and_units(chan.available_to_spend(LOCAL) // 1000)
       +        self.can_receive = self.app.format_amount_and_units(chan.available_to_spend(REMOTE) // 1000)
        
            def close(self):
                Question(_('Close channel?'), self._close).open()