dcs-retribution/qt_ui/widgets/spinsliders.py
Dan Albert 2a75d14e0e Revert upgrade to pyside6.
This appears to be incompatible with pyinstaller. I get the following
when trying to run the executable generated with pyside6:

```
Traceback (most recent call last):
  File "qt_ui\main.py", line 29, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 476, in exec_module
  File "qt_ui\windows\QLiberationWindow.py", line 28, in <module>
  File "PyInstaller\loader\pyimod03_importers.py", line 476, in exec_module
  File "qt_ui\widgets\map\QLiberationMap.py", line 11, in <module>
ImportError: could not import module 'PySide6.QtPrintSupport'
```
2021-11-21 17:39:43 -08:00

93 lines
2.7 KiB
Python

from datetime import timedelta
from typing import Optional
from PySide2 import QtWidgets
from PySide2.QtCore import Qt
from PySide2.QtWidgets import QSlider, QHBoxLayout
from qt_ui.widgets.floatspinners import FloatSpinner
class FloatSpinSlider(QHBoxLayout):
def __init__(
self, minimum: float, maximum: float, initial: float, divisor: int
) -> None:
super().__init__()
slider = QSlider(Qt.Horizontal)
slider.setMinimum(int(minimum * divisor))
slider.setMaximum(int(maximum * divisor))
slider.setValue(initial)
self.spinner = FloatSpinner(divisor, minimum, maximum, initial)
slider.valueChanged.connect(lambda x: self.spinner.setValue(x))
self.spinner.valueChanged.connect(lambda x: slider.setValue(x))
self.addWidget(slider)
self.addWidget(self.spinner)
@property
def value(self) -> float:
return self.spinner.real_value
class TimeInputs(QtWidgets.QHBoxLayout):
def __init__(self, initial: timedelta, minimum: int, maximum: int) -> None:
super().__init__()
initial_minutes = int(initial.total_seconds() / 60)
slider = QtWidgets.QSlider(Qt.Horizontal)
slider.setMinimum(minimum)
slider.setMaximum(maximum)
slider.setValue(initial_minutes)
self.spinner = TimeSpinner(minimum, maximum, initial_minutes)
slider.valueChanged.connect(lambda x: self.spinner.setValue(x))
self.spinner.valueChanged.connect(lambda x: slider.setValue(x))
self.addWidget(slider)
self.addWidget(self.spinner)
@property
def value(self) -> timedelta:
return timedelta(minutes=self.spinner.value())
class TimeSpinner(QtWidgets.QSpinBox):
def __init__(
self,
minimum: Optional[int] = None,
maximum: Optional[int] = None,
initial: Optional[int] = None,
) -> None:
super().__init__()
if minimum is not None:
self.setMinimum(minimum)
if maximum is not None:
self.setMaximum(maximum)
if initial is not None:
self.setValue(initial)
def textFromValue(self, val: int) -> str:
return f"{val} minutes"
class CurrencySpinner(QtWidgets.QSpinBox):
def __init__(
self,
minimum: Optional[int] = None,
maximum: Optional[int] = None,
initial: Optional[int] = None,
) -> None:
super().__init__()
if minimum is not None:
self.setMinimum(minimum)
if maximum is not None:
self.setMaximum(maximum)
if initial is not None:
self.setValue(initial)
def textFromValue(self, val: int) -> str:
return f"${val}"