def update(self): # not calling maybe_defer_update() as it interferes with conditional-visibility self.parent.update_receive_address_styling() self.proxy.setDynamicSortFilter( False) # temp. disable re-sorting after every change self.std_model.clear() self.update_headers(self.__class__.headers) for req in self.wallet.get_sorted_requests(): assert isinstance(req, OnchainInvoice) key = req.id status = self.parent.wallet.get_request_status(key) status_str = req.get_status_str(status) request_type = req.type timestamp = req.time amount = req.get_amount_sat() message = req.message date = format_time(timestamp) amount_str = self.parent.format_amount(amount) if amount else "" labels = [date, message, amount_str, status_str] assert isinstance(req, OnchainInvoice) key = req.get_address() icon = read_QIcon("dashcoin.png") tooltip = 'onchain request' items = [QStandardItem(e) for e in labels] self.set_editability(items) items[self.Columns.DATE].setData(request_type, ROLE_REQUEST_TYPE) items[self.Columns.DATE].setData(key, ROLE_KEY) items[self.Columns.DATE].setData(timestamp, ROLE_SORT_ORDER) items[self.Columns.DATE].setIcon(icon) items[self.Columns.STATUS].setIcon(read_QIcon( pr_icons.get(status))) items[self.Columns.DATE].setToolTip(tooltip) self.std_model.insertRow(self.std_model.rowCount(), items) self.filter() self.proxy.setDynamicSortFilter(True) # sort requests by date self.sortByColumn(self.Columns.DATE, Qt.DescendingOrder) # hide list if empty if self.parent.isVisible(): b = self.std_model.rowCount() > 0 self.setVisible(b) self.parent.receive_requests_label.setVisible(b) if not b: # list got hidden, so selected item should also be cleared: self.item_changed(None)
def update(self): # not calling maybe_defer_update() as it interferes with conditional-visibility self.proxy.setDynamicSortFilter( False) # temp. disable re-sorting after every change self.std_model.clear() self.update_headers(self.__class__.headers) for idx, item in enumerate(self.parent.wallet.get_unpaid_invoices()): key = self.parent.wallet.get_key_for_outgoing_invoice(item) invoice_ext = self.parent.wallet.get_invoice_ext(key) icon_name = 'firocoin.png' if item.bip70: icon_name = 'seal.png' status = self.parent.wallet.get_invoice_status(item) status_str = item.get_status_str(status) message = item.message amount = item.get_amount_sat() timestamp = item.time or 0 ps_str = _('PrivateSend') if invoice_ext.is_ps else _('Regular') tx_type = invoice_ext.tx_type type_str = SPEC_TX_NAMES[tx_type] date_str = format_time(timestamp) if timestamp else _('Unknown') amount_str = self.parent.format_amount(amount, whitespaces=True) labels = [ date_str, type_str, message, amount_str, ps_str, status_str ] items = [QStandardItem(e) for e in labels] self.set_editability(items) items[self.Columns.DATE].setIcon(read_QIcon(icon_name)) items[self.Columns.STATUS].setIcon(read_QIcon( pr_icons.get(status))) items[self.Columns.DATE].setData(key, role=ROLE_REQUEST_ID) items[self.Columns.DATE].setData(item.type, role=ROLE_REQUEST_TYPE) items[self.Columns.DATE].setData(timestamp, role=ROLE_SORT_ORDER) items[self.Columns.TX_TYPE].setData(type_str, role=ROLE_SORT_ORDER) items[self.Columns.IS_PS].setData(ps_str, role=ROLE_SORT_ORDER) self.std_model.insertRow(idx, items) self.filter() self.proxy.setDynamicSortFilter(True) # sort requests by date self.sortByColumn(self.Columns.DATE, Qt.DescendingOrder) # hide list if empty if self.parent.isVisible(): b = self.std_model.rowCount() > 0 self.setVisible(b) self.parent.invoices_label.setVisible(b)
def data(self, index: QModelIndex, role: Qt.ItemDataRole) -> QVariant: assert index.isValid() col = index.column() coin_item = index.internalPointer() address = coin_item['address'] is_frozen_addr = coin_item['is_frozen_addr'] is_frozen_coin = coin_item['is_frozen_coin'] height = coin_item['height'] time_str = '' if self.view.config.get('show_utxo_time', False): prevout_timestamp = coin_item['prevout_timestamp'] time_str = (format_time(prevout_timestamp) if prevout_timestamp < math.inf else _('unknown')) outpoint = coin_item['outpoint'] out_short = coin_item['out_short'] label = coin_item['label'] balance = coin_item['balance'] # ps_rounds = coin_item['ps_rounds'] # is_ps_ks = coin_item['is_ps_ks'] # if ps_rounds is None: # ps_rounds = 'N/A' # elif ps_rounds == PSCoinRounds.COLLATERAL: # ps_rounds = 'Collateral' # elif ps_rounds == PSCoinRounds.OTHER: # ps_rounds = 'Other' # else: # ps_rounds = str(ps_rounds) if (role == self.view.ROLE_CLIPBOARD_DATA and col == UTXOColumns.OUTPOINT): return QVariant(outpoint) elif role == Qt.ToolTipRole: if col == UTXOColumns.ADDRESS and is_frozen_addr: return QVariant(_('Address is frozen')) elif col == UTXOColumns.OUTPOINT and is_frozen_coin: return QVariant(f'{outpoint}\n{_("Coin is frozen")}') elif outpoint in (self.view._spend_set or set()): if col == UTXOColumns.OUTPOINT: return QVariant(f'{outpoint}\n{SELECTED_TO_SPEND_TOOLTIP}') else: return QVariant(SELECTED_TO_SPEND_TOOLTIP) elif col == UTXOColumns.OUTPOINT: return QVariant(outpoint) elif role not in (Qt.DisplayRole, Qt.EditRole): if role == Qt.TextAlignmentRole: if col in [UTXOColumns.AMOUNT, UTXOColumns.HEIGHT]: return QVariant(Qt.AlignRight | Qt.AlignVCenter) else: return QVariant(Qt.AlignVCenter) elif role == Qt.FontRole: return QVariant(QFont(MONOSPACE_FONT)) elif role == Qt.BackgroundRole: if col == UTXOColumns.ADDRESS and is_frozen_addr: return QVariant(ColorScheme.BLUE.as_color(True)) elif col == UTXOColumns.OUTPOINT and is_frozen_coin: return QVariant(ColorScheme.BLUE.as_color(True)) elif outpoint in (self.view._spend_set or set()): return QVariant(ColorScheme.GREEN.as_color(True)) elif col == UTXOColumns.DATE: return QVariant(time_str) elif col == UTXOColumns.OUTPOINT: return QVariant(out_short) elif col == UTXOColumns.ADDRESS: return QVariant(address) elif col == UTXOColumns.LABEL: return QVariant(label) elif col == UTXOColumns.AMOUNT: return QVariant(balance) elif col == UTXOColumns.HEIGHT: return QVariant(height) # elif col == UTXOColumns.PS_ROUNDS: # return QVariant(ps_rounds) # elif col == UTXOColumns.KEYSTORE_TYPE: # return QVariant(_('PS Keystore') if is_ps_ks else _('Main')) else: return QVariant()