summaryrefslogtreecommitdiff
path: root/src/editexecutablesdialog.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-06-07 22:24:43 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-06-15 14:40:40 -0400
commitcd2fefca1928f374c302c275efcc0bbaf36357bb (patch)
treeae0a4ec2f87b549ab5f5ca6e39e2bfcd3339d77e /src/editexecutablesdialog.cpp
parentb8199f0c471f2b5ee2b070a96b42ad0040cddf2f (diff)
save steam app id, custom overwrite and application icon
custom overwrite directories now set locally, will be written to profile when closing the dialog
Diffstat (limited to 'src/editexecutablesdialog.cpp')
-rw-r--r--src/editexecutablesdialog.cpp149
1 files changed, 95 insertions, 54 deletions
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp
index 621c670f..2c376cd1 100644
--- a/src/editexecutablesdialog.cpp
+++ b/src/editexecutablesdialog.cpp
@@ -47,16 +47,28 @@ EditExecutablesDialog::EditExecutablesDialog(
ui->splitter->setStretchFactor(0, 0);
ui->splitter->setStretchFactor(1, 1);
- refreshExecutablesWidget();
+ for (const auto& e : m_executablesList) {
+ QString customOverwrite = m_profile->setting("custom_overwrites", e.title()).toString();
+
+ if (!customOverwrite.isEmpty()) {
+ m_customOverwrites[e.title()] = customOverwrite;
+ }
+ }
+
+
+ fillExecutableList();
ui->mods->addItems(modList.allMods());
m_forcedLibraries = m_profile->determineForcedLibraries(ui->title->text());
- // title textbox also has to change the list item, will call save manually
- connect(ui->title, &QLineEdit::textChanged, [&](auto&& s){ onTitleChanged(s); });
+ // some widgets need to do more than just save() and have their own handler
+
connect(ui->binary, &QLineEdit::textChanged, [&]{ save(); });
connect(ui->workingDirectory, &QLineEdit::textChanged, [&]{ save(); });
connect(ui->arguments, &QLineEdit::textChanged, [&]{ save(); });
+ connect(ui->steamAppID, &QLineEdit::textChanged, [&]{ save(); });
+ connect(ui->mods, &QComboBox::currentTextChanged, [&]{ save(); });
+ connect(ui->useApplicationIcon, &QCheckBox::toggled, [&]{ save(); });
updateUI(nullptr);
}
@@ -91,8 +103,27 @@ Executable* EditExecutablesDialog::selectedExe()
return &*itor;
}
+void EditExecutablesDialog::fillExecutableList()
+{
+ ui->list->clear();
+
+ for(const auto& exe : m_executablesList) {
+ QListWidgetItem *newItem = new QListWidgetItem(exe.title());
+
+ if (!exe.isCustom()) {
+ auto f = newItem->font();
+ f.setItalic(true);
+
+ newItem->setFont(f);
+ }
+
+ ui->list->addItem(newItem);
+ }
+}
+
void EditExecutablesDialog::updateUI(const Executable* e)
{
+ // the ui is currently being set, ignore changes
m_settingUI = true;
if (e) {
@@ -103,6 +134,7 @@ void EditExecutablesDialog::updateUI(const Executable* e)
ui->remove->setEnabled(false);
}
+ // any changes from now on are from the user
m_settingUI = false;
}
@@ -113,10 +145,13 @@ void EditExecutablesDialog::clearEdits()
ui->workingDirectory->clear();
ui->arguments->clear();
ui->overwriteSteamAppID->setChecked(false);
+ ui->steamAppID->setEnabled(false);
ui->steamAppID->clear();
ui->createFilesInMod->setChecked(false);
+ ui->mods->setEnabled(false);
ui->mods->setCurrentIndex(-1);
ui->forceLoadLibraries->setChecked(false);
+ ui->configureLibraries->setEnabled(false);
ui->useApplicationIcon->setChecked(false);
ui->pluginProvidedLabel->setVisible(false);
@@ -129,17 +164,25 @@ void EditExecutablesDialog::setEdits(const Executable& e)
ui->workingDirectory->setText(QDir::toNativeSeparators(e.workingDirectory()));
ui->arguments->setText(e.arguments());
ui->overwriteSteamAppID->setChecked(!e.steamAppID().isEmpty());
+ ui->steamAppID->setEnabled(!e.steamAppID().isEmpty());
ui->steamAppID->setText(e.steamAppID());
ui->useApplicationIcon->setChecked(e.usesOwnIcon());
int modIndex = -1;
- QString customOverwrite = m_profile->setting("custom_overwrites", e.title()).toString();
- if (!customOverwrite.isEmpty()) {
- modIndex = ui->mods->findText(customOverwrite);
+ auto itor = m_customOverwrites.find(e.title());
+ if (itor != m_customOverwrites.end()) {
+ modIndex = ui->mods->findText(itor->second);
+
+ if (modIndex == -1) {
+ qWarning().nospace()
+ << "executable '" << e.title() << "' uses mod '" << itor->second << "' "
+ << "as a custom overwrite, but that mod doesn't exist";
+ }
}
ui->createFilesInMod->setChecked(modIndex != -1);
+ ui->mods->setEnabled(modIndex != -1);
ui->mods->setCurrentIndex(modIndex);
const bool forcedLibraries = m_profile->forcedLibrariesEnabled(e.title());
@@ -156,19 +199,16 @@ void EditExecutablesDialog::setEdits(const Executable& e)
ui->browseWorkingDirectory->setEnabled(e.isCustom());
ui->arguments->setEnabled(e.isCustom());
ui->overwriteSteamAppID->setEnabled(e.isCustom());
- ui->steamAppID->setEnabled(e.isCustom());
ui->useApplicationIcon->setEnabled(e.isCustom());
// always enabled
ui->createFilesInMod->setEnabled(true);
- ui->mods->setEnabled(true);
ui->forceLoadLibraries->setEnabled(true);
}
void EditExecutablesDialog::save()
{
if (m_settingUI) {
- // the ui is currently being set, ignore changes
return;
}
@@ -180,6 +220,16 @@ void EditExecutablesDialog::save()
qDebug().nospace() << "saving '" << e->title() << "'";
+ // title may have changed, start with the stuff using it
+ if (ui->createFilesInMod->isChecked()) {
+ m_customOverwrites[e->title()] = ui->mods->currentText();
+ } else {
+ auto itor = m_customOverwrites.find(e->title());
+ if (itor != m_customOverwrites.end()) {
+ m_customOverwrites.erase(itor);
+ }
+ }
+
e->title(ui->title->text());
e->binaryInfo(ui->binary->text());
e->workingDirectory(ui->workingDirectory->text());
@@ -192,10 +242,9 @@ void EditExecutablesDialog::save()
}
}
-void EditExecutablesDialog::onTitleChanged(const QString& s)
+void EditExecutablesDialog::on_title_textChanged(const QString& s)
{
if (m_settingUI) {
- // the ui is currently being set, ignore changes
return;
}
@@ -210,6 +259,38 @@ void EditExecutablesDialog::onTitleChanged(const QString& s)
}
}
+void EditExecutablesDialog::on_overwriteSteamAppID_toggled(bool checked)
+{
+ if (m_settingUI) {
+ return;
+ }
+
+ ui->steamAppID->setEnabled(checked);
+ save();
+}
+
+void EditExecutablesDialog::on_createFilesInMod_toggled(bool checked)
+{
+ if (m_settingUI) {
+ return;
+ }
+
+ ui->mods->setEnabled(checked);
+ save();
+}
+
+void EditExecutablesDialog::on_forceLoadLibraries_toggled(bool checked)
+{
+ if (m_settingUI) {
+ return;
+ }
+
+ ui->configureLibraries->setEnabled(ui->forceLoadLibraries->isChecked());
+ save();
+}
+
+
+
void EditExecutablesDialog::resetInput()
{
@@ -246,27 +327,6 @@ ExecutablesList EditExecutablesDialog::getExecutablesList() const
return newList;
}
-void EditExecutablesDialog::refreshExecutablesWidget()
-{
- ui->list->clear();
-
- for(const auto& exe : m_executablesList) {
- QListWidgetItem *newItem = new QListWidgetItem(exe.title());
-
- if (!exe.isCustom()) {
- auto f = newItem->font();
- f.setItalic(true);
-
- newItem->setFont(f);
- }
-
- ui->list->addItem(newItem);
- }
-
- //ui->addButton->setEnabled(false);
- //ui->removeButton->setEnabled(false);
-}
-
void EditExecutablesDialog::updateButtonStates()
{
@@ -336,11 +396,6 @@ void EditExecutablesDialog::on_configureLibraries_clicked()
}
}
-void EditExecutablesDialog::on_forceLoadLibraries_toggled(bool checked)
-{
- ui->configureLibraries->setEnabled(ui->forceLoadLibraries->isChecked());
-}
-
void EditExecutablesDialog::on_add_clicked()
{
@@ -349,7 +404,7 @@ void EditExecutablesDialog::on_add_clicked()
}
resetInput();
- refreshExecutablesWidget();
+ //refreshExecutablesWidget();
}
void EditExecutablesDialog::on_browseBinary_clicked()
@@ -427,7 +482,7 @@ void EditExecutablesDialog::on_remove_clicked()
}
resetInput();
- refreshExecutablesWidget();
+ //refreshExecutablesWidget();
}
@@ -486,11 +541,6 @@ void EditExecutablesDialog::on_list_itemSelectionChanged()
updateUI(selectedExe());
}
-void EditExecutablesDialog::on_overwriteSteamAppID_toggled(bool checked)
-{
- ui->steamAppID->setEnabled(checked);
-}
-
void EditExecutablesDialog::on_buttons_accepted()
{
if (executableChanged()) {
@@ -503,7 +553,7 @@ void EditExecutablesDialog::on_buttons_accepted()
saveExecutable();
// the executable list returned to callers is generated from the user data in the widgets,
// NOT the list we just saved
- refreshExecutablesWidget();
+ //refreshExecutablesWidget();
}
}
@@ -582,12 +632,3 @@ void EditExecutablesDialog::on_buttons_rejected()
ui->forceLoadCheckBox->setChecked(forcedLibraries);
}
}*/
-
-void EditExecutablesDialog::on_createFilesInMod_toggled(bool checked)
-{
- ui->mods->setEnabled(checked);
-}
-
-void EditExecutablesDialog::on_useApplicationIcon_toggled(bool checked)
-{
-}