commit 5e1412a83975b630a31ffbb625c9f36619c9d31b
parent ec89b496bf33f980412ee2f6b1ea1d66f9713cc4
Author: Janus <ysangkok@gmail.com>
Date: Fri, 6 Apr 2018 18:33:25 +0200
lightning: channel details popup
Diffstat:
1 file changed, 61 insertions(+), 1 deletion(-)
diff --git a/gui/kivy/uix/dialogs/lightning_channels.py b/gui/kivy/uix/dialogs/lightning_channels.py
@@ -1,12 +1,14 @@
import binascii
from kivy.lang import Builder
from kivy.factory import Factory
+from kivy.uix.popup import Popup
from kivy.clock import Clock
import electrum.lightning as lightning
from electrum_gui.kivy.uix.context_menu import ContextMenu
Builder.load_string('''
<LightningChannelItem@CardItem>
+ details: {}
active: False
channelPoint: '<channelPoint not set>'
Label:
@@ -26,8 +28,59 @@ Builder.load_string('''
height: self.minimum_height
spacing: '2dp'
padding: '12dp'
+
+<ChannelDetailsItem@BoxLayout>:
+ canvas.before:
+ Color:
+ rgba: 0.5, 0.5, 0.5, 1
+ Rectangle:
+ size: self.size
+ pos: self.pos
+ value: ''
+ Label:
+ text: root.value
+ text_size: self.size # this makes the text not overflow, but wrap
+
+<ChannelDetailsRow@BoxLayout>:
+ keyName: ''
+ value: ''
+ ChannelDetailsItem:
+ value: root.keyName
+ size_hint_x: 0.5 # this makes the column narrower
+
+ # see https://blog.kivy.org/2014/07/wrapping-text-in-kivys-label/
+ ScrollView:
+ Label:
+ text: root.value
+ size_hint_y: None
+ text_size: self.width, None
+ height: self.texture_size[1]
+
+<ChannelDetailsList@RecycleView>:
+ scroll_type: ['bars', 'content']
+ scroll_wheel_distance: dp(114)
+ bar_width: dp(10)
+ viewclass: 'ChannelDetailsRow'
+ 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: []
+ ChannelDetailsList:
+ data: popuproot.data
''')
+class ChannelDetailsPopup(Popup):
+ def __init__(self, data, **kwargs):
+ super(ChanenlDetailsPopup,self).__init__(**kwargs)
+ self.data = data
+
class LightningChannelsDialog(Factory.Popup):
def __init__(self, app):
super(LightningChannelsDialog, self).__init__()
@@ -35,13 +88,19 @@ class LightningChannelsDialog(Factory.Popup):
self.app = app
self.context_menu = None
+ def show_channel_details(self, obj):
+ p = Factory.ChannelDetailsPopup()
+ p.data = [{'keyName': key, 'value': str(obj.details[key])} for key in obj.details.keys()]
+ p.open()
+
def close_channel(self, obj):
print("asked to close channel", obj.channelPoint)
lightning.lightningCall(self.app.wallet.network.lightningrpc, "closechannel")(*([obj.channelPoint] + (["--force"] if not obj.active else [])))
def show_menu(self, obj):
self.hide_menu()
- self.context_menu = ContextMenu(obj, [("Close", self.close_channel)])
+ self.context_menu = ContextMenu(obj, [("Close", self.close_channel),
+ ("Details", self.show_channel_details)])
self.ids.box.add_widget(self.context_menu)
def hide_menu(self):
@@ -76,6 +135,7 @@ class LightningChannelsDialog(Factory.Popup):
print(i)
item.channelPoint = i["channel_point"].split(":")[0]
item.active = i["active"]
+ item.details = i
channel_cards.add_widget(item)
else:
self.app.show_info(res)