1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3 #include "preferences.h"
5 #include "needadvance.h"
7 MainWindow::MainWindow(QWidget *parent) :
10 ui(new Ui::MainWindow)
15 setAttribute(Qt::WA_Maemo5AutoOrientation);
16 QDesktopWidget* q=QApplication::desktop();
17 connect(q,SIGNAL(resized(int)),this,SLOT(reorient()));
19 QDir packDir(":/packs");
20 QStringList packList=packDir.entryList();
22 QListIterator<QString> packNamesI(packList);
23 while(packNamesI.hasNext())
25 QString packName=packNamesI.next().section(".",0,0);
30 loadPack(Settings().savedPackName(),Settings().savedLevelNo());
33 MainWindow::~MainWindow()
38 void MainWindow::changeEvent(QEvent *e)
40 QMainWindow::changeEvent(e);
42 case QEvent::LanguageChange:
43 ui->retranslateUi(this);
50 void MainWindow::reorient()
53 ui->buttonsPortrait->removeWidget(ui->prevLevel);
54 ui->buttonsPortrait->removeWidget(ui->nextLevel);
55 ui->buttonsPortrait->removeWidget(ui->reload);
56 ui->buttonsPortrait->removeWidget(ui->undo);
57 ui->buttonsPortrait->removeWidget(ui->solve);
59 ui->undoLandscape->removeWidget(ui->undo);
60 ui->solveLandscape->removeWidget(ui->solve);
61 ui->buttonsLandscape->removeWidget(ui->prevLevel);
62 ui->buttonsLandscape->removeWidget(ui->nextLevel);
63 ui->buttonsLandscape->removeWidget(ui->reload);
66 QDesktopWidget* q=QApplication::desktop();
67 if(q->height()>q->width())
71 ui->buttonsPortrait->addWidget(ui->prevLevel);
72 ui->buttonsPortrait->addWidget(ui->reload);
73 ui->buttonsPortrait->addWidget(ui->nextLevel);
74 ui->buttonsPortrait->addWidget(ui->undo);
75 ui->buttonsPortrait->addWidget(ui->solve);
76 //ui->buttonsPortrait->layout();
79 ui->buttonsLandscape->insertWidget(0,ui->nextLevel,1,Qt::AlignLeft);
80 ui->buttonsLandscape->insertWidget(0,ui->reload,1,Qt::AlignLeft);
81 ui->buttonsLandscape->insertWidget(0,ui->prevLevel,1,Qt::AlignLeft);
82 ui->undoLandscape->addWidget(ui->undo);
83 ui->solveLandscape->addWidget(ui->solve);
84 //ui->buttonsLandscape->layout();
88 void MainWindow::loadLevel()
90 PlayField *pf=pack->levelAt(levelNo);
91 ui->playwidget->setPlayField(pf);
93 QTextStream(&title)<<pf->title<<" ("<<levelNo+1<<" of "<<pack->levels.size()<<")";
94 levelHiscore=Settings().getHighscore(pack->getTitle(),pf->title);
95 ui->levelTitle->setText(title);
99 void MainWindow::loadPack(const QString& packName, int levelToLoad)
101 if(pack) delete pack;
102 QString fileName(":/packs/");
103 fileName.append(packName).append(".ini");
104 pack=new LevelPack(fileName);
109 void MainWindow::movesChanged(int moves)
111 PlayField *pf=pack->levelAt(levelNo);
112 const QString sol=pf->getSolution();
113 int total=sol.length()/2;
114 //int score=Settings().getHighscore(pack->getTitle(),pf->title);
116 QTextStream movesBanner(&q);
117 movesBanner<<moves<<"/"<<total;
118 if(levelHiscore!=HS::NO_SCORE)
119 movesBanner<<"(<b>"<<levelHiscore<<"</b>)";
120 ui->moves->setText(q);
123 void MainWindow::solved(int moves)
125 PlayField *pf=pack->levelAt(levelNo);
126 Settings().saveHiscore(pack->getTitle(),pf->title, moves);
131 void MainWindow::openPreferences()
133 Preferences pref(packNames,pack->getTitle(),this);
134 if(pref.exec()==QDialog::Accepted)
136 loadPack(pref.getSelectedPack(),0);
140 void MainWindow::howToPlay()
145 // save current pack and level to config
146 // they are used to restore on start
147 // TODO: save playfield (and undo?)
148 void MainWindow::saveState()
150 Settings().saveGame(pack->getTitle(),levelNo);
153 void MainWindow::loadNextLevel()
155 if(levelHiscore == HS::NO_SCORE)
157 needadvance().exec();
160 if(levelNo<(pack->size()-1))
167 void MainWindow::solve()
169 // reset current level
173 confirm.setText(tr("Reset the level and show the solution?"));
174 confirm.setInformativeText(tr("If you agree current level will be reloaded and solution will be shown"));
175 confirm.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
176 int confirmation=confirm.exec();
177 if(confirmation==QMessageBox::Yes)
178 ui->playwidget->showSolution();