diff --git a/game/ato/package.py b/game/ato/package.py index e80d23f8..dea9c166 100644 --- a/game/ato/package.py +++ b/game/ato/package.py @@ -22,10 +22,15 @@ class Package: """A mission package.""" def __init__( - self, target: MissionTarget, db: Database[Flight], auto_asap: bool = False + self, + target: MissionTarget, + db: Database[Flight], + auto_asap: bool = False, + custom_name: str | None = None, ) -> None: self.target = target self._db = db + self.custom_name = custom_name # True if the package ToT should be reset to ASAP whenever the player makes a # change. This is really a UI property rather than a game property, but we want diff --git a/game/migrator.py b/game/migrator.py index 8f4efc0d..085c2d1d 100644 --- a/game/migrator.py +++ b/game/migrator.py @@ -17,6 +17,7 @@ class Migrator: def _migrate_game(self) -> None: self._update_doctrine() self._update_packagewaypoints() + self._update_package_attributes() def _update_doctrine(self) -> None: doctrines = [ @@ -41,3 +42,9 @@ class Migrator: for p in c.ato.packages: if not hasattr(p.waypoints, "initial"): p.waypoints = PackageWaypoints.create(p, c) + + def _update_package_attributes(self) -> None: + for c in self.game.coalitions: + for p in c.ato.packages: + if not hasattr(p, "custom_name"): + p.custom_name = None diff --git a/qt_ui/widgets/ato.py b/qt_ui/widgets/ato.py index 61ce06b5..3b8ff334 100644 --- a/qt_ui/widgets/ato.py +++ b/qt_ui/widgets/ato.py @@ -277,7 +277,10 @@ class PackageDelegate(TwoColumnRowDelegate): def text_for(self, index: QModelIndex, row: int, column: int) -> str: package = self.package(index) if (row, column) == (0, 0): - return f"{package.package_description} {package.target.name}" + string = f"{package.package_description} {package.target.name}" + if package.custom_name: + string = string + f" ({package.custom_name})" + return string elif (row, column) == (0, 1): clients = self.num_clients(index) return f"Player Slots: {clients}" if clients else "" diff --git a/qt_ui/windows/mission/QPackageDialog.py b/qt_ui/windows/mission/QPackageDialog.py index 9d3d7ee2..306a25d1 100644 --- a/qt_ui/windows/mission/QPackageDialog.py +++ b/qt_ui/windows/mission/QPackageDialog.py @@ -13,6 +13,7 @@ from PySide2.QtWidgets import ( QPushButton, QTimeEdit, QVBoxLayout, + QLineEdit, ) from game.ato.flight import Flight @@ -69,6 +70,17 @@ class QPackageDialog(QDialog): self.summary_row.addStretch(1) + self.package_name_column = QVBoxLayout() + self.summary_row.addLayout(self.package_name_column) + self.package_name_label = QLabel("Package Name:") + self.package_name_label.setAlignment(Qt.AlignCenter) + self.package_name_text = QLineEdit(self.package_model.package.custom_name) + self.package_name_text.textChanged.connect(self.on_change_name) + self.package_name_column.addWidget(self.package_name_label) + self.package_name_column.addWidget(self.package_name_text) + + self.summary_row.addStretch(1) + self.tot_column = QHBoxLayout() self.summary_row.addLayout(self.tot_column) @@ -203,6 +215,9 @@ class QPackageDialog(QDialog): # noinspection PyUnresolvedReferences self.package_changed.emit() + def on_change_name(self) -> None: + self.package_model.package.custom_name = self.package_name_text.text() + class QNewPackageDialog(QPackageDialog): """Dialog window for creating a new package.