/* This is part of TeXworks, an environment for working with TeX documents Copyright (C) 2007-08 Jonathan Kew This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . For links to further information, or to contact the author, see . */ #ifndef FindDialog_H #define FindDialog_H #include #include #include #include "ui_Find.h" #include "ui_Replace.h" #include "ui_SearchResults.h" #include "ui_PDFFind.h" class TeXDocument; class QTextEdit; class PDFDocument; class RecentStringsKeyFilter : public QObject { Q_OBJECT public: RecentStringsKeyFilter(QObject *parent, const QStringList& stringList) : QObject(parent), strings(stringList) {} virtual ~RecentStringsKeyFilter() {} protected: bool eventFilter(QObject *obj, QEvent *event); void setRecentString(QObject *obj, int dir); QStringList strings; }; class FindDialog : public QDialog, private Ui::FindDialog { Q_OBJECT public: FindDialog(QTextEdit *document); static DialogCode doFindDialog(QTextEdit *document); private slots: void toggledAllFilesOption(bool checked); void toggledFindAllOption(bool checked); void toggledRegexOption(bool checked); void toggledSelectionOption(bool checked); void checkRegex(const QString& str); void setSearchText(); private: void init(QTextEdit *document); }; class PDFFindDialog : public QDialog, private Ui::PDFFindDialog { Q_OBJECT public: PDFFindDialog(PDFDocument *document); static DialogCode doFindDialog(PDFDocument *document); private slots: // void toggledFindAllOption(bool checked); void setSearchText(); private: void init(PDFDocument *document); }; class ReplaceDialog : public QDialog, private Ui::ReplaceDialog { Q_OBJECT public: ReplaceDialog(QTextEdit *parent); typedef enum { Cancel, ReplaceOne, ReplaceAll } DialogCode; static DialogCode doReplaceDialog(QTextEdit *document); private slots: void toggledAllFilesOption(bool checked); void toggledRegexOption(bool checked); void toggledSelectionOption(bool checked); void checkRegex(const QString& str); void clickedReplace(); void clickedReplaceAll(); void setSearchText(); void setReplaceText(); private: void init(QTextEdit *document); }; class SearchResult { public: SearchResult(const TeXDocument* texdoc, int line, int start, int end) : doc(texdoc), lineNo(line), selStart(start), selEnd(end) { } const TeXDocument* doc; int lineNo; int selStart; int selEnd; }; class PDFSearchResult { public: PDFSearchResult(const PDFDocument* pdfdoc = NULL, int page = -1, QRectF rect = QRectF()) : doc(pdfdoc), pageIdx(page), selRect(rect) { } const PDFDocument* doc; int pageIdx; QRectF selRect; }; class SearchResults : public QDockWidget, private Ui::SearchResults { Q_OBJECT public: static void presentResults(const QString& searchText, const QList& results, QMainWindow* parent, bool singleFile); SearchResults(QWidget* parent); private slots: void showSelectedEntry(); void goToSource(); void goToSourceAndClose(); }; #endif