Browse Source

fix #2614: define non-linear scale for static fees

master
ThomasV 8 years ago
parent
commit
198cc9d737
  1. 9
      gui/kivy/uix/dialogs/fee_dialog.py
  2. 7
      gui/qt/fee_slider.py
  3. 15
      gui/qt/main_window.py
  4. 9
      lib/simple_config.py

9
gui/kivy/uix/dialogs/fee_dialog.py

@ -58,7 +58,6 @@ class FeeDialog(Factory.Popup):
Factory.Popup.__init__(self) Factory.Popup.__init__(self)
self.app = app self.app = app
self.config = config self.config = config
self.fee_step = self.config.max_fee_rate() / 10
self.fee_rate = self.config.fee_per_kb() self.fee_rate = self.config.fee_per_kb()
self.callback = callback self.callback = callback
self.dynfees = self.config.get('dynamic_fees', True) self.dynfees = self.config.get('dynamic_fees', True)
@ -77,9 +76,9 @@ class FeeDialog(Factory.Popup):
slider.step = 1 slider.step = 1
slider.value = self.config.get('fee_level', 2) slider.value = self.config.get('fee_level', 2)
else: else:
slider.range = (1, 10) slider.range = (0, 9)
slider.step = 1 slider.step = 1
slider.value = min(self.fee_rate / self.fee_step, 10) slider.value = self.config.static_fee_index(self.fee_rate)
def get_fee_text(self, value): def get_fee_text(self, value):
if self.ids.dynfees.active: if self.ids.dynfees.active:
@ -88,7 +87,7 @@ class FeeDialog(Factory.Popup):
dynfee = self.config.dynfee(value) dynfee = self.config.dynfee(value)
tooltip += '\n' + (self.app.format_amount_and_units(dynfee)) + '/kB' tooltip += '\n' + (self.app.format_amount_and_units(dynfee)) + '/kB'
else: else:
fee_rate = value * self.fee_step fee_rate = self.config.static_fee(value)
tooltip = self.app.format_amount_and_units(fee_rate) + '/kB' tooltip = self.app.format_amount_and_units(fee_rate) + '/kB'
if self.config.has_fee_estimates(): if self.config.has_fee_estimates():
i = self.config.reverse_dynfee(fee_rate) i = self.config.reverse_dynfee(fee_rate)
@ -101,7 +100,7 @@ class FeeDialog(Factory.Popup):
if self.dynfees: if self.dynfees:
self.config.set_key('fee_level', value, True) self.config.set_key('fee_level', value, True)
else: else:
self.config.set_key('fee_per_kb', value * self.fee_step, True) self.config.set_key('fee_per_kb', self.config.static_fee(value), True)
self.callback() self.callback()
def on_slider(self, value): def on_slider(self, value):

7
gui/qt/fee_slider.py

@ -28,7 +28,7 @@ class FeeSlider(QSlider):
def moved(self, pos): def moved(self, pos):
with self.lock: with self.lock:
fee_rate = self.config.dynfee(pos) if self.dyn else pos * self.fee_step fee_rate = self.config.dynfee(pos) if self.dyn else self.config.static_fee(pos)
tooltip = self.get_tooltip(pos, fee_rate) tooltip = self.get_tooltip(pos, fee_rate)
QToolTip.showText(QCursor.pos(), tooltip, self) QToolTip.showText(QCursor.pos(), tooltip, self)
self.setToolTip(tooltip) self.setToolTip(tooltip)
@ -55,10 +55,9 @@ class FeeSlider(QSlider):
self.setRange(0, 4) self.setRange(0, 4)
self.setValue(pos) self.setValue(pos)
else: else:
self.fee_step = self.config.max_fee_rate() / 10
fee_rate = self.config.fee_per_kb() fee_rate = self.config.fee_per_kb()
pos = min(fee_rate / self.fee_step, 10) pos = self.config.static_fee_index(fee_rate)
self.setRange(1, 10) self.setRange(0, 9)
self.setValue(pos) self.setValue(pos)
tooltip = self.get_tooltip(pos, fee_rate) tooltip = self.get_tooltip(pos, fee_rate)
self.setToolTip(tooltip) self.setToolTip(tooltip)

15
gui/qt/main_window.py

@ -2437,21 +2437,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
fee_widgets.append((dynfee_cb, None)) fee_widgets.append((dynfee_cb, None))
dynfee_cb.stateChanged.connect(on_dynfee) dynfee_cb.stateChanged.connect(on_dynfee)
def on_maxfee(x):
m = maxfee_e.get_amount()
if m: self.config.set_key('max_fee_rate', m)
self.fee_slider.update()
def update_maxfee():
d = self.config.is_dynfee()
maxfee_e.setDisabled(d)
maxfee_label.setDisabled(d)
maxfee_label = HelpLabel(_('Max static fee'), _('Max value of the static fee slider'))
maxfee_e = BTCkBEdit(self.get_decimal_point)
maxfee_e.setAmount(self.config.max_fee_rate())
maxfee_e.textChanged.connect(on_maxfee)
update_maxfee()
fee_widgets.append((maxfee_label, maxfee_e))
feebox_cb = QCheckBox(_('Edit fees manually')) feebox_cb = QCheckBox(_('Edit fees manually'))
feebox_cb.setChecked(self.config.get('show_fee', False)) feebox_cb.setChecked(self.config.get('show_fee', False))
feebox_cb.setToolTip(_("Show fee edit box in send tab.")) feebox_cb.setToolTip(_("Show fee edit box in send tab."))

9
lib/simple_config.py

@ -41,6 +41,8 @@ class SimpleConfig(PrintError):
They are taken in order (1. overrides config options set in 2., that They are taken in order (1. overrides config options set in 2., that
override config set in 3.) override config set in 3.)
""" """
fee_rates = [5000, 10000, 20000, 30000, 50000, 70000, 100000, 150000, 200000, 300000]
def __init__(self, options={}, read_system_config_function=None, def __init__(self, options={}, read_system_config_function=None,
read_user_config_function=None, read_user_dir_function=None): read_user_config_function=None, read_user_dir_function=None):
@ -230,6 +232,13 @@ class SimpleConfig(PrintError):
min_target = -1 min_target = -1
return min_target return min_target
def static_fee(self, i):
return self.fee_rates[i]
def static_fee_index(self, value):
dist = list(map(lambda x: abs(x - value), self.fee_rates))
return min(range(len(dist)), key=dist.__getitem__)
def has_fee_estimates(self): def has_fee_estimates(self):
return len(self.fee_estimates)==4 return len(self.fee_estimates)==4

Loading…
Cancel
Save