def populatePlayersGroupBox(self): self.playersGroupBoxLayout = QVBoxLayout( self.playersGroupBox) # Start button self.startGameButton = QPushButton(self) self.startGameButton.clicked.connect(self.createNewGame) self.playersGroupBoxLayout.addWidget(self.startGameButton) self.inGameGroup = QGroupBox(self) self.playersGroupBoxLayout.addWidget(self.inGameGroup) self.inGameGroupLayout = QVBoxLayout(self.inGameGroup) self.playersInGameList = PlayerList(None, self.inGameGroup) self.inGameGroup.setMaximumHeight(280) self.inGameGroupLayout.addWidget(self.playersInGameList) self.playersButtonsLayout = QHBoxLayout() self.playersGroupBoxLayout.addLayout(self.playersButtonsLayout) self.newPlayerButton = QPushButton(self.playersGroupBox) self.newPlayerButton.clicked.connect(self.createNewPlayer) self.playersButtonsLayout.addWidget(self.newPlayerButton) self.availablePlayersGroup = QGroupBox(self) self.playersGroupBoxLayout.addWidget(self.availablePlayersGroup) self.availablePlayersGroupLayout = QVBoxLayout( self.availablePlayersGroup) self.playersAvailableList = PlayerList(None, self.playersGroupBox) self.availablePlayersGroupLayout.addWidget(self.playersAvailableList) # self.availablePlayersGroupLayout.addStretch() self.playersAvailableList.doubleclickeditem.connect( self.playersInGameList.addItem) self.playersInGameList.doubleclickeditem.connect( self.playersAvailableList.addItem) self.playersInGameList.changed.connect(self.updateStats) for p in db.getPlayers(): if p['favourite']: self.playersInGameList.addItem(p['nick']) else: self.playersAvailableList.addItem(p['nick'])
class NewGameWidget(Tab): def __init__(self, parent=None): super(NewGameWidget, self).__init__(parent) self.parent = parent self.initUI() def initUI(self): # Setup Layouts self.widgetLayout = QHBoxLayout(self) self.leftColumnLayout = QVBoxLayout() self.rightColumnLayout = QVBoxLayout() self.widgetLayout.addLayout(self.leftColumnLayout) self.widgetLayout.addLayout(self.rightColumnLayout) self.gameStatsBox = None # Players GroupBox self.playersGroupBox = QGroupBox(self) self.rightColumnLayout.addWidget(self.playersGroupBox) self.widgetLayout.setStretchFactor(self.rightColumnLayout, 1) self.populatePlayersGroupBox() # Game GroupBox self.gameGroupBox = QGroupBox(self) self.leftColumnLayout.addWidget(self.gameGroupBox) self.widgetLayout.setStretchFactor(self.leftColumnLayout, 3) self.populateGamesGroupBox() # self.retranslateUI() def retranslateUI(self): self.gameGroupBox.setTitle( i18n("NewGameWidget", "Games")) self.updateGameInfo() self.playersGroupBox.setTitle( i18n("NewGameWidget", "Players")) self.availablePlayersGroup.setTitle( i18n("NewGameWidget", "Available Players")) self.newPlayerButton.setText( i18n("NewGameWidget", "New Player")) self.inGameGroup.setTitle(i18n( "NewGameWidget", "Selected Players")) self.startGameButton.setText( i18n("NewGameWidget", "Play!")) self.resumeGroup.retranslateUI() self.gameStatsBox.retranslateUI() def populateGamesGroupBox(self): self.gameGroupBoxLayout = QVBoxLayout(self.gameGroupBox) self.gameComboBox = QComboBox(self.gameGroupBox) self.gameGroupBoxLayout.addWidget(self.gameComboBox) self.gameDescriptionLabel = QLabel(self.gameGroupBox) self.resumeGroup = ResumeBox(self.parent) self.resumeGroup.restartRequested.connect(self.restartGame) # self.gameRulesBrowser = QTextBrowser(self.gameGroupBox) self.gameGroupBoxLayout.addWidget(self.gameDescriptionLabel) self.gameGroupBoxLayout.addWidget(self.resumeGroup) # self.gameGroupBoxLayout.addWidget(self.gameRulesBrowser) # self.gameGroupBoxLayout.addStretch() self.games = db.getAvailableGames() for game in sorted(self.games.keys()): self.gameComboBox.addItem(game) lastgame = db.getLastGame() if lastgame: self.gameComboBox.setCurrentIndex( self.gameComboBox.findText(lastgame)) self.gameStatsBox = None # self.updateGameInfo() self.gameComboBox.currentIndexChanged.connect(self.updateGameInfo) def updateGameInfo(self, foo=0): game = str(self.gameComboBox.currentText()) description = "2 - {} {}\n\n{}".format( self.games[game]['maxPlayers'], i18n("NewGameWidget", 'players'), self.games[game]['description']) self.gameDescriptionLabel.setText(description) # self.gameRulesBrowser.setText("{}".format(self.games[game]['rules'])) # self.gameStatsBox.update(game) if self.gameStatsBox is not None: self.gameGroupBoxLayout.removeWidget(self.gameStatsBox) # print("UGI deleting") self.gameStatsBox.deleteLater() self.gameStatsBox = QSFactory.createQS(game, None, self) self.gameGroupBoxLayout.addWidget(self.gameStatsBox) self.updateStats() self.resumeGroup.changeGame(game) def updateStats(self): if self.gameStatsBox: try: self.gameStatsBox.update(self.gameComboBox.currentText( ), self.playersInGameList.model().retrievePlayers()) except TypeError: # Should not happen, but silently ignore pass def populatePlayersGroupBox(self): self.playersGroupBoxLayout = QVBoxLayout( self.playersGroupBox) # Start button self.startGameButton = QPushButton(self) self.startGameButton.clicked.connect(self.createNewGame) self.playersGroupBoxLayout.addWidget(self.startGameButton) self.inGameGroup = QGroupBox(self) self.playersGroupBoxLayout.addWidget(self.inGameGroup) self.inGameGroupLayout = QVBoxLayout(self.inGameGroup) self.playersInGameList = PlayerList(None, self.inGameGroup) self.inGameGroup.setMaximumHeight(280) self.inGameGroupLayout.addWidget(self.playersInGameList) self.playersButtonsLayout = QHBoxLayout() self.playersGroupBoxLayout.addLayout(self.playersButtonsLayout) self.newPlayerButton = QPushButton(self.playersGroupBox) self.newPlayerButton.clicked.connect(self.createNewPlayer) self.playersButtonsLayout.addWidget(self.newPlayerButton) self.availablePlayersGroup = QGroupBox(self) self.playersGroupBoxLayout.addWidget(self.availablePlayersGroup) self.availablePlayersGroupLayout = QVBoxLayout( self.availablePlayersGroup) self.playersAvailableList = PlayerList(None, self.playersGroupBox) self.availablePlayersGroupLayout.addWidget(self.playersAvailableList) # self.availablePlayersGroupLayout.addStretch() self.playersAvailableList.doubleclickeditem.connect( self.playersInGameList.addItem) self.playersInGameList.doubleclickeditem.connect( self.playersAvailableList.addItem) self.playersInGameList.changed.connect(self.updateStats) for p in db.getPlayers(): if p['favourite']: self.playersInGameList.addItem(p['nick']) else: self.playersAvailableList.addItem(p['nick']) def createNewGame(self): game = str(self.gameComboBox.currentText()) maxPlayers = self.games[game]['maxPlayers'] players = self.playersInGameList.model().retrievePlayers() tit = i18n("NewGameWidget", "New Match") if len(players) < 2: msg = i18n( "NewGameWidget", "At least 2 players are needed to play") QMessageBox.warning(self, tit, msg) elif len(players) > maxPlayers: msg = i18n("NewGameWidget", 'The maximum number of players is') QMessageBox.warning(self, tit, "{} {}".format(msg, maxPlayers)) else: matchTab = GameWidgetFactory.createGameWidget( game, players, self.parent) if matchTab: matchTab.closeRequested.connect(self.parent.removeTab) matchTab.restartRequested.connect(self.restartGame) self.parent.newTab(matchTab, game) else: QMessageBox.warning(self, tit, i18n("NewGameWidget", "Widget not implemented")) return def restartGame(self, gamewidget): players = gamewidget.players game = gamewidget.game self.parent.removeTab(gamewidget) matchTab = GameWidgetFactory.createGameWidget( game, players, self.parent) if matchTab: matchTab.closeRequested.connect(self.parent.removeTab) matchTab.restartRequested.connect(self.restartGame) self.parent.newTab(matchTab, game) else: QMessageBox.warning(self, tit, i18n("NewGameWidget", "Widget not implemented")) return def createNewPlayer(self): npd = NewPlayerDialog(self) npd.addedNewPlayer.connect(self.addPlayer) npd.exec_() def addPlayer(self, player): player = str(player) self.playersAvailableList.model().addPlayer(player) def showEvent(self, event): if (hasattr(self, 'gameStatsBox') and hasattr(self, 'gameComboBox') and self.gameComboBox.currentText()): self.gameStatsBox.update(self.gameComboBox.currentText()) self.resumeGroup.changeGame(self.gameComboBox.currentText()) return QWidget.showEvent(self, event)