mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
89 lines
3.0 KiB
Python
89 lines
3.0 KiB
Python
from typing import Optional
|
|
|
|
from PySide6.QtCore import Qt
|
|
from PySide6.QtWidgets import QHBoxLayout, QLabel, QSlider, QSpinBox, QComboBox
|
|
from dcs.weather import CloudPreset
|
|
|
|
from game.weather.clouds import Clouds
|
|
|
|
|
|
class DcsCloudThicknessSelector(QHBoxLayout):
|
|
M2FT_FACTOR = 3.2808399
|
|
|
|
def __init__(self, clouds: Optional[Clouds]) -> None:
|
|
super().__init__()
|
|
self.unit_changing = False
|
|
|
|
self.label = QLabel("Thickness : ")
|
|
self.addWidget(self.label)
|
|
|
|
self.thickness = QSlider(Qt.Orientation.Horizontal)
|
|
self.thickness.setRange(200, 2000)
|
|
if clouds:
|
|
self.thickness.setValue(clouds.thickness)
|
|
self.thickness.valueChanged.connect(self.on_slider_change)
|
|
self.addWidget(self.thickness, 1)
|
|
|
|
self.thickness_spinner = QSpinBox()
|
|
self.thickness_spinner.setValue(self.thickness.value())
|
|
self.thickness_spinner.setFixedWidth(75)
|
|
self.thickness_spinner.setSingleStep(100)
|
|
self.thickness_spinner.valueChanged.connect(self.update_slider)
|
|
self.addWidget(self.thickness_spinner, 1)
|
|
|
|
self.unit = QComboBox()
|
|
self.unit.insertItems(0, ["m", "ft"])
|
|
self.unit.currentIndexChanged.connect(self.on_unit_change)
|
|
self.unit.setCurrentIndex(1)
|
|
self.addWidget(self.unit)
|
|
|
|
def update_ui(self, preset: Optional[CloudPreset]) -> None:
|
|
self.label.setVisible(preset is None)
|
|
self.thickness.setVisible(preset is None)
|
|
self.thickness_spinner.setVisible(preset is None)
|
|
self.unit.setVisible(preset is None)
|
|
|
|
if preset:
|
|
self.thickness.setValue(0)
|
|
|
|
def on_slider_change(self, value: int) -> None:
|
|
if self.unit.currentIndex() == 0:
|
|
self.thickness_spinner.setValue(value)
|
|
elif self.unit.currentIndex() == 1 and not self.unit_changing:
|
|
self.thickness_spinner.setValue(self.m2ft(value))
|
|
|
|
def update_slider(self, value: int) -> None:
|
|
if self.unit_changing:
|
|
return
|
|
if self.unit.currentIndex() == 0:
|
|
self.thickness.setValue(value)
|
|
elif self.unit.currentIndex() == 1:
|
|
self.unit_changing = True
|
|
self.thickness.setValue(self.ft2m(value))
|
|
self.unit_changing = False
|
|
|
|
def on_unit_change(self, index: int) -> None:
|
|
self.unit_changing = True
|
|
mini = (
|
|
self.thickness.minimum()
|
|
if index == 0
|
|
else self.m2ft(self.thickness.minimum())
|
|
)
|
|
maxi = (
|
|
self.thickness.maximum()
|
|
if index == 0
|
|
else self.m2ft(self.thickness.maximum())
|
|
)
|
|
value = (
|
|
self.thickness.value() if index == 0 else self.m2ft(self.thickness.value())
|
|
)
|
|
self.thickness_spinner.setRange(mini, maxi)
|
|
self.thickness_spinner.setValue(value)
|
|
self.unit_changing = False
|
|
|
|
def m2ft(self, value: int) -> int:
|
|
return round(value * self.M2FT_FACTOR)
|
|
|
|
def ft2m(self, value: int) -> int:
|
|
return round(value / self.M2FT_FACTOR)
|