summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-02-07 14:02:00 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-02-07 14:02:00 -0500
commitd0c16e60d734fe2f72c387552559bf125554fb2d (patch)
tree10dbef4570b5d69cdb19525d56d5de821b0c9c89 /src
parent2b0a720863a26faebdc240f4db29dd39c7a035b6 (diff)
just disable recursive filtering when fully loading
switching models clears persistent indexes and collapses everything
Diffstat (limited to 'src')
-rw-r--r--src/datatab.cpp13
-rw-r--r--src/datatab.h1
-rw-r--r--src/filetree.cpp26
-rw-r--r--src/filetree.h2
-rw-r--r--src/filetreemodel.h6
5 files changed, 25 insertions, 23 deletions
diff --git a/src/datatab.cpp b/src/datatab.cpp
index d8ce9c3a..f263c2c6 100644
--- a/src/datatab.cpp
+++ b/src/datatab.cpp
@@ -37,7 +37,7 @@ DataTab::DataTab(
connect(
&m_filter, &FilterWidget::aboutToChange,
- [&]{ m_filetree->ensureFullyLoaded(); });
+ [&]{ ensureFullyLoaded(); });
connect(
ui.refresh, &QPushButton::clicked,
@@ -107,7 +107,7 @@ void DataTab::updateTree()
m_filetree->refresh();
if (!m_filter.empty()) {
- m_filetree->ensureFullyLoaded();
+ ensureFullyLoaded();
if (auto* m=m_filter.proxyModel()) {
m->invalidate();
@@ -115,6 +115,15 @@ void DataTab::updateTree()
}
}
+void DataTab::ensureFullyLoaded()
+{
+ if (!m_filetree->fullyLoaded()) {
+ m_filter.proxyModel()->setRecursiveFilteringEnabled(false);
+ m_filetree->ensureFullyLoaded();
+ m_filter.proxyModel()->setRecursiveFilteringEnabled(true);
+ }
+}
+
void DataTab::onConflicts()
{
updateOptions();
diff --git a/src/datatab.h b/src/datatab.h
index 1e006898..a0f29a5f 100644
--- a/src/datatab.h
+++ b/src/datatab.h
@@ -56,4 +56,5 @@ private:
void onConflicts();
void onArchives();
void updateOptions();
+ void ensureFullyLoaded();
};
diff --git a/src/filetree.cpp b/src/filetree.cpp
index 937ffe4c..19f2555a 100644
--- a/src/filetree.cpp
+++ b/src/filetree.cpp
@@ -157,30 +157,14 @@ void FileTree::clear()
m_model->clear();
}
-void FileTree::ensureFullyLoaded()
+bool FileTree::fullyLoaded() const
{
- QAbstractProxyModel* proxy = nullptr;
-
- if (m_tree->model() != m_model) {
- // looks like there's a proxy on the tree, disable it
- proxy = dynamic_cast<QAbstractProxyModel*>(m_tree->model());
-
- m_tree->setModel(m_model);
-
- if (proxy) {
- if (proxy->sourceModel() != m_model)
- DebugBreak();
-
- proxy->setSourceModel(nullptr);
- }
- }
+ return m_model->fullyLoaded();
+}
+void FileTree::ensureFullyLoaded()
+{
m_model->ensureFullyLoaded();
-
- if (proxy) {
- proxy->setSourceModel(m_model);
- m_tree->setModel(proxy);
- }
}
FileTreeItem* FileTree::singleSelection()
diff --git a/src/filetree.h b/src/filetree.h
index 3c3ffc07..c1458179 100644
--- a/src/filetree.h
+++ b/src/filetree.h
@@ -21,6 +21,8 @@ public:
FileTreeModel* model();
void refresh();
void clear();
+
+ bool fullyLoaded() const;
void ensureFullyLoaded();
void open(FileTreeItem* item=nullptr);
diff --git a/src/filetreemodel.h b/src/filetreemodel.h
index dfee597f..fbc7ec44 100644
--- a/src/filetreemodel.h
+++ b/src/filetreemodel.h
@@ -50,6 +50,12 @@ public:
void refresh();
void clear();
+
+ bool fullyLoaded() const
+ {
+ return m_fullyLoaded;
+ }
+
void ensureFullyLoaded();
bool enabled() const;