def on_update(self): self.wallet = self.parent.wallet h = self.wallet.get_history(self.get_domain()) item = self.currentItem() current_tx = item.data(0, Qt.UserRole).toString() if item else None self.clear() run_hook('history_tab_update_begin') for tx in h: tx_hash, conf, value, timestamp, balance = tx if conf is None and timestamp is None: continue # skip history in offline mode icon, time_str = self.get_icon(conf, timestamp) v_str = self.parent.format_amount(value, True, whitespaces=True) balance_str = self.parent.format_amount(balance, whitespaces=True) label, is_default_label = self.wallet.get_label(tx_hash) entry = ['', tx_hash, time_str, label, v_str, balance_str] run_hook('history_tab_update', tx, entry) item = QTreeWidgetItem(entry) item.setIcon(0, icon) for i in range(len(entry)): if i>3: item.setTextAlignment(i, Qt.AlignRight) if i!=2: item.setFont(i, QFont(MONOSPACE_FONT)) if value < 0: item.setForeground(4, QBrush(QColor("#BC1E1E"))) if tx_hash: item.setData(0, Qt.UserRole, tx_hash) if is_default_label: item.setForeground(3, QBrush(QColor('grey'))) self.insertTopLevelItem(0, item) if current_tx == tx_hash: self.setCurrentItem(item)
def get_history_rate(self, btc_balance, timestamp): date = timestamp_to_datetime(timestamp) return run_hook('historical_value_str', btc_balance, date)
def __init__(self, tx, parent, desc, prompt_if_unsaved): '''Transactions in the wallet will show their description. Pass desc to give a description for txs not yet in the wallet. ''' self.tx = tx self.tx.deserialize() self.parent = parent self.wallet = parent.wallet self.prompt_if_unsaved = prompt_if_unsaved self.saved = False self.broadcast = False self.desc = desc QDialog.__init__(self) self.setMinimumWidth(600) self.setWindowTitle(_("Transaction")) vbox = QVBoxLayout() self.setLayout(vbox) vbox.addWidget(QLabel(_("Transaction ID:"))) self.tx_hash_e = ButtonsLineEdit() qr_show = lambda: self.parent.show_qrcode(str(self.tx_hash_e.text()), 'Transaction ID') self.tx_hash_e.addButton(":icons/qrcode.png", qr_show, _("Show as QR code")) self.tx_hash_e.setReadOnly(True) vbox.addWidget(self.tx_hash_e) self.status_label = QLabel() vbox.addWidget(self.status_label) self.tx_desc = QLabel() vbox.addWidget(self.tx_desc) self.date_label = QLabel() vbox.addWidget(self.date_label) self.amount_label = QLabel() vbox.addWidget(self.amount_label) self.fee_label = QLabel() vbox.addWidget(self.fee_label) self.add_io(vbox) vbox.addStretch(1) self.sign_button = b = QPushButton(_("Sign")) b.clicked.connect(self.sign) self.broadcast_button = b = QPushButton(_("Broadcast")) b.clicked.connect(self.do_broadcast) self.save_button = b = QPushButton(_("Save")) b.clicked.connect(self.save) self.cancel_button = b = QPushButton(_("Close")) b.clicked.connect(self.close) b.setDefault(True) self.qr_button = b = QPushButton() b.setIcon(QIcon(":icons/qrcode.png")) b.clicked.connect(self.show_qr) self.copy_button = CopyButton(lambda: str(self.tx), self.parent.app) # Action buttons self.buttons = [ self.sign_button, self.broadcast_button, self.cancel_button ] # Transaction sharing buttons self.sharing_buttons = [ self.copy_button, self.qr_button, self.save_button ] run_hook('transaction_dialog', self) hbox = QHBoxLayout() hbox.addLayout(Buttons(*self.sharing_buttons)) hbox.addStretch(1) hbox.addLayout(Buttons(*self.buttons)) vbox.addLayout(hbox) self.update()
def update(self): is_relevant, is_mine, v, fee = self.wallet.get_wallet_delta(self.tx) tx_hash = self.tx.hash() desc = self.desc time_str = None self.broadcast_button.hide() if self.tx.is_complete(): status = _("Signed") if tx_hash in self.wallet.transactions.keys(): desc, is_default = self.wallet.get_label(tx_hash) conf, timestamp = self.wallet.get_confirmations(tx_hash) if timestamp: time_str = datetime.datetime.fromtimestamp( timestamp).isoformat(' ')[:-3] else: time_str = _('Pending') status = _("%d confirmations") % conf else: self.broadcast_button.show() # cannot broadcast when offline if self.parent.network is None: self.broadcast_button.setEnabled(False) else: s, r = self.tx.signature_count() status = _("Unsigned") if s == 0 else _( 'Partially signed') + ' (%d/%d)' % (s, r) tx_hash = _('Unknown') if self.wallet.can_sign(self.tx): self.sign_button.show() else: self.sign_button.hide() self.tx_hash_e.setText(tx_hash) if desc is None: self.tx_desc.hide() else: self.tx_desc.setText(_("Description") + ': ' + desc) self.tx_desc.show() self.status_label.setText(_('Status:') + ' ' + status) if time_str is not None: self.date_label.setText(_("Date: %s") % time_str) self.date_label.show() else: self.date_label.hide() # if we are not synchronized, we cannot tell if not self.wallet.up_to_date: return if is_relevant: if is_mine: if fee is not None: self.amount_label.setText( _("Amount sent:") + ' %s' % self.parent.format_amount(-v + fee) + ' ' + self.parent.base_unit()) self.fee_label.setText( _("Transaction fee") + ': %s' % self.parent.format_amount(-fee) + ' ' + self.parent.base_unit()) else: self.amount_label.setText( _("Amount sent:") + ' %s' % self.parent.format_amount(-v) + ' ' + self.parent.base_unit()) self.fee_label.setText( _("Transaction fee") + ': ' + _("unknown")) else: self.amount_label.setText( _("Amount received:") + ' %s' % self.parent.format_amount(v) + ' ' + self.parent.base_unit()) else: self.amount_label.setText( _("Transaction unrelated to your wallet")) run_hook('transaction_dialog_update', self)
def refresh_headers(self): headers = ['', '', _('Date'), _('Description') , _('Amount'), _('Balance')] run_hook('history_tab_headers', headers) self.update_headers(headers)
def __init__(self, tx, parent, desc, prompt_if_unsaved): '''Transactions in the wallet will show their description. Pass desc to give a description for txs not yet in the wallet. ''' self.tx = tx self.tx.deserialize() self.parent = parent self.wallet = parent.wallet self.prompt_if_unsaved = prompt_if_unsaved self.saved = False self.broadcast = False self.desc = desc QDialog.__init__(self) self.setMinimumWidth(600) self.setWindowTitle(_("Transaction")) vbox = QVBoxLayout() self.setLayout(vbox) vbox.addWidget(QLabel(_("Transaction ID:"))) self.tx_hash_e = ButtonsLineEdit() qr_show = lambda: self.parent.show_qrcode(str(self.tx_hash_e.text()), 'Transaction ID') self.tx_hash_e.addButton(":icons/qrcode.png", qr_show, _("Show as QR code")) self.tx_hash_e.setReadOnly(True) vbox.addWidget(self.tx_hash_e) self.status_label = QLabel() vbox.addWidget(self.status_label) self.tx_desc = QLabel() vbox.addWidget(self.tx_desc) self.date_label = QLabel() vbox.addWidget(self.date_label) self.amount_label = QLabel() vbox.addWidget(self.amount_label) self.fee_label = QLabel() vbox.addWidget(self.fee_label) self.add_io(vbox) vbox.addStretch(1) self.sign_button = b = QPushButton(_("Sign")) b.clicked.connect(self.sign) self.broadcast_button = b = QPushButton(_("Broadcast")) b.clicked.connect(self.do_broadcast) self.save_button = b = QPushButton(_("Save")) b.clicked.connect(self.save) self.cancel_button = b = QPushButton(_("Close")) b.clicked.connect(self.close) b.setDefault(True) self.qr_button = b = QPushButton() b.setIcon(QIcon(":icons/qrcode.png")) b.clicked.connect(self.show_qr) self.copy_button = CopyButton(lambda: str(self.tx), self.parent.app) # Action buttons self.buttons = [self.sign_button, self.broadcast_button, self.cancel_button] # Transaction sharing buttons self.sharing_buttons = [self.copy_button, self.qr_button, self.save_button] run_hook('transaction_dialog', self) hbox = QHBoxLayout() hbox.addLayout(Buttons(*self.sharing_buttons)) hbox.addStretch(1) hbox.addLayout(Buttons(*self.buttons)) vbox.addLayout(hbox) self.update()
def update(self): is_relevant, is_mine, v, fee = self.wallet.get_wallet_delta(self.tx) tx_hash = self.tx.hash() desc = self.desc time_str = None self.broadcast_button.hide() if self.tx.is_complete(): status = _("Signed") if tx_hash in self.wallet.transactions.keys(): desc, is_default = self.wallet.get_label(tx_hash) conf, timestamp = self.wallet.get_confirmations(tx_hash) if timestamp: time_str = datetime.datetime.fromtimestamp(timestamp).isoformat(' ')[:-3] else: time_str = _('Pending') status = _("%d confirmations")%conf else: self.broadcast_button.show() # cannot broadcast when offline if self.parent.network is None: self.broadcast_button.setEnabled(False) else: s, r = self.tx.signature_count() status = _("Unsigned") if s == 0 else _('Partially signed') + ' (%d/%d)'%(s,r) tx_hash = _('Unknown'); if self.wallet.can_sign(self.tx): self.sign_button.show() else: self.sign_button.hide() self.tx_hash_e.setText(tx_hash) if desc is None: self.tx_desc.hide() else: self.tx_desc.setText(_("Description") + ': ' + desc) self.tx_desc.show() self.status_label.setText(_('Status:') + ' ' + status) if time_str is not None: self.date_label.setText(_("Date: %s")%time_str) self.date_label.show() else: self.date_label.hide() # if we are not synchronized, we cannot tell if not self.wallet.up_to_date: return if is_relevant: if is_mine: if fee is not None: self.amount_label.setText(_("Amount sent:")+' %s'% self.parent.format_amount(-v+fee) + ' ' + self.parent.base_unit()) self.fee_label.setText(_("Transaction fee")+': %s'% self.parent.format_amount(-fee) + ' ' + self.parent.base_unit()) else: self.amount_label.setText(_("Amount sent:")+' %s'% self.parent.format_amount(-v) + ' ' + self.parent.base_unit()) self.fee_label.setText(_("Transaction fee")+': '+ _("unknown")) else: self.amount_label.setText(_("Amount received:")+' %s'% self.parent.format_amount(v) + ' ' + self.parent.base_unit()) else: self.amount_label.setText(_("Transaction unrelated to your wallet")) run_hook('transaction_dialog_update', self)