from PySide6.QtWidgets import QLabel, QHBoxLayout, QComboBox, QWidget, QVBoxLayout
from dcs.cloud_presets import CLOUD_PRESETS
from game.weather.weather import ClearSkies, Cloudy, Raining, Thunderstorm
from qt_ui.widgets.conditions.DcsCloudBaseSelector import DcsCloudBaseSelector
from qt_ui.widgets.conditions.DcsCloudDensitySelector import DcsCloudDensitySelector
from qt_ui.widgets.conditions.DcsCloudThicknessSelector import DcsCloudThicknessSelector
from qt_ui.widgets.conditions.DcsPrecipitationSelector import DcsPrecipitationSelector
from qt_ui.widgets.conditions.QWeatherWidget import QWeatherWidget
class QWeatherAdjustmentWidget(QWidget):
def __init__(self, weather: QWeatherWidget) -> None:
super().__init__()
self.weather = weather
self.init_ui()
def init_ui(self) -> None:
weather = self.weather.conditions.weather
vbox = QVBoxLayout()
label = QLabel("
Weather:
")
label.setMaximumHeight(75)
vbox.addWidget(label)
hbox = QHBoxLayout()
hbox.addWidget(QLabel("Type"))
self.type_selector = QComboBox()
for text, w_type in [
("Clear", ClearSkies),
("Clouds", Cloudy),
("Rain", Raining),
("Thunderstorm", Thunderstorm),
]:
self.type_selector.addItem(text, w_type)
if isinstance(weather, w_type):
self.type_selector.setCurrentText(text)
self.type_selector.currentIndexChanged.connect(self.update_ui_for_type)
hbox.addWidget(self.type_selector)
vbox.addLayout(hbox)
label = QLabel("Clouds:
")
label.setMaximumHeight(50)
vbox.addWidget(label)
clouds = weather.clouds
hbox = QHBoxLayout()
hbox.addWidget(QLabel("Preset"))
self.preset_selector = QComboBox()
for _, preset in CLOUD_PRESETS.items():
self.preset_selector.addItem(preset.value.ui_name, preset.value)
self.preset_selector.addItem("Custom", None)
self.preset_selector.setCurrentText(
clouds.preset.ui_name if clouds and clouds.preset else "Custom"
)
self.preset_selector.currentIndexChanged.connect(self.update_ui)
hbox.addWidget(self.preset_selector)
vbox.addLayout(hbox)
self.cloud_base = DcsCloudBaseSelector(clouds)
vbox.addLayout(self.cloud_base)
self.cloud_thickness = DcsCloudThicknessSelector(clouds)
vbox.addLayout(self.cloud_thickness)
self.cloud_density = DcsCloudDensitySelector(clouds)
vbox.addLayout(self.cloud_density)
self.precipitation = DcsPrecipitationSelector(clouds)
vbox.addLayout(self.precipitation)
self.setLayout(vbox)
self.update_ui_for_type()
def update_ui_for_type(self) -> None:
if self.type_selector.currentData() in [ClearSkies, Thunderstorm]:
self.preset_selector.setCurrentText("Custom")
self.preset_selector.setDisabled(True)
else:
self.preset_selector.setDisabled(False)
self.update_ui()
def update_ui(self) -> None:
preset = self.preset_selector.currentData()
self.cloud_base.preset = preset
self.cloud_base.update_bounds()
self.cloud_thickness.update_ui(preset)
self.cloud_density.update_ui(preset)
self.precipitation.update_ui(preset)