Changing where we are loading cells to prevent Qt access issue

0.6.3
Thunderforge 7 years ago
parent 78234e9468
commit 26dfef7970

@ -2,10 +2,8 @@
#include <components/config/gamesettings.hpp>
#include <components/config/launchersettings.hpp>
#include <apps/launcher/utils/cellnameloader.hpp>
#include <QFileDialog>
#include <QCompleter>
#include <thread>
#include <components/contentselector/view/contentselector.hpp>
#include <components/contentselector/model/esmfile.hpp>
@ -23,13 +21,9 @@ Launcher::AdvancedPage::AdvancedPage(Files::ConfigurationManager &cfg,
loadSettings();
}
void Launcher::AdvancedPage::loadCellsForAutocomplete(QStringList filePaths) {
CellNameLoader cellNameLoader;
QStringList cellNamesList = QStringList::fromSet(cellNameLoader.getCellNames(filePaths));
std::sort(cellNamesList.begin(), cellNamesList.end());
void Launcher::AdvancedPage::loadCellsForAutocomplete(QStringList cellNames) {
// Set up an auto-completer for the "Start default character at" field
auto *completer = new QCompleter(cellNamesList);
auto *completer = new QCompleter(cellNames);
completer->setCompletionMode(QCompleter::PopupCompletion);
completer->setCaseSensitivity(Qt::CaseSensitivity::CaseInsensitive);
startDefaultCharacterAtField->setCompleter(completer);
@ -165,10 +159,7 @@ void Launcher::AdvancedPage::saveSettingBool(QCheckBox *checkbox, const std::str
mEngineSettings.setBool(setting, group, cValue);
}
void Launcher::AdvancedPage::slotSelectedDataFilesChanged(QStringList selectedFiles)
void Launcher::AdvancedPage::slotLoadedCellsChanged(QStringList cellNames)
{
// Loading cells for core Morrowind + Expansions takes about 0.2 seconds, which is enough to cause a
// barely perceptible UI lag. Splitting into its own thread to alleviate that.
std::thread loadCellsThread(&AdvancedPage::loadCellsForAutocomplete, this, selectedFiles);
loadCellsThread.join();
loadCellsForAutocomplete(cellNames);
}

@ -30,7 +30,7 @@ namespace Launcher
void loadCellsForAutocomplete(QStringList filePaths);
public slots:
void slotSelectedDataFilesChanged(QStringList selectedFiles);
void slotLoadedCellsChanged(QStringList cellNames);
private slots:
void on_skipMenuCheckBox_stateChanged(int state);

@ -7,7 +7,9 @@
#include <QCheckBox>
#include <QMenu>
#include <QSortFilterProxyModel>
#include <thread>
#include <apps/launcher/utils/cellnameloader.hpp>
#include <components/files/configurationmanager.hpp>
#include <components/contentselector/model/esmfile.hpp>
@ -330,6 +332,17 @@ void Launcher::DataFilesPage::slotAddonDataChanged()
QStringList selectedFiles = selectedFilePaths();
if (previousSelectedFiles != selectedFiles) {
previousSelectedFiles = selectedFiles;
emit signalSelectedFilesChanged(selectedFiles);
// Loading cells for core Morrowind + Expansions takes about 0.2 seconds, which is enough to cause a
// barely perceptible UI lag. Splitting into its own thread to alleviate that.
std::thread loadCellsThread(&DataFilesPage::reloadCells, this, selectedFiles);
loadCellsThread.join();
}
}
void Launcher::DataFilesPage::reloadCells(QStringList selectedFiles)
{
CellNameLoader cellNameLoader;
QStringList cellNamesList = QStringList::fromSet(cellNameLoader.getCellNames(selectedFiles));
std::sort(cellNamesList.begin(), cellNamesList.end());
emit signalSelectedFilesChanged(cellNamesList);
}

@ -96,6 +96,7 @@ namespace Launcher
void addProfile (const QString &profile, bool setAsCurrent);
void checkForDefaultProfile();
void populateFileViews(const QString& contentModelName);
void reloadCells(QStringList selectedFiles);
class PathIterator
{

@ -142,7 +142,7 @@ void Launcher::MainDialog::createPages()
connect(mPlayPage, SIGNAL(signalProfileChanged(int)), mDataFilesPage, SLOT(slotProfileChanged(int)));
connect(mDataFilesPage, SIGNAL(signalProfileChanged(int)), mPlayPage, SLOT(setProfilesIndex(int)));
connect(mDataFilesPage, SIGNAL(signalSelectedFilesChanged(QStringList)), mAdvancedPage, SLOT(slotSelectedDataFilesChanged(QStringList)));
connect(mDataFilesPage, SIGNAL(signalSelectedFilesChanged(QStringList)), mAdvancedPage, SLOT(slotLoadedCellsChanged(QStringList)));
}

Loading…
Cancel
Save