qt: coins tab: properly sort unconfirmed/local utxos to top
This commit is contained in:
@@ -38,7 +38,7 @@ from electrum.lnutil import MIN_FUNDING_SAT
|
||||
from electrum.util import profiler
|
||||
|
||||
from .util import ColorScheme, MONOSPACE_FONT, EnterButton
|
||||
from .my_treeview import MyTreeView
|
||||
from .my_treeview import MyTreeView, MySortModel
|
||||
from .new_channel_dialog import NewChannelDialog
|
||||
from ..messages import MSG_FREEZE_ADDRESS, MSG_FREEZE_COIN
|
||||
|
||||
@@ -68,6 +68,7 @@ class UTXOList(MyTreeView):
|
||||
stretch_column = Columns.LABEL
|
||||
|
||||
ROLE_PREVOUT_STR = Qt.UserRole + 1000
|
||||
ROLE_SORT_ORDER = Qt.UserRole + 1001
|
||||
key_role = ROLE_PREVOUT_STR
|
||||
|
||||
def __init__(self, main_window: 'ElectrumWindow'):
|
||||
@@ -80,6 +81,9 @@ class UTXOList(MyTreeView):
|
||||
self.wallet = self.main_window.wallet
|
||||
self.std_model = QStandardItemModel(self)
|
||||
self.setModel(self.std_model)
|
||||
self.proxy = MySortModel(self, sort_role=self.ROLE_SORT_ORDER)
|
||||
self.proxy.setSourceModel(self.std_model)
|
||||
self.setModel(self.proxy)
|
||||
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
||||
self.setSortingEnabled(True)
|
||||
|
||||
@@ -92,11 +96,11 @@ class UTXOList(MyTreeView):
|
||||
@profiler(min_threshold=0.05)
|
||||
def update(self):
|
||||
# not calling maybe_defer_update() as it interferes with coincontrol status bar
|
||||
self.proxy.setDynamicSortFilter(False) # temp. disable re-sorting after every change
|
||||
utxos = self.wallet.get_utxos()
|
||||
utxos.sort(key=lambda x: x.block_height, reverse=True)
|
||||
self._maybe_reset_coincontrol(utxos)
|
||||
self._utxo_dict = {}
|
||||
self.model().clear()
|
||||
self.std_model.clear()
|
||||
self.update_headers(self.__class__.headers)
|
||||
for idx, utxo in enumerate(utxos):
|
||||
name = utxo.prevout.to_str()
|
||||
@@ -117,9 +121,11 @@ class UTXOList(MyTreeView):
|
||||
utxo_item[self.Columns.AMOUNT].setFont(QFont(MONOSPACE_FONT))
|
||||
utxo_item[self.Columns.PARENTS].setFont(QFont(MONOSPACE_FONT))
|
||||
utxo_item[self.Columns.OUTPOINT].setFont(QFont(MONOSPACE_FONT))
|
||||
self.model().insertRow(idx, utxo_item)
|
||||
self.std_model.insertRow(idx, utxo_item)
|
||||
self.refresh_row(name, idx)
|
||||
self.filter()
|
||||
self.proxy.setDynamicSortFilter(True)
|
||||
self.sortByColumn(self.Columns.OUTPOINT, Qt.DescendingOrder)
|
||||
self.update_coincontrol_bar()
|
||||
self.num_coins_label.setText(_('{} unspent transaction outputs').format(len(utxos)))
|
||||
|
||||
@@ -144,6 +150,8 @@ class UTXOList(MyTreeView):
|
||||
utxo_item[self.Columns.PARENTS].setText('%6s'%num_parents if num_parents else '-')
|
||||
label = self.wallet.get_label_for_txid(txid) or ''
|
||||
utxo_item[self.Columns.LABEL].setText(label)
|
||||
block_height_sort_key = self.wallet.adb.tx_height_to_sort_height(utxo.block_height)
|
||||
utxo_item[self.Columns.OUTPOINT].setData(block_height_sort_key, self.ROLE_SORT_ORDER)
|
||||
SELECTED_TO_SPEND_TOOLTIP = _('Coin selected to be spent')
|
||||
if key in self._spend_set:
|
||||
tooltip = key + "\n" + SELECTED_TO_SPEND_TOOLTIP
|
||||
|
||||
Reference in New Issue
Block a user