notepad--/findwin.h

182 lines
4.1 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <QMainWindow>
#include <QTabWidget>
#include <QVector>
#include "ui_findwin.h"
enum FindTabIndex {
FIND_TAB,
REPLACE_TAB,
DIR_FIND_TAB,
MARK_TAB,
};
class ScintillaEditView;
class QsciScintilla;
struct FindRecord {
int lineNum;
int lineStartPos; //行开始位置
int pos; //查找字段的开始位置
int end; //查找字段的结束位置
QString lineContents;
};
class FindRecords {
public:
QString findFilePath;
QString findText;
//是否区分大小写
//int caseSensitivity;
//int totalMatch; //全词匹配
ScintillaEditView* pEdit;
QVector<FindRecord> records;
FindRecords()
{
pEdit = nullptr;
}
~FindRecords()
{
pEdit = nullptr;
}
};
class FindWin : public QMainWindow
{
Q_OBJECT
public:
FindWin(QWidget *parent = Q_NULLPTR);
~FindWin();
void setCurrentTab(FindTabIndex index);
void setTabWidget(QTabWidget * editTabWidget);
void setFindText(QString & text);
void disableReplace();
void setFindHistory(QList<QString>* findHistory);
void markAllWord(QString& word);
void removeLineHeadEndBlank(int mode);
static void showCallTip(QsciScintilla * pEdit, int pos);
protected:
virtual void focusInEvent(QFocusEvent *ev);
virtual void focusOutEvent(QFocusEvent *ev);
//bool eventFilter(QObject *, QEvent *); //注意这里
signals:
void sign_findAllInCurDoc(FindRecords* record);
void sign_findAllInOpenDoc(QVector<FindRecords*>* record, int hits, QString findText);
void sign_replaceSaveFile(QString filePath, ScintillaEditView * pEdit);
void sign_clearResult();
//void sign_markAllInCurDoc(FindRecords* record);
private:
void updateParameterFromUI();
void addFindHistory(QString & text);
bool isFirstFind();
void addCurFindRecord(ScintillaEditView * pEdit, FindRecords & recordRet, bool isMark=false);
bool findTextInFile(QString & filePath, int & findNums, QVector<FindRecords*>* allfileInDirRecord);
bool replaceTextInFile(QString & filePath, int & replaceNums, QVector<FindRecords*>* r = nullptr);
int walkDirfile(QString path, int & foundTimes, bool isSkipBinary, bool isSkipHide, int skipMaxSize, bool isfilterFileType, QStringList & fileExtType, bool isSkipChildDirs, std::function<bool(QString&, int&, QVector<FindRecords*>*allfileInDirRecord)> foundCallBack, bool isAskAbort=true);
QWidget* autoAdjustCurrentEditWin();
void dealWithZeroFound(QsciScintilla * pEdit);
void dealWithZeroFoundShowTip(QsciScintilla * pEdit, bool isShowTip=true);
bool replaceFindNext(QsciScintilla* pEdit, bool showZeroFindTip);
bool replace(ScintillaEditView* pEdit);
private slots:
void slot_findNext();
void slot_findCount();
void slot_findAllInCurDoc();
void slot_findAllInOpenDoc();
void slot_replaceFindNext();
void slot_replace();
void slot_findModeRegularBtChange(bool checked);
void slot_replaceModeRegularBtChange(bool checked);
void slot_replaceAll();
void slot_replaceAllInOpenDoc();
void slot_markAll();
void slot_clearMark();
void slot_dirSelectDest();
void slot_dealFileTypeChange(int state);
void slot_dirFindAll();
void slot_dirReplaceAll();
private:
Ui::FindWin ui;
QTabWidget *m_editTabWidget;
//第一次查找,查找参数变化,认定为第一次查找
bool m_isFindFirst;
bool m_BackwardDir;
bool m_matchWhole;
bool m_matchCase;
bool m_matchWrap;
int m_searchMode; // 1 normal 2 regular expression 3 Exteral
//find的参数
QString m_expr;
bool m_re;
bool m_cs;
bool m_wo;
bool m_wrap;
bool m_forward;//是否向前查找。注意如果向后要为false
bool m_line;
bool m_index;
bool m_extend;
//bool m_show;
//bool m_posix;
//bool m_cxx11;
bool m_isFound;
QString m_replaceWithText;
//上次点击的按钮id如果两次点击的不一样
//说明是不同的操作,如果是查找,则当前这次点击算是第一次查找
QString m_lastClickBtName;
QList<QString>* m_findHistory;
ScintillaEditView* pEditTemp;
QWidget* m_curEditWin;
bool m_isStatic;//是否静默处理,不弹确认对话框
};