Make a branch to make krunner Good Enough For Aaron™.
[kdebase/uwolfer.git] / runtime / khelpcenter / searchengine.h
blob8be8bbe75acf6357d4d513472ca4c1de2d65607e
1 #ifndef SEARCHENGINE_H
2 #define SEARCHENGINE_H
4 #include <QObject>
7 #include <KProcess>
8 #include <kio/job.h>
10 #include "docentrytraverser.h"
13 namespace KHC {
15 class Formatter;
16 class SearchEngine;
17 class View;
18 class SearchHandler;
20 class SearchTraverser : public QObject, public DocEntryTraverser
22 Q_OBJECT
23 public:
24 SearchTraverser( SearchEngine *engine, int level );
25 ~SearchTraverser();
27 void process( DocEntry * );
29 void startProcess( DocEntry * );
31 DocEntryTraverser *createChild( DocEntry * );
33 DocEntryTraverser *parentTraverser();
35 void deleteTraverser();
37 void finishTraversal();
39 protected:
40 void connectHandler( SearchHandler *handler );
41 void disconnectHandler( SearchHandler *handler );
43 protected Q_SLOTS:
44 void showSearchResult( SearchHandler *, DocEntry *, const QString &result );
45 void showSearchError( SearchHandler *, DocEntry *, const QString &error );
47 private:
48 const int mMaxLevel;
50 SearchEngine *mEngine;
51 int mLevel;
53 DocEntry *mEntry;
54 QString mJobData;
56 QString mResult;
58 QMap<SearchHandler *, int> mConnectCount;
62 class SearchEngine : public QObject
64 Q_OBJECT
65 public:
66 enum Operation { And, Or };
68 SearchEngine( View * );
69 ~SearchEngine();
71 bool initSearchHandlers();
73 bool search( const QString & words, const QString & method = "and", int matches = 5,
74 const QString & scope = "" );
76 Formatter *formatter() const;
77 View *view() const;
79 QString substituteSearchQuery( const QString &query );
81 static QString substituteSearchQuery( const QString &query,
82 const QString &identifier, const QStringList &words, int maxResults,
83 Operation operation, const QString &lang );
85 void finishSearch();
87 /**
88 Append error message to error log.
90 void logError( DocEntry *entry, const QString &msg );
92 /**
93 Return error log.
95 QString errorLog() const;
97 bool isRunning() const;
99 SearchHandler *handler( const QString &documentType ) const;
101 QStringList words() const;
102 int maxResults() const;
103 Operation operation() const;
105 bool canSearch( DocEntry * );
106 bool needsIndex( DocEntry * );
108 Q_SIGNALS:
109 void searchFinished();
111 protected Q_SLOTS:
112 void searchExited(int, QProcess::ExitStatus);
114 protected:
115 void processSearchQueue();
117 private:
118 KProcess *mProc;
119 bool mSearchRunning;
120 QString mSearchResult;
122 QString mStderr;
124 View *mView;
126 QString mWords;
127 int mMatches;
128 QString mMethod;
129 QString mLang;
130 QString mScope;
132 QStringList mWordList;
133 int mMaxResults;
134 Operation mOperation;
136 DocEntryTraverser *mRootTraverser;
138 QMap<QString, SearchHandler *> mHandlers;
143 #endif
144 // vim:ts=2:sw=2:et