summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2021-01-29 19:27:10 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-29 19:27:10 +0100
commit48fae18ac6baced388b1fa7cee6c18e6aa8dbab3 (patch)
tree4fc903d08ca5d41c5eb2ae527bea6f7069bdf587 /src
parentab820c1b0a5bb0f002ec5aba7954330acbdeb978 (diff)
Fix refresh of data tab.
Diffstat (limited to 'src')
-rw-r--r--src/datatab.cpp24
-rw-r--r--src/datatab.h10
-rw-r--r--src/mainwindow.cpp16
-rw-r--r--src/mainwindow.h7
4 files changed, 42 insertions, 15 deletions
diff --git a/src/datatab.cpp b/src/datatab.cpp
index 21c205e5..165ee26a 100644
--- a/src/datatab.cpp
+++ b/src/datatab.cpp
@@ -20,9 +20,9 @@ DataTab::DataTab(
QWidget* parent, Ui::MainWindow* mwui) :
m_core(core), m_pluginContainer(pc), m_parent(parent),
ui{
- mwui->dataTabRefresh, mwui->dataTree,
+ mwui->tabWidget, mwui->dataTab, mwui->dataTabRefresh, mwui->dataTree,
mwui->dataTabShowOnlyConflicts, mwui->dataTabShowFromArchives},
- m_firstActivation(true)
+ m_needUpdate(true)
{
m_filetree.reset(new FileTree(core, m_pluginContainer, ui.tree));
m_filter.setUseSourceSort(true);
@@ -85,12 +85,16 @@ void DataTab::restoreState(const Settings& s)
void DataTab::activated()
{
- if (m_firstActivation) {
- m_firstActivation = false;
+ if (m_needUpdate) {
updateTree();
}
}
+bool DataTab::isActive() const
+{
+ return ui.tabs->currentWidget() == ui.tab;
+}
+
void DataTab::onRefresh()
{
if (QGuiApplication::keyboardModifiers() & Qt::ShiftModifier) {
@@ -103,6 +107,16 @@ void DataTab::onRefresh()
void DataTab::updateTree()
{
+ if (isActive()) {
+ doUpdateTree();
+ }
+ else {
+ m_needUpdate = true;
+ }
+}
+
+void DataTab::doUpdateTree()
+{
m_filetree->model()->setEnabled(true);
m_filetree->refresh();
@@ -113,6 +127,8 @@ void DataTab::updateTree()
m->invalidate();
}
}
+
+ m_needUpdate = true;
}
void DataTab::ensureFullyLoaded()
diff --git a/src/datatab.h b/src/datatab.h
index 32d788f6..ad172ab0 100644
--- a/src/datatab.h
+++ b/src/datatab.h
@@ -29,6 +29,10 @@ public:
void restoreState(const Settings& s);
void activated();
+ // if the data tab is currently visible, trigger an update of the
+ // tree, otherwise mark the tree has modified and will refresh when
+ // the tab is activated
+ //
void updateTree();
signals:
@@ -39,6 +43,8 @@ signals:
private:
struct DataTabUi
{
+ QTabWidget* tabs;
+ QWidget* tab;
QPushButton* refresh;
QTreeView* tree;
QCheckBox* conflicts;
@@ -52,7 +58,7 @@ private:
std::unique_ptr<FileTree> m_filetree;
std::vector<QTreeWidgetItem*> m_removeLater;
MOBase::FilterWidget m_filter;
- bool m_firstActivation;
+ bool m_needUpdate;
void onRefresh();
void onItemExpanded(QTreeWidgetItem* item);
@@ -60,6 +66,8 @@ private:
void onArchives();
void updateOptions();
void ensureFullyLoaded();
+ bool isActive() const;
+ void doUpdateTree();
};
#endif // MODORGANIZER_DATATAB_INCLUDED
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index d6391677..a3144edd 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -314,10 +314,13 @@ MainWindow::MainWindow(Settings &settings
setupModList();
ui->espList->setup(m_OrganizerCore, this, ui);
connect(m_OrganizerCore.modList(), &ModList::modPrioritiesChanged, [this]() {
- m_DataTab->updateTree();
+ onDirectoryStructureChanged();
});
connect(m_OrganizerCore.modList(), &ModList::modStatesChanged, [this]() {
- m_DataTab->updateTree();
+ onDirectoryStructureChanged();
+ });
+ connect(m_OrganizerCore.modList(), &QAbstractItemModel::rowsRemoved, [this]() {
+ onDirectoryStructureChanged();
});
ui->bsaList->setLocalMoveOnly(true);
@@ -391,7 +394,7 @@ MainWindow::MainWindow(Settings &settings
connect(&m_PluginContainer, SIGNAL(diagnosisUpdate()), this, SLOT(scheduleCheckForProblems()));
- connect(m_OrganizerCore.directoryRefresher(), SIGNAL(refreshed()), this, SLOT(directory_refreshed()));
+ connect(m_OrganizerCore.directoryRefresher(), &DirectoryRefresher::refreshed, [this] { onDirectoryStructureChanged(); });
connect(
m_OrganizerCore.directoryRefresher(),
&DirectoryRefresher::progress,
@@ -2184,15 +2187,12 @@ void MainWindow::refresherProgress(const DirectoryRefreshProgress* p)
}
}
-void MainWindow::directory_refreshed()
+void MainWindow::onDirectoryStructureChanged()
{
// some problem-reports may rely on the virtual directory tree so they need to be updated
// now
scheduleCheckForProblems();
-
- if (ui->tabWidget->currentWidget() == ui->dataTab) {
- m_DataTab->updateTree();
- }
+ m_DataTab->updateTree();
}
void MainWindow::modInstalled(const QString &modName)
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 1f521f38..f9cf541c 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -142,8 +142,6 @@ public:
public slots:
void refresherProgress(const DirectoryRefreshProgress* p);
- void directory_refreshed();
-
signals:
/**
@@ -169,6 +167,11 @@ private slots:
private:
+ // update data tab and schedule a problem check after a directory
+ // structure update
+ //
+ void onDirectoryStructureChanged();
+
void cleanup();
void setupToolbar();