summaryrefslogtreecommitdiff
path: root/src/backend/cswordmodulesearch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/cswordmodulesearch.cpp')
-rw-r--r--src/backend/cswordmodulesearch.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/backend/cswordmodulesearch.cpp b/src/backend/cswordmodulesearch.cpp
new file mode 100644
index 0000000..f57a87a
--- /dev/null
+++ b/src/backend/cswordmodulesearch.cpp
@@ -0,0 +1,123 @@
+/*********
+*
+* This file is part of BibleTime's source code, http://www.bibletime.info/.
+*
+* Copyright 1999-2008 by the BibleTime developers.
+* The BibleTime source code is licensed under the GNU General Public License version 2.0.
+*
+**********/
+
+//BibleTime includes
+#include "cswordmodulesearch.h"
+
+#include "backend/drivers/cswordmoduleinfo.h"
+#include "backend/managers/cswordbackend.h"
+#include "backend/config/cbtconfig.h"
+
+//Sword includes
+#include <swmodule.h>
+#include <swkey.h>
+#include <listkey.h>
+
+
+CSwordModuleSearch* CSwordModuleSearch::searcher = 0;
+
+CSwordModuleSearch::CSwordModuleSearch()
+ : m_searchedText(QString::null),
+ m_searchOptions(0),
+ m_foundItems(false)
+{
+ searcher = this;
+}
+
+CSwordModuleSearch::~CSwordModuleSearch() {
+ searcher = 0;
+}
+
+/** This function sets the modules which should be searched. */
+void CSwordModuleSearch::setModules( const QList<CSwordModuleInfo*>& list ) {
+ m_moduleList = list;
+}
+
+/** Starts the search for the search text. */
+bool CSwordModuleSearch::startSearch() {
+ backend()->setFilterOptions ( CBTConfig::getFilterOptionDefaults() );
+ m_foundItems = false;
+
+ bool foundItems = false;
+
+ // for (m_moduleList.first(); m_moduleList.current() && !m_terminateSearch; m_moduleList.next()) {
+ QList<CSwordModuleInfo*>::iterator end_it = m_moduleList.end();
+
+ for (QList<CSwordModuleInfo*>::iterator it = m_moduleList.begin(); it != end_it; ++it) {
+ if ( (*it)->searchIndexed(m_searchedText/*, m_searchOptions*/, m_searchScope) ) {
+ foundItems = true;
+ }
+ }
+
+ m_foundItems = foundItems;
+
+ //m_finishedSig.activate();
+ emit finished();
+ return true;
+}
+
+/** Sets the text which should be search in the modules. */
+void CSwordModuleSearch::setSearchedText( const QString& text ) {
+ m_searchedText = text;
+}
+
+/** Sets the search scope. */
+void CSwordModuleSearch::setSearchScope( const sword::ListKey& scope ) {
+ m_searchScope.copyFrom( scope );
+
+ if (!strlen(scope.getRangeText())) { //we can't search with an empty search scope, would crash
+ //reset the scope
+ resetSearchScope();
+
+ //disable searching with a scope!
+ // if (m_searchOptions | useScope) {
+ // qWarning("using the scope!");
+ //set back the scope flag
+ // }
+ }
+}
+
+/** Sets the search scope back. */
+void CSwordModuleSearch::resetSearchScope() {
+ m_searchScope.ClearList();
+}
+
+/** Returns true if in the last search the searcher found items, if no items were found return false. */
+bool CSwordModuleSearch::foundItems() const {
+ return m_foundItems;
+}
+
+/** Returns a copy of the used search scope. */
+const sword::ListKey& CSwordModuleSearch::searchScope() const {
+ return m_searchScope;
+}
+
+void CSwordModuleSearch::connectFinished( QObject *receiver, const char *member ) {
+ //m_finishedSig.connect(receiver, member);
+ QObject::connect(this, SIGNAL(finished()), receiver, member);
+}
+
+/** Should be called when the search finished. */
+void CSwordModuleSearch::searchFinished() {
+ //m_finishedSig.activate();
+ emit finished();
+}
+
+bool CSwordModuleSearch::modulesHaveIndices( const QList<CSwordModuleInfo*>& modules )
+{
+ bool hasIndices = true;
+ QList<CSwordModuleInfo*>::const_iterator end_it = modules.end();
+ for( QList<CSwordModuleInfo*>::const_iterator it = modules.begin(); it != end_it; ++it) {
+ if (!(*it)->hasIndex()) {
+ hasIndices = false;
+ break;
+ }
+ }
+ return hasIndices;
+}