mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Streamlining
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from collections.abc import Iterator
|
||||
from contextlib import contextmanager
|
||||
|
||||
from PySide6.QtWidgets import QWidget
|
||||
from PySide2.QtWidgets import QWidget
|
||||
|
||||
|
||||
@contextmanager
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user