예제 #1
0
    def __init__(self,
                 game_model: GameModel,
                 model: AtoModel,
                 target: MissionTarget,
                 parent=None) -> None:
        super().__init__(
            game_model,
            PackageModel(
                Package(target, game_model.game.db.flights, auto_asap=True),
                game_model),
            parent=parent,
        )
        self.ato_model = model

        # In the *new* package dialog, a package has been created and may have aircraft
        # assigned to it, but it is not a part of the ATO until the user saves it.
        #
        # Other actions (modifying settings, closing some other dialogs like the base
        # menu) can cause a Game update which will forcibly close this window without
        # either accepting or rejecting it, so we neither save the package nor release
        # any allocated units.
        #
        # While it would be preferable to be able to update this dialog as needed in the
        # event of game updates, the quick fix is to just not allow interaction with
        # other UI elements until the new package has either been finalized or canceled.
        self.setModal(True)

        self.save_button = QPushButton("Save")
        self.save_button.setProperty("style", "start-button")
        self.save_button.clicked.connect(self.accept)
        self.button_layout.addWidget(self.save_button)
예제 #2
0
    def __init__(self, game_model: GameModel, model: AtoModel,
                 target: MissionTarget, parent=None) -> None:
        super().__init__(game_model, PackageModel(Package(target)), parent=parent)
        self.ato_model = model

        self.save_button = QPushButton("Save")
        self.save_button.setProperty("style", "start-button")
        self.save_button.clicked.connect(self.accept)
        self.button_layout.addWidget(self.save_button)
예제 #3
0
    def __init__(self,
                 game_model: GameModel,
                 model: PackageModel,
                 parent=None) -> None:
        super().__init__(parent)
        self.game_model = game_model
        self.package_model = model
        self.add_flight_dialog: Optional[QFlightCreator] = None

        self.setMinimumSize(1000, 440)
        self.setWindowTitle(
            f"Mission Package: {self.package_model.mission_target.name}")
        self.setWindowIcon(EVENT_ICONS["strike"])

        self.layout = QVBoxLayout()

        self.summary_row = QHBoxLayout()
        self.layout.addLayout(self.summary_row)

        self.package_type_column = QHBoxLayout()
        self.summary_row.addLayout(self.package_type_column)

        self.package_type_label = QLabel("Package Type:")
        self.package_type_text = QLabel(self.package_model.description)
        # noinspection PyUnresolvedReferences
        self.package_changed.connect(lambda: self.package_type_text.setText(
            self.package_model.description))
        self.package_type_column.addWidget(self.package_type_label)
        self.package_type_column.addWidget(self.package_type_text)

        self.summary_row.addStretch(1)

        self.tot_column = QHBoxLayout()
        self.summary_row.addLayout(self.tot_column)

        self.tot_label = QLabel("Time Over Target:")
        self.tot_column.addWidget(self.tot_label)

        self.tot_spinner = QTimeEdit(self.tot_qtime())
        self.tot_spinner.setMinimumTime(QTime(0, 0))
        self.tot_spinner.setDisplayFormat("T+hh:mm:ss")
        self.tot_spinner.timeChanged.connect(self.save_tot)
        self.tot_spinner.setToolTip("Package TOT relative to mission TOT")
        self.tot_spinner.setEnabled(not self.package_model.package.auto_asap)
        self.tot_column.addWidget(self.tot_spinner)

        self.auto_asap = QCheckBox("ASAP")
        self.auto_asap.setToolTip(
            "Sets the package TOT to the earliest time that all flights can "
            "arrive at the target.")
        self.auto_asap.setChecked(self.package_model.package.auto_asap)
        self.auto_asap.toggled.connect(self.set_asap)
        self.tot_column.addWidget(self.auto_asap)

        self.tot_help_label = QLabel(
            "<a href=\"https://github.com/Khopa/dcs_liberation/wiki/Mission-planning\"><span style=\"color:#FFFFFF;\">Help</span></a>"
        )
        self.tot_help_label.setAlignment(Qt.AlignCenter)
        self.tot_help_label.setOpenExternalLinks(True)
        self.tot_column.addWidget(self.tot_help_label)

        self.package_view = QFlightList(self.game_model, self.package_model)
        self.package_view.selectionModel().selectionChanged.connect(
            self.on_selection_changed)
        self.layout.addWidget(self.package_view)

        self.button_layout = QHBoxLayout()
        self.layout.addLayout(self.button_layout)

        self.add_flight_button = QPushButton("Add Flight")
        self.add_flight_button.clicked.connect(self.on_add_flight)
        self.button_layout.addWidget(self.add_flight_button)

        self.delete_flight_button = QPushButton("Delete Selected")
        self.delete_flight_button.setProperty("style", "btn-danger")
        self.delete_flight_button.clicked.connect(self.on_delete_flight)
        self.delete_flight_button.setEnabled(model.rowCount() > 0)
        self.button_layout.addWidget(self.delete_flight_button)

        self.package_model.tot_changed.connect(self.update_tot)

        self.button_layout.addStretch()

        self.setLayout(self.layout)

        self.accepted.connect(self.on_save)
        self.finished.connect(self.on_close)
        self.rejected.connect(self.on_cancel)
