URI: 
       tkivy: use RecycleView in address list - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 88d95123fb0d1817804b6c8712dfbf4e7fd45254
   DIR parent 5f050aa13e7db9725a83fda8c6baa6f622e5e7db
  HTML Author: Janus <ysangkok@gmail.com>
       Date:   Fri, 22 Jun 2018 20:07:36 +0200
       
       kivy: use RecycleView in address list
       
       Diffstat:
         M gui/kivy/main.kv                    |       6 ------
         M gui/kivy/uix/dialogs/addresses.py   |      45 ++++++++++++++-----------------
       
       2 files changed, 20 insertions(+), 31 deletions(-)
       ---
   DIR diff --git a/gui/kivy/main.kv b/gui/kivy/main.kv
       t@@ -49,12 +49,6 @@
            text_size: self.width, None
            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>:
            rows: 1
            size_hint: 1, None
   DIR diff --git a/gui/kivy/uix/dialogs/addresses.py b/gui/kivy/uix/dialogs/addresses.py
       t@@ -84,12 +84,15 @@ Builder.load_string('''
                            id: change
                            text: root.message if root.message else _('Search')
                            on_release: Clock.schedule_once(lambda dt: app.description_dialog(popup))
       -        ScrollView:
       +        RecycleView:
                    scroll_type: ['bars', 'content']
       -            bar_width: '25dp'
       -            GridLayout:
       -                cols: 1
       -                id: search_container
       +            bar_width: '15dp'
       +            viewclass: 'AddressItem'
       +            id: search_container
       +            RecycleBoxLayout:
       +                orientation: 'vertical'
       +                default_size: None, dp(56)
       +                default_size_hint: 1, None
                        size_hint_y: None
                        height: self.minimum_height
        ''')
       t@@ -99,10 +102,6 @@ from electrum_gui.kivy.i18n import _
        from electrum_gui.kivy.uix.context_menu import ContextMenu
        
        
       -class EmptyLabel(Factory.Label):
       -    pass
       -
       -
        class AddressesDialog(Factory.Popup):
        
            def __init__(self, app, screen, callback):
       t@@ -110,19 +109,15 @@ class AddressesDialog(Factory.Popup):
                self.app = app
                self.screen = screen
                self.callback = callback
       -        self.cards = {}
                self.context_menu = None
        
            def get_card(self, addr, balance, is_used, label):
       -        ci = self.cards.get(addr)
       -        if ci is None:
       -            ci = Factory.AddressItem()
       -            ci.screen = self
       -            ci.address = addr
       -            self.cards[addr] = ci
       -        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')
       +        ci = {}
       +        ci['screen'] = self
       +        ci['address'] = addr
       +        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
        
            def update(self):
       t@@ -136,8 +131,8 @@ class AddressesDialog(Factory.Popup):
                    _list = wallet.get_addresses()
                search = self.message
                container = self.ids.search_container
       -        container.clear_widgets()
                n = 0
       +        cards = []
                for address in _list:
                    label = wallet.labels.get(address, '')
                    balance = sum(wallet.get_addr_balance(address))
       t@@ -151,11 +146,11 @@ class AddressesDialog(Factory.Popup):
                    card = self.get_card(address, balance, is_used, label)
                    if search and not self.ext_search(card, search):
                        continue
       -            container.add_widget(card)
       +            cards.append(card)
                    n += 1
       +        container.data = cards
                if not n:
       -            msg = _('No address matching your search')
       -            container.add_widget(EmptyLabel(text=msg))
       +            self.app.show_error('No address matching your search')
        
            def do_use(self, obj):
                self.hide_menu()
       t@@ -172,8 +167,8 @@ class AddressesDialog(Factory.Popup):
                self.app.show_addr_details(req, status)
        
            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):
                self.hide_menu()
                self.context_menu = ContextMenu(obj, self.menu_actions)