Enable sorting of list widgets

This commit is contained in:
Johann Bauer 2018-01-28 13:07:59 +01:00 committed by ThomasV
parent b2c7d2d2cc
commit 3965176295
4 changed files with 25 additions and 4 deletions

View File

@ -39,6 +39,7 @@ class AddressList(MyTreeWidget):
MyTreeWidget.__init__(self, parent, self.create_menu, [], 2)
self.refresh_headers()
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.setSortingEnabled(True)
self.show_change = 0
self.show_used = 0
self.change_button = QComboBox(self)
@ -109,11 +110,11 @@ class AddressList(MyTreeWidget):
if fx and fx.get_fiat_address_config():
rate = fx.exchange_rate()
fiat_balance = fx.value_str(balance, rate)
address_item = QTreeWidgetItem(['', address, label, balance_text, fiat_balance, "%d"%num])
address_item = SortableTreeWidgetItem(['', address, label, balance_text, fiat_balance, "%d"%num])
address_item.setTextAlignment(4, Qt.AlignRight)
address_item.setFont(4, QFont(MONOSPACE_FONT))
else:
address_item = QTreeWidgetItem(['', address, label, balance_text, "%d"%num])
address_item = SortableTreeWidgetItem(['', address, label, balance_text, "%d"%num])
address_item.setFont(3, QFont(MONOSPACE_FONT))
if self.wallet.is_change(address):
address_item.setText(0, _('change'))

View File

@ -59,6 +59,8 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
AcceptFileDragDrop.__init__(self, ".txn")
self.refresh_headers()
self.setColumnHidden(1, True)
self.setSortingEnabled(True)
self.sortByColumn(0, Qt.AscendingOrder)
self.start_timestamp = None
self.end_timestamp = None
self.years = []
@ -243,9 +245,10 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
if value < 0:
entry.append(fx.format_fiat(tx_item['acquisition_price'].value))
entry.append(fx.format_fiat(tx_item['capital_gain'].value))
item = QTreeWidgetItem(entry)
item = SortableTreeWidgetItem(entry)
item.setIcon(0, icon)
item.setToolTip(0, str(conf) + " confirmation" + ("s" if conf != 1 else ""))
item.setData(0, SortableTreeWidgetItem.DataRole, (status, conf))
if has_invoice:
item.setIcon(3, QIcon(":icons/seal"))
for i in range(len(entry)):
@ -301,6 +304,7 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
if items:
item = items[0]
item.setIcon(0, icon)
item.setData(0, SortableTreeWidgetItem.DataRole, (status, conf))
item.setText(2, status_str)
def create_menu(self, position):

View File

@ -763,6 +763,21 @@ def get_parent_main_window(widget):
return widget
return None
class SortableTreeWidgetItem(QTreeWidgetItem):
DataRole = Qt.UserRole + 1
def __lt__(self, other):
column = self.treeWidget().sortColumn()
if None not in [x.data(column, self.DataRole) for x in [self, other]]:
# We have set custom data to sort by
return self.data(column, self.DataRole) < other.data(column, self.DataRole)
try:
# Is the value something numeric?
return float(self.text(column)) < float(other.text(column))
except ValueError:
# If not, we will just do string comparison
return self.text(column) < other.text(column)
if __name__ == "__main__":
app = QApplication([])

View File

@ -32,6 +32,7 @@ class UTXOList(MyTreeWidget):
def __init__(self, parent=None):
MyTreeWidget.__init__(self, parent, self.create_menu, [ _('Address'), _('Label'), _('Amount'), _('Height'), _('Output point')], 1)
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.setSortingEnabled(True)
def get_name(self, x):
return x.get('prevout_hash') + ":%d"%x.get('prevout_n')
@ -47,7 +48,7 @@ class UTXOList(MyTreeWidget):
name = self.get_name(x)
label = self.wallet.get_label(x.get('prevout_hash'))
amount = self.parent.format_amount(x['value'], whitespaces=True)
utxo_item = QTreeWidgetItem([address, label, amount, '%d'%height, name[0:10] + '...' + name[-2:]])
utxo_item = SortableTreeWidgetItem([address, label, amount, '%d'%height, name[0:10] + '...' + name[-2:]])
utxo_item.setFont(0, QFont(MONOSPACE_FONT))
utxo_item.setFont(2, QFont(MONOSPACE_FONT))
utxo_item.setFont(4, QFont(MONOSPACE_FONT))