electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 84326cf1f78f60201e5bac44ff306c240147adde
parent 6fda9add2825bf6449f891e79c61988e76964fd2
Author: SomberNight <somber.night@protonmail.com>
Date:   Thu, 25 Feb 2021 18:54:55 +0100

qt tx dialog: add legend for input/output colouring

based on https://github.com/Electron-Cash/Electron-Cash/commit/e1d70bcd98de8ae48f01b63f50660edb364fe0d0

Diffstat:
Melectrum/gui/qt/transaction_dialog.py | 73+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 59 insertions(+), 14 deletions(-)

diff --git a/electrum/gui/qt/transaction_dialog.py b/electrum/gui/qt/transaction_dialog.py @@ -53,7 +53,7 @@ from .util import (MessageBoxMixin, read_QIcon, Buttons, icon_path, char_width_in_lineedit, TRANSACTION_FILE_EXTENSION_FILTER_SEPARATE, TRANSACTION_FILE_EXTENSION_FILTER_ONLY_COMPLETE_TX, TRANSACTION_FILE_EXTENSION_FILTER_ONLY_PARTIAL_TX, - BlockingWaitingDialog, getSaveFileName) + BlockingWaitingDialog, getSaveFileName, ColorSchemeItem) from .fee_slider import FeeSlider, FeeComboBox from .confirm_tx_dialog import TxEditor @@ -131,10 +131,27 @@ class BaseTxDialog(QDialog, MessageBoxMixin): vbox.addWidget(self.inputs_header) self.inputs_textedit = QTextEditWithDefaultSize() vbox.addWidget(self.inputs_textedit) + + self.txo_color_recv = TxOutputColoring( + legend=_("Receiving Address"), color=ColorScheme.GREEN, tooltip=_("Wallet receive address")) + self.txo_color_change = TxOutputColoring( + legend=_("Change Address"), color=ColorScheme.YELLOW, tooltip=_("Wallet change address")) + self.txo_color_2fa = TxOutputColoring( + legend=_("TrustedCoin (2FA) batch fee"), color=ColorScheme.BLUE, tooltip=_("TrustedCoin (2FA) fee for the next batch of transactions")) + + outheader_hbox = QHBoxLayout() + outheader_hbox.setContentsMargins(0, 0, 0, 0) + vbox.addLayout(outheader_hbox) self.outputs_header = QLabel() - vbox.addWidget(self.outputs_header) + outheader_hbox.addWidget(self.outputs_header) + outheader_hbox.addStretch(2) + outheader_hbox.addWidget(self.txo_color_recv.legend_label) + outheader_hbox.addWidget(self.txo_color_change.legend_label) + outheader_hbox.addWidget(self.txo_color_2fa.legend_label) + self.outputs_textedit = QTextEditWithDefaultSize() vbox.addWidget(self.outputs_textedit) + self.sign_button = b = QPushButton(_("Sign")) b.clicked.connect(self.sign) @@ -531,22 +548,21 @@ class BaseTxDialog(QDialog, MessageBoxMixin): if selected_coins is not None: inputs_header_text += f" - " + _("Coin selection active ({} UTXOs selected)").format(len(selected_coins)) self.inputs_header.setText(inputs_header_text) - ext = QTextCharFormat() - rec = QTextCharFormat() - rec.setBackground(QBrush(ColorScheme.GREEN.as_color(background=True))) - rec.setToolTip(_("Wallet receive address")) - chg = QTextCharFormat() - chg.setBackground(QBrush(ColorScheme.YELLOW.as_color(background=True))) - chg.setToolTip(_("Wallet change address")) - twofactor = QTextCharFormat() - twofactor.setBackground(QBrush(ColorScheme.BLUE.as_color(background=True))) - twofactor.setToolTip(_("TrustedCoin (2FA) fee for the next batch of transactions")) + ext = QTextCharFormat() + tf_used_recv, tf_used_change, tf_used_2fa = False, False, False def text_format(addr): + nonlocal tf_used_recv, tf_used_change, tf_used_2fa if self.wallet.is_mine(addr): - return chg if self.wallet.is_change(addr) else rec + if self.wallet.is_change(addr): + tf_used_change = True + return self.txo_color_change.text_char_format + else: + tf_used_recv = True + return self.txo_color_recv.text_char_format elif self.wallet.is_billing_address(addr): - return twofactor + tf_used_2fa = True + return self.txo_color_2fa.text_char_format return ext def format_amount(amt): @@ -587,6 +603,10 @@ class BaseTxDialog(QDialog, MessageBoxMixin): cursor.insertText(format_amount(v), ext) cursor.insertBlock() + self.txo_color_recv.legend_label.setVisible(tf_used_recv) + self.txo_color_change.legend_label.setVisible(tf_used_change) + self.txo_color_2fa.legend_label.setVisible(tf_used_2fa) + def add_tx_stats(self, vbox): hbox_stats = QHBoxLayout() @@ -690,6 +710,31 @@ class TxDetailLabel(QLabel): self.setWordWrap(word_wrap) +class TxOutputColoring: + # used for both inputs and outputs + + def __init__( + self, + *, + legend: str, + color: ColorSchemeItem, + tooltip: str, + ): + self.color = color.as_color(background=True) + self.legend_label = QLabel("<font color={color}>{box_char}</font> = {label}".format( + color=self.color.name(), + box_char="█", + label=legend, + )) + font = self.legend_label.font() + font.setPointSize(font.pointSize() - 1) + self.legend_label.setFont(font) + self.legend_label.setVisible(False) + self.text_char_format = QTextCharFormat() + self.text_char_format.setBackground(QBrush(self.color)) + self.text_char_format.setToolTip(tooltip) + + class TxDialog(BaseTxDialog): def __init__(self, tx: Transaction, *, parent: 'ElectrumWindow', desc, prompt_if_unsaved): BaseTxDialog.__init__(self, parent=parent, desc=desc, prompt_if_unsaved=prompt_if_unsaved, finalized=True)