Added saving/loading settings from/to file
authorBartosz Szatkowski <bulislaw@linux.com>
Tue, 10 Aug 2010 07:37:22 +0000 (09:37 +0200)
committerBartosz Szatkowski <bulislaw@linux.com>
Tue, 10 Aug 2010 07:37:22 +0000 (09:37 +0200)
trunk/src/base/backbone/backbone.cpp
trunk/src/base/backbone/backbone.h
trunk/src/includes/settings.h

index 4dce799..806f794 100644 (file)
 #include <QDebug>
 
 void Backbone::init() {
-   _searchLimit = 10;
    _interval = 250; //msec
-   if(!_pluginPath.size())
-       _pluginPath = "/usr/lib/mdictionary/";
 
    if(!_configPath.size())
        _configPath = QDir::homePath() + "/.mdictionary";
+
+   loadPrefs();
+
+
+   if(!_pluginPath.size())
+       _pluginPath = "/usr/lib/mdictionary/";
+
    loadPlugins();
-   loadPreferences();
+   loadDicts();
 
    if(!connect(&_timer, SIGNAL(timeout()), this, SLOT(translation())))
        qDebug() << "Timer signal not connected";
@@ -156,9 +160,10 @@ void Backbone::search(QString word) {
 
 
 
- void Backbone::addDictionary(CommonDictInterface* dict) {
+ void Backbone::addDictionary(CommonDictInterface* dict, bool active) {
      dict->setHash(_dicts.size()+1);
-     _dicts[dict] = 1;
+     _dicts[dict] = active;
+     connect(dict, SIGNAL(settingsChanged()), this, SLOT(dictUpdated()));
  }
 
  void Backbone::removeDictionary(CommonDictInterface *dict) {
@@ -234,6 +239,8 @@ void Backbone::loadPlugins() {
     }
 }
 
+
+
 CommonDictInterface* Backbone::plugin(QString type) {
     foreach(CommonDictInterface* plugin, _plugins)
         if(plugin->type() == type)
@@ -241,7 +248,21 @@ CommonDictInterface* Backbone::plugin(QString type) {
     return 0;
 }
 
-void Backbone::loadPreferences() {
+
+
+void Backbone::loadPrefs() {
+    QDir confDir(_configPath);
+    if(!confDir.exists())
+        qDebug() << "Configuration file dosn't exists (" << _configPath << ")";
+    QSettings set(_configPath + "/mdictionary.config", QSettings::IniFormat);
+    _pluginPath = set.value("general/plugin_path", _pluginPath).toString();
+    _historyLen = set.value("general/history_length", 10).toInt();
+    _searchLimit = set.value("general/search_limit", 15).toInt();
+}
+
+
+
+void Backbone::loadDicts() {
     QDir confDir(_configPath);
     if(!confDir.exists())
         qDebug() << confDir.mkpath(_configPath);
@@ -264,11 +285,32 @@ void Backbone::loadPreferences() {
         QStringList items = set.childKeys();
         foreach(QString item, items)
             plugSet->setValue(item, set.value(item, "").toString());
+        addDictionary(plug->getNew(plugSet), set.value("active",1).toBool());
         set.endGroup();
-        addDictionary(plug->getNew(plugSet));
     }
 }
 
+void Backbone::dictUpdated() {
+    qDebug() << "UPDATE";
+    QDir confDir(_configPath);
+    if(!confDir.exists())
+        qDebug() << confDir.mkpath(_configPath);
+    QSettings set(_configPath + "/mdictionary.config", QSettings::IniFormat);
+    foreach(CommonDictInterface* dict, _dicts.keys())
+        saveState(&set, dict->settings(), _dicts[dict], dict->hash());
+}
+
+void Backbone::saveState(QSettings* set, Settings* plugSet, bool active
+                         , uint hash) {
+    QString section;
+    section.append("dictionary_%1").arg(hash);
+    QList<QString> keys = plugSet->keys();
+    foreach(QString key, keys)
+        set->setValue(section + "/" + key, plugSet->value(key));
+    set->setValue(section + "/active", active);
+
+}
+
 //saving dictionaries state
 //saving selection state
 
index 59c60f6..2a61de7 100644 (file)
@@ -95,7 +95,7 @@ public Q_SLOTS:
     /*! adds new dictionary and activate it
       \param dict dictionary to be added
       */
-    void addDictionary(CommonDictInterface* dict);
+    void addDictionary(CommonDictInterface* dict, bool active = 1);
 
 
     //! stops all current activity - emiting signal \see closeOk
@@ -112,6 +112,9 @@ public Q_SLOTS:
       */
     void removeDictionary(CommonDictInterface* dict);
 
+    /*! saves plugins new state/configuration after each change */
+    void dictUpdated();
+
     // TODO addToBookmark(Translation*);
     // TODO removeFromBookmark(Translation*);
 
@@ -131,17 +134,20 @@ private:
     QList<QFuture<QList<Translation*> > > _innerResult;
     QMultiHash<QString, Translation*> _result;
     QTimer _timer;
-    int _searchLimit;
-    int _activeSearchNum;
     QTime _time;
-    int _interval; //Search fetching timer.timeout interval in msec
     QString _pluginPath;
     QString _configPath;
+    int _searchLimit;
+    int _activeSearchNum;
+    int _interval; //Search fetching timer.timeout interval in msec
+    int _historyLen;
 
     void init();
     QStringList getFilesFromDir(QString dir, QStringList nameFilter);
     void loadPlugins(); //< locate and load plugins
-    void loadPreferences();
+    void loadPrefs();
+    void loadDicts();
+    void saveState(QSettings*, Settings*, bool, uint);
     CommonDictInterface* plugin(QString type); //< search for given type plugin
     //void writeConfig(QString key, QString value);
 
index d2f6089..3487e02 100644 (file)
@@ -39,19 +39,23 @@ class Settings {
          \param key
     */
     QString value(const QString key) const {
-        if(!settings.contains(key)) {
+        if(!_settings.contains(key)) {
             return QString();
         }
-        return settings[key];
+        return _settings[key];
     }
 
     //! sets key to value
     void setValue(const QString key, const QString value) {
-        settings.insert(key, value);
+        _settings.insert(key, value);
+    }
+
+    QList<QString> keys() {
+        return _settings.keys();
     }
 
 private:
-    QHash<QString, QString> settings;
+    QHash<QString, QString> _settings;
 };
 
 #endif // SETTINGS_H