From c892fcfe8e9543782fa5898ea830ff78d6637870 Mon Sep 17 00:00:00 2001
From: John Gehrig <jdg.gehrig@gmail.com>
Date: Fri, 17 Feb 2023 10:05:04 -0500
Subject: [PATCH] Issue 1022: Add GuiTreeview custom filters

---
 src/gui/treeview.cpp | 30 +++++++++++++++++++++++++++++-
 src/gui/treeview.h   |  1 +
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/src/gui/treeview.cpp b/src/gui/treeview.cpp
index acd31d59f..6984c8a07 100644
--- a/src/gui/treeview.cpp
+++ b/src/gui/treeview.cpp
@@ -9,6 +9,32 @@
 
 namespace NeovimQt {
 
+static QDir::Filters getTreeviewFilters(const QSettings& settings) noexcept
+{
+	QDir::Filters filters{ QDir::Filter::NoDotAndDotDot };
+
+	if (settings.value("Treeview/ShowDirs", true).toBool()) {
+		filters |= QDir::Filter::Dirs;
+		filters |= QDir::Filter::AllDirs;
+	}
+	if (settings.value("Treeview/ShowFiles", true).toBool()) {
+		filters |= QDir::Filter::Files;
+	}
+	if (settings.value("Treeview/ShowDrives", true).toBool()) {
+		filters |= QDir::Filter::Drives;
+	}
+	if (settings.value("Treeview/NoSymLinks", false).toBool()) {
+		filters |= QDir::Filter::NoSymLinks;
+	}
+	if (settings.value("Treeview/ShowHiddenFiles", false).toBool()) {
+		filters |= QDir::Filter::Hidden;
+	}
+	if (settings.value("Treeview/ShowSystemFiles", false).toBool()) {
+		filters |= QDir::Filter::System;
+	}
+
+	return filters;
+}
 TreeView::TreeView(NeovimConnector* nvim, QWidget* parent) noexcept
 	: QTreeView(parent)
 	, m_model{ parent }
@@ -18,7 +44,10 @@ TreeView::TreeView(NeovimConnector* nvim, QWidget* parent) noexcept
 		qFatal("Fatal Error: TreeView must have a valid NeovimConnector!");
 	}
 
+	QSettings settings;
+
 	setModel(&m_model);
+	m_model.setFilter(getTreeviewFilters(settings));
 
 	header()->hide();
 
@@ -27,7 +56,6 @@ TreeView::TreeView(NeovimConnector* nvim, QWidget* parent) noexcept
 		hideColumn(i);
 	}
 
-	QSettings settings;
 	setVisible(settings.value("Gui/TreeView", false).toBool());
 
 	connect(m_nvim, &NeovimConnector::ready, this, &TreeView::neovimConnectorReady);
diff --git a/src/gui/treeview.h b/src/gui/treeview.h
index 0854e59ac..53aee8299 100644
--- a/src/gui/treeview.h
+++ b/src/gui/treeview.h
@@ -25,6 +25,7 @@ public slots:
 
 private:
 	void updateVisibility(bool isVisible) noexcept;
+	void updateFilters() noexcept;
 
 	QFileSystemModel m_model;
 	NeovimConnector* m_nvim;