URI: 
       tqt addresses list: custom sort order for "Type" and "fiat balance" cols - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit efc5deb06e8a20e67be81348482904dca61782a7
   DIR parent 93c90a30f03ce2ab1254e83ce5e143dbfd6e1b0f
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Fri, 15 May 2020 15:20:11 +0200
       
       qt addresses list: custom sort order for "Type" and "fiat balance" cols
       
       fixes #4920
       fixes #5641
       
       Diffstat:
         M electrum/gui/qt/address_list.py     |      29 ++++++++++++++++++++---------
       
       1 file changed, 20 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/address_list.py b/electrum/gui/qt/address_list.py
       t@@ -35,7 +35,7 @@ from electrum.plugin import run_hook
        from electrum.bitcoin import is_address
        from electrum.wallet import InternalAddressCorruption
        
       -from .util import MyTreeView, MONOSPACE_FONT, ColorScheme, webopen
       +from .util import MyTreeView, MONOSPACE_FONT, ColorScheme, webopen, MySortModel
        
        
        class AddressUsageStateFilter(IntEnum):
       t@@ -78,6 +78,8 @@ class AddressList(MyTreeView):
        
            filter_columns = [Columns.TYPE, Columns.ADDRESS, Columns.LABEL, Columns.COIN_BALANCE]
        
       +    ROLE_SORT_ORDER = Qt.UserRole + 1000
       +
            def __init__(self, parent):
                super().__init__(parent, self.create_menu, stretch_column=self.Columns.LABEL)
                self.wallet = self.parent.wallet
       t@@ -93,8 +95,12 @@ class AddressList(MyTreeView):
                self.used_button.currentIndexChanged.connect(self.toggle_used)
                for addr_usage_state in AddressUsageStateFilter.__members__.values():  # type: AddressUsageStateFilter
                    self.used_button.addItem(addr_usage_state.ui_text())
       -        self.setModel(QStandardItemModel(self))
       +        self.std_model = QStandardItemModel(self)
       +        self.proxy = MySortModel(self, sort_role=self.ROLE_SORT_ORDER)
       +        self.proxy.setSourceModel(self.std_model)
       +        self.setModel(self.proxy)
                self.update()
       +        self.sortByColumn(self.Columns.TYPE, Qt.AscendingOrder)
        
            def get_toolbar_buttons(self):
                return QLabel(_("Filter:")), self.change_button, self.used_button
       t@@ -146,7 +152,8 @@ class AddressList(MyTreeView):
                    addr_list = self.wallet.get_change_addresses()
                else:
                    addr_list = self.wallet.get_addresses()
       -        self.model().clear()
       +        self.proxy.setDynamicSortFilter(False)  # temp. disable re-sorting after every change
       +        self.std_model.clear()
                self.refresh_headers()
                fx = self.parent.fx
                set_address = None
       t@@ -187,18 +194,21 @@ class AddressList(MyTreeView):
                        address_item[self.Columns.TYPE].setText(_('receiving'))
                        address_item[self.Columns.TYPE].setBackground(ColorScheme.GREEN.as_color(True))
                    address_item[self.Columns.LABEL].setData(address, Qt.UserRole)
       +            address_path = self.wallet.get_address_index(address)
       +            address_item[self.Columns.TYPE].setData(address_path, self.ROLE_SORT_ORDER)
                    address_path_str = self.wallet.get_address_path_str(address)
                    if address_path_str is not None:
                        address_item[self.Columns.TYPE].setToolTip(address_path_str)
       +            address_item[self.Columns.FIAT_BALANCE].setData(balance, self.ROLE_SORT_ORDER)
                    # setup column 1
                    if self.wallet.is_frozen_address(address):
                        address_item[self.Columns.ADDRESS].setBackground(ColorScheme.BLUE.as_color(True))
                    if address in addresses_beyond_gap_limit:
                        address_item[self.Columns.ADDRESS].setBackground(ColorScheme.RED.as_color(True))
                    # add item
       -            count = self.model().rowCount()
       -            self.model().insertRow(count, address_item)
       -            address_idx = self.model().index(count, self.Columns.LABEL)
       +            count = self.std_model.rowCount()
       +            self.std_model.insertRow(count, address_item)
       +            address_idx = self.std_model.index(count, self.Columns.LABEL)
                    if address == current_address:
                        set_address = QPersistentModelIndex(address_idx)
                self.set_current_idx(set_address)
       t@@ -208,6 +218,7 @@ class AddressList(MyTreeView):
                else:
                    self.hideColumn(self.Columns.FIAT_BALANCE)
                self.filter()
       +        self.proxy.setDynamicSortFilter(True)
        
            def create_menu(self, position):
                from electrum.wallet import Multisig_Wallet
       t@@ -217,17 +228,17 @@ class AddressList(MyTreeView):
                if not selected:
                    return
                multi_select = len(selected) > 1
       -        addrs = [self.model().itemFromIndex(item).text() for item in selected]
       +        addrs = [self.item_from_index(item).text() for item in selected]
                menu = QMenu()
                if not multi_select:
                    idx = self.indexAt(position)
                    if not idx.isValid():
                        return
       -            item = self.model().itemFromIndex(idx)
       +            item = self.item_from_index(idx)
                    if not item:
                        return
                    addr = addrs[0]
       -            addr_column_title = self.model().horizontalHeaderItem(self.Columns.LABEL).text()
       +            addr_column_title = self.std_model.horizontalHeaderItem(self.Columns.LABEL).text()
                    addr_idx = idx.sibling(idx.row(), self.Columns.LABEL)
                    self.add_copy_menu(menu, idx)
                    menu.addAction(_('Details'), lambda: self.parent.show_address(addr))