diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/datatab.cpp | 24 | ||||
| -rw-r--r-- | src/datatab.h | 10 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 16 | ||||
| -rw-r--r-- | src/mainwindow.h | 7 |
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(); |
