#include <QTimer>
#include <QTime>
#include <QDir>
+#include <QThread>
#include <QSettings>
+#include <QFutureWatcher>
#include "../../includes/CommonDictInterface.h"
#include "../../includes/settings.h"
#include "../../includes/translation.h"
#include "../../includes/History.h"
+#include "Bookmarks.h"
/*! Inner part of dictionary - glues together GUI and plugins
//! \return maximum number of word that plugin could find
int searchLimit() const;
- //! \return number of active searches
- int activeSearches() const;
-
- /*! Performs search for final translation (html/xml) form
- \param list of Translation* to be searched for
- */
- void searchHtml(QList<Translation*>);
-
//! \return final translation (after searching for html)
QStringList htmls();
/*! search for a word translation
\param word to be translated
+ \param dicts searching in dicionaries
+ \param bookmarks searching in bookmarks
*/
void search(QString word);
/*! saves plugins new state/configuration after each change */
void dictUpdated();
- // TODO addToBookmark(Translation*);
- // TODO removeFromBookmark(Translation*);
+ /*! Performs search for final translation (html/xml) form
+ \param list of Translation* to be searched for
+ */
+ void searchHtml(QList<Translation*>);
+
+
+ /*! add bookmarks to given translations (translation object is fetched and
+ added to bookmarks data base (key and translation stored in db)
+ \param translation translation object to be stored in db
+ */
+ void addBookmark(QList<Translation*> translations) {
+ foreach(Translation* translation, translations)
+ //_bookmarks.add(translation);
+ QtConcurrent::run(_bookmarks, &Bookmarks::add, translation);
+ }
+
+
+ /*! Remove bookmarks to given translatios
+ \param translation remove bookmark to this translation
+ */
+ void removeBookmark(QList<Translation*> translations) {
+ foreach(Translation* translation, translations)
+ _bookmarks.remove(translation);
+ }
+
+
+
+ /*! Remove all bookmarks
+ */
+ void removeAllBookmark(){
+ _bookmarks.clear();
+ }
+
+
+ /*! Searching for list of bookmarks may take some time, so i moved it to
+ new thread (to avoid gui blocking), when ready bookmarksReady is emited
+ and result is returned after calling getBookmarks()
+ */
+ void fetchBookmarks() {
+ _result.clear();
+
+ stopped = false;
+ dictFin = 1;
+ bookmarkFin = 0;
+
+ if(_searchBookmarks) {
+ _innerBookmarks = QtConcurrent::run(_bookmarks,
+ &Bookmarks::searchWordList, QString("*"));
+ _bookmarkSearchWatcher.setFuture(_innerBookmarks);
+ }
+ }
+
+ /*! \return list of all bookmarks
+ */
+ QList<Translation*> bookmarks() {
+ return _bookmarksResult;
+ }
+
+
+ /*! Sets settings for backbone: history_size, search_limit,
+ searching backends (search_bookmarks, search_dictionaries)
+ \param settings settings object with opitons set
+ */
+ void setSettings(Settings* settings);
+
+
+ /*! \return coresponding settings object with history_size, search_limit,
+ searching backends (search_bookmarks, search_dictionaries)
+ */
+ Settings* settings();
+
+
+
Q_SIGNALS:
/*! emmited when backbone is ready to close - after getting stop signal it
//! emitted when html result is ready to fetch
void htmlReady();
+ //! throwed when searches are stopped
+ void searchCanceled();
+
+ //! emmited when bookmark list is ready to fetch
+ void bookmarksReady();
+
+private Q_SLOTS:
+ void bookmarksListReady();
private:
- QHash<CommonDictInterface*, bool> _dicts;
- QList<CommonDictInterface*> _plugins;
- QFuture<QList<Translation*> > _innerResult;
- QFuture<QString> _innerHtmlResult;
- QMultiHash<QString, Translation*> _result;
- QStringList _htmlResult;
- QTimer _timerSearch, _timerHtmlSearch;
- QTime _time;
+ QHash<CommonDictInterface*, bool> _dicts; // List of dictionaries
+ QList<CommonDictInterface*> _plugins; // List of plugins
+
+
+ QFuture<QList<Translation*> > _innerResult; //Res of concurent word search
+ QFuture<QString> _innerHtmlResult; // Result of html search
+ QFuture<QList<Translation*> > _innerBookmarks; //Res of search in bookmarks
+ QFuture<QList<Translation*> > _innerListBookmarks; //Res of search in bookmarks
+ QFuture<QStringList> _innerHtmlBookmarks; //Html result of bookmarks search
+
+ QMultiHash<QString, Translation*> _result; //Final result of word search
+ QStringList _htmlResult; // Final result of html search
+ QList<Translation*> _bookmarksResult; // Final result of search in bookmarks
+
+
+ // Keeps track of concurent computations
+ QFutureWatcher<QList<Translation*> > _resultWatcher;
+ QFutureWatcher<QList<Translation*> > _bookmarkWatcher;
+ QFutureWatcher<QList<Translation*> > _bookmarkSearchWatcher;
+ QFutureWatcher<QString> _htmlResultWatcher;
+
+
QString _pluginPath, _defaultPluginPath;
QString _configPath;
QString _defaultConfigPath;
- //QString _mappedSearch;
int _searchLimit, _defaultSearchLimit;
int _activeSearchNum;
- int _interval; //Search fetching timer.timeout interval in msec
int _historyLen, _defaultHistoryLen;
bool dryRun;
+ bool stopped;
+ bool bookmarkFin, dictFin; // inform whether givent search type is ready
+ bool _searchDicts, _searchBookmarks;
+ Bookmarks _bookmarks;
void init();
+
QStringList getFilesFromDir(QString dir, QStringList nameFilter);
void loadPlugins(); //< locate and load plugins
void loadPrefs(QString fileName);
void loadDicts(QString fileName, bool _default=false);
+
void saveState(QSettings*, Settings*, bool, uint);
void addInternalDictionary(CommonDictInterface*, bool);
void savePrefs(QSettings*);
void saveDefaultPrefs(QSettings*);
+
CommonDictInterface* plugin(QString type); //< search for given type plugin
QList<CommonDictInterface*> activeDicts();
- //QList<Translation*> mapSearch(CommonDictInterface*) const;
History* _history;