mirror of
git://git.savannah.nongnu.org/eliot.git
synced 2024-12-25 21:59:30 +01:00
Move game-related signals out of MainWindow, into the new dedicated class GameSignals
This commit is contained in:
parent
7cd6313dac
commit
99e7628fed
5 changed files with 221 additions and 91 deletions
|
@ -62,6 +62,7 @@ EXTRA_DIST = \
|
||||||
|
|
||||||
eliot_SOURCES = \
|
eliot_SOURCES = \
|
||||||
qtcommon.h qtcommon.cpp \
|
qtcommon.h qtcommon.cpp \
|
||||||
|
game_signals.h game_signals.cpp \
|
||||||
play_model.h play_model.cpp \
|
play_model.h play_model.cpp \
|
||||||
tile_widget.cpp tile_widget.h \
|
tile_widget.cpp tile_widget.h \
|
||||||
rack_widget.cpp rack_widget.h \
|
rack_widget.cpp rack_widget.h \
|
||||||
|
@ -108,6 +109,7 @@ nodist_eliot_SOURCES = \
|
||||||
ui/dic_wizard_info_page.ui.h \
|
ui/dic_wizard_info_page.ui.h \
|
||||||
ui/dic_wizard_letters_def_page.ui.h \
|
ui/dic_wizard_letters_def_page.ui.h \
|
||||||
ui/dic_wizard_conclusion_page.ui.h \
|
ui/dic_wizard_conclusion_page.ui.h \
|
||||||
|
game_signals.moc.cpp \
|
||||||
play_model.moc.cpp \
|
play_model.moc.cpp \
|
||||||
tile_widget.moc.cpp \
|
tile_widget.moc.cpp \
|
||||||
rack_widget.moc.cpp \
|
rack_widget.moc.cpp \
|
||||||
|
|
81
qt/game_signals.cpp
Normal file
81
qt/game_signals.cpp
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
* Eliot
|
||||||
|
* Copyright (C) 2013 Olivier Teulière
|
||||||
|
* Authors: Olivier Teulière <ipkiss @@ gmail.com>
|
||||||
|
*
|
||||||
|
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include "game_signals.h"
|
||||||
|
|
||||||
|
#include "public_game.h"
|
||||||
|
#include "history.h"
|
||||||
|
#include "encoding.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
INIT_LOGGER(qt, GameSignals);
|
||||||
|
|
||||||
|
|
||||||
|
GameSignals::GameSignals()
|
||||||
|
: m_game(0), m_currentTurn(0), m_lastTurn(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GameSignals::notifyGameChanged(PublicGame *iGame)
|
||||||
|
{
|
||||||
|
m_game = iGame;
|
||||||
|
emit gameChangedNonConst(iGame);
|
||||||
|
emit gameChanged(iGame);
|
||||||
|
if (iGame != NULL)
|
||||||
|
notifyGameUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GameSignals::notifyGameUpdated()
|
||||||
|
{
|
||||||
|
emit gameUpdated();
|
||||||
|
|
||||||
|
if (m_game == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
unsigned currTurn = m_game->getCurrTurn();
|
||||||
|
bool isLastTurn = m_game->isLastTurn();
|
||||||
|
|
||||||
|
// Emit the turnChanged() signal if needed
|
||||||
|
if (currTurn != m_currentTurn)
|
||||||
|
{
|
||||||
|
m_currentTurn = currTurn;
|
||||||
|
LOG_DEBUG("Emitting turnChanged(" << currTurn << ", " << isLastTurn << ")");
|
||||||
|
emit turnChanged(currTurn, isLastTurn);
|
||||||
|
}
|
||||||
|
// Emit the newTurn() signal if needed
|
||||||
|
if (currTurn > m_lastTurn)
|
||||||
|
{
|
||||||
|
m_lastTurn = currTurn;
|
||||||
|
LOG_DEBUG("Emitting newTurn(" << currTurn << ")");
|
||||||
|
emit newTurn(currTurn);
|
||||||
|
}
|
||||||
|
// Emit the gameRackChanged() signal if needed
|
||||||
|
if (isLastTurn && m_game->getHistory().getCurrentRack().toString(PlayedRack::RACK_EXTRA) != m_lastGameRack.toString(PlayedRack::RACK_EXTRA))
|
||||||
|
{
|
||||||
|
m_lastGameRack = m_game->getHistory().getCurrentRack();
|
||||||
|
LOG_DEBUG("Emitting gameRackChanged(" << lfw(m_lastGameRack.toString()) << ")");
|
||||||
|
emit gameRackChanged(m_lastGameRack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
82
qt/game_signals.h
Normal file
82
qt/game_signals.h
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
* Eliot
|
||||||
|
* Copyright (C) 2013 Olivier Teulière
|
||||||
|
* Authors: Olivier Teulière <ipkiss @@ gmail.com>
|
||||||
|
*
|
||||||
|
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef GAME_SIGNALS_H_
|
||||||
|
#define GAME_SIGNALS_H_
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "pldrack.h"
|
||||||
|
#include "logging.h"
|
||||||
|
|
||||||
|
|
||||||
|
class PublicGame;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Since the Game library does not emit signals, GameSignals wraps a PublicGame
|
||||||
|
* object and emit specific signals.
|
||||||
|
* It acts as a signals demultiplexer: when receiving a gameUpdated() signal,
|
||||||
|
* it finds out if some Game properties have changed, and if so, emits more
|
||||||
|
* specific signals (such as gameRackChanged()).
|
||||||
|
*/
|
||||||
|
class GameSignals: public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT;
|
||||||
|
DEFINE_LOGGER();
|
||||||
|
|
||||||
|
public:
|
||||||
|
GameSignals();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void notifyGameUpdated();
|
||||||
|
void notifyGameChanged(PublicGame *iGame);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
/// The PublicGame object itself is changed (could be NULL)
|
||||||
|
void gameChangedNonConst(PublicGame *iGame);
|
||||||
|
/// The PublicGame object itself is changed (could be NULL)
|
||||||
|
void gameChanged(const PublicGame *iGame);
|
||||||
|
/// Something changed in the game. This is the least precise signal.
|
||||||
|
void gameUpdated();
|
||||||
|
/// The current turn has changed
|
||||||
|
void turnChanged(int iCurrTurn, bool isLastTurn);
|
||||||
|
/// Like turnChanged(), but only emitted when a new turn is created
|
||||||
|
void newTurn(int iCurrTurn);
|
||||||
|
/// Emitted when the game rack changes
|
||||||
|
void gameRackChanged(const PlayedRack &iRack);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// Wrapped game (can be NULL)
|
||||||
|
const PublicGame *m_game;
|
||||||
|
|
||||||
|
/// Current turn number. Used to emit turnChanged()
|
||||||
|
unsigned m_currentTurn;
|
||||||
|
|
||||||
|
/// Last known turn number. Used to emit newTurn()
|
||||||
|
unsigned m_lastTurn;
|
||||||
|
|
||||||
|
// Last known game rack. Used to emit gameRackChanged()
|
||||||
|
PlayedRack m_lastGameRack;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -50,6 +50,7 @@
|
||||||
#include "round.h"
|
#include "round.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
|
#include "game_signals.h"
|
||||||
#include "new_game.h"
|
#include "new_game.h"
|
||||||
#include "tables_dialog.h"
|
#include "tables_dialog.h"
|
||||||
#include "prefs_dialog.h"
|
#include "prefs_dialog.h"
|
||||||
|
@ -77,13 +78,13 @@ const char *MainWindow::m_windowName = "MainWindow";
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *iParent)
|
MainWindow::MainWindow(QWidget *iParent)
|
||||||
: QMainWindow(iParent), m_dic(NULL), m_game(NULL),
|
: QMainWindow(iParent), m_dic(NULL), m_game(NULL),
|
||||||
|
m_gameSignals(new GameSignals),
|
||||||
m_playersWidget(NULL), m_trainingWidget(NULL),
|
m_playersWidget(NULL), m_trainingWidget(NULL),
|
||||||
m_toppingWidget(NULL),
|
m_toppingWidget(NULL),
|
||||||
m_arbitrationWidget(NULL), m_scoresWidget(NULL),
|
m_arbitrationWidget(NULL), m_scoresWidget(NULL),
|
||||||
m_bagWindow(NULL), m_boardWindow(NULL),
|
m_bagWindow(NULL), m_boardWindow(NULL),
|
||||||
m_historyWindow(NULL), m_statsWindow(NULL), m_timerWindow(NULL),
|
m_historyWindow(NULL), m_statsWindow(NULL), m_timerWindow(NULL),
|
||||||
m_dicToolsWindow(NULL), m_dicNameLabel(NULL), m_timerModel(NULL),
|
m_dicToolsWindow(NULL), m_dicNameLabel(NULL), m_timerModel(NULL)
|
||||||
m_currentTurn(0), m_lastTurn(0), m_lastGameRack(L"")
|
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
// Check that the string conversion routines are not buggy
|
// Check that the string conversion routines are not buggy
|
||||||
|
@ -120,9 +121,9 @@ MainWindow::MainWindow(QWidget *iParent)
|
||||||
this, SLOT(beep()));
|
this, SLOT(beep()));
|
||||||
linkRackChangesAndTimer();
|
linkRackChangesAndTimer();
|
||||||
|
|
||||||
QObject::connect(this, SIGNAL(gameChangedNonConst(PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChangedNonConst(PublicGame*)),
|
||||||
this, SLOT(updateForGame(PublicGame*)));
|
this, SLOT(updateForGame(PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
this, SLOT(refresh()));
|
this, SLOT(refresh()));
|
||||||
|
|
||||||
// Status bar
|
// Status bar
|
||||||
|
@ -144,9 +145,9 @@ MainWindow::MainWindow(QWidget *iParent)
|
||||||
|
|
||||||
// Board
|
// Board
|
||||||
BoardWidget *boardWidget = new BoardWidget(m_playModel);
|
BoardWidget *boardWidget = new BoardWidget(m_playModel);
|
||||||
QObject::connect(this, SIGNAL(gameChanged(const PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChanged(const PublicGame*)),
|
||||||
boardWidget, SLOT(setGame(const PublicGame*)));
|
boardWidget, SLOT(setGame(const PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
boardWidget, SLOT(refresh()));
|
boardWidget, SLOT(refresh()));
|
||||||
|
|
||||||
QHBoxLayout *hlayout = new QHBoxLayout;
|
QHBoxLayout *hlayout = new QHBoxLayout;
|
||||||
|
@ -165,9 +166,9 @@ MainWindow::MainWindow(QWidget *iParent)
|
||||||
RackWidget *rackWidget = new RackWidget;
|
RackWidget *rackWidget = new RackWidget;
|
||||||
rackWidget->setPlayModel(&m_playModel);
|
rackWidget->setPlayModel(&m_playModel);
|
||||||
rackWidget->setFrameStyle(QFrame::WinPanel | QFrame::Raised);
|
rackWidget->setFrameStyle(QFrame::WinPanel | QFrame::Raised);
|
||||||
QObject::connect(this, SIGNAL(gameChanged(const PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChanged(const PublicGame*)),
|
||||||
rackWidget, SLOT(setGame(const PublicGame*)));
|
rackWidget, SLOT(setGame(const PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
rackWidget, SLOT(refresh()));
|
rackWidget, SLOT(refresh()));
|
||||||
vSplitter->addWidget(rackWidget);
|
vSplitter->addWidget(rackWidget);
|
||||||
|
|
||||||
|
@ -177,9 +178,9 @@ MainWindow::MainWindow(QWidget *iParent)
|
||||||
#if 1
|
#if 1
|
||||||
// History
|
// History
|
||||||
m_historyTabWidget = new HistoryTabWidget;
|
m_historyTabWidget = new HistoryTabWidget;
|
||||||
QObject::connect(this, SIGNAL(gameChanged(const PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChanged(const PublicGame*)),
|
||||||
m_historyTabWidget, SLOT(setGame(const PublicGame*)));
|
m_historyTabWidget, SLOT(setGame(const PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
m_historyTabWidget, SLOT(refresh()));
|
m_historyTabWidget, SLOT(refresh()));
|
||||||
QObject::connect(m_historyTabWidget, SIGNAL(requestDefinition(QString)),
|
QObject::connect(m_historyTabWidget, SIGNAL(requestDefinition(QString)),
|
||||||
this, SLOT(showDefinition(QString)));
|
this, SLOT(showDefinition(QString)));
|
||||||
|
@ -193,8 +194,8 @@ MainWindow::MainWindow(QWidget *iParent)
|
||||||
// Hide the players group box
|
// Hide the players group box
|
||||||
m_ui.groupBoxPlayers->hide();
|
m_ui.groupBoxPlayers->hide();
|
||||||
|
|
||||||
emit gameChangedNonConst(NULL);
|
// Notify everyone that we have no game yet
|
||||||
emit gameChanged(NULL);
|
m_gameSignals->notifyGameChanged(NULL);
|
||||||
|
|
||||||
// Load dictionary
|
// Load dictionary
|
||||||
QString dicPath = qs.value(PrefsDialog::kINTF_DIC_PATH, "").toString();
|
QString dicPath = qs.value(PrefsDialog::kINTF_DIC_PATH, "").toString();
|
||||||
|
@ -227,6 +228,7 @@ MainWindow::~MainWindow()
|
||||||
delete m_game;
|
delete m_game;
|
||||||
delete m_dic;
|
delete m_dic;
|
||||||
delete m_timerModel;
|
delete m_timerModel;
|
||||||
|
delete m_gameSignals;
|
||||||
|
|
||||||
// Destroy singletons
|
// Destroy singletons
|
||||||
GameFactory::Destroy();
|
GameFactory::Destroy();
|
||||||
|
@ -243,8 +245,7 @@ void MainWindow::destroyCurrentGame()
|
||||||
|
|
||||||
// Some controls, like the board, can live when there is no game.
|
// Some controls, like the board, can live when there is no game.
|
||||||
// We only have to give them a NULL handler instead of the current one.
|
// We only have to give them a NULL handler instead of the current one.
|
||||||
emit gameChangedNonConst(NULL);
|
m_gameSignals->notifyGameChanged(NULL);
|
||||||
emit gameChanged(NULL);
|
|
||||||
|
|
||||||
m_ui.groupBoxPlayers->hide();
|
m_ui.groupBoxPlayers->hide();
|
||||||
|
|
||||||
|
@ -277,27 +278,6 @@ void MainWindow::refresh()
|
||||||
m_actionHistoryReplayTurn->setEnabled(!isLastTurn);
|
m_actionHistoryReplayTurn->setEnabled(!isLastTurn);
|
||||||
if (m_game->isFinished())
|
if (m_game->isFinished())
|
||||||
displayInfoMsg(_q("End of the game"));
|
displayInfoMsg(_q("End of the game"));
|
||||||
// Emit the turnChanged() signal if needed
|
|
||||||
if (currTurn != m_currentTurn)
|
|
||||||
{
|
|
||||||
m_currentTurn = currTurn;
|
|
||||||
LOG_DEBUG("Emitting turnChanged(" << currTurn << ", " << isLastTurn << ")");
|
|
||||||
emit turnChanged(currTurn, isLastTurn);
|
|
||||||
}
|
|
||||||
// Emit the newTurn() signal if needed
|
|
||||||
if (currTurn > m_lastTurn)
|
|
||||||
{
|
|
||||||
m_lastTurn = currTurn;
|
|
||||||
LOG_DEBUG("Emitting newTurn(" << currTurn << ")");
|
|
||||||
emit newTurn(currTurn);
|
|
||||||
}
|
|
||||||
// Emit the gameRackChanged() signal if needed
|
|
||||||
if (isLastTurn && m_game->getHistory().getCurrentRack().toString() != m_lastGameRack)
|
|
||||||
{
|
|
||||||
m_lastGameRack = m_game->getHistory().getCurrentRack().toString();
|
|
||||||
LOG_DEBUG("Emitting gameRackChanged(" << lfw(m_lastGameRack) << ")");
|
|
||||||
emit gameRackChanged(qfw(m_lastGameRack));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the auto-saved game
|
// Update the auto-saved game
|
||||||
try
|
try
|
||||||
|
@ -355,14 +335,14 @@ void MainWindow::linkRackChangesAndTimer()
|
||||||
if (m_timerModel == NULL)
|
if (m_timerModel == NULL)
|
||||||
return;
|
return;
|
||||||
// Disable the timer auto-start mechanism
|
// Disable the timer auto-start mechanism
|
||||||
disconnect(SIGNAL(gameRackChanged(const QString&)), m_timerModel);
|
m_gameSignals->disconnect(SIGNAL(gameRackChanged(const PlayedRack&)), m_timerModel);
|
||||||
// Reconnect if needed
|
// Reconnect if needed
|
||||||
QSettings qs;
|
QSettings qs;
|
||||||
if (qs.value(PrefsDialog::kINTF_TIMER_AUTO_START, false).toBool())
|
if (qs.value(PrefsDialog::kINTF_TIMER_AUTO_START, false).toBool())
|
||||||
{
|
{
|
||||||
QObject::connect(this, SIGNAL(gameRackChanged(const QString&)),
|
QObject::connect(m_gameSignals, SIGNAL(gameRackChanged(const PlayedRack&)),
|
||||||
m_timerModel, SLOT(resetTimer()));
|
m_timerModel, SLOT(resetTimer()));
|
||||||
QObject::connect(this, SIGNAL(gameRackChanged(const QString&)),
|
QObject::connect(m_gameSignals, SIGNAL(gameRackChanged(const PlayedRack&)),
|
||||||
m_timerModel, SLOT(startTimer()));
|
m_timerModel, SLOT(startTimer()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -385,7 +365,7 @@ void MainWindow::prefsUpdated()
|
||||||
|
|
||||||
// Probably useless in most cases (currently only used for
|
// Probably useless in most cases (currently only used for
|
||||||
// the History alignment)
|
// the History alignment)
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -455,20 +435,20 @@ void MainWindow::updateForGame(PublicGame *iGame)
|
||||||
m_trainingWidget = new TrainingWidget(NULL, m_playModel, iGame);
|
m_trainingWidget = new TrainingWidget(NULL, m_playModel, iGame);
|
||||||
m_ui.groupBoxPlayers->layout()->addWidget(m_trainingWidget);
|
m_ui.groupBoxPlayers->layout()->addWidget(m_trainingWidget);
|
||||||
QObject::connect(m_trainingWidget, SIGNAL(gameUpdated()),
|
QObject::connect(m_trainingWidget, SIGNAL(gameUpdated()),
|
||||||
this, SIGNAL(gameUpdated()));
|
m_gameSignals, SIGNAL(gameUpdated()));
|
||||||
QObject::connect(m_trainingWidget, SIGNAL(notifyInfo(QString)),
|
QObject::connect(m_trainingWidget, SIGNAL(notifyInfo(QString)),
|
||||||
this, SLOT(displayInfoMsg(QString)));
|
this, SLOT(displayInfoMsg(QString)));
|
||||||
QObject::connect(m_trainingWidget, SIGNAL(notifyProblem(QString)),
|
QObject::connect(m_trainingWidget, SIGNAL(notifyProblem(QString)),
|
||||||
this, SLOT(displayErrorMsg(QString)));
|
this, SLOT(displayErrorMsg(QString)));
|
||||||
QObject::connect(m_trainingWidget, SIGNAL(requestDefinition(QString)),
|
QObject::connect(m_trainingWidget, SIGNAL(requestDefinition(QString)),
|
||||||
this, SLOT(showDefinition(QString)));
|
this, SLOT(showDefinition(QString)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
m_trainingWidget, SLOT(refresh()));
|
m_trainingWidget, SLOT(refresh()));
|
||||||
|
|
||||||
// Players score
|
// Players score
|
||||||
m_scoresWidget = new ScoreWidget(NULL, iGame);
|
m_scoresWidget = new ScoreWidget(NULL, iGame);
|
||||||
m_ui.groupBoxPlayers->layout()->addWidget(m_scoresWidget);
|
m_ui.groupBoxPlayers->layout()->addWidget(m_scoresWidget);
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
m_scoresWidget, SLOT(refresh()));
|
m_scoresWidget, SLOT(refresh()));
|
||||||
}
|
}
|
||||||
else if (iGame->getMode() == PublicGame::kARBITRATION)
|
else if (iGame->getMode() == PublicGame::kARBITRATION)
|
||||||
|
@ -481,14 +461,14 @@ void MainWindow::updateForGame(PublicGame *iGame)
|
||||||
m_arbitrationWidget = new ArbitrationWidget(m_ui.groupBoxPlayers, iGame, m_playModel);
|
m_arbitrationWidget = new ArbitrationWidget(m_ui.groupBoxPlayers, iGame, m_playModel);
|
||||||
m_ui.groupBoxPlayers->layout()->addWidget(m_arbitrationWidget);
|
m_ui.groupBoxPlayers->layout()->addWidget(m_arbitrationWidget);
|
||||||
QObject::connect(m_arbitrationWidget, SIGNAL(gameUpdated()),
|
QObject::connect(m_arbitrationWidget, SIGNAL(gameUpdated()),
|
||||||
this, SIGNAL(gameUpdated()));
|
m_gameSignals, SIGNAL(gameUpdated()));
|
||||||
QObject::connect(m_arbitrationWidget, SIGNAL(notifyInfo(QString)),
|
QObject::connect(m_arbitrationWidget, SIGNAL(notifyInfo(QString)),
|
||||||
this, SLOT(displayInfoMsg(QString)));
|
this, SLOT(displayInfoMsg(QString)));
|
||||||
QObject::connect(m_arbitrationWidget, SIGNAL(notifyProblem(QString)),
|
QObject::connect(m_arbitrationWidget, SIGNAL(notifyProblem(QString)),
|
||||||
this, SLOT(displayErrorMsg(QString)));
|
this, SLOT(displayErrorMsg(QString)));
|
||||||
QObject::connect(m_arbitrationWidget, SIGNAL(requestDefinition(QString)),
|
QObject::connect(m_arbitrationWidget, SIGNAL(requestDefinition(QString)),
|
||||||
this, SLOT(showDefinition(QString)));
|
this, SLOT(showDefinition(QString)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
m_arbitrationWidget, SLOT(refresh()));
|
m_arbitrationWidget, SLOT(refresh()));
|
||||||
// Connect with the dictionary tools only if needed
|
// Connect with the dictionary tools only if needed
|
||||||
linkArbitrationAnd7P1();
|
linkArbitrationAnd7P1();
|
||||||
|
@ -506,18 +486,18 @@ void MainWindow::updateForGame(PublicGame *iGame)
|
||||||
m_toppingWidget = new ToppingWidget(NULL, m_playModel, iGame);
|
m_toppingWidget = new ToppingWidget(NULL, m_playModel, iGame);
|
||||||
m_ui.groupBoxPlayers->layout()->addWidget(m_toppingWidget);
|
m_ui.groupBoxPlayers->layout()->addWidget(m_toppingWidget);
|
||||||
QObject::connect(m_toppingWidget, SIGNAL(gameUpdated()),
|
QObject::connect(m_toppingWidget, SIGNAL(gameUpdated()),
|
||||||
this, SIGNAL(gameUpdated()));
|
m_gameSignals, SIGNAL(gameUpdated()));
|
||||||
QObject::connect(m_toppingWidget, SIGNAL(notifyInfo(QString)),
|
QObject::connect(m_toppingWidget, SIGNAL(notifyInfo(QString)),
|
||||||
this, SLOT(displayInfoMsg(QString)));
|
this, SLOT(displayInfoMsg(QString)));
|
||||||
QObject::connect(m_toppingWidget, SIGNAL(notifyProblem(QString)),
|
QObject::connect(m_toppingWidget, SIGNAL(notifyProblem(QString)),
|
||||||
this, SLOT(displayErrorMsg(QString)));
|
this, SLOT(displayErrorMsg(QString)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
m_toppingWidget, SLOT(refresh()));
|
m_toppingWidget, SLOT(refresh()));
|
||||||
|
|
||||||
// Players score
|
// Players score
|
||||||
m_scoresWidget = new ScoreWidget(NULL, iGame);
|
m_scoresWidget = new ScoreWidget(NULL, iGame);
|
||||||
m_ui.groupBoxPlayers->layout()->addWidget(m_scoresWidget);
|
m_ui.groupBoxPlayers->layout()->addWidget(m_scoresWidget);
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
m_scoresWidget, SLOT(refresh()));
|
m_scoresWidget, SLOT(refresh()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -532,21 +512,21 @@ void MainWindow::updateForGame(PublicGame *iGame)
|
||||||
m_playersWidget = new PlayerTabWidget(m_playModel, NULL);
|
m_playersWidget = new PlayerTabWidget(m_playModel, NULL);
|
||||||
m_ui.groupBoxPlayers->layout()->addWidget(m_playersWidget);
|
m_ui.groupBoxPlayers->layout()->addWidget(m_playersWidget);
|
||||||
QObject::connect(m_playersWidget, SIGNAL(gameUpdated()),
|
QObject::connect(m_playersWidget, SIGNAL(gameUpdated()),
|
||||||
this, SIGNAL(gameUpdated()));
|
m_gameSignals, SIGNAL(gameUpdated()));
|
||||||
QObject::connect(m_playersWidget, SIGNAL(notifyInfo(QString)),
|
QObject::connect(m_playersWidget, SIGNAL(notifyInfo(QString)),
|
||||||
this, SLOT(displayInfoMsg(QString)));
|
this, SLOT(displayInfoMsg(QString)));
|
||||||
QObject::connect(m_playersWidget, SIGNAL(notifyProblem(QString)),
|
QObject::connect(m_playersWidget, SIGNAL(notifyProblem(QString)),
|
||||||
this, SLOT(displayErrorMsg(QString)));
|
this, SLOT(displayErrorMsg(QString)));
|
||||||
QObject::connect(m_playersWidget, SIGNAL(requestDefinition(QString)),
|
QObject::connect(m_playersWidget, SIGNAL(requestDefinition(QString)),
|
||||||
this, SLOT(showDefinition(QString)));
|
this, SLOT(showDefinition(QString)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
m_playersWidget, SLOT(refresh()));
|
m_playersWidget, SLOT(refresh()));
|
||||||
m_playersWidget->setGame(iGame);
|
m_playersWidget->setGame(iGame);
|
||||||
|
|
||||||
// Players score
|
// Players score
|
||||||
m_scoresWidget = new ScoreWidget(NULL, iGame);
|
m_scoresWidget = new ScoreWidget(NULL, iGame);
|
||||||
m_ui.groupBoxPlayers->layout()->addWidget(m_scoresWidget);
|
m_ui.groupBoxPlayers->layout()->addWidget(m_scoresWidget);
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
m_scoresWidget, SLOT(refresh()));
|
m_scoresWidget, SLOT(refresh()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -729,7 +709,7 @@ void MainWindow::playWord(const wstring &iWord, const wstring &iCoord)
|
||||||
int res = m_game->play(iWord, iCoord);
|
int res = m_game->play(iWord, iCoord);
|
||||||
if (res == 0)
|
if (res == 0)
|
||||||
{
|
{
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -791,7 +771,7 @@ void MainWindow::playWordTopping(const wstring &iWord, const wstring &iCoord)
|
||||||
|
|
||||||
/// FIXME: provide real timeout information
|
/// FIXME: provide real timeout information
|
||||||
m_game->toppingPlay(iWord, iCoord, 12);
|
m_game->toppingPlay(iWord, iCoord, 12);
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -957,9 +937,8 @@ void MainWindow::onGameNew()
|
||||||
|
|
||||||
displayInfoMsg(_q("Game started"));
|
displayInfoMsg(_q("Game started"));
|
||||||
m_game->start();
|
m_game->start();
|
||||||
emit gameChangedNonConst(m_game);
|
|
||||||
emit gameChanged(m_game);
|
m_gameSignals->notifyGameChanged(m_game);
|
||||||
emit gameUpdated();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1009,9 +988,9 @@ void MainWindow::loadGame(QString fileName)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_ui.groupBoxPlayers->show();
|
m_ui.groupBoxPlayers->show();
|
||||||
emit gameChangedNonConst(m_game);
|
|
||||||
emit gameChanged(m_game);
|
m_gameSignals->notifyGameChanged(m_game);
|
||||||
emit gameUpdated();
|
|
||||||
displayInfoMsg(_q("Game loaded"));
|
displayInfoMsg(_q("Game loaded"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1250,7 +1229,7 @@ void MainWindow::onSettingsDefineTables()
|
||||||
this, SLOT(displayErrorMsg(QString)));
|
this, SLOT(displayErrorMsg(QString)));
|
||||||
if (dialog->exec() == QDialog::Accepted)
|
if (dialog->exec() == QDialog::Accepted)
|
||||||
{
|
{
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1275,9 +1254,9 @@ void MainWindow::onWindowsBag()
|
||||||
bag->setGame(m_game);
|
bag->setGame(m_game);
|
||||||
m_bagWindow = new AuxWindow(*bag, _q("Bag"), "BagWindow",
|
m_bagWindow = new AuxWindow(*bag, _q("Bag"), "BagWindow",
|
||||||
m_actionWindowsBag);
|
m_actionWindowsBag);
|
||||||
QObject::connect(this, SIGNAL(gameChanged(const PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChanged(const PublicGame*)),
|
||||||
bag, SLOT(setGame(const PublicGame*)));
|
bag, SLOT(setGame(const PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
bag, SLOT(refresh()));
|
bag, SLOT(refresh()));
|
||||||
}
|
}
|
||||||
m_bagWindow->toggleVisibility();
|
m_bagWindow->toggleVisibility();
|
||||||
|
@ -1302,9 +1281,9 @@ void MainWindow::onWindowsBoard()
|
||||||
RackWidget *rackWidget = new RackWidget;
|
RackWidget *rackWidget = new RackWidget;
|
||||||
rackWidget->setShowOnlyLastTurn(true);
|
rackWidget->setShowOnlyLastTurn(true);
|
||||||
rackWidget->setGame(m_game);
|
rackWidget->setGame(m_game);
|
||||||
QObject::connect(this, SIGNAL(gameChanged(const PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChanged(const PublicGame*)),
|
||||||
rackWidget, SLOT(setGame(const PublicGame*)));
|
rackWidget, SLOT(setGame(const PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
rackWidget, SLOT(refresh()));
|
rackWidget, SLOT(refresh()));
|
||||||
hSplitter->addWidget(rackWidget);
|
hSplitter->addWidget(rackWidget);
|
||||||
|
|
||||||
|
@ -1319,9 +1298,9 @@ void MainWindow::onWindowsBoard()
|
||||||
board->setShowTempSigns(false);
|
board->setShowTempSigns(false);
|
||||||
board->setShowOnlyLastTurn(true);
|
board->setShowOnlyLastTurn(true);
|
||||||
board->setGame(m_game);
|
board->setGame(m_game);
|
||||||
QObject::connect(this, SIGNAL(gameChanged(const PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChanged(const PublicGame*)),
|
||||||
board, SLOT(setGame(const PublicGame*)));
|
board, SLOT(setGame(const PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
board, SLOT(refresh()));
|
board, SLOT(refresh()));
|
||||||
vSplitter->addWidget(board);
|
vSplitter->addWidget(board);
|
||||||
|
|
||||||
|
@ -1356,9 +1335,9 @@ void MainWindow::onWindowsHistory()
|
||||||
history->setGame(m_game);
|
history->setGame(m_game);
|
||||||
m_historyWindow = new AuxWindow(*history, _q("History"), "HistoryWindow",
|
m_historyWindow = new AuxWindow(*history, _q("History"), "HistoryWindow",
|
||||||
m_actionWindowsHistory);
|
m_actionWindowsHistory);
|
||||||
QObject::connect(this, SIGNAL(gameChanged(const PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChanged(const PublicGame*)),
|
||||||
history, SLOT(setGame(const PublicGame*)));
|
history, SLOT(setGame(const PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
history, SLOT(refresh()));
|
history, SLOT(refresh()));
|
||||||
}
|
}
|
||||||
m_historyWindow->toggleVisibility();
|
m_historyWindow->toggleVisibility();
|
||||||
|
@ -1374,9 +1353,9 @@ void MainWindow::onWindowsStatistics()
|
||||||
stats->setGame(m_game);
|
stats->setGame(m_game);
|
||||||
m_statsWindow = new AuxWindow(*stats, _q("Statistics"), "StatsWindow",
|
m_statsWindow = new AuxWindow(*stats, _q("Statistics"), "StatsWindow",
|
||||||
m_actionWindowsStats);
|
m_actionWindowsStats);
|
||||||
QObject::connect(this, SIGNAL(gameChanged(const PublicGame*)),
|
QObject::connect(m_gameSignals, SIGNAL(gameChanged(const PublicGame*)),
|
||||||
stats, SLOT(setGame(const PublicGame*)));
|
stats, SLOT(setGame(const PublicGame*)));
|
||||||
QObject::connect(this, SIGNAL(gameUpdated()),
|
QObject::connect(m_gameSignals, SIGNAL(gameUpdated()),
|
||||||
stats, SLOT(refresh()));
|
stats, SLOT(refresh()));
|
||||||
}
|
}
|
||||||
m_statsWindow->toggleVisibility();
|
m_statsWindow->toggleVisibility();
|
||||||
|
@ -1447,7 +1426,7 @@ void MainWindow::onHistoryFirstTurn()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_game->firstTurn();
|
m_game->firstTurn();
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
unsigned int currTurn = m_game->getCurrTurn();
|
unsigned int currTurn = m_game->getCurrTurn();
|
||||||
unsigned int nbTurns = m_game->getNbTurns();
|
unsigned int nbTurns = m_game->getNbTurns();
|
||||||
displayInfoMsg(_q("Turn %1/%2").arg(currTurn).arg(nbTurns));
|
displayInfoMsg(_q("Turn %1/%2").arg(currTurn).arg(nbTurns));
|
||||||
|
@ -1460,7 +1439,7 @@ void MainWindow::onHistoryPrevTurn()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_game->prevTurn();
|
m_game->prevTurn();
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
unsigned int currTurn = m_game->getCurrTurn();
|
unsigned int currTurn = m_game->getCurrTurn();
|
||||||
unsigned int nbTurns = m_game->getNbTurns();
|
unsigned int nbTurns = m_game->getNbTurns();
|
||||||
displayInfoMsg(_q("Turn %1/%2").arg(currTurn).arg(nbTurns));
|
displayInfoMsg(_q("Turn %1/%2").arg(currTurn).arg(nbTurns));
|
||||||
|
@ -1473,7 +1452,7 @@ void MainWindow::onHistoryNextTurn()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_game->nextTurn();
|
m_game->nextTurn();
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
unsigned int currTurn = m_game->getCurrTurn();
|
unsigned int currTurn = m_game->getCurrTurn();
|
||||||
unsigned int nbTurns = m_game->getNbTurns();
|
unsigned int nbTurns = m_game->getNbTurns();
|
||||||
displayInfoMsg(_q("Turn %1/%2").arg(currTurn).arg(nbTurns));
|
displayInfoMsg(_q("Turn %1/%2").arg(currTurn).arg(nbTurns));
|
||||||
|
@ -1486,7 +1465,7 @@ void MainWindow::onHistoryLastTurn()
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_game->lastTurn();
|
m_game->lastTurn();
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
unsigned int currTurn = m_game->getCurrTurn();
|
unsigned int currTurn = m_game->getCurrTurn();
|
||||||
unsigned int nbTurns = m_game->getNbTurns();
|
unsigned int nbTurns = m_game->getNbTurns();
|
||||||
displayInfoMsg(_q("Turn %1/%2").arg(currTurn).arg(nbTurns));
|
displayInfoMsg(_q("Turn %1/%2").arg(currTurn).arg(nbTurns));
|
||||||
|
@ -1510,7 +1489,7 @@ void MainWindow::onHistoryReplayTurn()
|
||||||
|
|
||||||
unsigned int currTurn = m_game->getCurrTurn();
|
unsigned int currTurn = m_game->getCurrTurn();
|
||||||
m_game->clearFuture();
|
m_game->clearFuture();
|
||||||
emit gameUpdated();
|
m_gameSignals->notifyGameUpdated();
|
||||||
displayInfoMsg(_q("Replaying from turn %1").arg(currTurn));
|
displayInfoMsg(_q("Replaying from turn %1").arg(currTurn));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
|
||||||
|
class GameSignals;
|
||||||
class Dictionary;
|
class Dictionary;
|
||||||
class Bag;
|
class Bag;
|
||||||
class Board;
|
class Board;
|
||||||
|
@ -59,14 +60,6 @@ public:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void dicChanged(const Dictionary *iDic);
|
void dicChanged(const Dictionary *iDic);
|
||||||
void gameChanged(const PublicGame *iGame);
|
|
||||||
void gameChangedNonConst(PublicGame *iGame);
|
|
||||||
void gameUpdated();
|
|
||||||
void turnChanged(int iCurrTurn, bool isLastTurn);
|
|
||||||
/// Like turnChanged(), but only emitted when a new turn is created
|
|
||||||
void newTurn(int iCurrTurn);
|
|
||||||
/// Emitted when the game rack changes
|
|
||||||
void gameRackChanged(const QString &iNewrack);
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
/// Display an error message to the user
|
/// Display an error message to the user
|
||||||
|
@ -144,6 +137,8 @@ private:
|
||||||
/// Current game
|
/// Current game
|
||||||
PublicGame *m_game;
|
PublicGame *m_game;
|
||||||
|
|
||||||
|
GameSignals *m_gameSignals;
|
||||||
|
|
||||||
/// The UI file generated with Qt Designer
|
/// The UI file generated with Qt Designer
|
||||||
Ui::MainWindow m_ui;
|
Ui::MainWindow m_ui;
|
||||||
|
|
||||||
|
@ -209,15 +204,6 @@ private:
|
||||||
/// Model for the timer widgets
|
/// Model for the timer widgets
|
||||||
TimerModel *m_timerModel;
|
TimerModel *m_timerModel;
|
||||||
|
|
||||||
/// Current turn number. Used to emit turnChanged()
|
|
||||||
unsigned m_currentTurn;
|
|
||||||
|
|
||||||
/// Last known turn number. Used to emit newTurn()
|
|
||||||
unsigned m_lastTurn;
|
|
||||||
|
|
||||||
// Last known game rack. Used to emit gameRackChanged()
|
|
||||||
wstring m_lastGameRack;
|
|
||||||
|
|
||||||
/// Save window state
|
/// Save window state
|
||||||
void writeSettings() const;
|
void writeSettings() const;
|
||||||
/// Restore window state
|
/// Restore window state
|
||||||
|
|
Loading…
Reference in a new issue