Files
krowlog/ScaledScrollBar.py

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)