Improved wild carding in source browser.

Works now for Qt5.
Hide 'ignored' files from source browser.
This commit is contained in:
Ernie Pasveer
2023-08-19 19:59:52 -05:00
parent 6326a53d32
commit bdbfb2e698
11 changed files with 112 additions and 50 deletions
+4 -4
View File
@@ -249,14 +249,14 @@ QStringList SeerConfigDialog::sourceAlternateDirectories () const {
return _sourceConfigPage->alternateDirectories();
}
void SeerConfigDialog::setSourceIgnoreDirectories (const QStringList& ignoreDirectories) {
void SeerConfigDialog::setSourceIgnoreFilePatterns (const QStringList& filePatterns) {
_sourceConfigPage->setIgnoreDirectories(ignoreDirectories);
_sourceConfigPage->setIgnoreFilePatterns(filePatterns);
}
QStringList SeerConfigDialog::sourceIgnoreDirectories () const {
QStringList SeerConfigDialog::sourceIgnoreFilePatterns () const {
return _sourceConfigPage->ignoreDirectories();
return _sourceConfigPage->ignoreFilePatterns();
}
void SeerConfigDialog::setSourceMiscFilePatterns (const QStringList& filePatterns) {
+2 -2
View File
@@ -70,8 +70,8 @@ class SeerConfigDialog : public QDialog, protected Ui::SeerConfigDialogForm {
void setSourceAlternateDirectories (const QStringList& alternateDirectories);
QStringList sourceAlternateDirectories () const;
void setSourceIgnoreDirectories (const QStringList& ignoreDirectories);
QStringList sourceIgnoreDirectories () const;
void setSourceIgnoreFilePatterns (const QStringList& filePatterns);
QStringList sourceIgnoreFilePatterns () const;
void setSourceMiscFilePatterns (const QStringList& filePatterns);
QStringList sourceMiscFilePatterns () const;
+12
View File
@@ -3177,6 +3177,8 @@ const QStringList& SeerGdbWidget::sourceIgnoreDirectories() const {
void SeerGdbWidget::setSourceIgnoreDirectories (const QStringList& ignoreDirectories) {
editorManager()->setEditorIgnoreDirectories(ignoreDirectories);
sourceLibraryManagerWidget->sourceBrowserWidget()->setIgnoreFilePatterns(ignoreDirectories);
}
void SeerGdbWidget::setSourceMiscFilePatterns (const QStringList& filePatterns) {
@@ -3209,6 +3211,16 @@ const QStringList& SeerGdbWidget::sourceHeaderFilePatterns () const {
return sourceLibraryManagerWidget->sourceBrowserWidget()->headerFilePatterns();
}
void SeerGdbWidget::setSourceIgnoreFilePatterns (const QStringList& filePatterns) {
sourceLibraryManagerWidget->sourceBrowserWidget()->setIgnoreFilePatterns(filePatterns);
}
const QStringList& SeerGdbWidget::sourceIgnoreFilePatterns () const {
return sourceLibraryManagerWidget->sourceBrowserWidget()->ignoreFilePatterns();
}
void SeerGdbWidget::setAssemblyShowAssemblyTabOnStartup (bool flag) {
_assemblyShowAssemblyTabOnStartup = flag;
+3
View File
@@ -134,6 +134,9 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm {
void setSourceHeaderFilePatterns (const QStringList& filePatterns);
const QStringList& sourceHeaderFilePatterns () const;
void setSourceIgnoreFilePatterns (const QStringList& filePatterns);
const QStringList& sourceIgnoreFilePatterns () const;
void setAssemblyShowAssemblyTabOnStartup (bool flag);
bool assemblyShowAssemblyTabOnStartup () const;
+2 -2
View File
@@ -614,7 +614,7 @@ void SeerMainWindow::handleSettingsConfiguration () {
dlg.setEditorHighlighterSettings(gdbWidget->editorManager()->editorHighlighterSettings());
dlg.setEditorHighlighterEnabled(gdbWidget->editorManager()->editorHighlighterEnabled());
dlg.setSourceAlternateDirectories(gdbWidget->sourceAlternateDirectories());
dlg.setSourceIgnoreDirectories(gdbWidget->sourceIgnoreDirectories());
dlg.setSourceIgnoreFilePatterns(gdbWidget->sourceIgnoreFilePatterns());
dlg.setSourceMiscFilePatterns(gdbWidget->sourceMiscFilePatterns());
dlg.setSourceSourceFilePatterns(gdbWidget->sourceSourceFilePatterns());
dlg.setSourceHeaderFilePatterns(gdbWidget->sourceHeaderFilePatterns());
@@ -654,7 +654,7 @@ void SeerMainWindow::handleSettingsConfiguration () {
gdbWidget->editorManager()->setEditorHighlighterSettings(dlg.editorHighlighterSettings());
gdbWidget->editorManager()->setEditorHighlighterEnabled(dlg.editorHighlighterEnabled());
gdbWidget->setSourceAlternateDirectories(dlg.sourceAlternateDirectories());
gdbWidget->setSourceIgnoreDirectories(dlg.sourceIgnoreDirectories());
gdbWidget->setSourceIgnoreFilePatterns(dlg.sourceIgnoreFilePatterns());
gdbWidget->setSourceMiscFilePatterns(dlg.sourceMiscFilePatterns());
gdbWidget->setSourceSourceFilePatterns(dlg.sourceSourceFilePatterns());
gdbWidget->setSourceHeaderFilePatterns(dlg.sourceHeaderFilePatterns());
+14 -1
View File
@@ -77,6 +77,16 @@ const QStringList& SeerSourceBrowserWidget::headerFilePatterns () const {
return _headerFilePatterns;
}
void SeerSourceBrowserWidget::setIgnoreFilePatterns (const QStringList& patterns) {
_ignoreFilePatterns = patterns;
}
const QStringList& SeerSourceBrowserWidget::ignoreFilePatterns () const {
return _ignoreFilePatterns;
}
void SeerSourceBrowserWidget::handleText (const QString& text) {
QApplication::setOverrideCursor(Qt::BusyCursor);
@@ -128,7 +138,10 @@ void SeerSourceBrowserWidget::handleText (const QString& text) {
// See which pattern the file matches. Put the file under that folder.
// If no match, put it in 'misc'.
if (Seer::matchesWildcard(miscFilePatterns(), fullname_text)) {
if (Seer::matchesWildcard(ignoreFilePatterns(), fullname_text)) {
continue;
}else if (Seer::matchesWildcard(miscFilePatterns(), fullname_text)) {
_miscFilesItems->addChild(item);
}else if (Seer::matchesWildcard(sourceFilePatterns(), fullname_text)) {
_sourceFilesItems->addChild(item);
+4
View File
@@ -22,6 +22,9 @@ class SeerSourceBrowserWidget : public QWidget, protected Ui::SeerSourceBrowserW
void setHeaderFilePatterns (const QStringList& patterns);
const QStringList& headerFilePatterns () const;
void setIgnoreFilePatterns (const QStringList& patterns);
const QStringList& ignoreFilePatterns () const;
public slots:
void handleText (const QString& text);
void refresh ();
@@ -43,5 +46,6 @@ class SeerSourceBrowserWidget : public QWidget, protected Ui::SeerSourceBrowserW
QStringList _sourceFilePatterns;
QStringList _headerFilePatterns;
QStringList _miscFilePatterns;
QStringList _ignoreFilePatterns;
};
+22 -22
View File
@@ -16,10 +16,10 @@ SeerSourceConfigPage::SeerSourceConfigPage(QWidget* parent) : QWidget(parent) {
alternateDirectoriesTreeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
alternateDirectoriesTreeWidget->resizeColumnToContents(0); // directory
ignoreDirectoriesTreeWidget->clear();
ignoreDirectoriesTreeWidget->setSortingEnabled(false);
ignoreDirectoriesTreeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
ignoreDirectoriesTreeWidget->resizeColumnToContents(0); // directory
ignoreFilePatternsTreeWidget->clear();
ignoreFilePatternsTreeWidget->setSortingEnabled(false);
ignoreFilePatternsTreeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
ignoreFilePatternsTreeWidget->resizeColumnToContents(0); // file pattern
miscFilePatternsTreeWidget->clear();
miscFilePatternsTreeWidget->setSortingEnabled(false);
@@ -42,8 +42,8 @@ SeerSourceConfigPage::SeerSourceConfigPage(QWidget* parent) : QWidget(parent) {
QObject::connect(moveUpAlternateDirectoriesToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleUpAlternateButtonClicked);
QObject::connect(moveDownAlternateDirectoriesToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleDownAlternateButtonClicked);
QObject::connect(deleteAlternateDirectoriesToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleDeleteAlternateButtonClicked);
QObject::connect(addIgnoreDirectoryToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleAddIgnoreButtonClicked);
QObject::connect(deleteIgnoreDirectoriesToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleDeleteIgnoreButtonClicked);
QObject::connect(addIgnoreFilePatternToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleAddIgnorePatternButtonClicked);
QObject::connect(deleteIgnoreFilePatternesToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleDeleteIgnorePatternButtonClicked);
QObject::connect(addMiscFilePatternToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleAddMiscPatternButtonClicked);
QObject::connect(deleteMiscFilePatternsToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleDeleteMiscPatternButtonClicked);
QObject::connect(addSourceFilePatternToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleAddSourcePatternButtonClicked);
@@ -89,28 +89,28 @@ QStringList SeerSourceConfigPage::alternateDirectories () const {
return list;
}
void SeerSourceConfigPage::setIgnoreDirectories (const QStringList& ignoreDirectories) {
void SeerSourceConfigPage::setIgnoreFilePatterns (const QStringList& filePatterns) {
ignoreDirectoriesTreeWidget->clear();
ignoreFilePatternsTreeWidget->clear();
QStringListIterator iter(ignoreDirectories);
QStringListIterator iter(filePatterns);
while (iter.hasNext()) {
QTreeWidgetItem* topItem = new QTreeWidgetItem;
topItem->setText(0, iter.next());
ignoreDirectoriesTreeWidget->addTopLevelItem(topItem);
ignoreFilePatternsTreeWidget->addTopLevelItem(topItem);
}
ignoreDirectoriesTreeWidget->resizeColumnToContents(0);
ignoreFilePatternsTreeWidget->resizeColumnToContents(0);
}
QStringList SeerSourceConfigPage::ignoreDirectories () const {
QStringList SeerSourceConfigPage::ignoreFilePatterns () const {
QStringList list;
QTreeWidgetItemIterator iter(ignoreDirectoriesTreeWidget);
QTreeWidgetItemIterator iter(ignoreFilePatternsTreeWidget);
while (*iter) {
list << (*iter)->text(0);
@@ -220,9 +220,9 @@ void SeerSourceConfigPage::reset () {
alternateDirectories << "./";
setAlternateDirectories(alternateDirectories);
setIgnoreDirectories(QStringList());
setMiscFilePatterns( {"/usr/include/"} );
setIgnoreFilePatterns(QStringList());
setMiscFilePatterns( {"/usr/include/*"} );
setSourceFilePatterns( {"*.cpp", "*.c", "*.C", "*.f", "*.f90", "*.F90", "*.rs", "*.go", "*.ada", "*.adb"} );
setHeaderFilePatterns( {"*.hpp", "*.h", "*.ads"} );
}
@@ -334,7 +334,7 @@ void SeerSourceConfigPage::handleDeleteAlternateButtonClicked () {
alternateDirectoriesTreeWidget->resizeColumnToContents(0);
}
void SeerSourceConfigPage::handleAddIgnoreButtonClicked () {
void SeerSourceConfigPage::handleAddIgnorePatternButtonClicked () {
// Ask for the ignore directory to add to the list.
QString directory = QInputDialog::getText(this, "Seer - Enter a directory to ignore", "Ignore directory:");
@@ -348,21 +348,21 @@ void SeerSourceConfigPage::handleAddIgnoreButtonClicked () {
topItem->setText(0, directory);
// Just add it to the end of the list.
ignoreDirectoriesTreeWidget->addTopLevelItem(topItem);
ignoreFilePatternsTreeWidget->addTopLevelItem(topItem);
// Resize the columns and select the item we just added.
ignoreDirectoriesTreeWidget->resizeColumnToContents(0);
ignoreDirectoriesTreeWidget->setCurrentItem(topItem, 0);
ignoreFilePatternsTreeWidget->resizeColumnToContents(0);
ignoreFilePatternsTreeWidget->setCurrentItem(topItem, 0);
}
void SeerSourceConfigPage::handleDeleteIgnoreButtonClicked () {
void SeerSourceConfigPage::handleDeleteIgnorePatternButtonClicked () {
QList<QTreeWidgetItem*> matches = ignoreDirectoriesTreeWidget->selectedItems();
QList<QTreeWidgetItem*> matches = ignoreFilePatternsTreeWidget->selectedItems();
qDeleteAll(matches);
// Resize the columns and select the items we just deleted.
ignoreDirectoriesTreeWidget->resizeColumnToContents(0);
ignoreFilePatternsTreeWidget->resizeColumnToContents(0);
}
void SeerSourceConfigPage::handleAddMiscPatternButtonClicked () {
+4 -5
View File
@@ -17,8 +17,8 @@ class SeerSourceConfigPage : public QWidget, public Ui::SeerSourceConfigPage {
void setAlternateDirectories (const QStringList& alternateDirectories);
QStringList alternateDirectories () const;
void setIgnoreDirectories (const QStringList& ignoreDirectories);
QStringList ignoreDirectories () const;
void setIgnoreFilePatterns (const QStringList& filePatterns);
QStringList ignoreFilePatterns () const;
void setMiscFilePatterns (const QStringList& filePatterns);
QStringList miscFilePatterns () const;
@@ -37,9 +37,8 @@ class SeerSourceConfigPage : public QWidget, public Ui::SeerSourceConfigPage {
void handleDownAlternateButtonClicked ();
void handleDeleteAlternateButtonClicked ();
void handleAddIgnoreButtonClicked ();
void handleDeleteIgnoreButtonClicked ();
void handleAddIgnorePatternButtonClicked ();
void handleDeleteIgnorePatternButtonClicked ();
void handleAddMiscPatternButtonClicked ();
void handleDeleteMiscPatternButtonClicked ();
void handleAddSourcePatternButtonClicked ();
+18 -8
View File
@@ -118,7 +118,7 @@
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTreeWidget" name="ignoreDirectoriesTreeWidget">
<widget class="QTreeWidget" name="ignoreFilePatternsTreeWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
@@ -130,7 +130,7 @@
</property>
<column>
<property name="text">
<string>Ignore Directories</string>
<string>Ignore Directories/Files</string>
</property>
</column>
</widget>
@@ -138,7 +138,7 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QToolButton" name="addIgnoreDirectoryToolButton">
<widget class="QToolButton" name="addIgnoreFilePatternToolButton">
<property name="toolTip">
<string>Add a new directory.</string>
</property>
@@ -152,7 +152,7 @@
</widget>
</item>
<item>
<widget class="QToolButton" name="deleteIgnoreDirectoriesToolButton">
<widget class="QToolButton" name="deleteIgnoreFilePatternesToolButton">
<property name="toolTip">
<string>Delete selected directories.</string>
</property>
@@ -405,8 +405,11 @@
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
hr { height: 1px; border-width: 0; }
li.unchecked::marker { content: &quot;\2610&quot;; }
li.checked::marker { content: &quot;\2612&quot;; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Source Lookup.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
@@ -416,7 +419,9 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These settings affect how Seer sorts all the source and include filenames that a program references. These files appear in the Source Browser in one of three catagegories: &lt;span style=&quot; text-decoration: underline;&quot;&gt;Source&lt;/span&gt;, &lt;span style=&quot; text-decoration: underline;&quot;&gt;Header&lt;/span&gt;, or &lt;span style=&quot; text-decoration: underline;&quot;&gt;Misc&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;An entry can be a directory path, filename, or filename extension. Wildcarding is allowed and is encouraged for fine control.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Files that match the &lt;span style=&quot; text-decoration: underline;&quot;&gt;Ignore&lt;/span&gt; list will not be sorted into any catagegory.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;An entry can be a directory path, filename, or filename extension. Wildcarding is allowed and is encouraged for fine control. A directory path must end with &amp;quot;/*&amp;quot;.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Seer looks at the debug information for the program to create a list of all files the program references. Some are applicable to the the program, others are not.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
@@ -437,8 +442,13 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Misc&lt;/span&gt; should have entries like:&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; /usr/include/&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; /usr/include/*&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Ignore&lt;/span&gt; should have entries like:&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; /home/abuild/*&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
+27 -6
View File
@@ -548,15 +548,36 @@ namespace Seer {
bool matchesWildcard (const QStringList& patterns, const QString& string) {
foreach (const auto& pattern, patterns) {
QRegularExpression re;
foreach (auto pattern, patterns) {
#if QT_VERSION >= 0x060000
re = QRegularExpression::fromWildcard(pattern, Qt::CaseInsensitive, QRegularExpression::UnanchoredWildcardConversion);
QRegularExpression re = QRegularExpression::fromWildcard(pattern, Qt::CaseInsensitive, QRegularExpression::UnanchoredWildcardConversion);
#else
re = QRegularExpression(QRegularExpression::wildcardToRegularExpression(pattern), QRegularExpression::CaseInsensitiveOption);
// With Qt5, 'wildcardToRegularExpression' needs a "/*" at the start of 'pattern'
// if 'string' start with a "/".
//if (string[0] == '/') {
// if (pattern[0] != '/') {
// pattern = "/*/" + pattern;
// }
//}
// This pattern needs to be converted from a glob to a regex.
// All '*' are replaced with '.*'
// The pattern is terminated with a '$', if it doesn't have one.
pattern.replace("*", ".*");
//if (string[0] != '/') {
// if (pattern.back() != '$') {
// pattern += '$';
// }
//}
// qDebug() << pattern << string;
// QRegularExpression re = QRegularExpression(QRegularExpression::wildcardToRegularExpression(pattern));
QRegularExpression re = QRegularExpression(pattern);
#endif
if (re.match(string).hasMatch()) {