kivy: use RecycleView in address list
This commit is contained in:
@@ -49,12 +49,6 @@
|
|||||||
text_size: self.width, None
|
text_size: self.width, None
|
||||||
height: self.texture_size[1]
|
height: self.texture_size[1]
|
||||||
|
|
||||||
<EmptyLabel@Label>
|
|
||||||
color: (0.8, 0.8, 0.8, 1)
|
|
||||||
size_hint_y: None
|
|
||||||
text_size: self.width, None
|
|
||||||
height: self.texture_size[1]
|
|
||||||
|
|
||||||
<VGridLayout@GridLayout>:
|
<VGridLayout@GridLayout>:
|
||||||
rows: 1
|
rows: 1
|
||||||
size_hint: 1, None
|
size_hint: 1, None
|
||||||
|
|||||||
@@ -84,12 +84,15 @@ Builder.load_string('''
|
|||||||
id: change
|
id: change
|
||||||
text: root.message if root.message else _('Search')
|
text: root.message if root.message else _('Search')
|
||||||
on_release: Clock.schedule_once(lambda dt: app.description_dialog(popup))
|
on_release: Clock.schedule_once(lambda dt: app.description_dialog(popup))
|
||||||
ScrollView:
|
RecycleView:
|
||||||
scroll_type: ['bars', 'content']
|
scroll_type: ['bars', 'content']
|
||||||
bar_width: '25dp'
|
bar_width: '15dp'
|
||||||
GridLayout:
|
viewclass: 'AddressItem'
|
||||||
cols: 1
|
id: search_container
|
||||||
id: search_container
|
RecycleBoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
default_size: None, dp(56)
|
||||||
|
default_size_hint: 1, None
|
||||||
size_hint_y: None
|
size_hint_y: None
|
||||||
height: self.minimum_height
|
height: self.minimum_height
|
||||||
''')
|
''')
|
||||||
@@ -99,10 +102,6 @@ from electrum_gui.kivy.i18n import _
|
|||||||
from electrum_gui.kivy.uix.context_menu import ContextMenu
|
from electrum_gui.kivy.uix.context_menu import ContextMenu
|
||||||
|
|
||||||
|
|
||||||
class EmptyLabel(Factory.Label):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class AddressesDialog(Factory.Popup):
|
class AddressesDialog(Factory.Popup):
|
||||||
|
|
||||||
def __init__(self, app, screen, callback):
|
def __init__(self, app, screen, callback):
|
||||||
@@ -110,19 +109,15 @@ class AddressesDialog(Factory.Popup):
|
|||||||
self.app = app
|
self.app = app
|
||||||
self.screen = screen
|
self.screen = screen
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
self.cards = {}
|
|
||||||
self.context_menu = None
|
self.context_menu = None
|
||||||
|
|
||||||
def get_card(self, addr, balance, is_used, label):
|
def get_card(self, addr, balance, is_used, label):
|
||||||
ci = self.cards.get(addr)
|
ci = {}
|
||||||
if ci is None:
|
ci['screen'] = self
|
||||||
ci = Factory.AddressItem()
|
ci['address'] = addr
|
||||||
ci.screen = self
|
ci['memo'] = label
|
||||||
ci.address = addr
|
ci['amount'] = self.app.format_amount_and_units(balance)
|
||||||
self.cards[addr] = ci
|
ci['status'] = _('Used') if is_used else _('Funded') if balance > 0 else _('Unused')
|
||||||
ci.memo = label
|
|
||||||
ci.amount = self.app.format_amount_and_units(balance)
|
|
||||||
ci.status = _('Used') if is_used else _('Funded') if balance > 0 else _('Unused')
|
|
||||||
return ci
|
return ci
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
@@ -136,8 +131,8 @@ class AddressesDialog(Factory.Popup):
|
|||||||
_list = wallet.get_addresses()
|
_list = wallet.get_addresses()
|
||||||
search = self.message
|
search = self.message
|
||||||
container = self.ids.search_container
|
container = self.ids.search_container
|
||||||
container.clear_widgets()
|
|
||||||
n = 0
|
n = 0
|
||||||
|
cards = []
|
||||||
for address in _list:
|
for address in _list:
|
||||||
label = wallet.labels.get(address, '')
|
label = wallet.labels.get(address, '')
|
||||||
balance = sum(wallet.get_addr_balance(address))
|
balance = sum(wallet.get_addr_balance(address))
|
||||||
@@ -151,11 +146,11 @@ class AddressesDialog(Factory.Popup):
|
|||||||
card = self.get_card(address, balance, is_used, label)
|
card = self.get_card(address, balance, is_used, label)
|
||||||
if search and not self.ext_search(card, search):
|
if search and not self.ext_search(card, search):
|
||||||
continue
|
continue
|
||||||
container.add_widget(card)
|
cards.append(card)
|
||||||
n += 1
|
n += 1
|
||||||
|
container.data = cards
|
||||||
if not n:
|
if not n:
|
||||||
msg = _('No address matching your search')
|
self.app.show_error('No address matching your search')
|
||||||
container.add_widget(EmptyLabel(text=msg))
|
|
||||||
|
|
||||||
def do_use(self, obj):
|
def do_use(self, obj):
|
||||||
self.hide_menu()
|
self.hide_menu()
|
||||||
@@ -172,7 +167,7 @@ class AddressesDialog(Factory.Popup):
|
|||||||
self.app.show_addr_details(req, status)
|
self.app.show_addr_details(req, status)
|
||||||
|
|
||||||
def ext_search(self, card, search):
|
def ext_search(self, card, search):
|
||||||
return card.memo.find(search) >= 0 or card.amount.find(search) >= 0
|
return card['memo'].find(search) >= 0 or card['amount'].find(search) >= 0
|
||||||
|
|
||||||
def show_menu(self, obj):
|
def show_menu(self, obj):
|
||||||
self.hide_menu()
|
self.hide_menu()
|
||||||
|
|||||||
Reference in New Issue
Block a user