def __init__(self, game: Game, flight: Flight, flight_waypoint_list):
        super(QPredefinedWaypointSelectionWindow, self).__init__()
        self.game = game
        self.flight = flight
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.setMinimumSize(400, 250)
        self.setModal(True)
        self.setWindowTitle("Add Predefined Waypoint")
        self.setWindowIcon(EVENT_ICONS["strike"])
        self.flight_waypoint_list = flight_waypoint_list

        self.wpt_selection_box = QPredefinedWaypointSelectionComboBox(
            self.game)
        self.wpt_selection_box.setMinimumWidth(200)
        self.wpt_selection_box.currentTextChanged.connect(
            self.on_select_wpt_changed)
        self.selected_waypoints = []
        self.wpt_info = QFlightWaypointInfoBox()

        self.add_button = QPushButton("Add")
        self.add_button.clicked.connect(self.add_waypoint)

        self.include_all = QCheckBox()
        self.include_all.stateChanged.connect(self.on_select_wpt_changed)
        self.include_all.setChecked(True)

        self.init_ui()
        self.on_select_wpt_changed()
class QAbstractMissionGenerator(QDialog):
    def __init__(self, game: Game, flight: Flight, flight_waypoint_list,
                 title):
        super(QAbstractMissionGenerator, self).__init__()
        self.game = game
        self.flight = flight
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.setMinimumSize(400, 250)
        self.setModal(True)
        self.setWindowTitle(title)
        self.setWindowIcon(EVENT_ICONS["strike"])
        self.flight_waypoint_list = flight_waypoint_list
        self.planner = self.game.planners[self.flight.from_cp.id]

        self.selected_waypoints = []
        self.wpt_info = QFlightWaypointInfoBox()

        self.ok_button = QPushButton("Ok")
        self.ok_button.clicked.connect(self.apply)

    def on_select_wpt_changed(self):
        self.selected_waypoints = self.wpt_selection_box.get_selected_waypoints(
            False)
        if self.selected_waypoints is None or len(
                self.selected_waypoints) <= 0:
            self.ok_button.setDisabled(True)
        else:
            self.wpt_info.set_flight_waypoint(self.selected_waypoints[0])
            self.ok_button.setDisabled(False)

    def apply(self):
        raise NotImplementedError()
    def __init__(self, game: Game, flight: Flight, flight_waypoint_list,
                 title):
        super(QAbstractMissionGenerator, self).__init__()
        self.game = game
        self.flight = flight
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.setMinimumSize(400, 250)
        self.setModal(True)
        self.setWindowTitle(title)
        self.setWindowIcon(EVENT_ICONS["strike"])
        self.flight_waypoint_list = flight_waypoint_list
        self.planner = self.game.planners[self.flight.from_cp.id]

        self.selected_waypoints = []
        self.wpt_info = QFlightWaypointInfoBox()

        self.ok_button = QPushButton("Ok")
        self.ok_button.clicked.connect(self.apply)
class QPredefinedWaypointSelectionWindow(QDialog):

    # List of FlightWaypoint
    waypoints_added = Signal(list)

    def __init__(self, game: Game, flight: Flight, flight_waypoint_list):
        super(QPredefinedWaypointSelectionWindow, self).__init__()
        self.game = game
        self.flight = flight
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.setMinimumSize(400, 250)
        self.setModal(True)
        self.setWindowTitle("Add Predefined Waypoint")
        self.setWindowIcon(EVENT_ICONS["strike"])
        self.flight_waypoint_list = flight_waypoint_list

        self.wpt_selection_box = QPredefinedWaypointSelectionComboBox(
            self.game)
        self.wpt_selection_box.setMinimumWidth(200)
        self.wpt_selection_box.currentTextChanged.connect(
            self.on_select_wpt_changed)
        self.selected_waypoints = []
        self.wpt_info = QFlightWaypointInfoBox()

        self.add_button = QPushButton("Add")
        self.add_button.clicked.connect(self.add_waypoint)

        self.include_all = QCheckBox()
        self.include_all.stateChanged.connect(self.on_select_wpt_changed)
        self.include_all.setChecked(True)

        self.init_ui()
        self.on_select_wpt_changed()

    def init_ui(self):
        layout = QVBoxLayout()

        wpt_layout = QHBoxLayout()
        wpt_layout.addWidget(QLabel("Waypoint : "))
        wpt_layout.addWidget(self.wpt_selection_box)
        wpt_layout.addStretch()

        include_all = QHBoxLayout()
        include_all.addWidget(
            QLabel("Include all objects from the same location : "))
        include_all.addWidget(self.include_all)
        include_all.addStretch()

        layout.addLayout(wpt_layout)
        layout.addWidget(self.wpt_info)
        layout.addLayout(include_all)
        layout.addStretch()
        layout.addWidget(self.add_button)

        self.setLayout(layout)

    def on_select_wpt_changed(self):
        self.selected_waypoints = self.wpt_selection_box.get_selected_waypoints(
            self.include_all.isChecked())
        if self.selected_waypoints is None or len(
                self.selected_waypoints) <= 0:
            self.add_button.setDisabled(True)
        else:
            self.wpt_info.set_flight_waypoint(self.selected_waypoints[0])
            self.add_button.setDisabled(False)

    def add_waypoint(self):
        self.waypoints_added.emit(self.selected_waypoints)
        self.close()