Add 'ignore' support when opening files.

Some system files won't be found and are annoying
when prompted each time.
This commit is contained in:
Ernie Pasveer
2022-09-06 20:35:47 -05:00
parent 8a8fdee1c2
commit 4afd2b7dbf
15 changed files with 641 additions and 151 deletions
+106 -36
View File
@@ -1,6 +1,7 @@
#include "SeerSourceConfigPage.h"
#include <QtWidgets/QInputDialog>
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QInputDialog>
#include <QtWidgets/QWidget>
#include <QtCore/QDebug>
@@ -10,16 +11,23 @@ SeerSourceConfigPage::SeerSourceConfigPage(QWidget* parent) : QWidget(parent) {
setupUi(this);
// Setup the widgets
directoriesTreeWidget->clear();
directoriesTreeWidget->setSortingEnabled(false);
directoriesTreeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
directoriesTreeWidget->resizeColumnToContents(0); // directory
alternateDirectoriesTreeWidget->clear();
alternateDirectoriesTreeWidget->setSortingEnabled(false);
alternateDirectoriesTreeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
alternateDirectoriesTreeWidget->resizeColumnToContents(0); // directory
ignoreDirectoriesTreeWidget->clear();
ignoreDirectoriesTreeWidget->setSortingEnabled(false);
ignoreDirectoriesTreeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
ignoreDirectoriesTreeWidget->resizeColumnToContents(0); // directory
// Connect things.
QObject::connect(addDirectoryToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleAddButtonClicked);
QObject::connect(moveUpDirectoriesToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleUpButtonClicked);
QObject::connect(moveDownDirectoriesToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleDownButtonClicked);
QObject::connect(deleteDirectoriesToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleDeleteButtonClicked);
QObject::connect(addAlternateDirectoryToolButton, &QToolButton::clicked, this, &SeerSourceConfigPage::handleAddAlternateButtonClicked);
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);
// Setup the defaults.
reset();
@@ -30,7 +38,7 @@ SeerSourceConfigPage::~SeerSourceConfigPage() {
void SeerSourceConfigPage::setAlternateDirectories (const QStringList& alternateDirectories) {
directoriesTreeWidget->clear();
alternateDirectoriesTreeWidget->clear();
QStringListIterator iter(alternateDirectories);
@@ -39,17 +47,48 @@ void SeerSourceConfigPage::setAlternateDirectories (const QStringList& alternate
QTreeWidgetItem* topItem = new QTreeWidgetItem;
topItem->setText(0, iter.next());
directoriesTreeWidget->addTopLevelItem(topItem);
alternateDirectoriesTreeWidget->addTopLevelItem(topItem);
}
directoriesTreeWidget->resizeColumnToContents(0);
alternateDirectoriesTreeWidget->resizeColumnToContents(0);
}
QStringList SeerSourceConfigPage::alternateDirectories () const {
QStringList list;
QTreeWidgetItemIterator iter(directoriesTreeWidget);
QTreeWidgetItemIterator iter(alternateDirectoriesTreeWidget);
while (*iter) {
list << (*iter)->text(0);
++iter;
}
return list;
}
void SeerSourceConfigPage::setIgnoreDirectories (const QStringList& ignoreDirectories) {
ignoreDirectoriesTreeWidget->clear();
QStringListIterator iter(ignoreDirectories);
while (iter.hasNext()) {
QTreeWidgetItem* topItem = new QTreeWidgetItem;
topItem->setText(0, iter.next());
ignoreDirectoriesTreeWidget->addTopLevelItem(topItem);
}
ignoreDirectoriesTreeWidget->resizeColumnToContents(0);
}
QStringList SeerSourceConfigPage::ignoreDirectories () const {
QStringList list;
QTreeWidgetItemIterator iter(ignoreDirectoriesTreeWidget);
while (*iter) {
list << (*iter)->text(0);
@@ -66,9 +105,11 @@ void SeerSourceConfigPage::reset () {
alternateDirectories << "./";
setAlternateDirectories(alternateDirectories);
setIgnoreDirectories(QStringList());
}
void SeerSourceConfigPage::handleAddButtonClicked () {
void SeerSourceConfigPage::handleAddAlternateButtonClicked () {
// Ask for the alternate directory to add to the list.
QString directory = QFileDialog::getExistingDirectory(this, "Seer - Enter an alternate directory", QString(), QFileDialog::ShowDirsOnly|QFileDialog::DontUseNativeDialog);
@@ -78,7 +119,7 @@ void SeerSourceConfigPage::handleAddButtonClicked () {
}
// Get the selected items, if any.
QList<QTreeWidgetItem*> matches = directoriesTreeWidget->selectedItems();
QList<QTreeWidgetItem*> matches = alternateDirectoriesTreeWidget->selectedItems();
// Create the new item
QTreeWidgetItem* topItem = new QTreeWidgetItem;
@@ -87,30 +128,30 @@ void SeerSourceConfigPage::handleAddButtonClicked () {
// If there is something selected, add the new item before the first selected item.
if (matches.count() > 0) {
int index = directoriesTreeWidget->indexOfTopLevelItem(matches[0]);
int index = alternateDirectoriesTreeWidget->indexOfTopLevelItem(matches[0]);
directoriesTreeWidget->insertTopLevelItem(index, topItem);
alternateDirectoriesTreeWidget->insertTopLevelItem(index, topItem);
// Otherwise, just add it to the end of the list.
}else{
directoriesTreeWidget->addTopLevelItem(topItem);
alternateDirectoriesTreeWidget->addTopLevelItem(topItem);
}
// Resize the columns and select the item we just added.
directoriesTreeWidget->resizeColumnToContents(0);
alternateDirectoriesTreeWidget->resizeColumnToContents(0);
directoriesTreeWidget->setCurrentItem(topItem, 0);
alternateDirectoriesTreeWidget->setCurrentItem(topItem, 0);
}
void SeerSourceConfigPage::handleUpButtonClicked () {
void SeerSourceConfigPage::handleUpAlternateButtonClicked () {
// Get the selected items.
QList<QTreeWidgetItem*> matches = directoriesTreeWidget->selectedItems();
QList<QTreeWidgetItem*> matches = alternateDirectoriesTreeWidget->selectedItems();
// Loop through them from low to high.
for (int i=0; i<matches.count(); i++) {
int index = directoriesTreeWidget->indexOfTopLevelItem(matches[i]);
int index = alternateDirectoriesTreeWidget->indexOfTopLevelItem(matches[i]);
// Stop if the item is at the top of the list.
if (index <= 0) {
@@ -118,57 +159,86 @@ void SeerSourceConfigPage::handleUpButtonClicked () {
}
// Steel it from the treeWidget.
QTreeWidgetItem* topItem = directoriesTreeWidget->takeTopLevelItem(index);
QTreeWidgetItem* topItem = alternateDirectoriesTreeWidget->takeTopLevelItem(index);
// Re-add it to the moved up position.
directoriesTreeWidget->insertTopLevelItem(index-1, topItem);
alternateDirectoriesTreeWidget->insertTopLevelItem(index-1, topItem);
}
// Re-selected the items.
directoriesTreeWidget->clearSelection();
alternateDirectoriesTreeWidget->clearSelection();
for (int i=0; i<matches.count(); i++) {
matches[i]->setSelected(true);
}
// Resize the columns.
directoriesTreeWidget->resizeColumnToContents(0);
alternateDirectoriesTreeWidget->resizeColumnToContents(0);
}
void SeerSourceConfigPage::handleDownButtonClicked () {
void SeerSourceConfigPage::handleDownAlternateButtonClicked () {
// Get the selected items.
QList<QTreeWidgetItem*> matches = directoriesTreeWidget->selectedItems();
QList<QTreeWidgetItem*> matches = alternateDirectoriesTreeWidget->selectedItems();
// Loop through them from high to low.
for (int i=matches.count()-1; i>=0; i--) {
int index = directoriesTreeWidget->indexOfTopLevelItem(matches[i]);
int index = alternateDirectoriesTreeWidget->indexOfTopLevelItem(matches[i]);
// Stop if the item is at the bottom of the list.
if (index >= directoriesTreeWidget->topLevelItemCount()-1) {
if (index >= alternateDirectoriesTreeWidget->topLevelItemCount()-1) {
break;
}
// Steel it from the treeWidget.
QTreeWidgetItem* topItem = directoriesTreeWidget->takeTopLevelItem(index);
QTreeWidgetItem* topItem = alternateDirectoriesTreeWidget->takeTopLevelItem(index);
// Re-add it to the moved down position.
directoriesTreeWidget->insertTopLevelItem(index+1, topItem);
alternateDirectoriesTreeWidget->insertTopLevelItem(index+1, topItem);
}
// Re-selected the items.
directoriesTreeWidget->clearSelection();
alternateDirectoriesTreeWidget->clearSelection();
for (int i=0; i<matches.count(); i++) {
matches[i]->setSelected(true);
}
// Resize the columns.
directoriesTreeWidget->resizeColumnToContents(0);
alternateDirectoriesTreeWidget->resizeColumnToContents(0);
}
void SeerSourceConfigPage::handleDeleteButtonClicked () {
void SeerSourceConfigPage::handleDeleteAlternateButtonClicked () {
QList<QTreeWidgetItem*> matches = directoriesTreeWidget->selectedItems();
QList<QTreeWidgetItem*> matches = alternateDirectoriesTreeWidget->selectedItems();
qDeleteAll(matches);
}
void SeerSourceConfigPage::handleAddIgnoreButtonClicked () {
// Ask for the ignore directory to add to the list.
QString directory = QInputDialog::getText(this, "Seer - Enter a directory to ignore", "Ignore directory:");
if (directory == "") {
return;
}
// Create the new item
QTreeWidgetItem* topItem = new QTreeWidgetItem;
topItem->setText(0, directory);
// Just add it to the end of the list.
ignoreDirectoriesTreeWidget->addTopLevelItem(topItem);
// Resize the columns and select the item we just added.
ignoreDirectoriesTreeWidget->resizeColumnToContents(0);
ignoreDirectoriesTreeWidget->setCurrentItem(topItem, 0);
}
void SeerSourceConfigPage::handleDeleteIgnoreButtonClicked () {
QList<QTreeWidgetItem*> matches = ignoreDirectoriesTreeWidget->selectedItems();
qDeleteAll(matches);
}