mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
wip: fixed qt cosmetic issue, added forecast text generation, initial for weather window
This commit is contained in:
parent
6e153c6451
commit
718b3f2623
@ -1,10 +1,17 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QVBoxLayout, QFrame, QSizePolicy, QStyle, QPushButton
|
from PySide2.QtCore import Qt
|
||||||
|
from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QVBoxLayout, QFrame, QSizePolicy, QStyle, QPushButton, QGridLayout
|
||||||
|
from PySide2.QtGui import QFont
|
||||||
|
|
||||||
from game.weather import Conditions, TimeOfDay
|
from game.weather import Conditions, TimeOfDay, Weather
|
||||||
|
from dcs.weather import Weather as PydcsWeather
|
||||||
|
|
||||||
|
from qt_ui.windows.weather.QWeatherInfoWindow import QWeatherInfoWindow
|
||||||
import qt_ui.uiconstants as CONST
|
import qt_ui.uiconstants as CONST
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class QTimeTurnWidget(QGroupBox):
|
class QTimeTurnWidget(QGroupBox):
|
||||||
"""
|
"""
|
||||||
UI Component to display current turn and time info
|
UI Component to display current turn and time info
|
||||||
@ -54,10 +61,14 @@ class QWeatherWidget(QGroupBox):
|
|||||||
"""
|
"""
|
||||||
UI Component to display current weather forecast
|
UI Component to display current weather forecast
|
||||||
"""
|
"""
|
||||||
|
turn = None
|
||||||
|
conditions = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(QWeatherWidget, self).__init__("")
|
super(QWeatherWidget, self).__init__("")
|
||||||
self.setProperty('style', 'QWeatherWidget')
|
self.setProperty('style', 'QWeatherWidget')
|
||||||
|
self.conditions = None
|
||||||
|
|
||||||
|
|
||||||
self.icons = {
|
self.icons = {
|
||||||
TimeOfDay.Dawn: CONST.ICONS["Dawn"],
|
TimeOfDay.Dawn: CONST.ICONS["Dawn"],
|
||||||
@ -68,14 +79,22 @@ class QWeatherWidget(QGroupBox):
|
|||||||
|
|
||||||
self.layout = QHBoxLayout()
|
self.layout = QHBoxLayout()
|
||||||
self.setLayout(self.layout)
|
self.setLayout(self.layout)
|
||||||
|
|
||||||
|
|
||||||
self.weather_icon = QLabel()
|
self.weather_icon = QLabel()
|
||||||
self.weather_icon.setPixmap(self.icons[TimeOfDay.Dawn])
|
self.weather_icon.setPixmap(self.icons[TimeOfDay.Dawn])
|
||||||
self.layout.addWidget(self.weather_icon)
|
self.layout.addWidget(self.weather_icon)
|
||||||
|
|
||||||
self.forecast = QLabel('')
|
self.textLayout = QVBoxLayout()
|
||||||
self.layout.addWidget(self.forecast)
|
self.layout.addLayout(self.textLayout)
|
||||||
|
|
||||||
|
self.forecastClouds = QLabel('')
|
||||||
|
self.textLayout.addWidget(self.forecastClouds)
|
||||||
|
|
||||||
|
self.forecastRain = QLabel('')
|
||||||
|
self.textLayout.addWidget(self.forecastRain)
|
||||||
|
|
||||||
|
self.forecastFog = QLabel('')
|
||||||
|
self.textLayout.addWidget(self.forecastFog)
|
||||||
|
|
||||||
self.details = QPushButton("Weather")
|
self.details = QPushButton("Weather")
|
||||||
self.details.setProperty("style", "btn-primary")
|
self.details.setProperty("style", "btn-primary")
|
||||||
@ -84,15 +103,22 @@ class QWeatherWidget(QGroupBox):
|
|||||||
self.layout.addWidget(self.details)
|
self.layout.addWidget(self.details)
|
||||||
|
|
||||||
def openDetailWindow(self):
|
def openDetailWindow(self):
|
||||||
pass
|
self.subwindow = QWeatherInfoWindow(self.turn, self.conditions)
|
||||||
|
self.subwindow.show()
|
||||||
|
|
||||||
def setCurrentConditions(self, conditions: Conditions) -> None:
|
def setCurrentTurn(self, turn: int, conditions: Conditions) -> None:
|
||||||
"""Sets the turn information display.
|
"""Sets the turn information display.
|
||||||
|
|
||||||
:arg conditions Current time and weather conditions.
|
:arg conditions Current time and weather conditions.
|
||||||
"""
|
"""
|
||||||
|
self.turn
|
||||||
self.conditions = conditions
|
self.conditions = conditions
|
||||||
|
|
||||||
|
if conditions and turn > 0:
|
||||||
|
self.details.setDisabled(True)
|
||||||
|
else:
|
||||||
|
self.details.setDisabled(False)
|
||||||
|
|
||||||
self.updateIcon()
|
self.updateIcon()
|
||||||
self.updateText()
|
self.updateText()
|
||||||
|
|
||||||
@ -110,31 +136,60 @@ class QWeatherWidget(QGroupBox):
|
|||||||
"""
|
"""
|
||||||
Updates the Forecast Text based on turn conditions
|
Updates the Forecast Text based on turn conditions
|
||||||
"""
|
"""
|
||||||
|
cloudDensity = self.conditions.weather.clouds.density
|
||||||
|
precipitation = self.conditions.weather.clouds.precipitation
|
||||||
|
|
||||||
|
if cloudDensity <= 0:
|
||||||
|
self.forecastClouds.setText('Sunny')
|
||||||
|
|
||||||
|
if cloudDensity > 0 and cloudDensity < 3:
|
||||||
|
self.forecastClouds.setText('Partly Cloudy')
|
||||||
|
|
||||||
|
if cloudDensity > 3 and cloudDensity < 6:
|
||||||
|
self.forecastClouds.setText('Mostly Cloudy')
|
||||||
|
|
||||||
|
if cloudDensity > 6:
|
||||||
|
self.forecastClouds.setText('Totally Cloudy')
|
||||||
|
|
||||||
|
|
||||||
|
if precipitation == PydcsWeather.Preceptions.Rain:
|
||||||
|
self.forecastRain.setText('Rain')
|
||||||
|
elif precipitation == PydcsWeather.Preceptions.Thunderstorm:
|
||||||
|
self.forecastRain.setText('Thunderstorm')
|
||||||
|
else:
|
||||||
|
self.forecastRain.setText('No Rain')
|
||||||
|
|
||||||
|
if not self.conditions.weather.fog:
|
||||||
|
self.textLayout.removeWidget(self.forecastFog)
|
||||||
|
|
||||||
pass
|
|
||||||
|
|
||||||
def updateDetailsBtn(self):
|
def updateDetailsBtn(self):
|
||||||
if not self.conditions:
|
if not self.conditions:
|
||||||
self.details.setEnable(False)
|
self.details.setEnable(False)
|
||||||
else:
|
else:
|
||||||
self.details.setEnable(True)
|
self.details.setEnable(True)
|
||||||
|
|
||||||
|
|
||||||
class QConditionsWidget(QFrame):
|
class QConditionsWidget(QFrame):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(QConditionsWidget, self).__init__()
|
super(QConditionsWidget, self).__init__()
|
||||||
self.layout = QHBoxLayout()
|
|
||||||
self.layout.setContentsMargins(0, 0, 0, 0)
|
|
||||||
self.setLayout(self.layout)
|
|
||||||
self.setProperty('style', 'QConditionsWidget')
|
self.setProperty('style', 'QConditionsWidget')
|
||||||
|
|
||||||
|
self.layout = QGridLayout()
|
||||||
|
self.layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.layout.setHorizontalSpacing(0)
|
||||||
|
self.layout.setVerticalSpacing(0)
|
||||||
|
self.setLayout(self.layout)
|
||||||
|
|
||||||
self.time_turn_widget = QTimeTurnWidget()
|
self.time_turn_widget = QTimeTurnWidget()
|
||||||
self.layout.addWidget(self.time_turn_widget)
|
self.time_turn_widget.setStyleSheet('QGroupBox { margin-right: 0px; border-right: 0px; }')
|
||||||
|
self.layout.addWidget(self.time_turn_widget, 0, 0)
|
||||||
|
|
||||||
self.weather_widget = QWeatherWidget()
|
self.weather_widget = QWeatherWidget()
|
||||||
self.layout.addWidget(self.weather_widget)
|
self.weather_widget.setStyleSheet('QGroupBox { margin-top: 5px; margin-left: 0px; }')
|
||||||
|
self.layout.addWidget(self.weather_widget, 0, 1)
|
||||||
|
|
||||||
def setCurrentTurn(self, turn: int, conditions: Conditions) -> None:
|
def setCurrentTurn(self, turn: int, conditions: Conditions) -> None:
|
||||||
self.time_turn_widget.setCurrentTurn(turn, conditions)
|
self.time_turn_widget.setCurrentTurn(turn, conditions)
|
||||||
self.weather_widget.setCurrentConditions(conditions)
|
self.weather_widget.setCurrentTurn(turn, conditions)
|
||||||
|
|
||||||
|
|||||||
16
qt_ui/windows/weather/QWeatherInfoWindow.py
Normal file
16
qt_ui/windows/weather/QWeatherInfoWindow.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from PySide2.QtWidgets import QDialog, QGridLayout, QLabel, QFrame, QSizePolicy
|
||||||
|
|
||||||
|
from game.game import Game
|
||||||
|
from game.weather import Conditions, TimeOfDay, Weather
|
||||||
|
|
||||||
|
import qt_ui.uiconstants as CONST
|
||||||
|
|
||||||
|
class QWeatherInfoWindow(QDialog):
|
||||||
|
|
||||||
|
def __init__(self, turn: int, conditions: Conditions):
|
||||||
|
super(QWeatherInfoWindow, self).__init__()
|
||||||
|
|
||||||
|
self.setModal(True)
|
||||||
|
self.setWindowTitle("Weather Forecast Report")
|
||||||
|
self.setWindowIcon(CONST.ICONS["Money"])
|
||||||
|
self.setMinimumSize(450, 200)
|
||||||
Loading…
x
Reference in New Issue
Block a user