Fixed showSolution
[vexed] / mainwindow.cpp
index e4758b1..b7346c4 100644 (file)
@@ -2,6 +2,7 @@
 #include "ui_mainwindow.h"
 #include "preferences.h"
 #include "howtoplay.h"
+#include "needadvance.h"
 
 MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent),
@@ -26,11 +27,7 @@ MainWindow::MainWindow(QWidget *parent) :
         }
 
         pack=0;
-        QSettings settings("paul","vexed");
-        settings.beginGroup("save");
-        QString savedTitle=settings.value("pack","Classic Levels").toString();
-        int savedLevelNo=settings.value("level",0).toInt();
-        loadPack(savedTitle,savedLevelNo);
+        loadPack(Settings().savedPackName(),Settings().savedLevelNo());
 }
 
 MainWindow::~MainWindow()
@@ -57,12 +54,15 @@ void MainWindow::reorient()
     ui->buttonsPortrait->removeWidget(ui->nextLevel);
     ui->buttonsPortrait->removeWidget(ui->reload);
     ui->buttonsPortrait->removeWidget(ui->undo);
+    ui->buttonsPortrait->removeWidget(ui->solve);
 
     ui->undoLandscape->removeWidget(ui->undo);
+    ui->solveLandscape->removeWidget(ui->solve);
     ui->buttonsLandscape->removeWidget(ui->prevLevel);
     ui->buttonsLandscape->removeWidget(ui->nextLevel);
     ui->buttonsLandscape->removeWidget(ui->reload);
 
+
     QDesktopWidget* q=QApplication::desktop();
     if(q->height()>q->width())
     {
@@ -72,6 +72,7 @@ void MainWindow::reorient()
         ui->buttonsPortrait->addWidget(ui->reload);
         ui->buttonsPortrait->addWidget(ui->nextLevel);
         ui->buttonsPortrait->addWidget(ui->undo);
+        ui->buttonsPortrait->addWidget(ui->solve);
         //ui->buttonsPortrait->layout();
     } else
     {
@@ -79,6 +80,7 @@ void MainWindow::reorient()
         ui->buttonsLandscape->insertWidget(0,ui->reload,1,Qt::AlignLeft);
         ui->buttonsLandscape->insertWidget(0,ui->prevLevel,1,Qt::AlignLeft);
         ui->undoLandscape->addWidget(ui->undo);
+        ui->solveLandscape->addWidget(ui->solve);
         //ui->buttonsLandscape->layout();
     }
 }
@@ -88,8 +90,10 @@ void MainWindow::loadLevel()
     PlayField *pf=pack->levelAt(levelNo);
     ui->playwidget->setPlayField(pf);
     QString title;
-    QTextStream(&title)<<pf->title<<" ("<<levelNo+1<<"/"<<pack->levels.size()<<")";
+    QTextStream(&title)<<pf->title<<" ("<<levelNo+1<<" of "<<pack->levels.size()<<")";
+    levelHiscore=Settings().getHighscore(pack->getTitle(),pf->title);
     ui->levelTitle->setText(title);
+    movesChanged(0);
 }
 
 void MainWindow::loadPack(const QString& packName, int levelToLoad)
@@ -107,38 +111,26 @@ void MainWindow::movesChanged(int moves)
     PlayField *pf=pack->levelAt(levelNo);
     const QString sol=pf->getSolution();
     int total=sol.length()/2;
-    int score=hiscore();
+    //int score=Settings().getHighscore(pack->getTitle(),pf->title);
     QString q;
     QTextStream movesBanner(&q);
     movesBanner<<moves<<"/"<<total;
-    if(score!=9999)
-        movesBanner<<"<b>"<<score<<"</b>";
-
+    if(levelHiscore!=HS::NO_SCORE)
+        movesBanner<<"(<b>"<<levelHiscore<<"</b>)";
     ui->moves->setText(q);
 }
 
 void MainWindow::solved(int moves)
 {
-    hiscore(moves);
-    loadNextLevel();
-}
-
-int MainWindow::hiscore(int score)
-{
-    QSettings settings("paul","vexed");
+    if(inSolution)
+    {
+        inSolution=false;
+        return;
+    }
     PlayField *pf=pack->levelAt(levelNo);
-    QString title=pf->title;
-    settings.beginGroup("score");
-    settings.beginGroup(pack->getTitle());
-    QString saved=settings.value(title,"9999").toString();
-    bool ok;
-    int savedMoves=saved.toInt(&ok);
-    if(!ok) savedMoves=9999;
-    if(score == -1)
-        return savedMoves;
-    if(score<savedMoves)
-        settings.setValue(title,score);
-    return score;
+    Settings().saveHiscore(pack->getTitle(),pf->title, moves);
+    levelHiscore=moves;
+    loadNextLevel();
 }
 
 void MainWindow::openPreferences()
@@ -160,8 +152,36 @@ void MainWindow::howToPlay()
 // TODO: save playfield (and undo?)
 void MainWindow::saveState()
 {
-    QSettings settings("paul","vexed");
-    settings.beginGroup("save");
-    settings.setValue("pack",pack->getTitle());
-    settings.setValue("level",levelNo);
+    Settings().saveGame(pack->getTitle(),levelNo);
+}
+
+void MainWindow::loadNextLevel()
+{
+    if(levelHiscore == HS::NO_SCORE)
+    {
+        needadvance().exec();
+        return;
+    }
+    if(levelNo<(pack->size()-1))
+    {
+        levelNo++;
+        loadLevel();
+    }
+}
+
+void MainWindow::solve()
+{
+    // reset current level
+    loadLevel();
+    // and show solution
+    QMessageBox confirm;
+    confirm.setText(tr("Reset the level and show the solution?"));
+    confirm.setInformativeText(tr("If you agree current level will be reloaded and solution will be shown"));
+    confirm.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+    int confirmation=confirm.exec();
+    if(confirmation==QMessageBox::Yes)
+    {
+        inSolution=true;
+        ui->playwidget->showSolution();
+    }
 }