URI: 
       tMerge pull request #4452 from spesmilo/history_recycle_view - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit dea6e419664222a235ad7bd07c2872da371abcfc
   DIR parent ae786cafdfa78676a3e87752c64df1edbb2fae78
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Thu, 21 Jun 2018 17:46:47 +0200
       
       Merge pull request #4452 from spesmilo/history_recycle_view
       
       kivy: use RecycleView in history
       Diffstat:
         M gui/kivy/uix/screens.py             |      31 ++++++++++++++-----------------
         M gui/kivy/uix/ui_screens/history.kv  |      21 +++++++++++----------
       
       2 files changed, 25 insertions(+), 27 deletions(-)
       ---
   DIR diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py
       t@@ -11,6 +11,7 @@ from kivy.compat import string_types
        from kivy.properties import (ObjectProperty, DictProperty, NumericProperty,
                                     ListProperty, StringProperty)
        
       +from kivy.uix.recycleview import RecycleView
        from kivy.uix.label import Label
        
        from kivy.lang import Builder
       t@@ -28,6 +29,8 @@ from .context_menu import ContextMenu
        
        from electrum_gui.kivy.i18n import _
        
       +class HistoryRecycleView(RecycleView):
       +    pass
        
        class CScreen(Factory.Screen):
            __events__ = ('on_activate', 'on_deactivate', 'on_enter', 'on_leave')
       t@@ -132,25 +135,22 @@ class HistoryScreen(CScreen):
                status, status_str = self.app.wallet.get_tx_status(tx_hash, height, conf, timestamp)
                icon = "atlas://gui/kivy/theming/light/" + TX_ICONS[status]
                label = self.app.wallet.get_label(tx_hash) if tx_hash else _('Pruned transaction outputs')
       -        ri = self.cards.get(tx_hash)
       -        if ri is None:
       -            ri = Factory.HistoryItem()
       -            ri.screen = self
       -            ri.tx_hash = tx_hash
       -            self.cards[tx_hash] = ri
       -        ri.icon = icon
       -        ri.date = status_str
       -        ri.message = label
       -        ri.confirmations = conf
       +        ri = {}
       +        ri['screen'] = self
       +        ri['tx_hash'] = tx_hash
       +        ri['icon'] = icon
       +        ri['date'] = status_str
       +        ri['message'] = label
       +        ri['confirmations'] = conf
                if value is not None:
       -            ri.is_mine = value < 0
       +            ri['is_mine'] = value < 0
                    if value < 0: value = - value
       -            ri.amount = self.app.format_amount_and_units(value)
       +            ri['amount'] = self.app.format_amount_and_units(value)
                    if self.app.fiat_unit:
                        fx = self.app.fx
                        fiat_value = value / Decimal(bitcoin.COIN) * self.app.wallet.price_at_timestamp(tx_hash, fx.timestamp_rate)
                        fiat_value = Fiat(fiat_value, fx.ccy)
       -                ri.quote_text = str(fiat_value)
       +                ri['quote_text'] = str(fiat_value)
                return ri
        
            def update(self, see_all=False):
       t@@ -158,11 +158,8 @@ class HistoryScreen(CScreen):
                    return
                history = reversed(self.app.wallet.get_history())
                history_card = self.screen.ids.history_container
       -        history_card.clear_widgets()
                count = 0
       -        for item in history:
       -            ri = self.get_card(*item)
       -            history_card.add_widget(ri)
       +        history_card.data = [self.get_card(*item) for item in history]
        
        
        class SendScreen(CScreen):
   DIR diff --git a/gui/kivy/uix/ui_screens/history.kv b/gui/kivy/uix/ui_screens/history.kv
       t@@ -48,11 +48,19 @@
                    text: root.date + '   ' + root.message
                Widget
        
       +<HistoryRecycleView>:
       +    viewclass: 'HistoryItem'
       +    RecycleBoxLayout:
       +        default_size: None, dp(56)
       +        default_size_hint: 1, None
       +        size_hint: 1, None
       +        height: self.minimum_height
       +        orientation: 'vertical'
        
        
        HistoryScreen:
            name: 'history'
       -    content: content
       +    content: history_container
            BoxLayout:
                orientation: 'vertical'
                Button:
       t@@ -64,14 +72,7 @@ HistoryScreen:
                    bold: True
                    size_hint: 1, 0.25
                    on_release: app.is_fiat = not app.is_fiat if app.fx.is_enabled() else False
       -        ScrollView:
       -            id: content
       -            do_scroll_x: False
       -            size_hint: 1, 0.75
       +        HistoryRecycleView:
       +            id: history_container
                    scroll_type: ['bars', 'content']
                    bar_width: 15
       -            GridLayout
       -                id: history_container
       -                cols: 1
       -                size_hint: 1, None
       -                height: self.minimum_height