150 lines
4 KiB
C
150 lines
4 KiB
C
|
/*
|
||
|
* Copyright (C) 2009 Lorenzo Bettini <http://www.lorenzobettini.it>
|
||
|
* See COPYING file that comes with this distribution
|
||
|
*/
|
||
|
|
||
|
#ifndef FINDREPLACEFORM_H
|
||
|
#define FINDREPLACEFORM_H
|
||
|
|
||
|
#include <QWidget>
|
||
|
#include <QTextCursor>
|
||
|
|
||
|
#include "findreplace_global.h"
|
||
|
|
||
|
namespace Ui {
|
||
|
class FindReplaceForm;
|
||
|
}
|
||
|
|
||
|
class QTextEdit;
|
||
|
class QPlainTextEdit;
|
||
|
class QSettings;
|
||
|
class VariantEditor;
|
||
|
|
||
|
/**
|
||
|
* 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 FINDREPLACESHARED_EXPORT 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(QTextEdit *textEdit_);
|
||
|
|
||
|
/**
|
||
|
* 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
|
||
|
VariantEditor *textEdit;
|
||
|
};
|
||
|
|
||
|
#endif // FINDREPLACEFORM_H
|