Enable sorting of list widgets
This commit is contained in:
parent
b2c7d2d2cc
commit
3965176295
@ -39,6 +39,7 @@ class AddressList(MyTreeWidget):
|
|||||||
MyTreeWidget.__init__(self, parent, self.create_menu, [], 2)
|
MyTreeWidget.__init__(self, parent, self.create_menu, [], 2)
|
||||||
self.refresh_headers()
|
self.refresh_headers()
|
||||||
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
||||||
|
self.setSortingEnabled(True)
|
||||||
self.show_change = 0
|
self.show_change = 0
|
||||||
self.show_used = 0
|
self.show_used = 0
|
||||||
self.change_button = QComboBox(self)
|
self.change_button = QComboBox(self)
|
||||||
@ -109,11 +110,11 @@ class AddressList(MyTreeWidget):
|
|||||||
if fx and fx.get_fiat_address_config():
|
if fx and fx.get_fiat_address_config():
|
||||||
rate = fx.exchange_rate()
|
rate = fx.exchange_rate()
|
||||||
fiat_balance = fx.value_str(balance, 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.setTextAlignment(4, Qt.AlignRight)
|
||||||
address_item.setFont(4, QFont(MONOSPACE_FONT))
|
address_item.setFont(4, QFont(MONOSPACE_FONT))
|
||||||
else:
|
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))
|
address_item.setFont(3, QFont(MONOSPACE_FONT))
|
||||||
if self.wallet.is_change(address):
|
if self.wallet.is_change(address):
|
||||||
address_item.setText(0, _('change'))
|
address_item.setText(0, _('change'))
|
||||||
|
|||||||
@ -59,6 +59,8 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
|
|||||||
AcceptFileDragDrop.__init__(self, ".txn")
|
AcceptFileDragDrop.__init__(self, ".txn")
|
||||||
self.refresh_headers()
|
self.refresh_headers()
|
||||||
self.setColumnHidden(1, True)
|
self.setColumnHidden(1, True)
|
||||||
|
self.setSortingEnabled(True)
|
||||||
|
self.sortByColumn(0, Qt.AscendingOrder)
|
||||||
self.start_timestamp = None
|
self.start_timestamp = None
|
||||||
self.end_timestamp = None
|
self.end_timestamp = None
|
||||||
self.years = []
|
self.years = []
|
||||||
@ -243,9 +245,10 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
|
|||||||
if value < 0:
|
if value < 0:
|
||||||
entry.append(fx.format_fiat(tx_item['acquisition_price'].value))
|
entry.append(fx.format_fiat(tx_item['acquisition_price'].value))
|
||||||
entry.append(fx.format_fiat(tx_item['capital_gain'].value))
|
entry.append(fx.format_fiat(tx_item['capital_gain'].value))
|
||||||
item = QTreeWidgetItem(entry)
|
item = SortableTreeWidgetItem(entry)
|
||||||
item.setIcon(0, icon)
|
item.setIcon(0, icon)
|
||||||
item.setToolTip(0, str(conf) + " confirmation" + ("s" if conf != 1 else ""))
|
item.setToolTip(0, str(conf) + " confirmation" + ("s" if conf != 1 else ""))
|
||||||
|
item.setData(0, SortableTreeWidgetItem.DataRole, (status, conf))
|
||||||
if has_invoice:
|
if has_invoice:
|
||||||
item.setIcon(3, QIcon(":icons/seal"))
|
item.setIcon(3, QIcon(":icons/seal"))
|
||||||
for i in range(len(entry)):
|
for i in range(len(entry)):
|
||||||
@ -301,6 +304,7 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
|
|||||||
if items:
|
if items:
|
||||||
item = items[0]
|
item = items[0]
|
||||||
item.setIcon(0, icon)
|
item.setIcon(0, icon)
|
||||||
|
item.setData(0, SortableTreeWidgetItem.DataRole, (status, conf))
|
||||||
item.setText(2, status_str)
|
item.setText(2, status_str)
|
||||||
|
|
||||||
def create_menu(self, position):
|
def create_menu(self, position):
|
||||||
|
|||||||
@ -763,6 +763,21 @@ def get_parent_main_window(widget):
|
|||||||
return widget
|
return widget
|
||||||
return None
|
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__":
|
if __name__ == "__main__":
|
||||||
app = QApplication([])
|
app = QApplication([])
|
||||||
|
|||||||
@ -32,6 +32,7 @@ class UTXOList(MyTreeWidget):
|
|||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
MyTreeWidget.__init__(self, parent, self.create_menu, [ _('Address'), _('Label'), _('Amount'), _('Height'), _('Output point')], 1)
|
MyTreeWidget.__init__(self, parent, self.create_menu, [ _('Address'), _('Label'), _('Amount'), _('Height'), _('Output point')], 1)
|
||||||
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
||||||
|
self.setSortingEnabled(True)
|
||||||
|
|
||||||
def get_name(self, x):
|
def get_name(self, x):
|
||||||
return x.get('prevout_hash') + ":%d"%x.get('prevout_n')
|
return x.get('prevout_hash') + ":%d"%x.get('prevout_n')
|
||||||
@ -47,7 +48,7 @@ class UTXOList(MyTreeWidget):
|
|||||||
name = self.get_name(x)
|
name = self.get_name(x)
|
||||||
label = self.wallet.get_label(x.get('prevout_hash'))
|
label = self.wallet.get_label(x.get('prevout_hash'))
|
||||||
amount = self.parent.format_amount(x['value'], whitespaces=True)
|
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(0, QFont(MONOSPACE_FONT))
|
||||||
utxo_item.setFont(2, QFont(MONOSPACE_FONT))
|
utxo_item.setFont(2, QFont(MONOSPACE_FONT))
|
||||||
utxo_item.setFont(4, QFont(MONOSPACE_FONT))
|
utxo_item.setFont(4, QFont(MONOSPACE_FONT))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user