diff --git a/src/SeerConfigDialog.cpp b/src/SeerConfigDialog.cpp index c28fc98..8ea2068 100644 --- a/src/SeerConfigDialog.cpp +++ b/src/SeerConfigDialog.cpp @@ -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) { diff --git a/src/SeerConfigDialog.h b/src/SeerConfigDialog.h index 7785393..e1a7561 100644 --- a/src/SeerConfigDialog.h +++ b/src/SeerConfigDialog.h @@ -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; diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index 9b3260a..cd0cad6 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -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; diff --git a/src/SeerGdbWidget.h b/src/SeerGdbWidget.h index e1125a0..a715a2c 100644 --- a/src/SeerGdbWidget.h +++ b/src/SeerGdbWidget.h @@ -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; diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp index f73d6ba..b6e22f2 100644 --- a/src/SeerMainWindow.cpp +++ b/src/SeerMainWindow.cpp @@ -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()); diff --git a/src/SeerSourceBrowserWidget.cpp b/src/SeerSourceBrowserWidget.cpp index 59fb5e5..b3c1300 100644 --- a/src/SeerSourceBrowserWidget.cpp +++ b/src/SeerSourceBrowserWidget.cpp @@ -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); diff --git a/src/SeerSourceBrowserWidget.h b/src/SeerSourceBrowserWidget.h index d98c58c..f0d9e48 100644 --- a/src/SeerSourceBrowserWidget.h +++ b/src/SeerSourceBrowserWidget.h @@ -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; }; diff --git a/src/SeerSourceConfigPage.cpp b/src/SeerSourceConfigPage.cpp index 5f9db3f..2688dbb 100644 --- a/src/SeerSourceConfigPage.cpp +++ b/src/SeerSourceConfigPage.cpp @@ -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 matches = ignoreDirectoriesTreeWidget->selectedItems(); + QList matches = ignoreFilePatternsTreeWidget->selectedItems(); qDeleteAll(matches); // Resize the columns and select the items we just deleted. - ignoreDirectoriesTreeWidget->resizeColumnToContents(0); + ignoreFilePatternsTreeWidget->resizeColumnToContents(0); } void SeerSourceConfigPage::handleAddMiscPatternButtonClicked () { diff --git a/src/SeerSourceConfigPage.h b/src/SeerSourceConfigPage.h index 391103c..ca35dfa 100644 --- a/src/SeerSourceConfigPage.h +++ b/src/SeerSourceConfigPage.h @@ -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 (); diff --git a/src/SeerSourceConfigPage.ui b/src/SeerSourceConfigPage.ui index d7d158a..0210e0c 100644 --- a/src/SeerSourceConfigPage.ui +++ b/src/SeerSourceConfigPage.ui @@ -118,7 +118,7 @@ - + 0 @@ -130,7 +130,7 @@ - Ignore Directories + Ignore Directories/Files @@ -138,7 +138,7 @@ - + Add a new directory. @@ -152,7 +152,7 @@ - + Delete selected directories. @@ -405,8 +405,11 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> p, li { white-space: pre-wrap; } +hr { height: 1px; border-width: 0; } +li.unchecked::marker { content: "\2610"; } +li.checked::marker { content: "\2612"; } </style></head><body style=" font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Source Lookup.</span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> @@ -416,7 +419,9 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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: <span style=" text-decoration: underline;">Source</span>, <span style=" text-decoration: underline;">Header</span>, or <span style=" text-decoration: underline;">Misc</span>.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">An entry can be a directory path, filename, or filename extension. Wildcarding is allowed and is encouraged for fine control.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Files that match the <span style=" text-decoration: underline;">Ignore</span> list will not be sorted into any catagegory.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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 &quot;/*&quot;.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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.</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> @@ -437,8 +442,13 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" text-decoration: underline;">Misc</span> should have entries like:</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> /usr/include/</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p></body></html> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> /usr/include/*</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" text-decoration: underline;">Ignore</span> should have entries like:</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> /home/abuild/*</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> diff --git a/src/SeerUtl.cpp b/src/SeerUtl.cpp index 56c7c78..0780056 100644 --- a/src/SeerUtl.cpp +++ b/src/SeerUtl.cpp @@ -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()) {