/*************************************************************************** * Copyright (C) 2009 by Stefan Bühler * * stbuehler@web.de * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "game.h" #include #include #include #include #include #include #include #include #include #include "ai.h" namespace toruschess { static QAction *makeAction(QObject *parent, const QString &text, const QObject * receiver, const char * member, const QKeySequence &shortcut = QKeySequence(), QActionGroup *group = NULL) { QAction *a = new QAction(text, parent); a->setShortcut(shortcut); if (group) a->setActionGroup(group); QObject::connect(a, SIGNAL(triggered(bool)), receiver, member); return a; } GameWidget::GameWidget(QWidget *parent) : QMainWindow(parent), m_game(new Game()), m_optionDlg(new OptionDlg(m_game, this)), m_viewMode((ViewMode) -1) { connect(this, SIGNAL(changedViewMode(ViewMode)), m_optionDlg, SLOT(changedViewMode(ViewMode))); connect(m_optionDlg, SIGNAL(setViewMode(ViewMode)), this, SLOT(setViewMode(ViewMode))); setWindowTitle("Torus Chess"); QWidget *centralWidget = new QWidget(this); m_fieldsLayout = new QStackedLayout(centralWidget); m_field2d = new Field2D(m_game, centralWidget); m_field3d = new Field3D(m_game, centralWidget); m_fieldsLayout->addWidget(m_field2d); m_fieldsLayout->addWidget(m_field3d); centralWidget->setLayout(m_fieldsLayout); setCentralWidget(centralWidget); statusBar()->show(); connect(m_game, SIGNAL(changed(GameState)), this, SLOT(gameChanged(GameState))); m_game->restart(); QAction *act_game_newGame = makeAction(this, "&New Game", this, SLOT(menuRestart()), Qt::Key_F2), *act_game_options = makeAction(this, "&Options", this, SLOT(menuOptions()), Qt::CTRL + Qt::Key_O), *act_game_quit = makeAction(this, "&Quit", this, SLOT(close())); QActionGroup *viewGroup = new QActionGroup(this); m_act_view_2d = makeAction(this, "&2D-View", this, SLOT(menuView2d()), Qt::CTRL + Qt::Key_2, viewGroup); m_act_view_3d = makeAction(this, "&3D-View", this, SLOT(menuView3d()), Qt::CTRL + Qt::Key_3, viewGroup); m_act_view_torus = makeAction(this, "&Torus-View", this, SLOT(menuViewTorus()), Qt::CTRL + Qt::Key_4, viewGroup); act_game_quit->setMenuRole(QAction::QuitRole); QMenuBar *menuBar = new QMenuBar(this); QMenu *menuGame = menuBar->addMenu("&Game"); menuGame->addAction(act_game_newGame); menuGame->addAction(act_game_options); menuGame->addSeparator(); menuGame->addAction(act_game_quit); QMenu *menuView = menuBar->addMenu("&View"); menuView->addActions(viewGroup->actions()); setMenuBar(menuBar); setViewMode(VIEW_2D); updateGeometry(); } void GameWidget::gameChanged(GameState state) { statusBar()->showMessage(state2string(state)); } void GameWidget::menuRestart() { m_game->restart(); } void GameWidget::menuOptions() { m_optionDlg->exec(); } void GameWidget::setViewMode(ViewMode viewMode) { if (m_viewMode == viewMode) return; m_viewMode = viewMode; switch (m_viewMode) { case VIEW_2D: m_fieldsLayout->setCurrentIndex(0); m_act_view_2d->setChecked(true); break; case VIEW_3D: m_fieldsLayout->setCurrentIndex(1); m_act_view_3d->setChecked(true); m_field3d->setBoardMode(Field3D::PLANE); break; case VIEW_TORUS: m_fieldsLayout->setCurrentIndex(1); m_act_view_torus->setChecked(true); m_field3d->setBoardMode(Field3D::TORUS); break; } emit changedViewMode(viewMode); } void GameWidget::menuView2d() { setViewMode(VIEW_2D); } void GameWidget::menuView3d() { setViewMode(VIEW_3D); } void GameWidget::menuViewTorus() { setViewMode(VIEW_TORUS); } }