mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
parent
6d0ac603f2
commit
62d1a89269
@ -276,3 +276,15 @@ class Flight(SidcDescribable):
|
|||||||
|
|
||||||
self._flight_plan_builder.regenerate()
|
self._flight_plan_builder.regenerate()
|
||||||
EventStream.put_nowait(GameUpdateEvents().update_flight(self))
|
EventStream.put_nowait(GameUpdateEvents().update_flight(self))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clone_flight(flight: Flight) -> Flight:
|
||||||
|
return Flight(
|
||||||
|
flight.package,
|
||||||
|
flight.country,
|
||||||
|
flight.squadron,
|
||||||
|
flight.count,
|
||||||
|
flight.flight_type,
|
||||||
|
flight.start_type,
|
||||||
|
flight.divert,
|
||||||
|
)
|
||||||
|
|||||||
@ -214,3 +214,12 @@ class Package:
|
|||||||
if flight.departure == airfield:
|
if flight.departure == airfield:
|
||||||
return airfield
|
return airfield
|
||||||
raise RuntimeError("Could not find any airfield assigned to this package")
|
raise RuntimeError("Could not find any airfield assigned to this package")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clone_package(package: Package) -> Package:
|
||||||
|
clone = Package(package.target, package._db, package.auto_asap)
|
||||||
|
clone.time_over_target = package.time_over_target
|
||||||
|
for f in package.flights:
|
||||||
|
cf = Flight.clone_flight(f)
|
||||||
|
clone.add_flight(cf)
|
||||||
|
return clone
|
||||||
|
|||||||
@ -23,6 +23,7 @@ from PySide2.QtWidgets import (
|
|||||||
QPushButton,
|
QPushButton,
|
||||||
QSplitter,
|
QSplitter,
|
||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
|
QMessageBox,
|
||||||
)
|
)
|
||||||
|
|
||||||
from game.ato.flight import Flight
|
from game.ato.flight import Flight
|
||||||
@ -128,6 +129,19 @@ class QFlightList(QListView):
|
|||||||
parent=self.window(),
|
parent=self.window(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def clone_flight(self, index: QModelIndex) -> None:
|
||||||
|
flight = self.package_model.flight_at_index(index)
|
||||||
|
try:
|
||||||
|
clone = Flight.clone_flight(flight)
|
||||||
|
except ValueError as ve:
|
||||||
|
QMessageBox.critical(
|
||||||
|
None,
|
||||||
|
"Can't clone flight!",
|
||||||
|
f"Insufficient aircraft to clone flight:\n\n{ve}",
|
||||||
|
)
|
||||||
|
return
|
||||||
|
self.package_model.add_flight(clone)
|
||||||
|
|
||||||
def cancel_or_abort_flight(self, index: QModelIndex) -> None:
|
def cancel_or_abort_flight(self, index: QModelIndex) -> None:
|
||||||
self.package_model.cancel_or_abort_flight_at_index(index)
|
self.package_model.cancel_or_abort_flight_at_index(index)
|
||||||
|
|
||||||
@ -180,8 +194,12 @@ class QFlightPanel(QGroupBox):
|
|||||||
self.edit_button.clicked.connect(self.on_edit)
|
self.edit_button.clicked.connect(self.on_edit)
|
||||||
self.button_row.addWidget(self.edit_button)
|
self.button_row.addWidget(self.edit_button)
|
||||||
|
|
||||||
|
self.clone_button = QPushButton("Clone")
|
||||||
|
self.clone_button.setProperty("style", "btn-success")
|
||||||
|
self.clone_button.clicked.connect(self.on_clone)
|
||||||
|
self.button_row.addWidget(self.clone_button)
|
||||||
|
|
||||||
self.delete_button = QPushButton("Cancel")
|
self.delete_button = QPushButton("Cancel")
|
||||||
# noinspection PyTypeChecker
|
|
||||||
self.delete_button.setProperty("style", "btn-danger")
|
self.delete_button.setProperty("style", "btn-danger")
|
||||||
self.delete_button.clicked.connect(self.on_cancel_flight)
|
self.delete_button.clicked.connect(self.on_cancel_flight)
|
||||||
self.button_row.addWidget(self.delete_button)
|
self.button_row.addWidget(self.delete_button)
|
||||||
@ -206,6 +224,7 @@ class QFlightPanel(QGroupBox):
|
|||||||
index = self.flight_list.currentIndex()
|
index = self.flight_list.currentIndex()
|
||||||
enabled = index.isValid()
|
enabled = index.isValid()
|
||||||
self.edit_button.setEnabled(enabled)
|
self.edit_button.setEnabled(enabled)
|
||||||
|
self.clone_button.setEnabled(enabled)
|
||||||
self.delete_button.setEnabled(enabled)
|
self.delete_button.setEnabled(enabled)
|
||||||
self.change_map_flight_selection(index)
|
self.change_map_flight_selection(index)
|
||||||
delete_text = "Cancel"
|
delete_text = "Cancel"
|
||||||
@ -230,6 +249,13 @@ class QFlightPanel(QGroupBox):
|
|||||||
return
|
return
|
||||||
self.flight_list.edit_flight(index)
|
self.flight_list.edit_flight(index)
|
||||||
|
|
||||||
|
def on_clone(self) -> None:
|
||||||
|
index = self.flight_list.currentIndex()
|
||||||
|
if not index.isValid():
|
||||||
|
logging.error(f"Cannot clone flight when no flight is selected.")
|
||||||
|
return
|
||||||
|
self.flight_list.clone_flight(index)
|
||||||
|
|
||||||
def on_cancel_flight(self) -> None:
|
def on_cancel_flight(self) -> None:
|
||||||
"""Removes the selected flight from the package."""
|
"""Removes the selected flight from the package."""
|
||||||
index = self.flight_list.currentIndex()
|
index = self.flight_list.currentIndex()
|
||||||
@ -306,6 +332,19 @@ class QPackageList(QListView):
|
|||||||
|
|
||||||
Dialog.open_edit_package_dialog(self.ato_model.get_package_model(index))
|
Dialog.open_edit_package_dialog(self.ato_model.get_package_model(index))
|
||||||
|
|
||||||
|
def clone_package(self, index: QModelIndex) -> None:
|
||||||
|
package_model = self.ato_model.get_package_model(index)
|
||||||
|
try:
|
||||||
|
clone = Package.clone_package(package_model.package)
|
||||||
|
except ValueError as ve:
|
||||||
|
QMessageBox.critical(
|
||||||
|
None,
|
||||||
|
"Can't clone package!",
|
||||||
|
f"Insufficient aircraft to clone package:\n\n{ve}",
|
||||||
|
)
|
||||||
|
return
|
||||||
|
self.ato_model.add_package(clone)
|
||||||
|
|
||||||
def delete_package(self, index: QModelIndex) -> None:
|
def delete_package(self, index: QModelIndex) -> None:
|
||||||
self.ato_model.cancel_or_abort_package_at_index(index)
|
self.ato_model.cancel_or_abort_package_at_index(index)
|
||||||
|
|
||||||
@ -370,8 +409,12 @@ class QPackagePanel(QGroupBox):
|
|||||||
self.edit_button.clicked.connect(self.on_edit)
|
self.edit_button.clicked.connect(self.on_edit)
|
||||||
self.button_row.addWidget(self.edit_button)
|
self.button_row.addWidget(self.edit_button)
|
||||||
|
|
||||||
|
self.clone_button = QPushButton("Clone")
|
||||||
|
self.clone_button.setProperty("style", "btn-success")
|
||||||
|
self.clone_button.clicked.connect(self.on_clone)
|
||||||
|
self.button_row.addWidget(self.clone_button)
|
||||||
|
|
||||||
self.delete_button = QPushButton("Cancel/abort")
|
self.delete_button = QPushButton("Cancel/abort")
|
||||||
# noinspection PyTypeChecker
|
|
||||||
self.delete_button.setProperty("style", "btn-danger")
|
self.delete_button.setProperty("style", "btn-danger")
|
||||||
self.delete_button.clicked.connect(self.on_delete)
|
self.delete_button.clicked.connect(self.on_delete)
|
||||||
self.button_row.addWidget(self.delete_button)
|
self.button_row.addWidget(self.delete_button)
|
||||||
@ -389,6 +432,7 @@ class QPackagePanel(QGroupBox):
|
|||||||
index = self.package_list.currentIndex()
|
index = self.package_list.currentIndex()
|
||||||
enabled = index.isValid()
|
enabled = index.isValid()
|
||||||
self.edit_button.setEnabled(enabled)
|
self.edit_button.setEnabled(enabled)
|
||||||
|
self.clone_button.setEnabled(enabled)
|
||||||
self.delete_button.setEnabled(enabled)
|
self.delete_button.setEnabled(enabled)
|
||||||
self.change_map_package_selection(index)
|
self.change_map_package_selection(index)
|
||||||
|
|
||||||
@ -415,6 +459,13 @@ class QPackagePanel(QGroupBox):
|
|||||||
return
|
return
|
||||||
self.package_list.edit_package(index)
|
self.package_list.edit_package(index)
|
||||||
|
|
||||||
|
def on_clone(self) -> None:
|
||||||
|
index = self.package_list.currentIndex()
|
||||||
|
if not index.isValid():
|
||||||
|
logging.error(f"Cannot clone package when no package is selected.")
|
||||||
|
return
|
||||||
|
self.package_list.clone_package(index)
|
||||||
|
|
||||||
def on_delete(self) -> None:
|
def on_delete(self) -> None:
|
||||||
"""Removes the package from the ATO."""
|
"""Removes the package from the ATO."""
|
||||||
index = self.package_list.currentIndex()
|
index = self.package_list.currentIndex()
|
||||||
|
|||||||
@ -135,12 +135,12 @@ QPushButton[style="btn-success"] , QPushButton[style="start-button"]{
|
|||||||
background-color:#82A466;
|
background-color:#82A466;
|
||||||
color: white;
|
color: white;
|
||||||
border-radius:2px;
|
border-radius:2px;
|
||||||
font-weight:bold;
|
|
||||||
text-transform:uppercase;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QPushButton[style="start-button"]{
|
QPushButton[style="start-button"]{
|
||||||
padding: 8px 30px;
|
padding: 8px 30px;
|
||||||
|
font-weight:bold;
|
||||||
|
text-transform:uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
QPushButton[style="btn-success"]:hover , QPushButton[style="start-button"]:hover{
|
QPushButton[style="btn-success"]:hover , QPushButton[style="start-button"]:hover{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user