mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-03 20:35:13 +00:00
make qt HistoryList.on_update() faster by caching icons
This commit is contained in:
parent
eb4463063f
commit
2f408e5d07
4 changed files with 20 additions and 7 deletions
|
@ -235,7 +235,7 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
|
||||||
label = tx_item['label']
|
label = tx_item['label']
|
||||||
status, status_str = self.wallet.get_tx_status(tx_hash, height, conf, timestamp)
|
status, status_str = self.wallet.get_tx_status(tx_hash, height, conf, timestamp)
|
||||||
has_invoice = self.wallet.invoices.paid.get(tx_hash)
|
has_invoice = self.wallet.invoices.paid.get(tx_hash)
|
||||||
icon = QIcon(":icons/" + TX_ICONS[status])
|
icon = self.icon_cache.get(":icons/" + TX_ICONS[status])
|
||||||
v_str = self.parent.format_amount(value, True, whitespaces=True)
|
v_str = self.parent.format_amount(value, True, whitespaces=True)
|
||||||
balance_str = self.parent.format_amount(balance, whitespaces=True)
|
balance_str = self.parent.format_amount(balance, whitespaces=True)
|
||||||
entry = ['', tx_hash, status_str, label, v_str, balance_str]
|
entry = ['', tx_hash, status_str, label, v_str, balance_str]
|
||||||
|
@ -253,7 +253,7 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
|
||||||
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))
|
item.setData(0, SortableTreeWidgetItem.DataRole, (status, conf))
|
||||||
if has_invoice:
|
if has_invoice:
|
||||||
item.setIcon(3, QIcon(":icons/seal"))
|
item.setIcon(3, self.icon_cache.get(":icons/seal"))
|
||||||
for i in range(len(entry)):
|
for i in range(len(entry)):
|
||||||
if i>3:
|
if i>3:
|
||||||
item.setTextAlignment(i, Qt.AlignRight | Qt.AlignVCenter)
|
item.setTextAlignment(i, Qt.AlignRight | Qt.AlignVCenter)
|
||||||
|
@ -302,7 +302,7 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
|
||||||
|
|
||||||
def update_item(self, tx_hash, height, conf, timestamp):
|
def update_item(self, tx_hash, height, conf, timestamp):
|
||||||
status, status_str = self.wallet.get_tx_status(tx_hash, height, conf, timestamp)
|
status, status_str = self.wallet.get_tx_status(tx_hash, height, conf, timestamp)
|
||||||
icon = QIcon(":icons/" + TX_ICONS[status])
|
icon = self.icon_cache.get(":icons/" + TX_ICONS[status])
|
||||||
items = self.findItems(tx_hash, Qt.UserRole|Qt.MatchContains|Qt.MatchRecursive, column=1)
|
items = self.findItems(tx_hash, Qt.UserRole|Qt.MatchContains|Qt.MatchRecursive, column=1)
|
||||||
if items:
|
if items:
|
||||||
item = items[0]
|
item = items[0]
|
||||||
|
@ -347,7 +347,7 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
|
||||||
if child_tx:
|
if child_tx:
|
||||||
menu.addAction(_("Child pays for parent"), lambda: self.parent.cpfp(tx, child_tx))
|
menu.addAction(_("Child pays for parent"), lambda: self.parent.cpfp(tx, child_tx))
|
||||||
if pr_key:
|
if pr_key:
|
||||||
menu.addAction(QIcon(":icons/seal"), _("View invoice"), lambda: self.parent.show_invoice(pr_key))
|
menu.addAction(self.icon_cache.get(":icons/seal"), _("View invoice"), lambda: self.parent.show_invoice(pr_key))
|
||||||
if tx_URL:
|
if tx_URL:
|
||||||
menu.addAction(_("View on block explorer"), lambda: webbrowser.open(tx_URL))
|
menu.addAction(_("View on block explorer"), lambda: webbrowser.open(tx_URL))
|
||||||
menu.exec_(self.viewport().mapToGlobal(position))
|
menu.exec_(self.viewport().mapToGlobal(position))
|
||||||
|
|
|
@ -48,7 +48,7 @@ class InvoiceList(MyTreeWidget):
|
||||||
exp = pr.get_expiration_date()
|
exp = pr.get_expiration_date()
|
||||||
date_str = format_time(exp) if exp else _('Never')
|
date_str = format_time(exp) if exp else _('Never')
|
||||||
item = QTreeWidgetItem([date_str, requestor, pr.memo, self.parent.format_amount(pr.get_amount(), whitespaces=True), pr_tooltips.get(status,'')])
|
item = QTreeWidgetItem([date_str, requestor, pr.memo, self.parent.format_amount(pr.get_amount(), whitespaces=True), pr_tooltips.get(status,'')])
|
||||||
item.setIcon(4, QIcon(pr_icons.get(status)))
|
item.setIcon(4, self.icon_cache.get(pr_icons.get(status)))
|
||||||
item.setData(0, Qt.UserRole, key)
|
item.setData(0, Qt.UserRole, key)
|
||||||
item.setFont(1, QFont(MONOSPACE_FONT))
|
item.setFont(1, QFont(MONOSPACE_FONT))
|
||||||
item.setFont(3, QFont(MONOSPACE_FONT))
|
item.setFont(3, QFont(MONOSPACE_FONT))
|
||||||
|
|
|
@ -98,10 +98,10 @@ class RequestList(MyTreeWidget):
|
||||||
amount_str = self.parent.format_amount(amount) if amount else ""
|
amount_str = self.parent.format_amount(amount) if amount else ""
|
||||||
item = QTreeWidgetItem([date, address, '', message, amount_str, pr_tooltips.get(status,'')])
|
item = QTreeWidgetItem([date, address, '', message, amount_str, pr_tooltips.get(status,'')])
|
||||||
if signature is not None:
|
if signature is not None:
|
||||||
item.setIcon(2, QIcon(":icons/seal.png"))
|
item.setIcon(2, self.icon_cache.get(":icons/seal.png"))
|
||||||
item.setToolTip(2, 'signed by '+ requestor)
|
item.setToolTip(2, 'signed by '+ requestor)
|
||||||
if status is not PR_UNKNOWN:
|
if status is not PR_UNKNOWN:
|
||||||
item.setIcon(6, QIcon(pr_icons.get(status)))
|
item.setIcon(6, self.icon_cache.get(pr_icons.get(status)))
|
||||||
self.addTopLevelItem(item)
|
self.addTopLevelItem(item)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -393,6 +393,8 @@ class MyTreeWidget(QTreeWidget):
|
||||||
self.addChild = self.addTopLevelItem
|
self.addChild = self.addTopLevelItem
|
||||||
self.insertChild = self.insertTopLevelItem
|
self.insertChild = self.insertTopLevelItem
|
||||||
|
|
||||||
|
self.icon_cache = IconCache()
|
||||||
|
|
||||||
# Control which columns are editable
|
# Control which columns are editable
|
||||||
self.editor = None
|
self.editor = None
|
||||||
self.pending_update = False
|
self.pending_update = False
|
||||||
|
@ -779,6 +781,17 @@ class SortableTreeWidgetItem(QTreeWidgetItem):
|
||||||
return self.text(column) < other.text(column)
|
return self.text(column) < other.text(column)
|
||||||
|
|
||||||
|
|
||||||
|
class IconCache:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.__cache = {}
|
||||||
|
|
||||||
|
def get(self, file_name):
|
||||||
|
if file_name not in self.__cache:
|
||||||
|
self.__cache[file_name] = QIcon(file_name)
|
||||||
|
return self.__cache[file_name]
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app = QApplication([])
|
app = QApplication([])
|
||||||
t = WaitingDialog(None, 'testing ...', lambda: [time.sleep(1)], lambda x: QMessageBox.information(None, 'done', "done"))
|
t = WaitingDialog(None, 'testing ...', lambda: [time.sleep(1)], lambda x: QMessageBox.information(None, 'done', "done"))
|
||||||
|
|
Loading…
Add table
Reference in a new issue