summaryrefslogtreecommitdiffstats
path: root/khelpcenter/searchengine.h
diff options
context:
space:
mode:
Diffstat (limited to 'khelpcenter/searchengine.h')
-rw-r--r--khelpcenter/searchengine.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/khelpcenter/searchengine.h b/khelpcenter/searchengine.h
new file mode 100644
index 000000000..1528fe6d0
--- /dev/null
+++ b/khelpcenter/searchengine.h
@@ -0,0 +1,151 @@
+#ifndef SEARCHENGINE_H
+#define SEARCHENGINE_H
+
+#include <qobject.h>
+#include <qptrlist.h>
+#include <qstring.h>
+
+#include <kpixmap.h>
+#include <kio/job.h>
+
+#include "docentrytraverser.h"
+
+class QWidget;
+class KProcess;
+class KConfig;
+class KHTMLPart;
+
+namespace KHC {
+
+class Formatter;
+class SearchEngine;
+class View;
+class SearchHandler;
+
+class SearchTraverser : public QObject, public DocEntryTraverser
+{
+ Q_OBJECT
+ public:
+ SearchTraverser( SearchEngine *engine, int level );
+ ~SearchTraverser();
+
+ void process( DocEntry * );
+
+ void startProcess( DocEntry * );
+
+ DocEntryTraverser *createChild( DocEntry * );
+
+ DocEntryTraverser *parentTraverser();
+
+ void deleteTraverser();
+
+ void finishTraversal();
+
+ protected:
+ void connectHandler( SearchHandler *handler );
+ void disconnectHandler( SearchHandler *handler );
+
+ protected slots:
+ void showSearchResult( SearchHandler *, DocEntry *, const QString &result );
+ void showSearchError( SearchHandler *, DocEntry *, const QString &error );
+
+ private:
+ const int mMaxLevel;
+
+ SearchEngine *mEngine;
+ int mLevel;
+
+ DocEntry *mEntry;
+ QString mJobData;
+
+ QString mResult;
+
+ QMap<SearchHandler *, int> mConnectCount;
+};
+
+
+class SearchEngine : public QObject
+{
+ Q_OBJECT
+ public:
+ enum Operation { And, Or };
+
+ SearchEngine( View * );
+ ~SearchEngine();
+
+ bool initSearchHandlers();
+
+ bool search( QString words, QString method = "and", int matches = 5,
+ QString scope = "" );
+
+ Formatter *formatter() const;
+ View *view() const;
+
+ QString substituteSearchQuery( const QString &query );
+
+ static QString substituteSearchQuery( const QString &query,
+ const QString &identifier, const QStringList &words, int maxResults,
+ Operation operation, const QString &lang );
+
+ void finishSearch();
+
+ /**
+ Append error message to error log.
+ */
+ void logError( DocEntry *entry, const QString &msg );
+
+ /**
+ Return error log.
+ */
+ QString errorLog() const;
+
+ bool isRunning() const;
+
+ SearchHandler *handler( const QString &documentType ) const;
+
+ QStringList words() const;
+ int maxResults() const;
+ Operation operation() const;
+
+ bool canSearch( DocEntry * );
+ bool needsIndex( DocEntry * );
+
+ signals:
+ void searchFinished();
+
+ protected slots:
+ void searchStdout(KProcess *proc, char *buffer, int buflen);
+ void searchStderr(KProcess *proc, char *buffer, int buflen);
+ void searchExited(KProcess *proc);
+
+ protected:
+ void processSearchQueue();
+
+ private:
+ KProcess *mProc;
+ bool mSearchRunning;
+ QString mSearchResult;
+
+ QString mStderr;
+
+ View *mView;
+
+ QString mWords;
+ int mMatches;
+ QString mMethod;
+ QString mLang;
+ QString mScope;
+
+ QStringList mWordList;
+ int mMaxResults;
+ Operation mOperation;
+
+ DocEntryTraverser *mRootTraverser;
+
+ QMap<QString, SearchHandler *> mHandlers;
+};
+
+}
+
+#endif
+// vim:ts=2:sw=2:et