diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-06-07 22:24:43 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-06-15 14:40:40 -0400 |
| commit | cd2fefca1928f374c302c275efcc0bbaf36357bb (patch) | |
| tree | ae0a4ec2f87b549ab5f5ca6e39e2bfcd3339d77e /src | |
| parent | b8199f0c471f2b5ee2b070a96b42ad0040cddf2f (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')
| -rw-r--r-- | src/editexecutablesdialog.cpp | 149 | ||||
| -rw-r--r-- | src/editexecutablesdialog.h | 6 | ||||
| -rw-r--r-- | src/executableslist.cpp | 2 |
3 files changed, 100 insertions, 57 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) -{ -} diff --git a/src/editexecutablesdialog.h b/src/editexecutablesdialog.h index f28658e3..8ee56e3e 100644 --- a/src/editexecutablesdialog.h +++ b/src/editexecutablesdialog.h @@ -64,10 +64,10 @@ private slots: void on_add_clicked();
void on_remove_clicked();
+ void on_title_textChanged(const QString& s);
void on_overwriteSteamAppID_toggled(bool checked);
void on_createFilesInMod_toggled(bool checked);
void on_forceLoadLibraries_toggled(bool checked);
- void on_useApplicationIcon_toggled(bool checked);
void on_browseBinary_clicked();
void on_browseWorkingDirectory_clicked();
@@ -81,6 +81,7 @@ private slots: private:
std::unique_ptr<Ui::EditExecutablesDialog> ui;
ExecutablesList m_executablesList;
+ std::map<QString, QString> m_customOverwrites;
Profile *m_profile;
const MOBase::IPluginGame *m_gamePlugin;
bool m_settingUI;
@@ -92,18 +93,17 @@ private: QListWidgetItem* selectedItem();
Executable* selectedExe();
+ void fillExecutableList();
void updateUI(const Executable* e);
void clearEdits();
void setEdits(const Executable& e);
void save();
void resetInput();
- void refreshExecutablesWidget();
bool executableChanged();
void updateButtonStates();
void saveExecutable();
- void onTitleChanged(const QString& s);
};
#endif // EDITEXECUTABLESDIALOG_H
diff --git a/src/executableslist.cpp b/src/executableslist.cpp index 8174eb1b..f592a2b7 100644 --- a/src/executableslist.cpp +++ b/src/executableslist.cpp @@ -67,6 +67,8 @@ void ExecutablesList::load(const MOBase::IPluginGame* game, QSettings& settings) {
qDebug("setting up configured executables");
+ m_Executables.clear();
+
int numCustomExecutables = settings.beginReadArray("customExecutables");
for (int i = 0; i < numCustomExecutables; ++i) {
settings.setArrayIndex(i);
|
