Example #1
0
    def createWidgets(self):
        self.stacked = QStackedWidget(self)

        self.game_list = GameList(self)
        self.create_game = CreateGame(self)
        self.setup_game = SetupGame(self)
        self.awale = Awale(self)
        self.mille_bornes = MilleBornes(self)

        self._addPage(self.game_list)
        self._addPage(self.create_game)
        self._addPage(self.setup_game)
        self._addPage(self.awale)
        self._addPage(self.mille_bornes)

        self.setCentralWidget(self.stacked)
Example #2
0
class MainWindow(QMainWindow):
    def __init__(self, app):
        QMainWindow.__init__(self)
        self.options = self.parseOptions()

        if self.options.debug:
            level = DEBUG
        elif self.options.verbose:
            level = INFO
        else:
            level = ERROR
        setupStdoutLog(level)

        self.app = app
        self.async_response = AsyncReponse()
        self.pages = []
        self.client = QtClient(self)
        self.setup()
        self.createWidgets()

    def _addPage(self, page):
        page.page_index = len(self.pages)
        self.pages.append(page)
        self.stacked.addWidget(page.widget)

    def createWidgets(self):
        self.stacked = QStackedWidget(self)

        self.game_list = GameList(self)
        self.create_game = CreateGame(self)
        self.setup_game = SetupGame(self)
        self.awale = Awale(self)
        self.mille_bornes = MilleBornes(self)

        self._addPage(self.game_list)
        self._addPage(self.create_game)
        self._addPage(self.setup_game)
        self._addPage(self.awale)
        self._addPage(self.mille_bornes)

        self.setCentralWidget(self.stacked)

    def parseOptions(self):
        parser = OptionParser(usage="%prog [options]")
        parser.add_option("--name",
            help='Player name (default: %s)' % DEFAULT_PLAYER_NAME,
            type="str", default=DEFAULT_PLAYER_NAME)
        parser.add_option("--host",
            help='Host name or IP (default: %s)' % DEFAULT_HOST,
            type="str", default=DEFAULT_HOST)
        parser.add_option("--port",
            help='Server TCP port (default: %s)' % DEFAULT_PORT,
            type="int", default=DEFAULT_PORT)
        parser.add_option("-v", "--verbose",
            help="Verbose mode",
            action="store_true", default=False)
        parser.add_option("--debug",
            help="Debug mode (don't call any service at startup)",
            action="store_true", default=False)
        parser.add_option("--create", metavar="GAME_TYPE",
            help="Create directly a game of type GAME_TYPE",
            type="str")
        parser.add_option("--join", metavar="GAME_ID",
            help="Join directly the game GAME_ID",
            type="int")
        options, arguments = parser.parse_args()
        if options.debug:
            options.verbose = True
        if arguments:
            parser.print_help()
            exit(1)
        return options

    def connectClient(self):
        self.client.connect(self.options.host, self.options.port)
        name = unicode(self.options.name)
        self.client.createPlayer(name)
        self.gotoGameListPage()

    def setup(self):
        self.app.setQuitOnLastWindowClosed(True)
        self.setWindowTitle(tr('Player %s') % self.options.name)

    def setActivePage(self, new_page):
        old_index = self.stacked.currentIndex()
        old_page = self.pages[old_index]
        old_page.exitPage()
        self.stacked.setCurrentIndex(new_page.page_index)
        new_page.enterPage()

    def gotoGameListPage(self):
        self.game_list.refresh()
        self.setActivePage(self.game_list)

    def gotoCreateGamePage(self):
        self.setActivePage(self.create_game)

    def gotoSetupGamePage(self, game):
        self.setup_game.init(game['id'], game['type'])
        self.setActivePage(self.setup_game)

    def gotoAwalePage(self, game_id):
        self.awale.init(game_id)
        self.setActivePage(self.awale)

    def gotoMilleBornesPage(self, game_id):
        self.mille_bornes.init(game_id)
        self.setActivePage(self.mille_bornes)

    def closeEvent(self, event):
        self.quit()

    def quit(self):
        self.client.quit()

    def infoPopup(self, text, title=None):
        if not title:
            title = tr("Information")
        QMessageBox.information(self, title, text)

    def errorPopup(self, text, title=None):
        if not title:
            title = tr("Error")
        QMessageBox.warning(self, title, text)

    def exception(self, err, title=None):
        text = exceptionAsUnicode(err)
        self.errorPopup(text, title)

    def main(self):
        create = self.options.create
        game_id = self.options.join
        if create:
            game = self.client.command(u'game_create',
                self.client.player_id, unicode(create), u'create')
            self.gotoSetupGamePage(game)
        elif game_id:
            game = self.client.command(u'game_info', [game_id])[0]
            self.client.command(u'game_join',
                game_id, self.client.player_id)
            self.gotoSetupGamePage(game)
        self.show()