コード例 #1
0
ファイル: payment.py プロジェクト: twetch-inc/electrumsv
    def __init__(self, form_context, parent=None):
        super().__init__(parent)
        self._form_context = form_context

        self.setObjectName("FundsSelector")

        balance = form_context.wallet_api.get_balance()
        sv_text, fiat_text = form_context.wallet_api.get_amount_and_units(balance)

        if fiat_text:
            column_count = 3
        else:
            column_count = 2
        model = QStandardItemModel(1, 3, self)
        model.setItem(0, 0, QStandardItem(_("All available funds")))
        sv_item = QStandardItem(sv_text)
        sv_item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter)
        model.setItem(0, 1, sv_item)
        if fiat_text:
            fiat_item = QStandardItem(fiat_text)
            fiat_item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter)
            model.setItem(0, 2, fiat_item)

        tableView = QTableView(self)
        tableView.setObjectName("FundsSelectionPopup")
        tableView.setWordWrap(False)
        tableView.setModel(model)
        tableView.verticalHeader().setVisible(False)
        tableView.horizontalHeader().setVisible(False)
        tableView.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
        tableView.setAutoScroll(False)
        tableView.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
        # Show more compact rows, this will actually be larger forced out by the contents to be
        # just the necessary size.
        tableView.setRowHeight(0, 20)

        combo = QComboBox()
        combo.setObjectName("FundsSelectorCombo")
        combo.setModel(model)
        combo.setView(tableView)
        combo.setMinimumWidth(300)

        # Detect when the combobox popup view is shown by rebinding and wrapping the method.
        def _new_showPopup(_self: QTableView) -> None:
            nonlocal old_showPopup, tableView
            old_showPopup()
            tableView.resizeColumnsToContents()

        old_showPopup = combo.showPopup
        setattr(combo, "showPopup", _new_showPopup.__get__(combo, combo.__class__))

        hlayout1 = QHBoxLayout()
        hlayout1.setSpacing(0)
        hlayout1.setContentsMargins(0, 0, 0, 2)
        hlayout1.addWidget(combo, 1)

        hlayout2 = QHBoxLayout()
        hlayout2.setSpacing(0)
        hlayout2.setContentsMargins(0, 2, 0, 0)
        balance_icon_label = QLabel("")
        balance_icon_label.setPixmap(QPixmap(icon_path("sb_balance.png")))
        balance_icon_label.setToolTip(_("The balance of the selected account."))
        hlayout2.addWidget(balance_icon_label)
        hlayout2.addSpacing(4)
        sv_balance = QLineEdit(sv_text)
        sv_balance.balance_currency = form_context.wallet_api.get_base_unit()
        sv_balance.balance_amount = form_context.wallet_api.get_base_amount(balance)
        sv_balance.setAlignment(Qt.AlignHCenter)
        sv_balance.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
        sv_balance.setReadOnly(True)
        hlayout2.addWidget(sv_balance)
        if fiat_text:
            hlayout2.addSpacing(2)
            balance_equals_label = QLabel("")
            balance_equals_label.setPixmap(QPixmap(icon_path("sb_approximate")))
            hlayout2.addWidget(balance_equals_label)
            hlayout2.addSpacing(2)
            fiat_balance = QLineEdit(fiat_text)
            fiat_balance.balance_currency = form_context.wallet_api.get_fiat_unit()
            fiat_balance.balance_amount = form_context.wallet_api.get_fiat_amount(balance)
            fiat_balance.setAlignment(Qt.AlignHCenter)
            fiat_balance.setReadOnly(True)
            hlayout2.addWidget(fiat_balance)
        else:
            fiat_balance = None

        vlayout = QVBoxLayout()
        vlayout.setSpacing(0)
        vlayout.setContentsMargins(0, 0, 0, 0)
        vlayout.addLayout(hlayout1)
        vlayout.addLayout(hlayout2)
        self.setLayout(vlayout)

        self._sv_balance = sv_balance
        self._fiat_balance = fiat_balance

        sv_balance.installEventFilter(self)
        fiat_balance.installEventFilter(self)