--- /dev/null
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include "preferences.h"
+#include "howtoplay.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ levelNo(0),
+ ui(new Ui::MainWindow)
+
+{
+ ui->setupUi(this);
+#ifdef Q_WS_MAEMO_5
+ setAttribute(Qt::WA_Maemo5AutoOrientation);
+ QDesktopWidget* q=QApplication::desktop();
+ connect(q,SIGNAL(resized(int)),this,SLOT(reorient()));
+#endif
+ QDir packDir(":/packs");
+ QStringList packList=packDir.entryList();
+
+ QListIterator<QString> packNamesI(packList);
+ while(packNamesI.hasNext())
+ {
+ QString packName=packNamesI.next().section(".",0,0);
+ packNames+=packName;
+ }
+
+ 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);
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+void MainWindow::changeEvent(QEvent *e)
+{
+ QMainWindow::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void MainWindow::reorient()
+{
+
+ ui->buttonsPortrait->removeWidget(ui->prevLevel);
+ ui->buttonsPortrait->removeWidget(ui->nextLevel);
+ ui->buttonsPortrait->removeWidget(ui->reload);
+ ui->buttonsPortrait->removeWidget(ui->undo);
+
+ ui->undoLandscape->removeWidget(ui->undo);
+ ui->buttonsLandscape->removeWidget(ui->prevLevel);
+ ui->buttonsLandscape->removeWidget(ui->nextLevel);
+ ui->buttonsLandscape->removeWidget(ui->reload);
+
+ QDesktopWidget* q=QApplication::desktop();
+ if(q->height()>q->width())
+ {
+ // Portrait mode
+
+ ui->buttonsPortrait->addWidget(ui->prevLevel);
+ ui->buttonsPortrait->addWidget(ui->reload);
+ ui->buttonsPortrait->addWidget(ui->nextLevel);
+ ui->buttonsPortrait->addWidget(ui->undo);
+ //ui->buttonsPortrait->layout();
+ } else
+ {
+ ui->buttonsLandscape->insertWidget(0,ui->nextLevel,1,Qt::AlignLeft);
+ ui->buttonsLandscape->insertWidget(0,ui->reload,1,Qt::AlignLeft);
+ ui->buttonsLandscape->insertWidget(0,ui->prevLevel,1,Qt::AlignLeft);
+ ui->undoLandscape->addWidget(ui->undo);
+ //ui->buttonsLandscape->layout();
+ }
+}
+
+void MainWindow::loadLevel()
+{
+ PlayField *pf=pack->levelAt(levelNo);
+ ui->playwidget->setPlayField(pf);
+ QString title;
+ QTextStream(&title)<<pf->title<<" ("<<levelNo+1<<"/"<<pack->levels.size()<<")";
+ ui->levelTitle->setText(title);
+}
+
+void MainWindow::loadPack(const QString& packName, int levelToLoad)
+{
+ if(pack) delete pack;
+ QString fileName(":/packs/");
+ fileName.append(packName).append(".ini");
+ pack=new LevelPack(fileName);
+ levelNo=levelToLoad;
+ loadLevel();
+}
+
+void MainWindow::movesChanged(int moves)
+{
+ PlayField *pf=pack->levelAt(levelNo);
+ const QString sol=pf->getSolution();
+ int total=sol.length()/2;
+ int score=hiscore();
+ QString q;
+ QTextStream movesBanner(&q);
+ movesBanner<<moves<<"/"<<total;
+ if(score!=9999)
+ movesBanner<<"<b>"<<score<<"</b>";
+
+ ui->moves->setText(q);
+}
+
+void MainWindow::solved(int moves)
+{
+ hiscore(moves);
+ loadNextLevel();
+}
+
+int MainWindow::hiscore(int score)
+{
+ QSettings settings("paul","vexed");
+ 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;
+}
+
+void MainWindow::openPreferences()
+{
+ Preferences pref(packNames,pack->getTitle(),this);
+ if(pref.exec()==QDialog::Accepted)
+ {
+ loadPack(pref.getSelectedPack(),0);
+ }
+}
+
+void MainWindow::howToPlay()
+{
+ HowToPlay h(this);
+ h.exec();
+}
+// save current pack and level to config
+// they are used to restore on start
+// TODO: save playfield (and undo?)
+void MainWindow::saveState()
+{
+ QSettings settings("paul","vexed");
+ settings.beginGroup("save");
+ settings.setValue("pack",pack->getTitle());
+ settings.setValue("level",levelNo);
+}