URI: 
       tfix #2614: define non-linear scale for static fees - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 198cc9d7376768739e1233cbc67add0c5e416984
   DIR parent 1d2253f0d883f91258b1403f4a4b68d4e5a4fd18
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Sat, 21 Oct 2017 11:15:59 +0200
       
       fix #2614: define non-linear scale for static fees
       
       Diffstat:
         M gui/kivy/uix/dialogs/fee_dialog.py  |       9 ++++-----
         M gui/qt/fee_slider.py                |       7 +++----
         M gui/qt/main_window.py               |      15 ---------------
         M lib/simple_config.py                |       9 +++++++++
       
       4 files changed, 16 insertions(+), 24 deletions(-)
       ---
   DIR diff --git a/gui/kivy/uix/dialogs/fee_dialog.py b/gui/kivy/uix/dialogs/fee_dialog.py
       t@@ -58,7 +58,6 @@ class FeeDialog(Factory.Popup):
                Factory.Popup.__init__(self)
                self.app = app
                self.config = config
       -        self.fee_step = self.config.max_fee_rate() / 10
                self.fee_rate = self.config.fee_per_kb()
                self.callback = callback
                self.dynfees = self.config.get('dynamic_fees', True)
       t@@ -77,9 +76,9 @@ class FeeDialog(Factory.Popup):
                    slider.step = 1
                    slider.value = self.config.get('fee_level', 2)
                else:
       -            slider.range = (1, 10)
       +            slider.range = (0, 9)
                    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):
                if self.ids.dynfees.active:
       t@@ -88,7 +87,7 @@ class FeeDialog(Factory.Popup):
                        dynfee = self.config.dynfee(value)
                        tooltip += '\n' + (self.app.format_amount_and_units(dynfee)) + '/kB'
                else:
       -            fee_rate = value * self.fee_step
       +            fee_rate = self.config.static_fee(value)
                    tooltip = self.app.format_amount_and_units(fee_rate) + '/kB'
                    if self.config.has_fee_estimates():
                        i = self.config.reverse_dynfee(fee_rate)
       t@@ -101,7 +100,7 @@ class FeeDialog(Factory.Popup):
                if self.dynfees:
                    self.config.set_key('fee_level', value, True)
                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()
        
            def on_slider(self, value):
   DIR diff --git a/gui/qt/fee_slider.py b/gui/qt/fee_slider.py
       t@@ -28,7 +28,7 @@ class FeeSlider(QSlider):
        
            def moved(self, pos):
                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)
                    QToolTip.showText(QCursor.pos(), tooltip, self)
                    self.setToolTip(tooltip)
       t@@ -55,10 +55,9 @@ class FeeSlider(QSlider):
                        self.setRange(0, 4)
                        self.setValue(pos)
                    else:
       -                self.fee_step = self.config.max_fee_rate() / 10
                        fee_rate = self.config.fee_per_kb()
       -                pos = min(fee_rate / self.fee_step, 10)
       -                self.setRange(1, 10)
       +                pos = self.config.static_fee_index(fee_rate)
       +                self.setRange(0, 9)
                        self.setValue(pos)
                    tooltip = self.get_tooltip(pos, fee_rate)
                    self.setToolTip(tooltip)
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -2437,21 +2437,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
                fee_widgets.append((dynfee_cb, None))
                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.setChecked(self.config.get('show_fee', False))
                feebox_cb.setToolTip(_("Show fee edit box in send tab."))
   DIR diff --git a/lib/simple_config.py b/lib/simple_config.py
       t@@ -41,6 +41,8 @@ class SimpleConfig(PrintError):
            They are taken in order (1. overrides config options set in 2., that
            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,
                         read_user_config_function=None, read_user_dir_function=None):
        
       t@@ -230,6 +232,13 @@ class SimpleConfig(PrintError):
                    min_target = -1
                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):
                return len(self.fee_estimates)==4