From f8bb797b8a384f33e44436a58184382872b83cbf Mon Sep 17 00:00:00 2001 From: pvdk Date: Wed, 16 Apr 2014 18:34:24 +0200 Subject: [PATCH] Settings tab is fully functional now --- apps/launcher/datafilespage.cpp | 30 +++---- apps/launcher/settingspage.cpp | 107 ++++++++++++++++------- apps/launcher/settingspage.hpp | 1 + apps/wizard/existinginstallationpage.cpp | 5 +- apps/wizard/languageselectionpage.cpp | 14 +-- 5 files changed, 104 insertions(+), 53 deletions(-) diff --git a/apps/launcher/datafilespage.cpp b/apps/launcher/datafilespage.cpp index efd9765ac..72afe1c1d 100644 --- a/apps/launcher/datafilespage.cpp +++ b/apps/launcher/datafilespage.cpp @@ -42,7 +42,7 @@ void Launcher::DataFilesPage::loadSettings() QString profileName = ui.profilesComboBox->currentText(); - QStringList files = mLauncherSettings.values(QString("Profiles/") + profileName, Qt::MatchExactly); + QStringList files = mLauncherSettings.values(QString("Profiles/") + profileName + QString("/content"), Qt::MatchExactly); QStringList filepaths; @@ -75,7 +75,7 @@ void Launcher::DataFilesPage::saveSettings(const QString &profile) mLauncherSettings.setValue(QString("Profiles/currentprofile"), ui.profilesComboBox->currentText()); foreach(const ContentSelectorModel::EsmFile *item, items) { - mLauncherSettings.setMultiValue(QString("Profiles/") + profileName, item->fileName()); + mLauncherSettings.setMultiValue(QString("Profiles/") + profileName + QString("/content"), item->fileName()); mGameSettings.setMultiValue(QString("content"), item->fileName()); } @@ -192,21 +192,21 @@ void Launcher::DataFilesPage::setupDataFiles() if (!mDataLocal.isEmpty()) mSelector->addFiles(mDataLocal); - QStringList profiles; + QStringList profiles = mLauncherSettings.subKeys(QString("Profiles/")); QString currentProfile = mLauncherSettings.getSettings().value("Profiles/currentprofile"); - foreach (QString key, mLauncherSettings.getSettings().keys()) - { - if (key.contains("Profiles/")) - { - QString profile = key.mid (9); - if (profile != "currentprofile") - { - if (!profiles.contains(profile)) - profiles << profile; - } - } - } +// foreach (QString key, mLauncherSettings.getSettings().keys()) +// { +// if (key.contains("Profiles/")) +// { +// QString profile = key.mid (9); +// if (profile != "currentprofile") +// { +// if (!profiles.contains(profile)) +// profiles << profile; +// } +// } +// } foreach (const QString &item, profiles) addProfile (item, false); diff --git a/apps/launcher/settingspage.cpp b/apps/launcher/settingspage.cpp index b2d03ba95..3c8c119ec 100644 --- a/apps/launcher/settingspage.cpp +++ b/apps/launcher/settingspage.cpp @@ -1,7 +1,9 @@ #include "settingspage.hpp" +#include #include #include +#include #include #include @@ -20,13 +22,13 @@ Launcher::SettingsPage::SettingsPage(Config::GameSettings &gameSettings, setupUi(this); QStringList languages; - languages << "English" - << "French" - << "German" - << "Italian" - << "Polish" - << "Russian" - << "Spanish"; + languages << QLatin1String("English") + << QLatin1String("French") + << QLatin1String("German") + << QLatin1String("Italian") + << QLatin1String("Polish") + << QLatin1String("Russian") + << QLatin1String("Spanish"); languageComboBox->addItems(languages); @@ -50,22 +52,31 @@ Launcher::SettingsPage::SettingsPage(Config::GameSettings &gameSettings, connect(mProfileDialog->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(updateOkButton(QString))); -// // Detect Morrowind configuration files -// foreach (const QString &path, mGameSettings.getDataDirs()) { -// QDir dir(path); -// dir.setPath(dir.canonicalPath()); // Resolve symlinks + // Detect Morrowind configuration files + QStringList iniPaths; -// if (dir.exists(QString("Morrowind.ini"))) -// iniPaths.append(dir.absoluteFilePath(QString("Morrowind.ini"))); -// else -// { -// if (!dir.cdUp()) -// continue; // Cannot move from Data Files + foreach (const QString &path, mGameSettings.getDataDirs()) { + QDir dir(path); + dir.setPath(dir.canonicalPath()); // Resolve symlinks -// if (dir.exists(QString("Morrowind.ini"))) -// iniPaths.append(dir.absoluteFilePath(QString("Morrowind.ini"))); -// } -// } + if (dir.exists(QString("Morrowind.ini"))) + iniPaths.append(dir.absoluteFilePath(QString("Morrowind.ini"))); + else + { + if (!dir.cdUp()) + continue; // Cannot move from Data Files + + if (dir.exists(QString("Morrowind.ini"))) + iniPaths.append(dir.absoluteFilePath(QString("Morrowind.ini"))); + } + } + + if (!iniPaths.isEmpty()) { + settingsComboBox->addItems(iniPaths); + importerButton->setEnabled(true); + } else { + importerButton->setEnabled(false); + } } void Launcher::SettingsPage::on_wizardButton_clicked() @@ -80,6 +91,32 @@ void Launcher::SettingsPage::on_importerButton_clicked() return; } +void Launcher::SettingsPage::on_browseButton_clicked() +{ + QString iniFile = QFileDialog::getOpenFileName( + this, + QObject::tr("Select configuration file"), + QDir::currentPath(), + QString(tr("Morrowind configuration file (*.ini)"))); + + + if (iniFile.isEmpty()) + return; + + QFileInfo info(iniFile); + + if (!info.exists() || !info.isReadable()) + return; + + const QString path(QDir::toNativeSeparators(info.absoluteFilePath())); + + if (settingsComboBox->findText(path) == -1) { + settingsComboBox->addItem(path); + settingsComboBox->setCurrentIndex(settingsComboBox->findText(path)); + importerButton->setEnabled(true); + } +} + void Launcher::SettingsPage::wizardStarted() { qDebug() << "wizard started!"; @@ -109,18 +146,27 @@ void Launcher::SettingsPage::importerFinished(int exitCode, QProcess::ExitStatus if (exitCode != 0 || exitStatus == QProcess::CrashExit) return; - mMain->writeSettings(); - mMain->reloadSettings(); + // Import selected data files from openmw.cfg + if (addonsCheckBox->isChecked()) + { + if (mProfileDialog->exec() == QDialog::Accepted) + { + const QString profile(mProfileDialog->lineEdit()->text()); + const QStringList files(mGameSettings.values(QLatin1String("content"))); + // Doesn't quite work right now + mLauncherSettings.setValue(QLatin1String("Profiles/currentprofile"), profile); - if (addonsCheckBox->isChecked()) { + foreach (const QString &file, files) { + mLauncherSettings.setMultiValue(QLatin1String("Profiles/") + profile + QLatin1String("/content"), file); + } - if (mProfileDialog->exec() == QDialog::Accepted) { - QString profile = mProfileDialog->lineEdit()->text(); - qDebug() << profile; + mGameSettings.remove(QLatin1String("content")); } } + mMain->writeSettings(); + mMain->reloadSettings(); importerButton->setEnabled(true); } @@ -132,8 +178,9 @@ void Launcher::SettingsPage::updateOkButton(const QString &text) return; } + const QStringList profiles(mLauncherSettings.subKeys(QString("Profiles/"))); -// (profilesComboBox->findText(text) == -1) -// ? mNewProfileDialog->setOkButtonEnabled(true) -// : mNewProfileDialog->setOkButtonEnabled(false); + (profiles.contains(text)) + ? mProfileDialog->setOkButtonEnabled(false) + : mProfileDialog->setOkButtonEnabled(true); } diff --git a/apps/launcher/settingspage.hpp b/apps/launcher/settingspage.hpp index ed5c068fb..d43141fc4 100644 --- a/apps/launcher/settingspage.hpp +++ b/apps/launcher/settingspage.hpp @@ -31,6 +31,7 @@ namespace Launcher private slots: void on_wizardButton_clicked(); void on_importerButton_clicked(); + void on_browseButton_clicked(); void wizardStarted(); void wizardFinished(int exitCode, QProcess::ExitStatus exitStatus); diff --git a/apps/wizard/existinginstallationpage.cpp b/apps/wizard/existinginstallationpage.cpp index d37dd949d..13dcf9941 100644 --- a/apps/wizard/existinginstallationpage.cpp +++ b/apps/wizard/existinginstallationpage.cpp @@ -72,7 +72,7 @@ bool Wizard::ExistingInstallationPage::validatePage() QString iniFile; if (msgBox.clickedButton() == browseButton) { iniFile = QFileDialog::getOpenFileName( - NULL, + this, QObject::tr("Select configuration file"), QDir::currentPath(), QString(tr("Morrowind configuration file (*.ini)"))); @@ -100,6 +100,9 @@ void Wizard::ExistingInstallationPage::on_browseButton_clicked() NULL, QFileDialog::DontResolveSymlinks); + if (selectedFile.isEmpty()) + return; + QFileInfo info(selectedFile); if (!info.exists()) diff --git a/apps/wizard/languageselectionpage.cpp b/apps/wizard/languageselectionpage.cpp index b921d5ddb..8beb106a2 100644 --- a/apps/wizard/languageselectionpage.cpp +++ b/apps/wizard/languageselectionpage.cpp @@ -14,13 +14,13 @@ Wizard::LanguageSelectionPage::LanguageSelectionPage(MainWizard *wizard) : void Wizard::LanguageSelectionPage::initializePage() { QStringList languages; - languages << "English" - << "French" - << "German" - << "Italian" - << "Polish" - << "Russian" - << "Spanish"; + languages << QLatin1String("English") + << QLatin1String("French") + << QLatin1String("German") + << QLatin1String("Italian") + << QLatin1String("Polish") + << QLatin1String("Russian") + << QLatin1String("Spanish"); languageComboBox->addItems(languages); }