Changed timer based result fatching for signal based new_threading
authorBartosz Szatkowski <bulislaw@linux.com>
Thu, 12 Aug 2010 12:31:29 +0000 (14:31 +0200)
committerBartosz Szatkowski <bulislaw@linux.com>
Thu, 12 Aug 2010 12:31:29 +0000 (14:31 +0200)
trunk/src/base/backbone/backbone.cpp
trunk/src/base/backbone/backbone.h

index d297fbc..24b3b5e 100644 (file)
@@ -48,7 +48,6 @@ public:
 };
 
 void Backbone::init() {
-   _interval = 250; //msec
 
    if(!_configPath.size())
        _configPath = QDir::homePath() + "/.mdictionary/mdictionary.config";
@@ -70,8 +69,8 @@ void Backbone::init() {
    loadDicts(_defaultConfigPath, true);
    loadDicts(_configPath);
 
-   connect(&_timerSearch, SIGNAL(timeout()), this, SLOT(translationReady()));
-   connect(&_timerHtmlSearch, SIGNAL(timeout()), this,
+   connect(&_resultWatcher, SIGNAL(finished()), this, SLOT(translationReady()));
+   connect(&_htmlResultWatcher, SIGNAL(finished()), this,
            SLOT(htmlTranslationReady()));
 
    QThreadPool::globalInstance()->setMaxThreadCount(
@@ -162,10 +161,10 @@ QMultiHash<QString, Translation*> Backbone::result() {
 
 
 void Backbone::stopSearching() {
-    _timerSearch.stop();
-    _timerHtmlSearch.stop();
     foreach(CommonDictInterface* dict, _dicts.keys())
         dict->stop();
+    _innerHtmlResult.cancel();
+    _innerResult.cancel();
 }
 
 
@@ -174,12 +173,12 @@ void Backbone::stopSearching() {
 
 
 void Backbone::search(QString word) {
-    _timerSearch.stop();
     _result.clear();
     mappedSearch = word.toLower();
+    //_time.restart();
 
     _innerResult = QtConcurrent::mapped(activeDicts(), mapSearch);
-    _timerSearch.start(_interval);
+    _resultWatcher.setFuture(_innerResult);
 
 
 
@@ -240,10 +239,9 @@ void Backbone::addDictionary(CommonDictInterface *dict, bool active) {
 
 
 void Backbone::translationReady() {
-    if(!_innerResult.isFinished())
-        return;
+    //if(!_innerResult.isFinished())
+     //   return;
     QFutureIterator<QList<Translation*> > it(_innerResult);
-    _timerSearch.stop();
 
     while(it.hasNext()) {
         QList<Translation* > list = it.next();
@@ -251,6 +249,7 @@ void Backbone::translationReady() {
             _result.insert(trans->key().toLower(), trans);
     }
 
+    //qDebug () << "time " << _time.elapsed();
     Q_EMIT ready();
 }
 
@@ -434,26 +433,26 @@ QStringList Backbone::htmls() {
 
 
 void Backbone::searchHtml(QList<Translation *> translations) {
-    _timerHtmlSearch.stop();
     _htmlResult.clear();
     QList<TranslationPtr> dummy;
+    //_time.restart();
     foreach(Translation* tr, translations)
         dummy.append(TranslationPtr(tr));
-    _timerHtmlSearch.start(_interval);
 
    _innerHtmlResult = QtConcurrent::mapped(dummy,
                                             &TranslationPtr::toHtml);
+   _htmlResultWatcher.setFuture(_innerHtmlResult);
 }
 
 void Backbone::htmlTranslationReady() {
-    if(!_innerHtmlResult.isFinished())
-        return;
+    //if(!_innerHtmlResult.isFinished())
+        //return;
 
-   _timerHtmlSearch.stop();
-   QFutureIterator<QString> it(_innerHtmlResult);
-   while(it.hasNext())
+    QFutureIterator<QString> it(_innerHtmlResult);
+    while(it.hasNext())
        _htmlResult.append(it.next());
 
+    //qDebug() << "time " << _time.elapsed();
     Q_EMIT htmlReady();
 
 }
index 0ced6e4..1c8165f 100644 (file)
@@ -42,6 +42,7 @@
 #include <QDir>
 #include <QThread>
 #include <QSettings>
+#include <QFutureWatcher>
 #include "../../includes/CommonDictInterface.h"
 #include "../../includes/settings.h"
 #include "../../includes/translation.h"
@@ -160,15 +161,14 @@ private:
     QFuture<QString> _innerHtmlResult;
     QMultiHash<QString, Translation*> _result;
     QStringList _htmlResult;
-    QTimer _timerSearch, _timerHtmlSearch;
-    QTime _time;
+    //QTime _time;
     QString _pluginPath, _defaultPluginPath;
     QString _configPath;
     QString _defaultConfigPath;
-    //QString _mappedSearch;
+    QFutureWatcher<QList<Translation*> > _resultWatcher;
+    QFutureWatcher<QString> _htmlResultWatcher;
     int _searchLimit, _defaultSearchLimit;
     int _activeSearchNum;
-    int _interval; //Search fetching timer.timeout interval in msec
     int _historyLen, _defaultHistoryLen;
     bool dryRun;