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);
58 ui->undoLandscape->removeWidget(ui->undo);
59 ui->buttonsLandscape->removeWidget(ui->prevLevel);
60 ui->buttonsLandscape->removeWidget(ui->nextLevel);
61 ui->buttonsLandscape->removeWidget(ui->reload);
63 QDesktopWidget* q=QApplication::desktop();
64 if(q->height()>q->width())
68 ui->buttonsPortrait->addWidget(ui->prevLevel);
69 ui->buttonsPortrait->addWidget(ui->reload);
70 ui->buttonsPortrait->addWidget(ui->nextLevel);
71 ui->buttonsPortrait->addWidget(ui->undo);
72 //ui->buttonsPortrait->layout();
75 ui->buttonsLandscape->insertWidget(0,ui->nextLevel,1,Qt::AlignLeft);
76 ui->buttonsLandscape->insertWidget(0,ui->reload,1,Qt::AlignLeft);
77 ui->buttonsLandscape->insertWidget(0,ui->prevLevel,1,Qt::AlignLeft);
78 ui->undoLandscape->addWidget(ui->undo);
79 //ui->buttonsLandscape->layout();
83 void MainWindow::loadLevel()
85 PlayField *pf=pack->levelAt(levelNo);
86 ui->playwidget->setPlayField(pf);
88 QTextStream(&title)<<pf->title<<" ("<<levelNo+1<<" of "<<pack->levels.size()<<")";
89 levelHiscore=Settings().getHighscore(pack->getTitle(),pf->title);
90 ui->levelTitle->setText(title);
94 void MainWindow::loadPack(const QString& packName, int levelToLoad)
97 QString fileName(":/packs/");
98 fileName.append(packName).append(".ini");
99 pack=new LevelPack(fileName);
104 void MainWindow::movesChanged(int moves)
106 PlayField *pf=pack->levelAt(levelNo);
107 const QString sol=pf->getSolution();
108 int total=sol.length()/2;
109 //int score=Settings().getHighscore(pack->getTitle(),pf->title);
111 QTextStream movesBanner(&q);
112 movesBanner<<moves<<"/"<<total;
113 if(levelHiscore!=HS::NO_SCORE)
114 movesBanner<<"(<b>"<<levelHiscore<<"</b>)";
115 ui->moves->setText(q);
118 void MainWindow::solved(int moves)
120 PlayField *pf=pack->levelAt(levelNo);
121 Settings().saveHiscore(pack->getTitle(),pf->title, moves);
126 void MainWindow::openPreferences()
128 Preferences pref(packNames,pack->getTitle(),this);
129 if(pref.exec()==QDialog::Accepted)
131 loadPack(pref.getSelectedPack(),0);
135 void MainWindow::howToPlay()
140 // save current pack and level to config
141 // they are used to restore on start
142 // TODO: save playfield (and undo?)
143 void MainWindow::saveState()
145 Settings().saveGame(pack->getTitle(),levelNo);
148 void MainWindow::loadNextLevel()
150 if(levelHiscore == HS::NO_SCORE)
152 needadvance().exec();
155 if(levelNo<(pack->size()-1))