Streamlining

This commit is contained in:
Raffson
2023-10-01 20:14:22 +02:00
parent 110866cd34
commit d4eefd0b55
15 changed files with 68 additions and 42 deletions

View File

@@ -1,7 +1,7 @@
from collections.abc import Iterator
from contextlib import contextmanager
from PySide6.QtWidgets import QWidget
from PySide2.QtWidgets import QWidget
@contextmanager

View File

@@ -16,10 +16,14 @@ class QFlightPlanner(QTabWidget):
self.payload_tab = QFlightPayloadTab(flight, gm.game)
self.waypoint_tab = QFlightWaypointTab(gm.game, package_model.package, flight)
self.general_settings_tab = QGeneralFlightSettingsTab(
gm, package_model, flight, self.waypoint_tab.flight_waypoint_list
)
self.payload_tab = QFlightPayloadTab(flight, gm.game)
self.general_settings_tab = QGeneralFlightSettingsTab(
gm,
package_model,
flight,
self.waypoint_tab.flight_waypoint_list,
self.payload_tab,
)
self.general_settings_tab.flight_size_changed.connect(
self.payload_tab.resize_for_flight
)

View File

@@ -5,11 +5,11 @@ from PySide2.QtWidgets import (
QLabel,
QHBoxLayout,
QVBoxLayout,
QScrollArea,
QWidget,
QSpinBox,
QSlider,
QCheckBox,
QScrollArea,
)
from game import Game
@@ -147,7 +147,12 @@ class QFlightPayloadTab(QFrame):
scroll.setWidgetResizable(True)
scroll.setWidget(scroll_content)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
layout.addWidget(scroll)
layout.addWidget(scroll, stretch=1)
self.property_editor = PropertyEditor(
self.flight, self.member_selector.selected_member
)
scrolling_layout.addLayout(self.property_editor)
# Docs Link
docsText = QLabel(
@@ -156,26 +161,15 @@ class QFlightPayloadTab(QFrame):
docsText.setAlignment(Qt.AlignCenter)
docsText.setOpenExternalLinks(True)
self.scroll_area = QScrollArea()
self.property_editor = QWidget()
self.property_editor.setLayout(PropertyEditor(self.flight))
self.scroll_area.setWidget(self.property_editor)
layout.addWidget(self.scroll_area)
self.fuel_selector = DcsFuelSelector(flight)
layout.addLayout(self.fuel_selector)
self.loadout_selector = DcsLoadoutSelector(flight)
self.property_editor = PropertyEditor(
self.flight, self.member_selector.selected_member
)
scrolling_layout.addLayout(self.property_editor)
self.loadout_selector = DcsLoadoutSelector(
flight, self.member_selector.selected_member
)
self.loadout_selector.currentIndexChanged.connect(self.on_new_loadout)
layout.addWidget(self.loadout_selector)
layout.addWidget(self.payload_editor, stretch=1)
layout.addWidget(self.payload_editor, stretch=3)
layout.addWidget(docsText)
self.setLayout(layout)
@@ -232,7 +226,7 @@ class QFlightPayloadTab(QFrame):
loadout = self.flight.loadout
self.loadout_selector.addItem(payload_name, loadout)
self.loadout_selector.setCurrentIndex(self.loadout_selector.count() - 1)
def on_same_loadout_toggled(self, checked: bool) -> None:
self.flight.use_same_loadout_for_all_members = checked
if self.member_selector.value():

View File

@@ -1,4 +1,4 @@
from PySide6.QtWidgets import QCheckBox
from PySide2.QtWidgets import QCheckBox
from dcs.unitpropertydescription import UnitPropertyDescription
from game.ato.flightmember import FlightMember

View File

@@ -1,4 +1,4 @@
from PySide6.QtWidgets import QComboBox
from PySide2.QtWidgets import QComboBox
from dcs.unitpropertydescription import UnitPropertyDescription
from game.ato.flightmember import FlightMember

View File

@@ -1,7 +1,8 @@
import logging
from typing import Callable
from typing import Callable, Optional
from PySide2.QtWidgets import QGridLayout, QLabel
from PySide2.QtCore import QRect
from PySide2.QtWidgets import QGridLayout, QLabel, QWidget
from dcs.unitpropertydescription import UnitPropertyDescription
from game.ato import Flight
@@ -23,6 +24,10 @@ class PropertyEditor(QGridLayout):
self.flight_member = flight_member
self.flight_member_update_listeners: list[Callable[[FlightMember], None]] = []
self.build_props(flight)
def build_props(self, flight):
self.setGeometry(QRect())
for row, prop in enumerate(flight.unit_type.iter_props()):
if prop.label is None:
if prop.control != "label":
@@ -54,7 +59,7 @@ class PropertyEditor(QGridLayout):
if widget is not None:
self.addWidget(widget, row, 1)
def control_for_property(self, prop: UnitPropertyDescription) -> QWidget | None:
def control_for_property(self, prop: UnitPropertyDescription) -> Optional[QWidget]:
# Valid values are:
# "checkbox", "comboList", "groupbox", "label", "slider", "spinbox"
match prop.control:

View File

@@ -1,4 +1,4 @@
from PySide6.QtWidgets import QSpinBox
from PySide2.QtWidgets import QSpinBox
from dcs.unitpropertydescription import UnitPropertyDescription
from game.ato.flightmember import FlightMember

View File

@@ -91,8 +91,10 @@ class PilotSelector(QComboBox):
class PilotControls(QHBoxLayout):
player_toggled = Signal()
def __init__(
self, squadron: Union[Squadron, None], roster: Optional[FlightRoster], idx: int
self, squadron: Optional[Squadron], roster: Optional[FlightRoster], idx: int
) -> None:
super().__init__()
self.roster = roster
@@ -125,6 +127,7 @@ class PilotControls(QHBoxLayout):
logging.error("Cannot toggle state of a pilot when none is selected")
return
pilot.player = checked
self.player_toggled.emit()
def on_pilot_changed(self, index: int) -> None:
pilot = self.selector.itemData(index)
@@ -168,7 +171,9 @@ class PilotControls(QHBoxLayout):
class FlightRosterEditor(QVBoxLayout):
MAX_PILOTS = 4
def __init__(self, squadron: Union[Squadron, None], roster: Union[IFlightRoster, None]) -> None:
def __init__(
self, squadron: Optional[Squadron], roster: Optional[IFlightRoster]
) -> None:
super().__init__()
self.roster = roster

View File

@@ -3,6 +3,7 @@ from PySide2.QtWidgets import QFrame, QGridLayout, QVBoxLayout
from game.ato.flight import Flight
from qt_ui.models import PackageModel, GameModel
from qt_ui.windows.mission.flight.payload.QFlightPayloadTab import QFlightPayloadTab
from qt_ui.windows.mission.flight.settings.FlightPlanPropertiesGroup import (
FlightPlanPropertiesGroup,
)
@@ -27,11 +28,16 @@ class QGeneralFlightSettingsTab(QFrame):
package_model: PackageModel,
flight: Flight,
flight_wpt_list: QFlightWaypointList,
payload_tab: QFlightPayloadTab,
):
super().__init__()
self.flight_slot_editor = QFlightSlotEditor(package_model, flight, game.game)
self.flight_slot_editor.flight_resized.connect(self.flight_size_changed)
for pc in self.flight_slot_editor.roster_editor.pilot_controls:
pc.player_toggled.connect(
lambda: payload_tab.property_editor.build_props(flight)
)
widgets = [
QFlightTypeTaskInfo(flight),