kivy: improve channel detaild dialog

This commit is contained in:
ThomasV 2020-03-06 05:50:45 +01:00
parent a059fa0c1f
commit 7c77d7c176
3 changed files with 86 additions and 40 deletions

View file

@ -155,10 +155,11 @@
touched: False touched: False
padding: '10dp', '10dp' padding: '10dp', '10dp'
background_color: .3, .3, .3, 1 background_color: .3, .3, .3, 1
touch_callback: lambda: app.on_ref_label(self)
on_touch_down: on_touch_down:
touch = args[1] touch = args[1]
touched = bool(self.collide_point(*touch.pos)) touched = bool(self.collide_point(*touch.pos))
if touched: app.on_ref_label(self) if touched: self.touch_callback()
if touched: self.touched = True if touched: self.touched = True
canvas.before: canvas.before:
Color: Color:

View file

@ -1038,6 +1038,11 @@ class ElectrumWindow(App):
d = TxDialog(self, tx) d = TxDialog(self, tx)
d.open() 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): def lightning_tx_dialog(self, tx):
from .uix.dialogs.lightning_tx_dialog import LightningTxDialog from .uix.dialogs.lightning_tx_dialog import LightningTxDialog
d = LightningTxDialog(self, tx) d = LightningTxDialog(self, tx)

View file

@ -85,31 +85,81 @@ Builder.load_string(r'''
text: _('New...') text: _('New...')
on_press: popup.app.popup_dialog('lightning_open_channel_dialog') 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>: <ChannelDetailsPopup@Popup>:
id: popuproot id: popuproot
data: [] data: []
is_closed: False is_closed: False
is_redeemed: 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: BoxLayout:
padding: '12dp', '12dp', '12dp', '12dp'
spacing: '12dp'
orientation: 'vertical' orientation: 'vertical'
ScrollView: ScrollView:
ChannelDetailsList: scroll_type: ['bars', 'content']
data: popuproot.data 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: Widget:
size_hint: 1, 0.1 size_hint: 1, 0.05
BoxLayout: BoxLayout:
size_hint: 1, None size_hint: 1, None
height: '48dp' height: '48dp'
@ -131,11 +181,6 @@ Builder.load_string(r'''
text: _('Delete') text: _('Delete')
on_release: root.remove_channel() on_release: root.remove_channel()
disabled: not root.is_redeemed disabled: not root.is_redeemed
Button:
size_hint: 0.5, None
height: '48dp'
text: _('Dismiss')
on_release: root.dismiss()
''') ''')
@ -148,25 +193,20 @@ class ChannelDetailsPopup(Popup):
self.app = app self.app = app
self.chan = chan self.chan = chan
self.title = _('Channel details') self.title = _('Channel details')
self.data = [{'text': key, 'value': str(value)} for key, value in self.details().items()] self.node_id = bh2u(chan.node_id)
self.channel_id = bh2u(chan.channel_id)
def details(self): self.funding_txid = chan.funding_outpoint.txid
chan = self.chan self.short_id = format_short_channel_id(chan.short_channel_id)
status = self.app.wallet.lnworker.get_channel_status(chan) self.capacity = self.app.format_amount_and_units(chan.constraints.capacity)
return { self.state = self.app.wallet.lnworker.get_channel_status(chan)
_('Short Chan ID'): format_short_channel_id(chan.short_channel_id), self.local_ctn = chan.get_latest_ctn(LOCAL)
_('Initiator'): 'Local' if chan.constraints.is_initiator else 'Remote', self.remote_ctn = chan.get_latest_ctn(REMOTE)
_('State'): status, self.local_csv = chan.config[LOCAL].to_self_delay
_('Local CTN'): chan.get_latest_ctn(LOCAL), self.remote_csv = chan.config[REMOTE].to_self_delay
_('Remote CTN'): chan.get_latest_ctn(REMOTE), self.initiator = 'Local' if chan.constraints.is_initiator else 'Remote'
_('Capacity'): self.app.format_amount_and_units(chan.constraints.capacity), self.feerate = chan.get_latest_feerate(LOCAL)
_('Can send'): self.app.format_amount_and_units(chan.available_to_spend(LOCAL) // 1000), self.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), self.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,
}
def close(self): def close(self):
Question(_('Close channel?'), self._close).open() Question(_('Close channel?'), self._close).open()