From 7343d69ed713a2855544b5526829b44390b45dd0 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Tue, 11 Mar 2025 15:45:26 +0000 Subject: [PATCH] qt/fee_slider: add type hints, small API change, qt parenting --- electrum/gui/qt/confirm_tx_dialog.py | 2 +- electrum/gui/qt/fee_slider.py | 26 +++++++++++++++++--------- electrum/gui/qt/main_window.py | 2 +- electrum/gui/qt/swap_dialog.py | 2 +- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/electrum/gui/qt/confirm_tx_dialog.py b/electrum/gui/qt/confirm_tx_dialog.py index 9dee64d38..970aa7cc2 100644 --- a/electrum/gui/qt/confirm_tx_dialog.py +++ b/electrum/gui/qt/confirm_tx_dialog.py @@ -182,7 +182,7 @@ class TxEditor(WindowModalDialog): self.feerate_e.textChanged.connect(self.entry_changed) self.fee_target = QLabel('') - self.fee_slider = FeeSlider(self, self.fee_policy, self.fee_slider_callback) + self.fee_slider = FeeSlider(parent=self, network=self.network, fee_policy=self.fee_policy, callback=self.fee_slider_callback) self.fee_combo = FeeComboBox(self.fee_slider) self.fee_combo.setFocusPolicy(Qt.FocusPolicy.NoFocus) diff --git a/electrum/gui/qt/fee_slider.py b/electrum/gui/qt/fee_slider.py index 6faa57c9e..1f407f233 100644 --- a/electrum/gui/qt/fee_slider.py +++ b/electrum/gui/qt/fee_slider.py @@ -1,16 +1,18 @@ import threading +from typing import Callable, Optional from PyQt6.QtGui import QCursor from PyQt6.QtCore import Qt -from PyQt6.QtWidgets import QSlider, QToolTip, QComboBox +from PyQt6.QtWidgets import QSlider, QToolTip, QComboBox, QWidget from electrum.i18n import _ -from electrum.fee_policy import FeeMethod +from electrum.fee_policy import FeeMethod, FeePolicy +from electrum.network import Network class FeeComboBox(QComboBox): - def __init__(self, fee_slider): + def __init__(self, fee_slider: 'FeeSlider'): QComboBox.__init__(self) self.fee_slider = fee_slider self.addItems([x.name_for_GUI() for x in FeeMethod.slider_values()]) @@ -32,10 +34,16 @@ class FeeComboBox(QComboBox): class FeeSlider(QSlider): - def __init__(self, window, fee_policy, callback): - QSlider.__init__(self, Qt.Orientation.Horizontal) - self.window = window - self.network = window.network + def __init__( + self, + *, + parent: Optional[QWidget], + network: Network, + fee_policy: FeePolicy, + callback: Callable[[Optional[int]], None], + ): + QSlider.__init__(self, Qt.Orientation.Horizontal, parent=parent) + self.network = network self.callback = callback self.fee_policy = fee_policy self.lock = threading.RLock() @@ -44,10 +52,10 @@ class FeeSlider(QSlider): self._active = True @property - def dyn(self): + def dyn(self) -> bool: return self.fee_policy.use_dynamic_estimates - def get_policy(self): + def get_policy(self) -> FeePolicy: return self.fee_policy def moved(self, pos): diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 47000ae42..92a9a36a2 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -2704,7 +2704,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger, QtEventListener): def on_rate(fee_rate): fee = get_child_fee_from_total_feerate(fee_rate) fee_e.setAmount(fee) - fee_slider = FeeSlider(self, fee_policy, on_rate) + fee_slider = FeeSlider(parent=self, network=self.network, fee_policy=fee_policy, callback=on_rate) fee_combo = FeeComboBox(fee_slider) fee_slider.update() grid.addWidget(fee_slider, 4, 1) diff --git a/electrum/gui/qt/swap_dialog.py b/electrum/gui/qt/swap_dialog.py index bb7214a70..5f4744e43 100644 --- a/electrum/gui/qt/swap_dialog.py +++ b/electrum/gui/qt/swap_dialog.py @@ -78,7 +78,7 @@ class SwapDialog(WindowModalDialog, QtEventListener): self.recv_amount_e.setEnabled(recv_amount_sat is None) self.max_button.setEnabled(recv_amount_sat is None) self.fee_policy = FeePolicy(self.config.FEE_POLICY) - fee_slider = FeeSlider(self.window, self.fee_policy, self.fee_slider_callback) + fee_slider = FeeSlider(parent=self, network=self.network, fee_policy=self.fee_policy, callback=self.fee_slider_callback) fee_combo = FeeComboBox(fee_slider) fee_slider.update() self.fee_label = QLabel()