37 lines
1007 B
Python
37 lines
1007 B
Python
import math
|
|
|
|
from PyQt6.QtWidgets import QScrollBar
|
|
import logging
|
|
|
|
log = logging.getLogger("scaledScrollBar")
|
|
|
|
|
|
class ScaledScrollBar(QScrollBar):
|
|
is_huge = False
|
|
|
|
def __init__(self):
|
|
super(ScaledScrollBar, self).__init__()
|
|
self.real_maximum = self.maximum()
|
|
|
|
def setValue(self, value: int) -> None:
|
|
if self.is_huge:
|
|
real_position = value / self.real_maximum
|
|
super().setValue(self.maximum() * real_position)
|
|
else:
|
|
super().setValue(value)
|
|
|
|
def setMaximum(self, maximum: int) -> None:
|
|
if maximum > 2 ** 31:
|
|
new_maximum = 1000 * math.log2(maximum)
|
|
super().setMaximum(new_maximum)
|
|
self.real_maximum = maximum
|
|
|
|
if not self.is_huge:
|
|
old_position = self.value() / self.maximum()
|
|
self.setValue(new_maximum * old_position)
|
|
|
|
self.is_huge = True
|
|
else:
|
|
self.is_huge = False
|
|
super().setMaximum(maximum)
|