summaryrefslogtreecommitdiff
path: root/src/editexecutablesdialog.cpp
diff options
context:
space:
mode:
authorLostDragonist <lost.dragonist@gmail.com>2019-05-03 21:32:33 -0500
committerLostDragonist <lost.dragonist@gmail.com>2019-05-03 21:32:33 -0500
commit179a73857125ee604f42b0d5c2d765183c86d2c7 (patch)
treeb9b3f9d62bd5640de839d150a53ab8ef119dab9c /src/editexecutablesdialog.cpp
parente2b799bd6b5cfd51969fefd1dab5e5b1b7e5f81c (diff)
parent907c5468424b48774f5da2a6b5f96f26590987b0 (diff)
Merge pull request #695 from ModOrganizer2/Develop
Stage for Release 2.2.0
Diffstat (limited to 'src/editexecutablesdialog.cpp')
-rw-r--r--src/editexecutablesdialog.cpp89
1 files changed, 82 insertions, 7 deletions
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp
index fde6b397..177661ff 100644
--- a/src/editexecutablesdialog.cpp
+++ b/src/editexecutablesdialog.cpp
@@ -25,25 +25,29 @@ 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;
EditExecutablesDialog::EditExecutablesDialog(
const ExecutablesList &executablesList, const ModList &modList,
- Profile *profile, QWidget *parent)
+ Profile *profile, const IPluginGame *game, QWidget *parent)
: TutorableDialog("EditExecutables", parent)
, ui(new Ui::EditExecutablesDialog)
, m_CurrentItem(nullptr)
, m_ExecutablesList(executablesList)
, m_Profile(profile)
+ , m_GamePlugin(game)
{
ui->setupUi(this);
refreshExecutablesWidget();
ui->newFilesModBox->addItems(modList.allMods());
+
+ m_ForcedLibraries = m_Profile->determineForcedLibraries(ui->titleEdit->text());
}
EditExecutablesDialog::~EditExecutablesDialog()
@@ -79,8 +83,33 @@ void EditExecutablesDialog::refreshExecutablesWidget()
void EditExecutablesDialog::on_binaryEdit_textChanged(const QString &name)
{
- QFileInfo fileInfo(name);
- ui->addButton->setEnabled(fileInfo.exists() && fileInfo.isFile());
+ updateButtonStates();
+}
+
+void EditExecutablesDialog::on_workingDirEdit_textChanged(const QString &dir)
+{
+ updateButtonStates();
+}
+
+void EditExecutablesDialog::updateButtonStates()
+{
+ bool enabled = true;
+
+ QString filePath(ui->binaryEdit->text());
+ QFileInfo fileInfo(filePath);
+ if (!fileInfo.exists())
+ enabled = false;
+ if (!fileInfo.isFile())
+ enabled = false;
+
+ QString dirPath(ui->workingDirEdit->text());
+ if (!dirPath.isEmpty()) {
+ QDir dirInfo(dirPath);
+ if (!dirInfo.exists())
+ enabled = false;
+ }
+
+ ui->addButton->setEnabled(enabled);
}
void EditExecutablesDialog::resetInput()
@@ -93,6 +122,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 +148,10 @@ void EditExecutablesDialog::saveExecutable()
else {
m_Profile->removeSetting("custom_overwrites", ui->titleEdit->text());
}
+
+ m_Profile->removeForcedLibraries(ui->titleEdit->text());
+ m_Profile->storeForcedLibraries(ui->titleEdit->text(), m_ForcedLibraries);
+ m_Profile->setForcedLibrariesEnabled(ui->titleEdit->text(), ui->forceLoadCheckBox->isChecked());
}
@@ -130,6 +164,21 @@ void EditExecutablesDialog::delayedRefresh()
}
+void EditExecutablesDialog::on_forceLoadButton_clicked()
+{
+ ForcedLoadDialog dialog(m_GamePlugin, 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()) {
@@ -181,6 +230,10 @@ void EditExecutablesDialog::on_browseButton_clicked()
} else {
ui->binaryEdit->setText(QDir::toNativeSeparators(binaryName));
}
+
+ if (ui->titleEdit->text().isEmpty()) {
+ ui->titleEdit->setText(QFileInfo(binaryName).baseName());
+ }
}
void EditExecutablesDialog::on_browseDirButton_clicked()
@@ -195,6 +248,8 @@ void EditExecutablesDialog::on_removeButton_clicked()
{
if (QMessageBox::question(this, tr("Confirm"), tr("Really remove \"%1\" from executables?").arg(ui->titleEdit->text()),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
+ m_Profile->removeSetting("custom_overwrites", ui->titleEdit->text());
+ m_Profile->removeForcedLibraries(ui->titleEdit->text());
m_ExecutablesList.remove(ui->titleEdit->text());
}
@@ -231,6 +286,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 +307,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()
@@ -247,7 +318,6 @@ bool EditExecutablesDialog::executableChanged()
&& fileInfo.isFile();
}
}
-
void EditExecutablesDialog::on_executablesListBox_itemSelectionChanged()
{
if (ui->executablesListBox->selectedItems().size() == 0) {
@@ -324,13 +394,18 @@ void EditExecutablesDialog::on_executablesListBox_clicked(const QModelIndex &cur
QString customOverwrite = m_Profile->setting("custom_overwrites", selectedExecutable.m_Title).toString();
if (!customOverwrite.isEmpty()) {
index = ui->newFilesModBox->findText(customOverwrite);
- qDebug("find %s -> %d", qPrintable(customOverwrite), index);
+ qDebug("find %s -> %d", qUtf8Printable(customOverwrite), index);
}
ui->newFilesModCheckBox->setChecked(index != -1);
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);
}
}