summaryrefslogtreecommitdiff
path: root/src/settingsdialoggeneral.cpp
diff options
context:
space:
mode:
authorChris Bessent <lost.dragonist@gmail.com>2020-01-06 05:17:01 -0700
committerGitHub <noreply@github.com>2020-01-06 05:17:01 -0700
commitdfa600996c49c1b23dca884c963dc917bd9cfc0a (patch)
treec6def4277cc962822d0dcde71fa9148e050f693f /src/settingsdialoggeneral.cpp
parente69078e2399a88bda7bb9ffae7a3d57db9a4e9cf (diff)
parentd1a788dfad341b32235abc25c2ba1645f8be1ace (diff)
Merge pull request #954 from ModOrganizer2/Develop
Stage for release 2.2.2
Diffstat (limited to 'src/settingsdialoggeneral.cpp')
-rw-r--r--src/settingsdialoggeneral.cpp215
1 files changed, 215 insertions, 0 deletions
diff --git a/src/settingsdialoggeneral.cpp b/src/settingsdialoggeneral.cpp
new file mode 100644
index 00000000..58871cee
--- /dev/null
+++ b/src/settingsdialoggeneral.cpp
@@ -0,0 +1,215 @@
+#include "settingsdialoggeneral.h"
+#include "ui_settingsdialog.h"
+#include "appconfig.h"
+#include "categoriesdialog.h"
+#include "colortable.h"
+#include <utility.h>
+#include <questionboxmemory.h>
+
+using namespace MOBase;
+
+GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
+ : SettingsTab(s, d)
+{
+ addLanguages();
+ selectLanguage();
+
+ addStyles();
+ selectStyle();
+
+ ui->colorTable->load(s);
+
+ ui->centerDialogs->setChecked(settings().geometry().centerDialogs());
+ ui->changeGameConfirmation->setChecked(settings().interface().showChangeGameConfirmation());
+ ui->doubleClickPreviews->setChecked(settings().interface().doubleClicksOpenPreviews());
+ ui->compactBox->setChecked(settings().interface().compactDownloads());
+ ui->showMetaBox->setChecked(settings().interface().metaDownloads());
+ ui->checkForUpdates->setChecked(settings().checkForUpdates());
+ ui->usePrereleaseBox->setChecked(settings().usePrereleases());
+ ui->colorSeparatorsBox->setChecked(settings().colors().colorSeparatorScrollbar());
+
+ QObject::connect(ui->exploreStyles, &QPushButton::clicked, [&]{ onExploreStyles(); });
+
+ QObject::connect(
+ ui->categoriesBtn, &QPushButton::clicked, [&]{ onEditCategories(); });
+
+ QObject::connect(
+ ui->resetColorsBtn, &QPushButton::clicked, [&]{ onResetColors(); });
+
+ QObject::connect(
+ ui->resetDialogsButton, &QPushButton::clicked, [&]{ onResetDialogs(); });
+}
+
+void GeneralSettingsTab::update()
+{
+ const QString oldLanguage = settings().interface().language();
+ const QString newLanguage = ui->languageBox->itemData(
+ ui->languageBox->currentIndex()).toString();
+
+ if (newLanguage != oldLanguage) {
+ settings().interface().setLanguage(newLanguage);
+ emit settings().languageChanged(newLanguage);
+ }
+
+ const QString oldStyle = settings().interface().styleName().value_or("");
+ const QString newStyle = ui->styleBox->itemData(
+ ui->styleBox->currentIndex()).toString();
+
+ if (oldStyle != newStyle) {
+ settings().interface().setStyleName(newStyle);
+ emit settings().styleChanged(newStyle);
+ }
+
+ ui->colorTable->commitColors();
+
+ settings().geometry().setCenterDialogs(ui->centerDialogs->isChecked());
+ settings().interface().setShowChangeGameConfirmation(ui->changeGameConfirmation->isChecked());
+ settings().interface().setDoubleClicksOpenPreviews(ui->doubleClickPreviews->isChecked());
+ settings().interface().setCompactDownloads(ui->compactBox->isChecked());
+ settings().interface().setMetaDownloads(ui->showMetaBox->isChecked());
+ settings().setCheckForUpdates(ui->checkForUpdates->isChecked());
+ settings().setUsePrereleases(ui->usePrereleaseBox->isChecked());
+ settings().colors().setColorSeparatorScrollbar(ui->colorSeparatorsBox->isChecked());
+}
+
+void GeneralSettingsTab::addLanguages()
+{
+ // matches the end of filenames for something like "_en.qm" or "_zh_CN.qm"
+ const QString pattern =
+ QString::fromStdWString(AppConfig::translationPrefix()) +
+ "_([a-z]{2,3}(_[A-Z]{2,2})?).qm";
+
+ const QRegExp exp(pattern);
+
+ QDirIterator iter(
+ QCoreApplication::applicationDirPath() + "/translations",
+ QDir::Files);
+
+ std::vector<std::pair<QString, QString>> languages;
+
+ while (iter.hasNext()) {
+ iter.next();
+
+ const QString file = iter.fileName();
+ if (!exp.exactMatch(file)) {
+ continue;
+ }
+
+ const QString languageCode = exp.cap(1);
+ const QLocale locale(languageCode);
+
+ QString languageString = QString("%1 (%2)")
+ .arg(locale.nativeLanguageName())
+ .arg(locale.nativeCountryName());
+
+ if (locale.language() == QLocale::Chinese) {
+ if (languageCode == "zh_TW") {
+ languageString = "Chinese (Traditional)";
+ } else {
+ languageString = "Chinese (Simplified)";
+ }
+ }
+
+ languages.push_back({languageString, exp.cap(1)});
+ }
+
+ if (!ui->languageBox->findText("English")) {
+ languages.push_back({QString("English"), QString("en_US")});
+ }
+
+ std::sort(languages.begin(), languages.end());
+
+ for (const auto& lang : languages) {
+ ui->languageBox->addItem(lang.first, lang.second);
+ }
+}
+
+void GeneralSettingsTab::selectLanguage()
+{
+ QString languageCode = settings().interface().language();
+ int currentID = ui->languageBox->findData(languageCode);
+ // I made a mess. :( Most languages are stored with only the iso country
+ // code (2 characters like "de") but chinese
+ // with the exact language variant (zh_TW) so I have to search for both
+ // variants
+ if (currentID == -1) {
+ currentID = ui->languageBox->findData(languageCode.mid(0, 2));
+ }
+ if (currentID != -1) {
+ ui->languageBox->setCurrentIndex(currentID);
+ }
+}
+
+void GeneralSettingsTab::addStyles()
+{
+ ui->styleBox->addItem("None", "");
+ for (auto&& key : QStyleFactory::keys()) {
+ ui->styleBox->addItem(key, key);
+ }
+
+ ui->styleBox->insertSeparator(ui->styleBox->count());
+
+ QDirIterator iter(
+ QCoreApplication::applicationDirPath() + "/" +
+ QString::fromStdWString(AppConfig::stylesheetsPath()),
+ QStringList("*.qss"),
+ QDir::Files);
+
+ while (iter.hasNext()) {
+ iter.next();
+
+ ui->styleBox->addItem(
+ iter.fileInfo().completeBaseName(),
+ iter.fileName());
+ }
+}
+
+void GeneralSettingsTab::selectStyle()
+{
+ const int currentID = ui->styleBox->findData(
+ settings().interface().styleName().value_or(""));
+
+ if (currentID != -1) {
+ ui->styleBox->setCurrentIndex(currentID);
+ }
+}
+
+void GeneralSettingsTab::resetDialogs()
+{
+ settings().widgets().resetQuestionButtons();
+}
+
+void GeneralSettingsTab::onExploreStyles()
+{
+ QString ssPath = QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::stylesheetsPath());
+ shell::Explore(ssPath);
+}
+
+void GeneralSettingsTab::onEditCategories()
+{
+ CategoriesDialog dialog(&dialog());
+
+ if (dialog.exec() == QDialog::Accepted) {
+ dialog.commitChanges();
+ }
+}
+
+void GeneralSettingsTab::onResetColors()
+{
+ ui->colorTable->resetColors();
+}
+
+void GeneralSettingsTab::onResetDialogs()
+{
+ const auto r = QMessageBox::question(
+ parentWidget(),
+ QObject::tr("Confirm?"),
+ QObject::tr(
+ "This will reset all the choices you made to dialogs and make them all "
+ "visible again. Continue?"),
+ QMessageBox::Yes | QMessageBox::No);
+
+ if (r == QMessageBox::Yes) {
+ resetDialogs();
+ }
+}