mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Avoid cases where empty flights could be created.
Fixes https://github.com/Khopa/dcs_liberation/issues/373
This commit is contained in:
parent
98fd707aea
commit
a223da8f99
@ -1,9 +1,10 @@
|
|||||||
"""Combo box for selecting a departure airfield."""
|
"""Combo box for selecting a departure airfield."""
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
|
|
||||||
|
from PySide2.QtCore import Signal
|
||||||
from PySide2.QtWidgets import QComboBox
|
from PySide2.QtWidgets import QComboBox
|
||||||
|
|
||||||
from dcs.planes import PlaneType
|
from dcs.planes import PlaneType
|
||||||
|
|
||||||
from game.inventory import GlobalAircraftInventory
|
from game.inventory import GlobalAircraftInventory
|
||||||
from game.theater.controlpoint import ControlPoint
|
from game.theater.controlpoint import ControlPoint
|
||||||
|
|
||||||
@ -15,6 +16,8 @@ class QOriginAirfieldSelector(QComboBox):
|
|||||||
that have unassigned inventory of the given aircraft type.
|
that have unassigned inventory of the given aircraft type.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
availability_changed = Signal(int)
|
||||||
|
|
||||||
def __init__(self, global_inventory: GlobalAircraftInventory,
|
def __init__(self, global_inventory: GlobalAircraftInventory,
|
||||||
origins: Iterable[ControlPoint],
|
origins: Iterable[ControlPoint],
|
||||||
aircraft: PlaneType) -> None:
|
aircraft: PlaneType) -> None:
|
||||||
@ -23,6 +26,7 @@ class QOriginAirfieldSelector(QComboBox):
|
|||||||
self.origins = list(origins)
|
self.origins = list(origins)
|
||||||
self.aircraft = aircraft
|
self.aircraft = aircraft
|
||||||
self.rebuild_selector()
|
self.rebuild_selector()
|
||||||
|
self.currentIndexChanged.connect(self.index_changed)
|
||||||
|
|
||||||
def change_aircraft(self, aircraft: PlaneType) -> None:
|
def change_aircraft(self, aircraft: PlaneType) -> None:
|
||||||
if self.aircraft == aircraft:
|
if self.aircraft == aircraft:
|
||||||
@ -47,3 +51,10 @@ class QOriginAirfieldSelector(QComboBox):
|
|||||||
return 0
|
return 0
|
||||||
inventory = self.global_inventory.for_control_point(origin)
|
inventory = self.global_inventory.for_control_point(origin)
|
||||||
return inventory.available(self.aircraft)
|
return inventory.available(self.aircraft)
|
||||||
|
|
||||||
|
def index_changed(self, index: int) -> None:
|
||||||
|
origin = self.itemData(index)
|
||||||
|
if origin is None:
|
||||||
|
return
|
||||||
|
inventory = self.global_inventory.for_control_point(origin)
|
||||||
|
self.availability_changed.emit(inventory.available(self.aircraft))
|
||||||
|
|||||||
@ -54,11 +54,11 @@ class QFlightCreator(QDialog):
|
|||||||
[cp for cp in game.theater.controlpoints if cp.captured],
|
[cp for cp in game.theater.controlpoints if cp.captured],
|
||||||
self.aircraft_selector.currentData()
|
self.aircraft_selector.currentData()
|
||||||
)
|
)
|
||||||
self.airfield_selector.currentIndexChanged.connect(self.update_max_size)
|
self.airfield_selector.availability_changed.connect(self.update_max_size)
|
||||||
layout.addLayout(QLabeledWidget("Airfield:", self.airfield_selector))
|
layout.addLayout(QLabeledWidget("Airfield:", self.airfield_selector))
|
||||||
|
|
||||||
self.flight_size_spinner = QFlightSizeSpinner()
|
self.flight_size_spinner = QFlightSizeSpinner()
|
||||||
self.update_max_size()
|
self.update_max_size(self.airfield_selector.available)
|
||||||
layout.addLayout(QLabeledWidget("Size:", self.flight_size_spinner))
|
layout.addLayout(QLabeledWidget("Size:", self.flight_size_spinner))
|
||||||
|
|
||||||
self.client_slots_spinner = QFlightSizeSpinner(
|
self.client_slots_spinner = QFlightSizeSpinner(
|
||||||
@ -91,6 +91,8 @@ class QFlightCreator(QDialog):
|
|||||||
return f"{origin.name} has no {aircraft.id} available."
|
return f"{origin.name} has no {aircraft.id} available."
|
||||||
if size > available:
|
if size > available:
|
||||||
return f"{origin.name} has only {available} {aircraft.id} available."
|
return f"{origin.name} has only {available} {aircraft.id} available."
|
||||||
|
if size <= 0:
|
||||||
|
return f"Flight must have at least one aircraft."
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def create_flight(self) -> None:
|
def create_flight(self) -> None:
|
||||||
@ -120,7 +122,8 @@ class QFlightCreator(QDialog):
|
|||||||
new_aircraft = self.aircraft_selector.itemData(index)
|
new_aircraft = self.aircraft_selector.itemData(index)
|
||||||
self.airfield_selector.change_aircraft(new_aircraft)
|
self.airfield_selector.change_aircraft(new_aircraft)
|
||||||
|
|
||||||
def update_max_size(self) -> None:
|
def update_max_size(self, available: int) -> None:
|
||||||
self.flight_size_spinner.setMaximum(
|
self.flight_size_spinner.setMaximum(min(available, 4))
|
||||||
min(self.airfield_selector.available, 4)
|
if self.flight_size_spinner.maximum() >= 2:
|
||||||
)
|
if self.flight_size_spinner.value() < 2:
|
||||||
|
self.flight_size_spinner.setValue(2)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user