summaryrefslogtreecommitdiffstats log msg author committer range
blob: f18052b7935fbb44078e0ed58f185e5d0de9da5a (plain)
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 /*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * This file has been copied from Lorenzo Bettini, with minor modifications * made available under the LGPL version 3, as the original file was licensed * **************************************************************************** * * Copyright (C) 2009 Lorenzo Bettini * See COPYING file that comes with this distribution */ #ifndef FINDREPLACEFORM_H #define FINDREPLACEFORM_H #include #include #include namespace Ui { class FindReplaceForm; } class QTextEdit; class QSettings; /** * The form for the find/replace dialog. The form presents the typical * widgets you find in standard find/replace dialogs, and it acts on a QTextEdit. * * \image html Screenshot-FindReplace.png * * You need to set the QTextEdit explicitly, using the method setTextEdit(QTextEdit *textEdit). * * For instance * \code * m_findReplaceDialog = new FindReplaceDialog(this); * m_findReplaceDialog->setModal(false); * m_findReplaceDialog->setTextEdit(ui->textEdit); * \endcode * * The find functionalities is available even if the find dialog is not shown: if something * to search for was already specified, the application can call the methods findNext() and * findPrev() (e.g., by connecting them to menu items). * * In case a regular expression is used as the search term, the form also checks whether the * expression is a valid regular expression (You may want to take a look at the syntax of regular expressions: * http://doc.trolltech.com/qregexp.html). * * The form provides also functionalities to save and restore its state using a QSettings object (i.e., * the last word searched for, the options of the form, etc.) via the methods writeSettings() * and readSettings(). * * You can take a look at the \ref examples page. */ class FindReplaceForm : public QWidget { Q_OBJECT public: FindReplaceForm(QWidget *parent = 0); virtual ~FindReplaceForm(); /** * Associates the text editor where to perform the search * @param textEdit_ */ void setTextEdit(QPlainTextEdit *textEdit_); /// hides replace widgets from the form void hideReplaceWidgets(); /** * Writes the state of the form to the passed settings. * @param settings * @param prefix the prefix to insert in the settings */ virtual void writeSettings(QSettings &settings, const QString &prefix = "FindReplaceDialog"); /** * Reads the state of the form from the passed settings. * @param settings * @param prefix the prefix to look for in the settings */ virtual void readSettings(QSettings &settings, const QString &prefix = "FindReplaceDialog"); public slots: /** * performs the find task * @param down whether to find the next or the previous * occurrence */ void find(bool down); /** * Finds the next occurrence */ void find(); /** * Finds the next occurrence */ void findNext() { find(true); } /** * Finds the previous occurrence */ void findPrev() { find(false); } /** * Replaces the found occurrences and goes to the next occurrence */ void replace(); /** * Replaces all the found occurrences */ void replaceAll(); protected: void changeEvent(QEvent *e); /// shows an error in the dialog void showError(const QString &error); /// shows a message in the dialog void showMessage(const QString &message); protected slots: /// when the text edit contents changed void textToFindChanged(); /// checks whether the passed text is a valid regexp void validateRegExp(const QString &text); /// the regexp checkbox was selected void regexpSelected(bool sel); protected: Ui::FindReplaceForm *ui; /// for searching into the text QTextCursor textCursor; /// the text editor (possibly) associated with this form QPlainTextEdit *textEdit; }; #endif // FINDREPLACEFORM_H