#include "ui_mainwindow.h"
#include "preferences.h"
#include "howtoplay.h"
+#include "needadvance.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(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()
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())
{
ui->buttonsPortrait->addWidget(ui->reload);
ui->buttonsPortrait->addWidget(ui->nextLevel);
ui->buttonsPortrait->addWidget(ui->undo);
+ ui->buttonsPortrait->addWidget(ui->solve);
//ui->buttonsPortrait->layout();
} else
{
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();
}
}
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)
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()
// 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();
+ }
}