diff --git a/qt_ui/widgets/QTopPanel.py b/qt_ui/widgets/QTopPanel.py
index fae3a11d..f75826ad 100644
--- a/qt_ui/widgets/QTopPanel.py
+++ b/qt_ui/widgets/QTopPanel.py
@@ -1,6 +1,12 @@
from typing import Optional
-from PySide2.QtWidgets import QFrame, QGroupBox, QHBoxLayout, QPushButton
+from PySide2.QtWidgets import (
+ QFrame,
+ QGroupBox,
+ QHBoxLayout,
+ QMessageBox,
+ QPushButton,
+)
import qt_ui.uiconstants as CONST
from game import Game
@@ -9,9 +15,10 @@ from qt_ui.widgets.QBudgetBox import QBudgetBox
from qt_ui.widgets.QFactionsInfos import QFactionsInfos
from qt_ui.widgets.QTurnCounter import QTurnCounter
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
+from qt_ui.windows.QWaitingForMissionResultWindow import \
+ QWaitingForMissionResultWindow
from qt_ui.windows.settings.QSettingsWindow import QSettingsWindow
from qt_ui.windows.stats.QStatsWindow import QStatsWindow
-from qt_ui.windows.QWaitingForMissionResultWindow import QWaitingForMissionResultWindow
class QTopPanel(QFrame):
@@ -101,8 +108,36 @@ class QTopPanel(QFrame):
GameUpdateSignal.get_instance().updateGame(self.game)
self.proceedButton.setEnabled(True)
+ def ato_has_clients(self) -> bool:
+ for package in self.game.blue_ato.packages:
+ for flight in package.flights:
+ if flight.client_count > 0:
+ return True
+ return False
+
+ def confirm_no_client_launch(self) -> bool:
+ result = QMessageBox.question(
+ self,
+ "Continue without client slots?",
+ ("No client slots have been created for players. Continuing will "
+ "allow the AI to perform the mission, but players will be unable "
+ "to participate.
"
+ "
"
+ "To add client slots for players, select a package from the "
+ "Packages panel on the left of the main window, and then a flight "
+ "from the Flights panel below the Packages panel. The edit button "
+ "below the Flights panel will allow you to edit the number of "
+ "client slots in the flight. Each client slot allows one player."),
+ QMessageBox.No,
+ QMessageBox.Yes
+ )
+ return result == QMessageBox.Yes
+
def launch_mission(self):
"""Finishes planning and waits for mission completion."""
+ if not self.ato_has_clients() and not self.confirm_no_client_launch():
+ return
+
# TODO: Refactor this nonsense.
game_event = None
for event in self.game.events: