mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
This is needed to support the upcoming squadron transfers, since squadrons need to bring their aircraft with them. https://github.com/dcs-liberation/dcs_liberation/issues/1145
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
"""Combo box for selecting squadrons."""
|
|
from typing import Optional
|
|
|
|
from PySide2.QtWidgets import QComboBox
|
|
|
|
from game.dcs.aircrafttype import AircraftType
|
|
from game.squadrons.airwing import AirWing
|
|
from gen.flights.flight import FlightType
|
|
|
|
|
|
class SquadronSelector(QComboBox):
|
|
"""Combo box for selecting squadrons compatible with the given requirements."""
|
|
|
|
def __init__(
|
|
self,
|
|
air_wing: AirWing,
|
|
task: Optional[FlightType],
|
|
aircraft: Optional[AircraftType],
|
|
) -> None:
|
|
super().__init__()
|
|
self.air_wing = air_wing
|
|
|
|
self.model().sort(0)
|
|
self.setSizeAdjustPolicy(self.AdjustToContents)
|
|
self.update_items(task, aircraft)
|
|
|
|
@property
|
|
def aircraft_available(self) -> int:
|
|
squadron = self.currentData()
|
|
if squadron is None:
|
|
return 0
|
|
return squadron.untasked_aircraft
|
|
|
|
def update_items(
|
|
self, task: Optional[FlightType], aircraft: Optional[AircraftType]
|
|
) -> None:
|
|
current_squadron = self.currentData()
|
|
self.blockSignals(True)
|
|
try:
|
|
self.clear()
|
|
finally:
|
|
self.blockSignals(False)
|
|
if task is None:
|
|
self.addItem("No task selected", None)
|
|
return
|
|
if aircraft is None:
|
|
self.addItem("No aircraft selected", None)
|
|
return
|
|
|
|
for squadron in self.air_wing.squadrons_for(aircraft):
|
|
if task in squadron.mission_types and squadron.untasked_aircraft:
|
|
self.addItem(f"{squadron.location}: {squadron}", squadron)
|
|
|
|
if self.count() == 0:
|
|
self.addItem("No capable aircraft available", None)
|
|
return
|
|
|
|
if current_squadron is not None:
|
|
self.setCurrentText(f"{current_squadron.location}: {current_squadron}")
|