Backbone::Backbone(const Backbone &b){
dicts = QHash<CommonDictInterface*, bool > (b.dicts);
plugins = QList<CommonDictInterface* > (b.plugins);
- resultv = QHash<QString, Translation* > (b.resultv);
+ _result = QHash<QString, Translation* > (b._result);
searchLimitv = b.searchLimit();
}
//TODO code needed
}
-QHash<QString, Translation*> Backbone::result() {
- return resultv;
+QMultiHash<QString, Translation*> Backbone::result() {
+ return _result;
}
void Backbone::stopSearching() {
void Backbone::search(QString word) {
//TODO add running searches in new threads
+ _result.clear();
+ activeSearchNum = 0;
foreach(CommonDictInterface* dict, dicts.keys())
- if(dicts[dict] == 1)
+ if(dicts[dict] == 1) {
+ activeSearchNum ++;
+ }
+
+ foreach(CommonDictInterface* dict, dicts.keys())
+ if(dicts[dict] == 1) {
dict->search(word, searchLimit());
+ }
}
void Backbone::selectedDictionaries(QList<CommonDictInterface* > activeDicts) {
void Backbone::addDictionary(CommonDictInterface* dict) {
dicts[dict] = 1;
connect(dict, SIGNAL(finalTranslation(QList<Translation*>)),
- this, SLOT(translation(QList<Translation*>)));
+ this, SLOT(translation(QList<Translation*>)),
+ Qt::UniqueConnection);
}
void Backbone::quit() {
+int Backbone::activeSearches() const {
+ return activeSearchNum;
+}
+
+
+
void Backbone::translation(QList<Translation *> trans) {
+ activeSearchNum--;
+ foreach(Translation* t, trans)
+ _result.insert(t->key(), t);
+ if(activeSearchNum < 1)
+ Q_EMIT ready();
}
QList<QString> getHistory(); //TODO implementation needed (in future)
//! \return return search fesult
- QHash<QString, Translation*> result();
+ QMultiHash<QString, Translation*> result();
//! \return maximum number of word that plugin could find
int searchLimit() const;
+ //! \return number of active searches
+ int activeSearches() const;
+
public Q_SLOTS:
//! stops all current searches
void stopSearching();
private:
QHash<CommonDictInterface*, bool> dicts;
QList<CommonDictInterface*> plugins;
- QHash<QString, Translation*> resultv;
+ QMultiHash<QString, Translation*> _result;
int searchLimitv;
+ int activeSearchNum;
};
total = 5;
for(int i = 0; i < total; i++)
dict.push_back(new CommonDictInterfaceMock());
- qRegisterMetaType(Translation);
}
void BackboneTest::translationTest() {
QSignalSpy** ss = new QSignalSpy*[total];
+ QSignalSpy translatS(back, SIGNAL(ready()));
+ QVERIFY2 (translatS.isValid() == true, "ready() signal is invalid");
for(int i = 0; i < total; i++) {
CommonDictInterfaceMock *m = (CommonDictInterfaceMock*) dict[i];
for(int i = 0; i < total; i++) {
QVERIFY2(ss[i]->count() == 1, "Translation signal lost");
}
+
+ qDebug() << "count " << translatS.count();
+ QVERIFY2(translatS.count() == 1, "Lost finall 'ready()' signal");
+ qDebug() << "result.size " << back->result().size();
+ QVERIFY2(back->result().size() == total*2, "Lost some of translations");
}