vnote/src/widgets/findandreplacewidget.h
Le Tan 847e3d621d
support find and replace (#1593)
TODO: we may need to transform the `QRegularExpression` usage to the `RegExp` in JS.
2020-12-13 12:34:43 +08:00

89 lines
1.9 KiB
C++

#ifndef FINDANDREPLACEWIDGET_H
#define FINDANDREPLACEWIDGET_H
#include <QWidget>
#include <QVector>
#include <core/global.h>
class QLineEdit;
class QCheckBox;
class QTimer;
namespace vnotex
{
class FindAndReplaceWidget : public QWidget
{
Q_OBJECT
public:
explicit FindAndReplaceWidget(QWidget *p_parent = nullptr);
void setReplaceEnabled(bool p_enabled);
void open(const QString &p_text);
void close();
QString getFindText() const;
FindOptions getOptions() const;
signals:
void findTextChanged(const QString &p_text, FindOptions p_options);
void findNextRequested(const QString &p_text, FindOptions p_options);
void replaceRequested(const QString &p_text, FindOptions p_options, const QString &p_replaceText);
void replaceAllRequested(const QString &p_text, FindOptions p_options, const QString &p_replaceText);
void closed();
void opened();
protected:
void keyPressEvent(QKeyEvent *p_event) Q_DECL_OVERRIDE;
private slots:
void findNext();
void findPrevious();
void updateFindOptions();
void replace();
void replaceAndFind();
void replaceAll();
private:
void setupUI();
void setFindOptions(FindOptions p_options);
QLineEdit *m_findLineEdit = nullptr;
QLineEdit *m_replaceLineEdit = nullptr;
QVector<QWidget *> m_replaceRelatedWidgets;
QCheckBox *m_caseSensitiveCheckBox = nullptr;
QCheckBox *m_wholeWordOnlyCheckBox = nullptr;
QCheckBox *m_regularExpressionCheckBox = nullptr;
QCheckBox *m_incrementalSearchCheckBox = nullptr;
FindOptions m_options = FindOption::None;
QTimer *m_findTextTimer = nullptr;
bool m_optionCheckBoxMuted = false;
};
}
#endif // FINDANDREPLACEWIDGET_H