diff --git a/src/settingswindow.cpp b/src/settingswindow.cpp index 7b2bb79..3d4ff1f 100644 --- a/src/settingswindow.cpp +++ b/src/settingswindow.cpp @@ -137,11 +137,11 @@ SettingsWindow::SettingsWindow(LauncherWindow& window, QWidget* parent) : window infoLabel->setWordWrap(true); wineBoxLayout->addWidget(infoLabel); - auto winePathLabel = new QLabel(window.currentProfile().winePath); + winePathLabel = new QLabel(window.currentProfile().winePath); winePathLabel->setWordWrap(true); wineBoxLayout->addRow("Wine Executable", winePathLabel); - auto wineVersionCombo = new QComboBox(); + wineVersionCombo = new QComboBox(); #if defined(Q_OS_MAC) wineVersionCombo->insertItem(2, "FFXIV Built-In"); @@ -149,45 +149,51 @@ SettingsWindow::SettingsWindow(LauncherWindow& window, QWidget* parent) : window wineVersionCombo->insertItem(0, "System Wine"); wineVersionCombo->insertItem(1, "Custom Path..."); - wineVersionCombo->setCurrentIndex(window.settings.value("wineVersion", 0).toInt()); + wineBoxLayout->addWidget(wineVersionCombo); - auto selectWineButton = new QPushButton("Select Wine Executable"); - selectWineButton->setEnabled(window.settings.value("wineVersion", 0).toInt() == 2); + selectWineButton = new QPushButton("Select Wine Executable"); wineBoxLayout->addWidget(selectWineButton); - connect(wineVersionCombo, &QComboBox::currentIndexChanged, [this, selectWineButton, winePathLabel](int index) { - this->window.settings.setValue("wineVersion", index); - selectWineButton->setEnabled(index == 1); + connect(wineVersionCombo, &QComboBox::currentIndexChanged, [this](int index) { + getCurrentProfile().wineVersion = index; - this->window.readInitialInformation(); - winePathLabel->setText(this->window.currentProfile().winePath); + this->window.saveSettings(); + this->reloadControls(); + + // TODO: figure out the purpose of calling this before 1.0 + // this->window.readInitialInformation(); }); - connect(selectWineButton, &QPushButton::pressed, [this, winePathLabel] { - this->window.currentProfile().winePath = QFileDialog::getOpenFileName(this, "Open Wine Executable"); - this->window.settings.setValue("winePath", this->window.currentProfile().winePath); + connect(selectWineButton, &QPushButton::pressed, [this] { + getCurrentProfile().winePath = QFileDialog::getOpenFileName(this, "Open Wine Executable"); - this->window.readInitialInformation(); - winePathLabel->setText(this->window.currentProfile().winePath); + this->window.saveSettings(); + this->reloadControls(); + + // TODO: figure out the purpose of calling this before 2.0 + //this->window.readInitialInformation(); }); - auto winePrefixDirectory = new QLabel(window.currentProfile().winePrefixPath); + winePrefixDirectory = new QLabel(window.currentProfile().winePrefixPath); winePrefixDirectory->setWordWrap(true); wineBoxLayout->addRow("Wine Prefix", winePrefixDirectory); auto selectPrefixButton = new QPushButton("Select Wine Prefix"); - connect(selectPrefixButton, &QPushButton::pressed, [this, winePrefixDirectory] { - this->window.currentProfile().winePrefixPath = QFileDialog::getExistingDirectory(this, "Open Wine Prefix"); - winePrefixDirectory->setText(this->window.currentProfile().winePrefixPath); + connect(selectPrefixButton, &QPushButton::pressed, [this] { + getCurrentProfile().winePrefixPath = QFileDialog::getExistingDirectory(this, "Open Wine Prefix"); - this->window.readInitialInformation(); + this->window.saveSettings(); + this->reloadControls(); + + // TODO: figure out the purpose of calling this before 3.0 + //this->window.readInitialInformation(); }); wineBoxLayout->addWidget(selectPrefixButton); auto openPrefixButton = new QPushButton("Open Wine Prefix"); connect(openPrefixButton, &QPushButton::pressed, [this] { - openPath(this->window.currentProfile().winePrefixPath); + openPath(getCurrentProfile().winePrefixPath); }); wineBoxLayout->addWidget(openPrefixButton); @@ -265,9 +271,18 @@ void SettingsWindow::reloadControls() { ProfileSettings& profile = window.getProfile(profileWidget->currentRow()); nameEdit->setText(profile.name); + + // game directXCombo->setCurrentIndex(profile.useDX9 ? 1 : 0); currentGameDirectory->setText(profile.gamePath); + // wine + wineVersionCombo->setCurrentIndex(profile.wineVersion); + selectWineButton->setEnabled(profile.wineVersion == 1); + winePathLabel->setText(profile.winePath); + winePrefixDirectory->setText(profile.winePrefixPath); + + // login serverType->setCurrentIndex(profile.isSapphire ? 1 : 0); lobbyServerURL->setText(profile.lobbyURL); rememberUsernameBox->setChecked(profile.rememberUsername); diff --git a/src/settingswindow.h b/src/settingswindow.h index 6112fd6..50dc02d 100644 --- a/src/settingswindow.h +++ b/src/settingswindow.h @@ -6,6 +6,7 @@ #include #include #include +#include class LauncherWindow; struct ProfileSettings; @@ -23,10 +24,18 @@ private: QListWidget* profileWidget = nullptr; + // game QLineEdit* nameEdit = nullptr; QComboBox* directXCombo = nullptr; QLabel* currentGameDirectory = nullptr; + // wine + QComboBox* wineVersionCombo; + QPushButton* selectWineButton; + QLabel* winePathLabel; + QLabel* winePrefixDirectory; + + // login QComboBox* serverType = nullptr; QLineEdit* lobbyServerURL = nullptr; QCheckBox* rememberUsernameBox = nullptr, *rememberPasswordBox = nullptr; diff --git a/src/xivlauncher.cpp b/src/xivlauncher.cpp index 7b80607..22e1907 100755 --- a/src/xivlauncher.cpp +++ b/src/xivlauncher.cpp @@ -130,9 +130,9 @@ void LauncherWindow::readInitialInformation() { settings.beginGroup(profile_name); - const int wineVersion = settings.value("wineVersion", 0).toInt(); + profile.wineVersion = settings.value("wineVersion", 0).toInt(); #if defined(Q_OS_MAC) - switch(wineVersion) { + switch(profile.wineVersion) { case 0: // system wine profile.winePath = "/usr/local/bin/wine64"; break; @@ -146,7 +146,7 @@ void LauncherWindow::readInitialInformation() { #endif #if defined(Q_OS_LINUX) - switch(wineVersion) { + switch(profile.wineVersion) { case 0: // system wine (should be in $PATH) profile.winePath = "wine"; break; @@ -172,8 +172,8 @@ void LauncherWindow::readInitialInformation() { #endif } - if(settings.contains("winePrefix") && settings.value("winePrefix").canConvert() && !settings.value("winePrefix").toString().isEmpty()) { - profile.winePrefixPath = settings.value("winePrefix").toString(); + if(settings.contains("winePrefixPath") && settings.value("winePrefixPath").canConvert() && !settings.value("winePrefixPath").toString().isEmpty()) { + profile.winePrefixPath = settings.value("winePrefixPath").toString(); } else { #if defined(Q_OS_MACOS) profile.winePrefixPath = QDir::homePath() + "/Library/Application Support/FINAL FANTASY XIV ONLINE/Bottles/published_Final_Fantasy"; @@ -385,9 +385,16 @@ void LauncherWindow::saveSettings() { for(auto profile : profileSettings) { settings.beginGroup(profile.name); + // game settings.setValue("useDX9", profile.useDX9); settings.setValue("gamePath", profile.gamePath); + // wine + settings.setValue("wineVersion", profile.wineVersion); + settings.setValue("winePath", profile.winePath); + settings.setValue("winePrefixPath", profile.winePrefixPath); + + // login settings.setValue("isSapphire", profile.isSapphire); settings.setValue("lobbyURL", profile.lobbyURL); settings.setValue("rememberUsername", profile.rememberUsername); diff --git a/src/xivlauncher.h b/src/xivlauncher.h index 4ec488f..005db16 100755 --- a/src/xivlauncher.h +++ b/src/xivlauncher.h @@ -18,10 +18,15 @@ struct ProfileSettings { int language = 1; // 1 is english, thats all i know QString gamePath, winePath, winePrefixPath; QString bootVersion, gameVersion; + + // 0 = system, 1 = custom, 2 = built-in (mac only) + // TODO: yes, i know this should be an enum + int wineVersion = 0; bool useEsync, useGamescope, useGamemode; bool useDX9 = false; bool enableDXVKhud = false; + bool isSapphire = false; QString lobbyURL; bool rememberUsername, rememberPassword;