findwin.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #pragma once
  2. #include <QMainWindow>
  3. #include <QTabWidget>
  4. #include <QVector>
  5. #include "ui_findwin.h"
  6. enum FindTabIndex {
  7. FIND_TAB,
  8. REPLACE_TAB,
  9. DIR_FIND_TAB,
  10. MARK_TAB,
  11. };
  12. class ScintillaEditView;
  13. class QsciScintilla;
  14. struct FindRecord {
  15. int lineNum;
  16. int lineStartPos; //行开始位置
  17. int pos; //查找字段的开始位置
  18. int end; //查找字段的结束位置
  19. QString lineContents;
  20. };
  21. class FindRecords {
  22. public:
  23. QString findFilePath;
  24. QString findText;
  25. //是否区分大小写
  26. //int caseSensitivity;
  27. //int totalMatch; //全词匹配
  28. ScintillaEditView* pEdit;
  29. QVector<FindRecord> records;
  30. FindRecords()
  31. {
  32. pEdit = nullptr;
  33. }
  34. ~FindRecords()
  35. {
  36. pEdit = nullptr;
  37. }
  38. };
  39. class FindWin : public QMainWindow
  40. {
  41. Q_OBJECT
  42. public:
  43. FindWin(QWidget *parent = Q_NULLPTR);
  44. ~FindWin();
  45. void setCurrentTab(FindTabIndex index);
  46. void setTabWidget(QTabWidget * editTabWidget);
  47. void setFindText(QString & text);
  48. void disableReplace();
  49. void setFindHistory(QList<QString>* findHistory);
  50. void markAllWord(QString& word);
  51. void removeLineHeadEndBlank(int mode);
  52. static void showCallTip(QsciScintilla * pEdit, int pos);
  53. protected:
  54. virtual void focusInEvent(QFocusEvent *ev);
  55. virtual void focusOutEvent(QFocusEvent *ev);
  56. //bool eventFilter(QObject *, QEvent *); //注意这里
  57. signals:
  58. void sign_findAllInCurDoc(FindRecords* record);
  59. void sign_findAllInOpenDoc(QVector<FindRecords*>* record, int hits, QString findText);
  60. void sign_replaceSaveFile(QString filePath, ScintillaEditView * pEdit);
  61. void sign_clearResult();
  62. //void sign_markAllInCurDoc(FindRecords* record);
  63. private:
  64. void updateParameterFromUI();
  65. void addFindHistory(QString & text);
  66. bool isFirstFind();
  67. void addCurFindRecord(ScintillaEditView * pEdit, FindRecords & recordRet, bool isMark=false);
  68. bool findTextInFile(QString & filePath, int & findNums, QVector<FindRecords*>* allfileInDirRecord);
  69. bool replaceTextInFile(QString & filePath, int & replaceNums, QVector<FindRecords*>* r = nullptr);
  70. 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);
  71. QWidget* autoAdjustCurrentEditWin();
  72. void dealWithZeroFound(QsciScintilla * pEdit);
  73. void dealWithZeroFoundShowTip(QsciScintilla * pEdit, bool isShowTip=true);
  74. bool replaceFindNext(QsciScintilla* pEdit, bool showZeroFindTip);
  75. bool replace(ScintillaEditView* pEdit);
  76. private slots:
  77. void slot_findNext();
  78. void slot_findCount();
  79. void slot_findAllInCurDoc();
  80. void slot_findAllInOpenDoc();
  81. void slot_replaceFindNext();
  82. void slot_replace();
  83. void slot_findModeRegularBtChange(bool checked);
  84. void slot_replaceModeRegularBtChange(bool checked);
  85. void slot_replaceAll();
  86. void slot_replaceAllInOpenDoc();
  87. void slot_markAll();
  88. void slot_clearMark();
  89. void slot_dirSelectDest();
  90. void slot_dealFileTypeChange(int state);
  91. void slot_dirFindAll();
  92. void slot_dirReplaceAll();
  93. private:
  94. Ui::FindWin ui;
  95. QTabWidget *m_editTabWidget;
  96. //第一次查找,查找参数变化,认定为第一次查找
  97. bool m_isFindFirst;
  98. bool m_BackwardDir;
  99. bool m_matchWhole;
  100. bool m_matchCase;
  101. bool m_matchWrap;
  102. int m_searchMode; // 1 normal 2 regular expression 3 Exteral
  103. //find的参数
  104. QString m_expr;
  105. bool m_re;
  106. bool m_cs;
  107. bool m_wo;
  108. bool m_wrap;
  109. bool m_forward;//是否向前查找。注意如果向后,要为false
  110. bool m_line;
  111. bool m_index;
  112. bool m_extend;
  113. //bool m_show;
  114. //bool m_posix;
  115. //bool m_cxx11;
  116. bool m_isFound;
  117. QString m_replaceWithText;
  118. //上次点击的按钮id,如果两次点击的不一样
  119. //说明是不同的操作,如果是查找,则当前这次点击算是第一次查找
  120. QString m_lastClickBtName;
  121. QList<QString>* m_findHistory;
  122. ScintillaEditView* pEditTemp;
  123. QWidget* m_curEditWin;
  124. bool m_isStatic;//是否静默处理,不弹确认对话框
  125. };