Browse Source

cmake-gui: Add MATCHALL option to Regex Explorer

Closes: #16204
Gregor Jasny 8 years ago
parent
commit
4164078c85

+ 32 - 2
Source/QtDialog/RegexExplorer.cxx

@@ -64,10 +64,32 @@ void RegexExplorer::on_inputText_textChanged()
     return;
   }
 
+  std::string matchingText;
+
+  if (matchAll->isChecked()) {
+    const char* p = m_text.c_str();
+    while (m_regexParser.find(p)) {
+      std::string::size_type l = m_regexParser.start();
+      std::string::size_type r = m_regexParser.end();
+      if (r - l == 0) {
+        // matched empty string
+        clearMatch();
+        return;
+      }
+      if (!matchingText.empty()) {
+        matchingText += ";";
+      }
+      matchingText += std::string(p + l, r - l);
+      p += r;
+    }
+  } else {
+    matchingText = m_regexParser.match(0);
+  }
+
 #ifdef QT_NO_STL
-  QString matchText = m_regexParser.match(0).c_str();
+  QString matchText = matchingText.c_str();
 #else
-  QString matchText = QString::fromStdString(m_regexParser.match(0));
+  QString matchText = QString::fromStdString(matchingText);
 #endif
   match0->setPlainText(matchText);
 
@@ -95,8 +117,16 @@ void RegexExplorer::on_matchNumber_currentIndexChanged(int index)
   matchN->setPlainText(match);
 }
 
+void RegexExplorer::on_matchAll_toggled(bool checked)
+{
+  Q_UNUSED(checked);
+
+  on_inputText_textChanged();
+}
+
 void RegexExplorer::clearMatch()
 {
+  m_matched = false;
   match0->clear();
   matchN->clear();
 }

+ 1 - 0
Source/QtDialog/RegexExplorer.h

@@ -22,6 +22,7 @@ private slots:
   void on_regularExpression_textChanged(const QString& text);
   void on_inputText_textChanged();
   void on_matchNumber_currentIndexChanged(int index);
+  void on_matchAll_toggled(bool checked);
 
 private:
   static void setStatusColor(QWidget* widget, bool successful);

+ 32 - 5
Source/QtDialog/RegexExplorer.ui

@@ -104,11 +104,38 @@
     <widget class="QLineEdit" name="regularExpression"/>
    </item>
    <item>
-    <widget class="QLabel" name="label_3">
-     <property name="text">
-      <string>Complete Match</string>
-     </property>
-    </widget>
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <item>
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>Complete Match</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_5">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Fixed</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="matchAll">
+       <property name="text">
+        <string>Match All</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
    </item>
    <item>
     <widget class="QPlainTextEdit" name="match0">