mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Generate settings pages automatically.
This adds metadata to settings fields that can be used to automatically generate the settings window. For now I have replaced the Difficulty page. Will follow up to replace the others.
This commit is contained in:
@@ -3,21 +3,27 @@ from typing import Optional
|
||||
from PySide2.QtWidgets import QSpinBox
|
||||
|
||||
|
||||
class TenthsSpinner(QSpinBox):
|
||||
class FloatSpinner(QSpinBox):
|
||||
def __init__(
|
||||
self,
|
||||
minimum: Optional[int] = None,
|
||||
maximum: Optional[int] = None,
|
||||
initial: Optional[int] = None,
|
||||
divisor: int,
|
||||
minimum: Optional[float] = None,
|
||||
maximum: Optional[float] = None,
|
||||
initial: Optional[float] = None,
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.divisor = divisor
|
||||
|
||||
if minimum is not None:
|
||||
self.setMinimum(minimum)
|
||||
self.setMinimum(int(minimum * divisor))
|
||||
if maximum is not None:
|
||||
self.setMaximum(maximum)
|
||||
self.setMaximum(int(maximum * divisor))
|
||||
if initial is not None:
|
||||
self.setValue(initial)
|
||||
self.setValue(int(initial * divisor))
|
||||
|
||||
def textFromValue(self, val: int) -> str:
|
||||
return f"X {val / 10:.1f}"
|
||||
return f"X {val / self.divisor:.1f}"
|
||||
|
||||
@property
|
||||
def real_value(self) -> float:
|
||||
return self.value() / self.divisor
|
||||
|
||||
@@ -1,30 +1,33 @@
|
||||
from datetime import timedelta
|
||||
from typing import Optional
|
||||
|
||||
from PySide2 import QtWidgets
|
||||
from PySide2.QtCore import Qt
|
||||
from PySide2.QtWidgets import QGridLayout, QLabel, QSlider
|
||||
from typing import Optional
|
||||
from qt_ui.widgets.floatspinners import TenthsSpinner
|
||||
from datetime import timedelta
|
||||
from PySide2.QtWidgets import QSlider, QHBoxLayout
|
||||
|
||||
from qt_ui.widgets.floatspinners import FloatSpinner
|
||||
|
||||
|
||||
class TenthsSpinSlider(QGridLayout):
|
||||
def __init__(self, label: str, minimum: int, maximum: int, initial: int) -> None:
|
||||
class FloatSpinSlider(QHBoxLayout):
|
||||
def __init__(
|
||||
self, minimum: float, maximum: float, initial: float, divisor: int
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.addWidget(QLabel(label), 0, 0)
|
||||
|
||||
slider = QSlider(Qt.Horizontal)
|
||||
slider.setMinimum(minimum)
|
||||
slider.setMaximum(maximum)
|
||||
slider.setMinimum(int(minimum * divisor))
|
||||
slider.setMaximum(int(maximum * divisor))
|
||||
slider.setValue(initial)
|
||||
self.spinner = TenthsSpinner(minimum, maximum, 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, 1, 0)
|
||||
self.addWidget(self.spinner, 1, 1)
|
||||
self.addWidget(slider)
|
||||
self.addWidget(self.spinner)
|
||||
|
||||
@property
|
||||
def value(self) -> float:
|
||||
return self.spinner.value() / 10
|
||||
return self.spinner.real_value
|
||||
|
||||
|
||||
class TimeInputs(QtWidgets.QGridLayout):
|
||||
|
||||
Reference in New Issue
Block a user