X-Git-Url: http://git.maemo.org/git/?p=impuzzle;a=blobdiff_plain;f=src%2Fmainwindow.cpp;h=e2b2b192956d9548d0010b8ed20b97edf1a8e72b;hp=df39b2008b8732f6e889550ab423569f2cf931c4;hb=79ce16073d2c39d9973ffdddfbae8a94439dbd43;hpb=f8d3a8441d4b16d156a51ee3faecf9a2dd83f9b6 diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index df39b20..e2b2b19 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -20,13 +20,19 @@ #include "gameview.h" #include "settings.h" #include "settingsdialog.h" +#include "aboutdialog.h" +#include "puzzleitem.h" #include #include #include +#include + #include "imageimporter.h" +MainWindow *MainWindow::instance_ = 0; + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { @@ -37,13 +43,29 @@ MainWindow::MainWindow(QWidget *parent) : 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(saveAction_); menu_->addAction(importAction_); + + helpMenu_ = menuBar()->addMenu("&Help"); + helpMenu_->addAction(aboutAction_); } void MainWindow::createActions() @@ -55,8 +77,12 @@ 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); } void MainWindow::importClicked() @@ -66,14 +92,33 @@ 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); + PuzzleItem::resetMoveCount(); + } +} + +void MainWindow::enableSaving() +{ + if(!saveAction_->isEnabled()) { + saveAction_->setEnabled(true); + } }