Move settings to dedicated class.
authorpaul romanchenko <paulaner@gmail.com>
Thu, 16 Sep 2010 05:16:06 +0000 (09:16 +0400)
committerpaul romanchenko <paulaner@gmail.com>
Thu, 16 Sep 2010 05:16:06 +0000 (09:16 +0400)
No more QSettings() constructing

mainwindow.cpp
mainwindow.h
mainwindow.ui
qexed.pro
settings.cpp [new file with mode: 0644]
settings.h [new file with mode: 0644]

index e4758b1..e80d336 100644 (file)
@@ -26,11 +26,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()
@@ -88,8 +84,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 +105,20 @@ 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");
     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);
+    loadNextLevel();
 }
 
 void MainWindow::openPreferences()
@@ -160,8 +140,14 @@ 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(levelNo<(pack->size()-1))
+    {
+        levelNo++;
+        loadLevel();
+    }
 }
index fa5be54..978315a 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <QMainWindow>
 #include "levelpack.h"
+#include "settings.h"
 
 namespace Ui {
     class MainWindow;
@@ -22,11 +23,10 @@ public:
 protected:
     LevelPack *pack;
     int levelNo;
+    int levelHiscore;
     QList<QString> packNames;
 
     void changeEvent(QEvent *e);
-    // get or set hiscore for current level
-    int hiscore(int score=-1);
 
 public slots:
     void reorient();
@@ -37,14 +37,7 @@ public slots:
     void solved(int moves);
     void howToPlay();
 
-    void loadNextLevel()
-    {
-            if(levelNo<(pack->size()-1))
-            {
-                    levelNo++;
-                    loadLevel();
-            }
-    }
+    void loadNextLevel();
     void loadPrevLevel()
     {
             if(levelNo>0)
index 8257645..e0ab734 100644 (file)
@@ -20,7 +20,7 @@
       <x>9</x>
       <y>9</y>
       <width>761</width>
-      <height>401</height>
+      <height>452</height>
      </rect>
     </property>
     <layout class="QVBoxLayout" name="mainLayout">
            </property>
            <property name="minimumSize">
             <size>
-             <width>340</width>
-             <height>272</height>
+             <width>450</width>
+             <height>360</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
-             <width>340</width>
-             <height>272</height>
+             <width>450</width>
+             <height>360</height>
             </size>
            </property>
            <property name="palette">
    <sender>playwidget</sender>
    <signal>solved(int)</signal>
    <receiver>MainWindow</receiver>
-   <slot>loadNextLevel()</slot>
+   <slot>solved(int)</slot>
    <hints>
     <hint type="sourcelabel">
      <x>177</x>
    <slot>loadPrevLevel()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>684</x>
-     <y>172</y>
+     <x>697</x>
+     <y>227</y>
     </hint>
     <hint type="destinationlabel">
      <x>553</x>
    <slot>loadNextLevel()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>747</x>
-     <y>173</y>
+     <x>765</x>
+     <y>227</y>
     </hint>
     <hint type="destinationlabel">
      <x>515</x>
    <slot>loadLevel()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>722</x>
-     <y>170</y>
+     <x>731</x>
+     <y>227</y>
     </hint>
     <hint type="destinationlabel">
      <x>584</x>
    <slot>undo()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>704</x>
-     <y>208</y>
+     <x>765</x>
+     <y>259</y>
     </hint>
     <hint type="destinationlabel">
      <x>321</x>
   <slot>openPreferences()</slot>
   <slot>howToPlay()</slot>
   <slot>reorient()</slot>
+  <slot>solved(int)</slot>
  </slots>
 </ui>
index 91d42c3..5128951 100644 (file)
--- a/qexed.pro
+++ b/qexed.pro
@@ -4,7 +4,7 @@
 #
 #-------------------------------------------------
 
-QT       += core gui
+QT       += core gui svg
 
 TARGET = qexed
 TEMPLATE = app
@@ -17,7 +17,8 @@ SOURCES += main.cpp\
     levelpack.cpp \
     iconset.cpp \
     preferences.cpp \
-    howtoplay.cpp
+    howtoplay.cpp \
+    settings.cpp
 
 HEADERS  += mainwindow.h \
     playfield.h \
@@ -25,7 +26,8 @@ HEADERS  += mainwindow.h \
     levelpack.h \
     iconset.h \
     preferences.h \
-    howtoplay.h
+    howtoplay.h \
+    settings.h
 
 FORMS    += mainwindow.ui \
     preferences.ui \
diff --git a/settings.cpp b/settings.cpp
new file mode 100644 (file)
index 0000000..6ac4f09
--- /dev/null
@@ -0,0 +1,53 @@
+#include "settings.h"
+#include <QtCore>
+
+Settings::Settings():QSettings("paul","vexed")
+{
+}
+
+void Settings::saveHiscore(const QString &packName, const QString &levelName, int score)
+{
+    hiscore(packName, levelName, score);
+}
+
+int Settings::getHighscore(const QString &packName, const QString &levelName)
+{
+    return hiscore(packName, levelName);
+}
+
+void Settings::saveGame(const QString &packName, int levelNo)
+{
+    beginGroup("save");
+    setValue("pack",packName);
+    setValue("level",levelNo);
+}
+QString Settings::savedPackName()
+{
+        beginGroup("save");
+        QString packName=value("pack","Classic Levels").toString();
+        return packName;
+}
+int Settings::savedLevelNo()
+{
+        beginGroup("save");
+        int levelNo=value("level",0).toInt();
+        return levelNo;
+}
+int Settings::hiscore(const QString &packName, const QString &levelName,int score)
+{
+
+    beginGroup("score");
+    beginGroup(packName);
+    QString saved=value(levelName,HS::NO_SCORE).toString();
+    bool ok;
+    int savedMoves=saved.toInt(&ok);
+    if(!ok)
+        savedMoves=HS::NO_SCORE;
+    if(score == -1)
+    {
+        return savedMoves;
+    }
+    if(score<savedMoves)
+        setValue(levelName,score);
+    return score;
+}
diff --git a/settings.h b/settings.h
new file mode 100644 (file)
index 0000000..464c46c
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef SETTINGS_H
+#define SETTINGS_H
+#include <QSettings>
+
+namespace HS
+{
+    const int NO_SCORE=9999;
+}
+class Settings : QSettings
+{
+public:
+    Settings();
+    void saveHiscore(const QString &packName, const QString &levelName, int score);
+    int getHighscore(const QString &packName, const QString &levelName);
+    void saveGame(const QString &packName, int levelNo);
+    QString savedPackName();
+    int savedLevelNo();
+private:
+    int hiscore(const QString &packName, const QString &levelName,int score=-1);
+};
+
+#endif // SETTINGS_H