예제 #4
0
    def __init__(self, game_model: GameModel, model: PackageModel, parent=None) -> None:
        super().__init__(parent)
        self.game_model = game_model
        self.package_model = model
        self.add_flight_dialog: Optional[QFlightCreator] = None

        self.setMinimumSize(1000, 440)
        self.setWindowTitle(
            f"Mission Package: {self.package_model.mission_target.name}"
        )
        self.setWindowIcon(EVENT_ICONS["strike"])

        self.layout = QVBoxLayout()

        self.summary_row = QHBoxLayout()
        self.layout.addLayout(self.summary_row)

        self.package_type_column = QHBoxLayout()
        self.summary_row.addLayout(self.package_type_column)

        self.package_type_label = QLabel("Package Type:")
        self.package_type_text = QLabel(self.package_model.description)
        # noinspection PyUnresolvedReferences
        self.package_changed.connect(lambda: self.package_type_text.setText(
            self.package_model.description
        ))
        self.package_type_column.addWidget(self.package_type_label)
        self.package_type_column.addWidget(self.package_type_text)

        self.summary_row.addStretch(1)

        self.tot_column = QHBoxLayout()
        self.summary_row.addLayout(self.tot_column)

        self.tot_label = QLabel("Time Over Target:")
        self.tot_column.addWidget(self.tot_label)

        self.tot_spinner = QTimeEdit(self.tot_qtime())
        self.tot_spinner.setMinimumTime(QTime(0, 0))
        self.tot_spinner.setDisplayFormat("T+hh:mm:ss")
        self.tot_spinner.timeChanged.connect(self.save_tot)
        self.tot_column.addWidget(self.tot_spinner)

        self.reset_tot_button = QPushButton("ASAP")
        self.reset_tot_button.setToolTip(
            "Sets the package TOT to the earliest time that all flights can "
            "arrive at the target."
        )
        self.reset_tot_button.clicked.connect(self.reset_tot)
        self.tot_column.addWidget(self.reset_tot_button)

        self.package_view = QFlightList(self.game_model, self.package_model)
        self.package_view.selectionModel().selectionChanged.connect(
            self.on_selection_changed
        )
        self.layout.addWidget(self.package_view)

        self.button_layout = QHBoxLayout()
        self.layout.addLayout(self.button_layout)

        self.add_flight_button = QPushButton("Add Flight")
        self.add_flight_button.clicked.connect(self.on_add_flight)
        self.button_layout.addWidget(self.add_flight_button)

        self.delete_flight_button = QPushButton("Delete Selected")
        self.delete_flight_button.setProperty("style", "btn-danger")
        self.delete_flight_button.clicked.connect(self.on_delete_flight)
        self.delete_flight_button.setEnabled(model.rowCount() > 0)
        self.button_layout.addWidget(self.delete_flight_button)

        self.button_layout.addStretch()

        self.setLayout(self.layout)

        self.accepted.connect(self.on_save)
        self.finished.connect(self.on_close)
        self.rejected.connect(self.on_cancel)