From b1795f83cd500b5b58928efa5e170de8338178d5 Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Thu, 21 Jan 2021 21:56:08 +0100 Subject: Refresh data tab when mods are enabled or moved. --- src/mainwindow.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/mainwindow.cpp') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a79aca2f..d6391677 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -313,6 +313,12 @@ MainWindow::MainWindow(Settings &settings setupModList(); ui->espList->setup(m_OrganizerCore, this, ui); + connect(m_OrganizerCore.modList(), &ModList::modPrioritiesChanged, [this]() { + m_DataTab->updateTree(); + }); + connect(m_OrganizerCore.modList(), &ModList::modStatesChanged, [this]() { + m_DataTab->updateTree(); + }); ui->bsaList->setLocalMoveOnly(true); ui->bsaList->setHeaderHidden(true); -- cgit v1.3.1 From 48fae18ac6baced388b1fa7cee6c18e6aa8dbab3 Mon Sep 17 00:00:00 2001 From: Mikaël Capelle Date: Fri, 29 Jan 2021 19:27:10 +0100 Subject: Fix refresh of data tab. --- src/datatab.cpp | 24 ++++++++++++++++++++---- src/datatab.h | 10 +++++++++- src/mainwindow.cpp | 16 ++++++++-------- src/mainwindow.h | 7 +++++-- 4 files changed, 42 insertions(+), 15 deletions(-) (limited to 'src/mainwindow.cpp') 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) { @@ -102,6 +106,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 m_filetree; std::vector 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(); -- cgit v1.3.1