diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-06-09 10:37:08 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-06-15 14:40:40 -0400 |
| commit | 626045511160b9d44a4ffd29f6dce11f5db6096b (patch) | |
| tree | a961a6687c048b7cea41771a25479fef2dae7cf9 /src | |
| parent | 57c7b1568518acefcbcc1801954a62fdc94e3b1c (diff) | |
removed old, unused stuff
have mainwindow save all the new settings once the dialog closes
Diffstat (limited to 'src')
| -rw-r--r-- | src/editexecutablesdialog.cpp | 281 | ||||
| -rw-r--r-- | src/editexecutablesdialog.h | 13 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 38 |
3 files changed, 86 insertions, 246 deletions
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp index 6f63416d..28a6b148 100644 --- a/src/editexecutablesdialog.cpp +++ b/src/editexecutablesdialog.cpp @@ -63,11 +63,49 @@ EditExecutablesDialog::EditExecutablesDialog( connect(ui->mods, &QComboBox::currentTextChanged, [&]{ save(); }); connect(ui->useApplicationIcon, &QCheckBox::toggled, [&]{ save(); }); - updateUI(nullptr); + // select the first one in the list, if any + if (ui->list->count() > 0) { + ui->list->item(0)->setSelected(true); + } else { + updateUI(nullptr); + } } EditExecutablesDialog::~EditExecutablesDialog() = default; +ExecutablesList EditExecutablesDialog::getExecutablesList() const +{ + ExecutablesList newList; + + // make sure the executables are in the same order as in the list + for (int i = 0; i < ui->list->count(); ++i) { + const auto& title = ui->list->item(i)->text(); + + auto itor = m_executablesList.find(title); + + if (itor == m_executablesList.end()) { + qWarning().nospace() + << "getExecutablesList(): executable '" << title << "' not found"; + + continue; + } + + newList.setExecutable(*itor); + } + + return newList; +} + +const CustomOverwrites& EditExecutablesDialog::getCustomOverwrites() const +{ + return m_customOverwrites; +} + +const ForcedLibraries& EditExecutablesDialog::getForcedLibraries() const +{ + return m_forcedLibraries; +} + QListWidgetItem* EditExecutablesDialog::selectedItem() { const auto selection = ui->list->selectedItems(); @@ -429,6 +467,16 @@ void EditExecutablesDialog::on_configureLibraries_clicked() } } +void EditExecutablesDialog::on_buttons_accepted() +{ + accept(); +} + +void EditExecutablesDialog::on_buttons_rejected() +{ + reject(); +} + void EditExecutablesDialog::setJarBinary(const QString& binaryName) { auto java = OrganizerCore::findJavaInstallation(binaryName); @@ -471,237 +519,6 @@ QString EditExecutablesDialog::newExecutableTitle() } - -ExecutablesList EditExecutablesDialog::getExecutablesList() const -{ - ExecutablesList newList; - for (int i = 0; i < ui->list->count(); ++i) { - const auto& title = ui->list->item(i)->text(); - auto itor = m_executablesList.find(title); - - if (itor == m_executablesList.end()) { - qWarning().nospace() - << "getExecutablesList(): executable '" << title << "' not found"; - - continue; - } - - newList.setExecutable(*itor); - } - - return newList; -} - - -void EditExecutablesDialog::updateButtonStates() -{ - bool enabled = true; - - QString filePath(ui->binary->text()); - QFileInfo fileInfo(filePath); - if (!fileInfo.exists()) - enabled = false; - if (!fileInfo.isFile()) - enabled = false; - - QString dirPath(ui->workingDirectory->text()); - if (!dirPath.isEmpty()) { - QDir dirInfo(dirPath); - if (!dirInfo.exists()) - enabled = false; - } - - //ui->addButton->setEnabled(enabled); -} - - -void EditExecutablesDialog::saveExecutable() -{ - Executable::Flags flags = Executable::CustomExecutable; - if (ui->useApplicationIcon->isChecked()) - flags |= Executable::UseApplicationIcon; - - m_executablesList.setExecutable(Executable() - .title(ui->title->text()) - .binaryInfo(QDir::fromNativeSeparators(ui->binary->text())) - .arguments(ui->arguments->text()) - .steamAppID(ui->overwriteSteamAppID->isChecked() ? ui->steamAppID->text() : "") - .workingDirectory(QDir::fromNativeSeparators(ui->workingDirectory->text())) - .flags(flags)); - - if (ui->createFilesInMod->isChecked()) { - m_profile->storeSetting("custom_overwrites", ui->title->text(), - ui->mods->currentText()); - } - else { - m_profile->removeSetting("custom_overwrites", ui->title->text()); - } - - //m_profile->removeForcedLibraries(ui->title->text()); - //m_profile->storeForcedLibraries(ui->title->text(), m_forcedLibraries); - //m_profile->setForcedLibrariesEnabled(ui->title->text(), ui->forceLoadLibraries->isChecked()); -} - - -void EditExecutablesDialog::delayedRefresh() -{ - /*QModelIndex index = ui->executablesListBox->currentIndex(); - resetInput(); - refreshExecutablesWidget(); - on_executablesListBox_clicked(index);*/ -} - - - - - - - -bool EditExecutablesDialog::executableChanged() -{ - /*if (m_currentItem != nullptr) { - const auto& title = m_currentItem->text(); - auto itor = m_executablesList.find(title); - - if (itor == m_executablesList.end()) { - qWarning().nospace() - << "executableChanged(): title '" << title << "' not found"; - - return false; - } - - const Executable& selectedExecutable = *itor; - - QString storedCustomOverwrite = m_profile->setting("custom_overwrites", selectedExecutable.title()).toString(); - - bool forcedLibrariesDirty = false; - auto forcedLibaries = m_profile->determineForcedLibraries(selectedExecutable.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->title->text() + "/enabled", false).toBool() != - ui->forceLoadLibraries->isChecked(); - - return selectedExecutable.title() != ui->title->text() - || selectedExecutable.arguments() != ui->arguments->text() - || selectedExecutable.steamAppID() != ui->steamAppID->text() - || !storedCustomOverwrite.isEmpty() != ui->createFilesInMod->isChecked() - || !storedCustomOverwrite.isEmpty() && (storedCustomOverwrite != ui->mods->currentText()) - || selectedExecutable.workingDirectory() != QDir::fromNativeSeparators(ui->workingDirectory->text()) - || selectedExecutable.binaryInfo().absoluteFilePath() != QDir::fromNativeSeparators(ui->binary->text()) - || selectedExecutable.usesOwnIcon() != ui->useApplicationIcon->isChecked() - || forcedLibrariesDirty - ; - } else { - QFileInfo fileInfo(ui->binary->text()); - return !ui->binary->text().isEmpty() - && !ui->title->text().isEmpty() - && fileInfo.exists() - && fileInfo.isFile(); - }*/ - - return false; -} - -void EditExecutablesDialog::on_buttons_accepted() -{ - if (executableChanged()) { - QMessageBox::StandardButton res = QMessageBox::question(this, tr("Save Changes?"), - tr("You made changes to the current executable, do you want to save them?"), - QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); - if (res == QMessageBox::Cancel) { - return; - } else if (res == QMessageBox::Yes) { - saveExecutable(); - // the executable list returned to callers is generated from the user data in the widgets, - // NOT the list we just saved - //refreshExecutablesWidget(); - } - } - - accept(); -} - -void EditExecutablesDialog::on_buttons_rejected() -{ - reject(); -} - -/*void EditExecutablesDialog::on_executablesListBox_clicked(const QModelIndex ¤t) -{ - if (current.isValid()) { - - if (executableChanged()) { - QMessageBox::StandardButton res = QMessageBox::question(this, tr("Save Changes?"), - tr("You made changes to the current executable, do you want to save them?"), - QMessageBox::Yes | QMessageBox::No); - if (res == QMessageBox::Yes) { - saveExecutable(); - - //This is necessary if we're adding a new item, but it doesn't look very nice. - //Ideally we'd end up with the correct row displayed - ui->executablesListBox->selectionModel()->clearSelection(); - ui->executablesListBox->selectionModel()->select(current, QItemSelectionModel::SelectCurrent); - QTimer::singleShot(50, this, SLOT(delayedRefresh())); - return; - } - } - - ui->executablesListBox->selectionModel()->clearSelection(); - ui->executablesListBox->selectionModel()->select(current, QItemSelectionModel::SelectCurrent); - - m_CurrentItem = ui->executablesListBox->item(current.row()); - - const auto& title = m_CurrentItem->text(); - auto itor = m_ExecutablesList.find(title); - - if (itor == m_ExecutablesList.end()) { - qWarning().nospace() << "selection: executable '" << title << "' not found"; - return; - } - - const Executable& selectedExecutable = *itor; - - ui->titleEdit->setText(selectedExecutable.title()); - ui->binaryEdit->setText(QDir::toNativeSeparators(selectedExecutable.binaryInfo().absoluteFilePath())); - ui->argumentsEdit->setText(selectedExecutable.arguments()); - ui->workingDirEdit->setText(QDir::toNativeSeparators(selectedExecutable.workingDirectory())); - ui->removeButton->setEnabled(selectedExecutable.isCustom()); - ui->overwriteAppIDBox->setChecked(!selectedExecutable.steamAppID().isEmpty()); - if (!selectedExecutable.steamAppID().isEmpty()) { - ui->appIDOverwriteEdit->setText(selectedExecutable.steamAppID()); - } else { - ui->appIDOverwriteEdit->clear(); - } - ui->useAppIconCheckBox->setChecked(selectedExecutable.usesOwnIcon()); - - int index = -1; - - QString customOverwrite = m_Profile->setting("custom_overwrites", selectedExecutable.title()).toString(); - if (!customOverwrite.isEmpty()) { - index = ui->newFilesModBox->findText(customOverwrite); - 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); - } -}*/ - - void CustomOverwrites::load(Profile* p, const ExecutablesList& exes) { for (const auto& e : exes) { diff --git a/src/editexecutablesdialog.h b/src/editexecutablesdialog.h index f8382915..5199537c 100644 --- a/src/editexecutablesdialog.h +++ b/src/editexecutablesdialog.h @@ -91,11 +91,9 @@ public: ~EditExecutablesDialog();
- /**
- * @brief retrieve the updated list of executables
- * @return updated list of executables
- **/
ExecutablesList getExecutablesList() const;
+ const CustomOverwrites& getCustomOverwrites() const;
+ const ForcedLibraries& getForcedLibraries() const;
private slots:
void on_list_itemSelectionChanged();
@@ -115,8 +113,6 @@ private slots: void on_buttons_accepted();
void on_buttons_rejected();
- void delayedRefresh();
-
private:
std::unique_ptr<Ui::EditExecutablesDialog> ui;
ExecutablesList m_executablesList;
@@ -140,11 +136,6 @@ private: void save();
void setJarBinary(const QString& binaryName);
QString newExecutableTitle();
-
- bool executableChanged();
- void updateButtonStates();
- void saveExecutable();
-
};
#endif // EDITEXECUTABLESDIALOG_H
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 267a2971..05417f51 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2479,24 +2479,56 @@ static HRESULT CreateShortcut(LPCWSTR targetFileName, LPCWSTR arguments, bool MainWindow::modifyExecutablesDialog() { bool result = false; + try { - EditExecutablesDialog dialog(*m_OrganizerCore.executablesList(), + const auto oldExecutables = *m_OrganizerCore.executablesList(); + auto* profile = m_OrganizerCore.currentProfile(); + + EditExecutablesDialog dialog(oldExecutables, *m_OrganizerCore.modList(), - m_OrganizerCore.currentProfile(), + profile, m_OrganizerCore.managedGame(), this); QSettings &settings = m_OrganizerCore.settings().directInterface(); QString key = QString("geometry/%1").arg(dialog.objectName()); + if (settings.contains(key)) { dialog.restoreGeometry(settings.value(key).toByteArray()); } + if (dialog.exec() == QDialog::Accepted) { - m_OrganizerCore.setExecutablesList(dialog.getExecutablesList()); + const auto newExecutables = dialog.getExecutablesList(); + + // remove all the custom overwrites and forced libraries + for (const auto& e : oldExecutables) { + profile->removeSetting("custom_overwrites", e.title()); + profile->removeForcedLibraries(e.title()); + } + + // set the new custom overwrites and forced libraries + for (const auto& e : newExecutables) { + if (auto modName=dialog.getCustomOverwrites().find(e.title())) { + profile->storeSetting("custom_overwrites", e.title(), *modName); + } + + if (auto list=dialog.getForcedLibraries().find(e.title())) { + if (!list->empty()) { + profile->setForcedLibrariesEnabled(e.title(), true); + profile->storeForcedLibraries(e.title(), *list); + } + } + } + + // set the new executables list + m_OrganizerCore.setExecutablesList(newExecutables); + result = true; } + settings.setValue(key, dialog.saveGeometry()); refreshExecutablesList(); + updatePinnedExecutables(); } catch (const std::exception &e) { reportError(e.what()); } |
