diff --git a/src/settingswindow.cpp b/src/settingswindow.cpp index fd11eba..6483fa9 100644 --- a/src/settingswindow.cpp +++ b/src/settingswindow.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include @@ -23,6 +22,13 @@ SettingsWindow::SettingsWindow(LauncherWindow& window, QWidget* parent) : window setLayout(mainLayout); profileWidget = new QListWidget(); + profileWidget->addItem("INVALID *DEBUG*"); + profileWidget->setCurrentRow(0); + + connect(profileWidget, &QListWidget::currentRowChanged, [=]() { + reloadControls(); + }); + mainLayout->addWidget(profileWidget, 0, 0); auto addProfileButton = new QPushButton("Add Profile"); @@ -37,15 +43,13 @@ SettingsWindow::SettingsWindow(LauncherWindow& window, QWidget* parent) : window mainLayout->addWidget(gameBox, 0, 1); - auto directXCombo = new QComboBox(); - directXCombo->setCurrentIndex(window.settings.value("directx", 0).toInt()); + directXCombo = new QComboBox(); directXCombo->addItem("DirectX 11"); directXCombo->addItem("DirectX 9"); gameBoxLayout->addRow("DirectX Version", directXCombo); connect(directXCombo, &QComboBox::currentIndexChanged, [=](int index) { - this->window.settings.setValue("directx", directXCombo->currentIndex()); - this->window.currentProfile().useDX9 = directXCombo->currentIndex() == 1; + this->window.getProfile(profileWidget->currentRow()).useDX9 = directXCombo->currentIndex() == 1; }); auto currentGameDirectory = new QLabel(window.currentProfile().gamePath); @@ -216,11 +220,24 @@ SettingsWindow::SettingsWindow(LauncherWindow& window, QWidget* parent) : window } void SettingsWindow::reloadControls() { + if(currentlyReloadingControls) + return; + + currentlyReloadingControls = true; + + auto oldRow = profileWidget->currentRow(); + profileWidget->clear(); for(auto profile : window.profileList()) { profileWidget->addItem(profile); } + profileWidget->setCurrentRow(oldRow); + + ProfileSettings& profile = window.getProfile(profileWidget->currentRow()); + directXCombo->setCurrentIndex(profile.useDX9 ? 1 : 0); + + currentlyReloadingControls = false; } void SettingsWindow::openPath(const QString path) { diff --git a/src/settingswindow.h b/src/settingswindow.h index 1a0f3e1..c30fd10 100644 --- a/src/settingswindow.h +++ b/src/settingswindow.h @@ -2,6 +2,7 @@ #include #include +#include class LauncherWindow; @@ -15,7 +16,10 @@ public slots: private: void openPath(const QString path); - QListWidget* profileWidget; + QListWidget* profileWidget = nullptr; + QComboBox* directXCombo = nullptr; + + bool currentlyReloadingControls = false; LauncherWindow& window; }; \ No newline at end of file diff --git a/src/xivlauncher.cpp b/src/xivlauncher.cpp index 23c6d78..49b37f7 100755 --- a/src/xivlauncher.cpp +++ b/src/xivlauncher.cpp @@ -344,11 +344,19 @@ LauncherWindow::LauncherWindow(QWidget* parent) : LauncherWindow::~LauncherWindow() = default; ProfileSettings LauncherWindow::currentProfile() const { - return profileSettings[currentProfileIndex]; + return getProfile(currentProfileIndex); } ProfileSettings& LauncherWindow::currentProfile() { - return profileSettings[currentProfileIndex]; + return getProfile(currentProfileIndex); +} + +ProfileSettings LauncherWindow::getProfile(int index) const { + return profileSettings[index]; +} + +ProfileSettings& LauncherWindow::getProfile(int index) { + return profileSettings[index]; } void LauncherWindow::setProfile(QString name) { diff --git a/src/xivlauncher.h b/src/xivlauncher.h index 00b2c1c..8f64f7f 100755 --- a/src/xivlauncher.h +++ b/src/xivlauncher.h @@ -48,6 +48,10 @@ public: ProfileSettings currentProfile() const; ProfileSettings& currentProfile(); + + ProfileSettings getProfile(int index) const; + ProfileSettings& getProfile(int index); + void setProfile(QString name); void setProfile(int index); int getProfileIndex(QString name);