diff options
Diffstat (limited to 'khelpcenter/searchengine.h')
-rw-r--r-- | khelpcenter/searchengine.h | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/khelpcenter/searchengine.h b/khelpcenter/searchengine.h new file mode 100644 index 000000000..ac31a9e0a --- /dev/null +++ b/khelpcenter/searchengine.h @@ -0,0 +1,151 @@ +#ifndef SEARCHENGINE_H +#define SEARCHENGINE_H + +#include <tqobject.h> +#include <tqptrlist.h> +#include <tqstring.h> + +#include <kpixmap.h> +#include <tdeio/job.h> + +#include "docentrytraverser.h" + +class TQWidget; +class TDEProcess; +class TDEConfig; +class TDEHTMLPart; + +namespace KHC { + +class Formatter; +class SearchEngine; +class View; +class SearchHandler; + +class SearchTraverser : public TQObject, 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 TQString &result ); + void showSearchError( SearchHandler *, DocEntry *, const TQString &error ); + + private: + const int mMaxLevel; + + SearchEngine *mEngine; + int mLevel; + + DocEntry *mEntry; + TQString mJobData; + + TQString mResult; + + TQMap<SearchHandler *, int> mConnectCount; +}; + + +class SearchEngine : public TQObject +{ + Q_OBJECT + public: + enum Operation { And, Or }; + + SearchEngine( View * ); + ~SearchEngine(); + + bool initSearchHandlers(); + + bool search( TQString words, TQString method = "and", int matches = 5, + TQString scope = "" ); + + Formatter *formatter() const; + View *view() const; + + TQString substituteSearchQuery( const TQString &query ); + + static TQString substituteSearchQuery( const TQString &query, + const TQString &identifier, const TQStringList &words, int maxResults, + Operation operation, const TQString &lang ); + + void finishSearch(); + + /** + Append error message to error log. + */ + void logError( DocEntry *entry, const TQString &msg ); + + /** + Return error log. + */ + TQString errorLog() const; + + bool isRunning() const; + + SearchHandler *handler( const TQString &documentType ) const; + + TQStringList words() const; + int maxResults() const; + Operation operation() const; + + bool canSearch( DocEntry * ); + bool needsIndex( DocEntry * ); + + signals: + void searchFinished(); + + protected slots: + void searchStdout(TDEProcess *proc, char *buffer, int buflen); + void searchStderr(TDEProcess *proc, char *buffer, int buflen); + void searchExited(TDEProcess *proc); + + protected: + void processSearchQueue(); + + private: + TDEProcess *mProc; + bool mSearchRunning; + TQString mSearchResult; + + TQString mStderr; + + View *mView; + + TQString mWords; + int mMatches; + TQString mMethod; + TQString mLang; + TQString mScope; + + TQStringList mWordList; + int mMaxResults; + Operation mOperation; + + DocEntryTraverser *mRootTraverser; + + TQMap<TQString, SearchHandler *> mHandlers; +}; + +} + +#endif +// vim:ts=2:sw=2:et |