update min/max for scaledScrollbar
has some issues when scrolling to the end
This commit is contained in:
@@ -10,9 +10,6 @@ log = logging.getLogger("scaledScrollBar")
|
||||
class ScaledScrollBar(QScrollBar):
|
||||
is_huge = False
|
||||
|
||||
_range_start = 0;
|
||||
_range_end = -1
|
||||
|
||||
scaledValueChanged = Signal(str)
|
||||
"""Signal emitted when the scroll bar value changes.
|
||||
**Note**: The value is a string and must be parsed into an int.
|
||||
@@ -29,32 +26,12 @@ class ScaledScrollBar(QScrollBar):
|
||||
self.real_maximum = self.maximum()
|
||||
super().valueChanged.connect(self._valueChanged)
|
||||
|
||||
def set_range(self, range_start: int, range_end: int):
|
||||
old_range_start = self._range_start
|
||||
self._range_start = range_start
|
||||
self._range_end = range_end
|
||||
new_max = range_end - range_start
|
||||
old_value = self._real_value()
|
||||
new_value = old_value - range_start
|
||||
self.setMaximum(new_max)
|
||||
self.setValue(new_value)
|
||||
print(f"old_value: {old_value} new_value {new_value}")
|
||||
|
||||
def setValue(self, value: int) -> None:
|
||||
if self.is_huge:
|
||||
real_position = value / self.real_maximum
|
||||
super().setValue(round(self.maximum() * real_position))
|
||||
else:
|
||||
super().setValue(value - self._range_start)
|
||||
|
||||
def _real_value(self):
|
||||
value = self.value()
|
||||
if self.is_huge:
|
||||
real_value = self._range_start + (value / self.maximum()) * self.real_maximum
|
||||
# print("scaled value changed: %d -> %d (%f)" % (value, real_value, value / self.maximum()))
|
||||
return int(real_value)
|
||||
else:
|
||||
return int(self._range_start + value)
|
||||
super().setValue(value)
|
||||
|
||||
def setMaximum(self, maximum: int) -> None:
|
||||
if maximum > 2 ** 31:
|
||||
@@ -73,4 +50,9 @@ class ScaledScrollBar(QScrollBar):
|
||||
|
||||
def _valueChanged(self, value: int):
|
||||
self.scrolled_to_end.emit(value == self.maximum() and value > 0)
|
||||
self.scaledValueChanged.emit(str(self._real_value()))
|
||||
if self.is_huge:
|
||||
real_value = (value / self.maximum()) * self.real_maximum
|
||||
# print("scaled value changed: %d -> %d (%f)" % (value, real_value, value / self.maximum()))
|
||||
self.scaledValueChanged.emit(str(int(real_value)))
|
||||
else:
|
||||
self.scaledValueChanged.emit(str(int(value)))
|
||||
|
||||
Reference in New Issue
Block a user