Skip to content

Commit 1f74ada

Browse files
committed
Merge branch 'master' into 'master'
FIX: Handle openmw-cs plugin load order like the launcher Closes #5712 See merge request OpenMW/openmw!5278
2 parents 0d66c06 + 5727ebd commit 1f74ada

7 files changed

Lines changed: 32 additions & 9 deletions

File tree

apps/opencs/editor.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ boost::program_options::variables_map CS::Editor::readConfiguration()
127127
->multitoken()
128128
->composing(),
129129
"fallback values");
130+
addOption("content",
131+
boost::program_options::value<std::vector<std::string>>()
132+
->default_value(std::vector<std::string>(), "")
133+
->multitoken()
134+
->composing());
130135
Files::ConfigurationManager::addCommonOptions(desc);
131136

132137
boost::program_options::notify(variables);
@@ -187,13 +192,22 @@ std::pair<Files::PathContainer, std::vector<std::string>> CS::Editor::readConfig
187192
QApplication::exit(1);
188193
}
189194

190-
dataDirs.insert(dataDirs.end(), dataLocal.begin(), dataLocal.end());
195+
if (!dataLocal.empty())
196+
dataDirs.insert(dataDirs.begin(), dataLocal.begin(), dataLocal.end());
191197

192198
dataDirs.insert(dataDirs.begin(), mResources / "vfs");
193199

194-
// iterate the data directories and add them to the file dialog for loading
195200
mFileDialog.addFiles(dataDirs);
196201

202+
if (!variables["content"].empty())
203+
{
204+
QStringList contentOrder;
205+
for (const auto& c : variables["content"].as<std::vector<std::string>>())
206+
contentOrder.append(QString::fromStdString(c));
207+
208+
mFileDialog.setContentList(contentOrder, true);
209+
}
210+
197211
return std::make_pair(dataDirs, variables["fallback-archive"].as<std::vector<std::string>>());
198212
}
199213

apps/opencs/view/doc/filedialog.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ void CSVDoc::FileDialog::clearFiles()
5454
mSelector->clearFiles();
5555
}
5656

57+
void CSVDoc::FileDialog::setContentList(const QStringList& fileList, bool orderOnly)
58+
{
59+
mSelector->setContentList(fileList, orderOnly);
60+
}
61+
5762
QStringList CSVDoc::FileDialog::selectedFilePaths()
5863
{
5964
QStringList filePaths;

apps/opencs/view/doc/filedialog.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ namespace CSVDoc
5555
void addFiles(const std::vector<std::filesystem::path>& dataDirs);
5656
void setEncoding(const QString& encoding);
5757
void clearFiles();
58+
void setContentList(const QStringList& fileList, bool orderOnly = false);
5859

5960
QString filename() const;
6061
QStringList selectedFilePaths();

components/contentselector/model/contentmodel.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ bool ContentSelectorModel::ContentModel::isLoadOrderError(const EsmFile* file) c
652652
return !errors.empty();
653653
}
654654

655-
void ContentSelectorModel::ContentModel::setContentList(const QStringList& fileList)
655+
void ContentSelectorModel::ContentModel::setContentList(const QStringList& fileList, bool orderOnly)
656656
{
657657
QProgressDialog progressDialog("Setting content list", {}, 0, static_cast<int>(fileList.size()));
658658
progressDialog.setWindowModality(Qt::WindowModal);
@@ -662,7 +662,10 @@ void ContentSelectorModel::ContentModel::setContentList(const QStringList& fileL
662662
for (qsizetype i = 0, n = fileList.size(); i < n; ++i)
663663
{
664664
const EsmFile* file = item(fileList[i]);
665-
if (setCheckState(file, true))
665+
if (!file)
666+
continue;
667+
668+
if (orderOnly || setCheckState(file, true))
666669
{
667670
// setCheckState already gracefully handles builtIn and fromAnotherConfigFile
668671
// as necessary, move plug-ins in visible list to match sequence of supplied filelist

components/contentselector/model/contentmodel.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ namespace ContentSelectorModel
6464
bool isNew(const QString& filepath) const;
6565
void setNew(const EsmFile* file, bool isChecked);
6666
void setNonUserContent(const QStringList& fileList);
67-
void setContentList(const QStringList& fileList);
67+
void setContentList(const QStringList& fileList, bool orderOnly = false);
6868
ContentFileList checkedItems() const;
6969
void uncheckAll();
7070

components/contentselector/view/contentselector.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,14 @@ void ContentSelectorView::ContentSelector::setEncoding(const QString& encoding)
178178
mContentModel->setEncoding(encoding);
179179
}
180180

181-
void ContentSelectorView::ContentSelector::setContentList(const QStringList& list)
181+
void ContentSelectorView::ContentSelector::setContentList(const QStringList& list, bool orderOnly)
182182
{
183-
if (list.isEmpty())
183+
if (list.isEmpty() && !orderOnly)
184184
{
185185
slotCurrentGameFileIndexChanged(ui->gameFileView->currentIndex());
186186
}
187187
else
188-
mContentModel->setContentList(list);
188+
mContentModel->setContentList(list, orderOnly);
189189
}
190190

191191
ContentSelectorModel::ContentFileList ContentSelectorView::ContentSelector::selectedFiles() const

components/contentselector/view/contentselector.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ namespace ContentSelectorView
4545

4646
void clearCheckStates();
4747
void setEncoding(const QString& encoding);
48-
void setContentList(const QStringList& list);
48+
void setContentList(const QStringList& list, bool orderOnly = false);
4949

5050
ContentSelectorModel::ContentFileList selectedFiles() const;
5151

0 commit comments

Comments
 (0)