diff --git a/mainwindow.cpp b/mainwindow.cpp index 2fbce5a..a9b4570 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -48,6 +48,36 @@ ioLaunch::ioLaunch(QWidget *parent) : } settings.setHaveRun(true); + + // Populate the GUI with values read from settings. + if (settings.getResolutionMode() >= 0) + { + // Predefined. + ui->cbResolution->setCurrentIndex(2 + settings.getResolutionMode()); + } + else if (settings.getResolutionMode() == -1) + { + // Custom. + ui->cbResolution->setCurrentIndex(0); + } + else if (settings.getResolutionMode() == -2) + { + // Desktop. + ui->cbResolution->setCurrentIndex(1); + } + + ui->sbWidth->setValue(settings.getResolutionWidth()); + ui->sbHeight->setValue(settings.getResolutionHeight()); + ioWedited = ioHedited = true; + + if (settings.getResolutionFullscreen()) + { + ui->rbFull->setChecked(true); + } + else + { + ui->rbWin->setChecked(true); + } } ioLaunch::~ioLaunch() @@ -223,6 +253,22 @@ void ioLaunch::on_cbResolution_currentIndexChanged(int index) break; } } + + if (index == 0) + { + // Custom. + settings.setResolutionMode(-1); + } + else if (index == 1) + { + // Desktop. + settings.setResolutionMode(-2); + } + else + { + // Predefined. + settings.setResolutionMode(index - 2); + } } void ioLaunch::on_rbFull_toggled(bool checked) @@ -230,6 +276,7 @@ void ioLaunch::on_rbFull_toggled(bool checked) if(checked) { screenOption = " +set r_fullscreen 1"; + settings.setResolutionFullscreen(true); } } @@ -238,6 +285,7 @@ void ioLaunch::on_rbWin_toggled(bool checked) if(checked) { screenOption = " +set r_fullscreen 0"; + settings.setResolutionFullscreen(false); } } @@ -261,6 +309,8 @@ void ioLaunch::on_sbWidth_valueChanged(int arg1) else{ ioWedited = false; } + + settings.setResolutionWidth(arg1); } void ioLaunch::on_sbHeight_valueChanged(int arg1) @@ -274,6 +324,8 @@ void ioLaunch::on_sbHeight_valueChanged(int arg1) else{ ioHedited = false; } + + settings.setResolutionHeight(arg1); } // Since q3config.cfg is generated it's nice and clean and shouldn't need a full parser. @@ -325,9 +377,6 @@ void ioLaunch::parseQuake3Config() QTextStream stream(&file); - // These may occur in any order, so process them after parsing the entire file. - QString r_mode, r_customwidth, r_customheight; - while (!stream.atEnd()) { const QString line(stream.readLine()); @@ -344,34 +393,20 @@ void ioLaunch::parseQuake3Config() if (cvar == "r_mode") { - r_mode = ParseToken(line, offset); + settings.setResolutionMode(ParseToken(line, offset).toInt()); } else if (cvar == "r_customwidth") { - r_customwidth = ParseToken(line, offset); + settings.setResolutionWidth(ParseToken(line, offset).toInt()); } else if (cvar == "r_customheight") { - r_customheight = ParseToken(line, offset); + settings.setResolutionHeight(ParseToken(line, offset).toInt()); } else if (cvar == "r_fullscreen") { - // Set fullscreen/windows radio buttons. - const QString value(ParseToken(line, offset)); - - if (value == "0") - ui->rbWin->setChecked(true); - else if (value == "1") - ui->rbFull->setChecked(true); + settings.setResolutionFullscreen(ParseToken(line, offset).toInt() != 0); } } } - - // Populate resolution spinboxes. - if (r_mode == "-1" && !r_customwidth.isEmpty() && !r_customheight.isEmpty()) - { - ui->sbWidth->setValue(r_customwidth.toInt()); - ui->sbHeight->setValue(r_customheight.toInt()); - ioWedited = ioHedited = true; - } } diff --git a/settings.cpp b/settings.cpp index 5a85b76..e7a5f62 100644 --- a/settings.cpp +++ b/settings.cpp @@ -52,3 +52,43 @@ void Settings::setQuakePath(const QString &path) { settings.setValue("quakePath", path); } + +int Settings::getResolutionMode() const +{ + return settings.value("resolution/mode", 3).toInt(); +} + +void Settings::setResolutionMode(int mode) +{ + settings.setValue("resolution/mode", mode); +} + +int Settings::getResolutionWidth() const +{ + return settings.value("resolution/width", 1600).toInt(); +} + +void Settings::setResolutionWidth(int width) +{ + settings.setValue("resolution/width", width); +} + +int Settings::getResolutionHeight() const +{ + return settings.value("resolution/height", 1024).toInt(); +} + +void Settings::setResolutionHeight(int height) +{ + settings.setValue("resolution/height", height); +} + +bool Settings::getResolutionFullscreen() const +{ + return settings.value("resolution/fullscreen", 1).toBool(); +} + +void Settings::setResolutionFullscreen(bool value) +{ + settings.setValue("resolution/fullscreen", value); +} diff --git a/settings.h b/settings.h index 4e709c8..15f35ce 100644 --- a/settings.h +++ b/settings.h @@ -39,6 +39,18 @@ public: bool containsQuakePath() const; void setQuakePath(const QString &path); + int getResolutionMode() const; + void setResolutionMode(int mode); + + int getResolutionWidth() const; + void setResolutionWidth(int width); + + int getResolutionHeight() const; + void setResolutionHeight(int height); + + bool getResolutionFullscreen() const; + void setResolutionFullscreen(bool value); + private: QSettings settings; };