def __init__(self, parent): """ :param parent: an instance of type QMainWindow """ super(NewGameDialog, self).__init__() self.ui = Ui_NewGameDialog() self.ui.setupUi(self) self.setFixedSize(self.size()) self.setWindowFlags( self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint ) self.setModal(True) Helpers.center_dialog(self, parent) self._parent = parent self._grid_sizes = list() self._player_types = dict() self._set_combo_box_values()
class NewGameDialog(QDialog): """A dialog used to start a new game. """ def __init__(self, parent): """ :param parent: an instance of type QMainWindow """ super(NewGameDialog, self).__init__() self.ui = Ui_NewGameDialog() self.ui.setupUi(self) self.setFixedSize(self.size()) self.setWindowFlags( self.windowFlags() ^ QtCore.Qt.WindowContextHelpButtonHint ) self.setModal(True) Helpers.center_dialog(self, parent) self._parent = parent self._grid_sizes = list() self._player_types = dict() self._set_combo_box_values() def _set_combo_box_values(self): self._grid_sizes = [ GridSize.small, GridSize.medium, GridSize.large ] # fill the grid size combo box for grid_size in self._grid_sizes: grid_size_numerical = grid_size.value grid_size_textual = \ EnumConverters.grid_size_to_string_converter(grid_size) grid_size_caption = "{0} ({1}x{1})".format(grid_size_textual, grid_size_numerical) self.ui.comboBoxGridSize.addItem(grid_size_caption, QVariant(grid_size)) self._player_types[PlayerType.human] = Human.default() self._player_types[PlayerType.cpu] = CPU.default() player_one_textual = EnumConverters.player_type_to_string_converter( PlayerType.human ) player_two_textual = EnumConverters.player_type_to_string_converter( PlayerType.cpu ) # fill the player combo boxes self.ui.comboBoxPlayerOne.addItem( player_one_textual, QVariant(self._player_types[PlayerType.human])) self.ui.comboBoxPlayerTwo.addItem( player_two_textual, QVariant(self._player_types[PlayerType.cpu])) @pyqtSlot(name="pushButtonStartClick") def pushButtonStartClick(self): """Slot used when the "Start" button is clicked. """ # exctract selected values selected_grid_size = self.ui.comboBoxGridSize.itemData( self.ui.comboBoxGridSize.currentIndex() ) selected_player_one = self.ui.comboBoxPlayerOne.itemData( self.ui.comboBoxPlayerOne.currentIndex()) selected_player_two = self.ui.comboBoxPlayerTwo.itemData( self.ui.comboBoxPlayerTwo.currentIndex()) # initialize grids and fleets selected_player_one.grid = Grid(GridPosition.left, selected_grid_size) selected_player_two.grid = Grid(GridPosition.right, selected_grid_size) fleet_size_multiplier = \ EnumConverters.grid_size_to_fleet_size_multiplier_converter( selected_grid_size ) selected_player_one.fleet = Fleet(fleet_size_multiplier) selected_player_two.fleet = Fleet(fleet_size_multiplier) # create a new session new_session = Session(SessionType.offline, selected_player_one, selected_player_two) # fill the main window's data self._parent.session = new_session self._parent.grid_size = selected_grid_size self._parent.is_new_game = True self._parent.current_orientation = ShipOrientation.horizontal self._parent.current_ship_index = 0 player_one_label_text = self._parent.ui.playerOneLabel.text() player_one_text = self.ui.comboBoxPlayerOne.currentText() player_two_label_text = self._parent.ui.playerTwoLabel.text() player_two_text = self.ui.comboBoxPlayerTwo.currentText() if not self._parent.has_game_been_started: # append players' textual representations player_one_label_text += " - " + player_one_text self._parent.ui.playerOneLabel.setText(player_one_label_text) player_two_label_text += " - " + player_two_text self._parent.ui.playerTwoLabel.setText(player_two_label_text) self._parent.initialize_grids() self.close() @pyqtSlot(name="pushButtonCancelClick") def pushButtonCancelClick(self): """Slot used when the "Cancel" button is clicked. """ self.close()