dcs-retribution/qt_ui/windows/mission/flight/settings/QGeneralFlightSettingsTab.py
MetalStormGhost a27663e4b6
Default start type for player flights (#303)
* Implemented a new option in settings: Default start type for Player flights.

* Updated changelog.

* Removed unnecessary country parameter.

* Restore missing parameter

* on_pilot_changed should emit pilots_changed in its finally block, otherwise the start-type isn't updated if you have a single client pilot which you switch to a non-client pilot.

Also implemented other changes suggested by @Raffson, such as a more streamlined start_type QComboBox handling and moving the pilots_changed Signal to FlightRosterEditor.

* Decouple Signal from QFlighStartType

---------

Co-authored-by: Raffson <Raffson@users.noreply.github.com>
2024-05-09 10:19:30 +00:00

77 lines
2.7 KiB
Python

from PySide6.QtCore import Signal
from PySide6.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,
)
from qt_ui.windows.mission.flight.settings.QCommsEditor import QCommsEditor
from qt_ui.windows.mission.flight.settings.QCustomName import QFlightCustomName
from qt_ui.windows.mission.flight.settings.QFlightSlotEditor import QFlightSlotEditor
from qt_ui.windows.mission.flight.settings.QFlightStartType import QFlightStartType
from qt_ui.windows.mission.flight.settings.QFlightTypeTaskInfo import (
QFlightTypeTaskInfo,
)
from qt_ui.windows.mission.flight.waypoints.QFlightWaypointList import (
QFlightWaypointList,
)
class QGeneralFlightSettingsTab(QFrame):
flight_size_changed = Signal()
def __init__(
self,
game: GameModel,
package_model: PackageModel,
flight: Flight,
flight_wpt_list: QFlightWaypointList,
payload_tab: QFlightPayloadTab,
):
super().__init__()
self.flight = flight
self.payload_tab = payload_tab
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(self.on_player_toggle)
pc.player_toggled.connect(
self.flight_slot_editor.roster_editor.pilots_changed
)
start_type = QFlightStartType(
package_model,
flight,
)
roster = self.flight_slot_editor.roster_editor
roster.pilots_changed.connect(start_type.on_pilot_selected)
widgets = [
QFlightTypeTaskInfo(flight),
QCommsEditor(flight, game),
FlightPlanPropertiesGroup(
game.game, package_model, flight, flight_wpt_list
),
self.flight_slot_editor,
start_type,
QFlightCustomName(flight),
]
layout = QGridLayout()
row = 0
for w in widgets:
layout.addWidget(w, row, 0)
row += 1
vstretch = QVBoxLayout()
vstretch.addStretch()
layout.addLayout(vstretch, row, 0)
self.setLayout(layout)
def on_player_toggle(self) -> None:
self.payload_tab.property_editor.build_props(self.flight)
self.payload_tab.own_laser_code_info.bind_to_selected_member()