#include "gameview.h"
#include "settings.h"
#include "settingsdialog.h"
+#include "aboutdialog.h"
+#include "puzzleitem.h"
+#include "statistics.h"
+#include "statisticsdialog.h"
#include <QAction>
#include <QMenu>
#include <QMenuBar>
+#include <QMessageBox>
+#include <QCloseEvent>
+#include <QApplication>
+
+#include <QDebug>
#include "imageimporter.h"
+MainWindow *MainWindow::instance_ = 0;
+
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setCentralWidget(GameView::instance());
settingsDialog_ = new SettingsDialog(this);
+
+ setWindowTitle(tr("ImPuzzle"));
+
+ connect(GameView::instance(), SIGNAL(gameWon()), this, SLOT(gameEnded()));
+ connect(GameView::instance(), SIGNAL(gameRestored()), this, SLOT(enableSaving()));
+}
+
+MainWindow *MainWindow::instance()
+{
+ if(!instance_) {
+ instance_ = new MainWindow;
+ }
+
+ return instance_;
}
void MainWindow::createMenu()
{
- menu_ = menuBar()->addMenu("");
+ menu_ = menuBar()->addMenu("&Game");
menu_->addAction(newGameAction_);
- menu_->addAction(importAction_);
+ menu_->addAction(statisticsAction_);
+ menu_->addAction(saveAction_);
+ menu_->addAction(quitAction_);
+ //menu_->addAction(importAction_);
+
+ helpMenu_ = menuBar()->addMenu("&Help");
+ helpMenu_->addAction(aboutAction_);
}
void MainWindow::createActions()
connect(importAction_, SIGNAL(triggered()), this, SLOT(importClicked()));
importAction_->setDisabled(true);
- settingsAction_ = new QAction(tr("Settings"), this);
- connect(settingsAction_, SIGNAL(triggered()), this, SLOT(settingsClicked()));
+ aboutAction_ = new QAction(tr("About ImPuzzle"), this);
+ connect(aboutAction_, SIGNAL(triggered()), this, SLOT(aboutClicked()));
+
+ saveAction_ = new QAction(tr("Save and quit"), this);
+ connect(saveAction_, SIGNAL(triggered()), GameView::instance(), SLOT(saveGame()));
+ saveAction_->setDisabled(true);
+
+ statisticsAction_ = new QAction(tr("Statistics"), this);
+ connect(statisticsAction_, SIGNAL(triggered()), this, SLOT(showStatistics()));
+
+ quitAction_ = new QAction(tr("Quit"), this);
+ connect(quitAction_, SIGNAL(triggered()), qApp, SLOT(quit()));
}
void MainWindow::importClicked()
void MainWindow::newGameClicked()
{
- //SettingsDialog dialog(this);
- //dialog.exec();
- settingsDialog_->exec();
+ int r = settingsDialog_->exec();
- GameView::instance()->setPieces(ImageImporter::instance()->newPieces(Settings::instance()->image(), Settings::instance()->pieceCount()));
+ if(r) {
+ GameView::instance()->setPieces(ImageImporter::instance()->newPieces(Settings::instance()->image(), Settings::instance()->pieceCount()));
+ enableSaving();
+ PuzzleItem::setMoveCount(0);
+ }
}
-void MainWindow::settingsClicked()
+void MainWindow::aboutClicked()
{
+ AboutDialog *dialog = new AboutDialog(this);
+ dialog->exec();
+ dialog->deleteLater();
+}
+void MainWindow::gameEnded()
+{
+ if(saveAction_->isEnabled()) {
+ saveAction_->setDisabled(true);
+ Statistics::instance()->increaseGameCount(Settings::instance()->pieceCount() == EASY_PIECE_COUNT ? Statistics::easyDifficulty : Statistics::hardDifficulty);
+ Statistics::instance()->addNewScore(PuzzleItem::moveCount(),
+ Settings::instance()->pieceCount() == EASY_PIECE_COUNT ? Statistics::easyDifficulty : Statistics::hardDifficulty);
+ PuzzleItem::resetMoveCount();
+ }
+}
+
+void MainWindow::enableSaving()
+{
+ if(!saveAction_->isEnabled()) {
+ saveAction_->setEnabled(true);
+ }
+}
+
+void MainWindow::closeEvent(QCloseEvent *event)
+{
+ if(saveAction_->isEnabled()) {
+ int answer = QMessageBox::question(this, tr("Save game status?"),
+ tr("Saved status will be automatically loaded when you start the application next time"),
+ QMessageBox::Yes, QMessageBox::No);
+
+ if(answer == QMessageBox::Yes) {
+ GameView::instance()->saveGame();
+ }
+ }
+
+ event->accept();
+}
+
+void MainWindow::showStatistics()
+{
+ StatisticsDialog dialog(this);
+ dialog.exec();
}