summaryrefslogtreecommitdiff
path: root/src/editexecutablesdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/editexecutablesdialog.cpp')
-rw-r--r--src/editexecutablesdialog.cpp47
1 files changed, 45 insertions, 2 deletions
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp
index be2ee127..212993f1 100644
--- a/src/editexecutablesdialog.cpp
+++ b/src/editexecutablesdialog.cpp
@@ -25,7 +25,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QMessageBox>
#include <Shellapi.h>
#include <utility.h>
-
+#include "forcedloaddialog.h"
+#include <algorithm>
using namespace MOBase;
using namespace MOShared;
@@ -44,6 +45,8 @@ EditExecutablesDialog::EditExecutablesDialog(
refreshExecutablesWidget();
ui->newFilesModBox->addItems(modList.allMods());
+
+ m_ForcedLibraries = m_Profile->determineForcedLibraries(ui->titleEdit->text());
}
EditExecutablesDialog::~EditExecutablesDialog()
@@ -93,6 +96,7 @@ void EditExecutablesDialog::resetInput()
ui->overwriteAppIDBox->setChecked(false);
ui->useAppIconCheckBox->setChecked(false);
ui->newFilesModCheckBox->setChecked(false);
+ ui->forceLoadCheckBox->setChecked(false);
m_CurrentItem = nullptr;
}
@@ -118,6 +122,9 @@ void EditExecutablesDialog::saveExecutable()
else {
m_Profile->removeSetting("custom_overwrites", ui->titleEdit->text());
}
+
+ m_Profile->saveForcedLibraries(ui->titleEdit->text(), m_ForcedLibraries);
+ m_Profile->setForcedLibrariesEnabled(ui->titleEdit->text(), ui->forceLoadCheckBox->isChecked());
}
@@ -130,6 +137,21 @@ void EditExecutablesDialog::delayedRefresh()
}
+void EditExecutablesDialog::on_forceLoadButton_clicked()
+{
+ ForcedLoadDialog dialog(this);
+ dialog.setValues(m_ForcedLibraries);
+ if (dialog.exec() == QDialog::Accepted) {
+ m_ForcedLibraries = dialog.values();
+ }
+}
+
+void EditExecutablesDialog::on_forceLoadCheckBox_toggled()
+{
+ ui->forceLoadButton->setEnabled(ui->forceLoadCheckBox->isChecked());
+}
+
+
void EditExecutablesDialog::on_addButton_clicked()
{
if (executableChanged()) {
@@ -231,6 +253,20 @@ bool EditExecutablesDialog::executableChanged()
QString storedCustomOverwrite = m_Profile->setting("custom_overwrites", selectedExecutable.m_Title).toString();
+ bool forcedLibrariesDirty = false;
+ auto forcedLibaries = m_Profile->determineForcedLibraries(selectedExecutable.m_Title);
+ forcedLibrariesDirty |= !std::equal(forcedLibaries.begin(), forcedLibaries.end(),
+ m_ForcedLibraries.begin(), m_ForcedLibraries.end(),
+ [](const ExecutableForcedLoadSetting &lhs, const ExecutableForcedLoadSetting &rhs)
+ {
+ return lhs.enabled() == rhs.enabled() &&
+ lhs.forced() == rhs.forced() &&
+ lhs.library() == rhs.library() &&
+ lhs.process() == rhs.process();
+ });
+ forcedLibrariesDirty |= m_Profile->setting("forced_libraries", ui->titleEdit->text() + "/enabled", false).toBool() !=
+ ui->forceLoadCheckBox->isChecked();
+
return selectedExecutable.m_Title != ui->titleEdit->text()
|| selectedExecutable.m_Arguments != ui->argumentsEdit->text()
|| selectedExecutable.m_SteamAppID != ui->appIDOverwriteEdit->text()
@@ -238,7 +274,9 @@ bool EditExecutablesDialog::executableChanged()
|| !storedCustomOverwrite.isEmpty() && (storedCustomOverwrite != ui->newFilesModBox->currentText())
|| selectedExecutable.m_WorkingDirectory != QDir::fromNativeSeparators(ui->workingDirEdit->text())
|| selectedExecutable.m_BinaryInfo.absoluteFilePath() != QDir::fromNativeSeparators(ui->binaryEdit->text())
- || selectedExecutable.usesOwnIcon() != ui->useAppIconCheckBox->isChecked();
+ || selectedExecutable.usesOwnIcon() != ui->useAppIconCheckBox->isChecked()
+ || forcedLibrariesDirty
+ ;
} else {
QFileInfo fileInfo(ui->binaryEdit->text());
return !ui->binaryEdit->text().isEmpty()
@@ -331,6 +369,11 @@ void EditExecutablesDialog::on_executablesListBox_clicked(const QModelIndex &cur
if (index != -1) {
ui->newFilesModBox->setCurrentIndex(index);
}
+
+ m_ForcedLibraries = m_Profile->determineForcedLibraries(ui->titleEdit->text());
+ bool forcedLibraries = m_Profile->forcedLibrariesEnabled(ui->titleEdit->text());
+ ui->forceLoadButton->setEnabled(forcedLibraries);
+ ui->forceLoadCheckBox->setChecked(forcedLibraries);
}
}