make fee_slider thread safe
This commit is contained in:
parent
0a31acbdf2
commit
6055d4b2fd
|
@ -5,6 +5,8 @@ from PyQt4.QtGui import *
|
||||||
from PyQt4.QtCore import *
|
from PyQt4.QtCore import *
|
||||||
import PyQt4.QtCore as QtCore
|
import PyQt4.QtCore as QtCore
|
||||||
|
|
||||||
|
import threading
|
||||||
|
|
||||||
class FeeSlider(QSlider):
|
class FeeSlider(QSlider):
|
||||||
|
|
||||||
def __init__(self, window, config, callback):
|
def __init__(self, window, config, callback):
|
||||||
|
@ -13,31 +15,43 @@ class FeeSlider(QSlider):
|
||||||
self.fee_step = self.config.max_fee_rate() / 10
|
self.fee_step = self.config.max_fee_rate() / 10
|
||||||
self.window = window
|
self.window = window
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
self.setToolTip('')
|
self.dyn = False
|
||||||
|
self.lock = threading.RLock()
|
||||||
self.update()
|
self.update()
|
||||||
self.valueChanged.connect(self.moved)
|
self.valueChanged.connect(self.moved)
|
||||||
|
|
||||||
def moved(self, pos):
|
def moved(self, pos):
|
||||||
|
with self.lock:
|
||||||
|
fee_rate = self.config.dynfee(pos) if self.dyn else pos * self.fee_step
|
||||||
|
tooltip = self.get_tooltip(pos, fee_rate)
|
||||||
|
QToolTip.showText(QCursor.pos(), tooltip, self)
|
||||||
|
self.setToolTip(tooltip)
|
||||||
|
self.callback(self.dyn, pos, fee_rate)
|
||||||
|
|
||||||
|
def get_tooltip(self, pos, fee_rate):
|
||||||
from electrum.util import fee_levels
|
from electrum.util import fee_levels
|
||||||
dyn = self.config.is_dynfee()
|
|
||||||
fee_rate = self.config.dynfee(pos) if dyn else pos * self.fee_step
|
|
||||||
rate_str = self.window.format_amount(fee_rate) + ' ' + self.window.base_unit() + '/kB'
|
rate_str = self.window.format_amount(fee_rate) + ' ' + self.window.base_unit() + '/kB'
|
||||||
if dyn:
|
if self.dyn:
|
||||||
tooltip = fee_levels[pos] + '\n' + rate_str
|
tooltip = fee_levels[pos] + '\n' + rate_str
|
||||||
else:
|
else:
|
||||||
tooltip = rate_str
|
tooltip = rate_str
|
||||||
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)
|
||||||
tooltip += '\n' + (_('low fee') if i < 0 else 'Within %d blocks'%i)
|
tooltip += '\n' + (_('low fee') if i < 0 else 'Within %d blocks'%i)
|
||||||
QToolTip.showText(QCursor.pos(), tooltip, self)
|
return tooltip
|
||||||
self.callback(dyn, pos, fee_rate)
|
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
if self.config.is_dynfee():
|
with self.lock:
|
||||||
|
self.dyn = self.config.is_dynfee()
|
||||||
|
if self.dyn:
|
||||||
|
pos = self.config.get('fee_level', 2)
|
||||||
|
fee_rate = self.config.dynfee(pos)
|
||||||
self.setRange(0, 4)
|
self.setRange(0, 4)
|
||||||
self.setValue(self.config.get('fee_level', 2))
|
self.setValue(pos)
|
||||||
else:
|
else:
|
||||||
self.setRange(1, 10)
|
|
||||||
fee_rate = self.config.fee_per_kb()
|
fee_rate = self.config.fee_per_kb()
|
||||||
pos = min(fee_rate / self.fee_step, 10)
|
pos = min(fee_rate / self.fee_step, 10)
|
||||||
|
self.setRange(1, 10)
|
||||||
self.setValue(pos)
|
self.setValue(pos)
|
||||||
|
tooltip = self.get_tooltip(pos, fee_rate)
|
||||||
|
self.setToolTip(tooltip)
|
||||||
|
|
Loading…
Reference in New Issue