forked from teamnwah/openmw-tes3coop
More work on integrating the settings parser, profiles are handled correctly
This commit is contained in:
parent
5d1bede9e5
commit
1b9cf8c23f
5 changed files with 140 additions and 32 deletions
|
@ -293,22 +293,77 @@ void DataFilesPage::setupDataFiles()
|
||||||
mPluginsModel->addPlugins(dataLocal);
|
mPluginsModel->addPlugins(dataLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList profiles = mLauncherSettings.subKeys(QString("Profiles/"));
|
||||||
|
QString profile = mLauncherSettings.value(QString("Profiles/CurrentProfile"));
|
||||||
|
|
||||||
|
mProfilesComboBox->addItems(profiles);
|
||||||
|
|
||||||
|
// Add the current profile if empty
|
||||||
|
if (mProfilesComboBox->findText(profile) == -1)
|
||||||
|
mProfilesComboBox->addItem(profile);
|
||||||
|
|
||||||
|
if (mProfilesComboBox->findText(QString("Default")) == -1)
|
||||||
|
mProfilesComboBox->addItem(QString("Default"));
|
||||||
|
|
||||||
|
if (profile.isEmpty()) {
|
||||||
|
mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(QString("Default")));
|
||||||
|
} else {
|
||||||
|
mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(profile));
|
||||||
|
}
|
||||||
|
|
||||||
loadSettings();
|
loadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataFilesPage::loadSettings()
|
void DataFilesPage::loadSettings()
|
||||||
{
|
{
|
||||||
qDebug() << "load settings";
|
qDebug() << "load settings";
|
||||||
|
QString profile = mLauncherSettings.value(QString("Profiles/CurrentProfile"));
|
||||||
|
|
||||||
|
qDebug() << mLauncherSettings.values(QString("Profiles/Default"), Qt::MatchStartsWith);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (profile.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
mMastersModel->uncheckAll();
|
||||||
|
mPluginsModel->uncheckAll();
|
||||||
|
|
||||||
|
QStringList masters = mLauncherSettings.values(QString("Profiles/") + profile + QString("/master"), Qt::MatchExactly);
|
||||||
|
QStringList plugins = mLauncherSettings.values(QString("Profiles/") + profile + QString("/plugin"), Qt::MatchExactly);
|
||||||
|
qDebug() << "masters to check " << plugins;
|
||||||
|
|
||||||
|
foreach (const QString &master, masters) {
|
||||||
|
QModelIndex index = mMastersModel->indexFromItem(mMastersModel->findItem(master));
|
||||||
|
if (index.isValid())
|
||||||
|
mMastersModel->setCheckState(index, Qt::Checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (const QString &plugin, plugins) {
|
||||||
|
QModelIndex index = mPluginsModel->indexFromItem(mPluginsModel->findItem(plugin));
|
||||||
|
if (index.isValid())
|
||||||
|
mPluginsModel->setCheckState(index, Qt::Checked);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataFilesPage::saveSettings()
|
void DataFilesPage::saveSettings()
|
||||||
{
|
{
|
||||||
QString profile = mLauncherSettings.value(QString("Profiles/CurrentProfile"));
|
QString profile = mLauncherSettings.value(QString("Profiles/CurrentProfile"));
|
||||||
|
|
||||||
|
if (profile.isEmpty()) {
|
||||||
|
profile = mProfilesComboBox->currentText();
|
||||||
|
mLauncherSettings.setValue(QString("Profiles/CurrentProfile"), profile);
|
||||||
|
}
|
||||||
|
|
||||||
qDebug() << "save settings" << profile;
|
qDebug() << "save settings" << profile;
|
||||||
|
mLauncherSettings.remove(QString("Profiles/") + profile + QString("/master"));
|
||||||
|
mLauncherSettings.remove(QString("Profiles/") + profile + QString("/plugin"));
|
||||||
|
|
||||||
QStringList items = mMastersModel->checkedItems();
|
QStringList items = mMastersModel->checkedItems();
|
||||||
|
|
||||||
foreach(const QString &master, items) {
|
foreach(const QString &master, items) {
|
||||||
|
qDebug() << "setting " << master;
|
||||||
mLauncherSettings.setMultiValue(QString("Profiles/") + profile + QString("/master"), master);
|
mLauncherSettings.setMultiValue(QString("Profiles/") + profile + QString("/master"), master);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -482,17 +537,11 @@ void DataFilesPage::writeConfig(QString profile)
|
||||||
|
|
||||||
void DataFilesPage::newProfile()
|
void DataFilesPage::newProfile()
|
||||||
{
|
{
|
||||||
// if (mNewProfileDialog->exec() == QDialog::Accepted) {
|
if (mNewProfileDialog->exec() == QDialog::Accepted) {
|
||||||
|
QString profile = mNewProfileDialog->lineEdit()->text();
|
||||||
// const QString text = mNewProfileDialog->lineEdit()->text();
|
mProfilesComboBox->addItem(profile);
|
||||||
// mProfilesComboBox->addItem(text);
|
mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(profile));
|
||||||
// mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(text));
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
mDeleteProfileAction->setEnabled(false);
|
|
||||||
mProfilesComboBox->setCurrentIndex(-1);
|
|
||||||
mProfilesComboBox->setEditEnabled(true);
|
|
||||||
mProfilesComboBox->lineEdit()->setFocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataFilesPage::updateOkButton(const QString &text)
|
void DataFilesPage::updateOkButton(const QString &text)
|
||||||
|
|
|
@ -13,6 +13,60 @@ LauncherSettings::~LauncherSettings()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList LauncherSettings::values(const QString &key, Qt::MatchFlags flags)
|
||||||
|
{
|
||||||
|
QMap<QString, QString> settings = SettingsBase::getSettings();
|
||||||
|
|
||||||
|
if (flags == Qt::MatchExactly)
|
||||||
|
return settings.values(key);
|
||||||
|
|
||||||
|
QStringList result;
|
||||||
|
|
||||||
|
if (flags == Qt::MatchStartsWith) {
|
||||||
|
QStringList keys = settings.keys();
|
||||||
|
|
||||||
|
foreach (const QString ¤tKey, keys) {
|
||||||
|
qDebug() << "key is: " << currentKey << "value: " << settings.value(currentKey);
|
||||||
|
if (currentKey.startsWith(key))
|
||||||
|
result.append(settings.value(currentKey));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList LauncherSettings::subKeys(const QString &key)
|
||||||
|
{
|
||||||
|
QMap<QString, QString> settings = SettingsBase::getSettings();
|
||||||
|
QStringList keys = settings.keys();
|
||||||
|
|
||||||
|
QRegExp keyRe("(.+)/");
|
||||||
|
|
||||||
|
QStringList result;
|
||||||
|
|
||||||
|
foreach (const QString ¤tKey, keys) {
|
||||||
|
qDebug() << "key is: " << currentKey;
|
||||||
|
if (keyRe.indexIn(currentKey) != -1) {
|
||||||
|
qDebug() << "text: " << keyRe.cap(1) << keyRe.cap(2);
|
||||||
|
|
||||||
|
QString prefixedKey = keyRe.cap(1);
|
||||||
|
if(prefixedKey.startsWith(key)) {
|
||||||
|
|
||||||
|
QString subKey = prefixedKey.remove(key);
|
||||||
|
if (!subKey.isEmpty())
|
||||||
|
result.append(subKey);
|
||||||
|
//qDebug() << keyRe.cap(2).simplified();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
qDebug() << "no match";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.removeDuplicates();
|
||||||
|
qDebug() << result;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bool LauncherSettings::writeFile(QTextStream &stream)
|
bool LauncherSettings::writeFile(QTextStream &stream)
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,6 +9,9 @@ public:
|
||||||
LauncherSettings();
|
LauncherSettings();
|
||||||
~LauncherSettings();
|
~LauncherSettings();
|
||||||
|
|
||||||
|
QStringList subKeys(const QString &key);
|
||||||
|
QStringList values(const QString &key, Qt::MatchFlags flags = Qt::MatchExactly);
|
||||||
|
|
||||||
bool writeFile(QTextStream &stream);
|
bool writeFile(QTextStream &stream);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -24,12 +24,20 @@ public:
|
||||||
|
|
||||||
inline void setValue(const QString &key, const QString &value)
|
inline void setValue(const QString &key, const QString &value)
|
||||||
{
|
{
|
||||||
mSettings.insert(key, value);
|
QStringList values = mSettings.values(key);
|
||||||
|
if (!values.contains(value))
|
||||||
|
mSettings.insert(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void setMultiValue(const QString &key, const QString &value)
|
inline void setMultiValue(const QString &key, const QString &value)
|
||||||
{
|
{
|
||||||
mSettings.insertMulti(key, value);
|
QStringList values = mSettings.values(key);
|
||||||
|
if (!values.contains(value)) {
|
||||||
|
qDebug() << "inserting " << value;
|
||||||
|
mSettings.insertMulti(key, value);
|
||||||
|
} else {
|
||||||
|
qDebug() << "not inserting " << value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,13 +81,11 @@ public:
|
||||||
QStringList values = mCache.values(key);
|
QStringList values = mCache.values(key);
|
||||||
if (!values.contains(value)) {
|
if (!values.contains(value)) {
|
||||||
// QMap will replace the value if key exists, QMultiMap creates a new one
|
// QMap will replace the value if key exists, QMultiMap creates a new one
|
||||||
mCache.insert(key, value);
|
mCache.insertMulti(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "HI THERE! " << mCache;
|
|
||||||
|
|
||||||
if (mSettings.isEmpty()) {
|
if (mSettings.isEmpty()) {
|
||||||
mSettings = mCache; // This is the first time we read a file
|
mSettings = mCache; // This is the first time we read a file
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QKeyEvent>
|
||||||
|
|
||||||
#include "profilescombobox.hpp"
|
#include "profilescombobox.hpp"
|
||||||
#include "comboboxlineedit.hpp"
|
#include "comboboxlineedit.hpp"
|
||||||
|
@ -18,12 +19,11 @@ ProfilesComboBox::ProfilesComboBox(QWidget *parent) :
|
||||||
connect(this, SIGNAL(currentIndexChanged(int)), this,
|
connect(this, SIGNAL(currentIndexChanged(int)), this,
|
||||||
SLOT(slotIndexChanged(int)));
|
SLOT(slotIndexChanged(int)));
|
||||||
|
|
||||||
|
setInsertPolicy(QComboBox::NoInsert);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfilesComboBox::setEditEnabled(bool editable)
|
void ProfilesComboBox::setEditEnabled(bool editable)
|
||||||
{
|
{
|
||||||
qDebug() << "called";
|
|
||||||
if (isEditable() == editable)
|
if (isEditable() == editable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -50,29 +50,25 @@ void ProfilesComboBox::setEditEnabled(bool editable)
|
||||||
|
|
||||||
void ProfilesComboBox::slotTextChanged(const QString &text)
|
void ProfilesComboBox::slotTextChanged(const QString &text)
|
||||||
{
|
{
|
||||||
QString previous = itemText(currentIndex());
|
QPalette *palette = new QPalette();
|
||||||
// lineEdit()->setPalette(QApplication::palette());
|
palette->setColor(QPalette::Text,Qt::red);
|
||||||
|
|
||||||
if (text.isEmpty())
|
int index = findText(text);
|
||||||
return;
|
|
||||||
|
|
||||||
if (text == previous)
|
if (text.isEmpty() || (index != -1 && index != currentIndex())) {
|
||||||
return;
|
|
||||||
|
|
||||||
qDebug() << "textChanged";
|
|
||||||
if (findText(text) != -1) {
|
|
||||||
QPalette *palette = new QPalette();
|
|
||||||
palette->setColor(QPalette::Text,Qt::red);
|
|
||||||
lineEdit()->setPalette(*palette);
|
lineEdit()->setPalette(*palette);
|
||||||
|
} else {
|
||||||
|
lineEdit()->setPalette(QApplication::palette());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProfilesComboBox::slotEditingFinished()
|
void ProfilesComboBox::slotEditingFinished()
|
||||||
{
|
{
|
||||||
qDebug() << "returnpressed";
|
|
||||||
QString current = currentText();
|
QString current = currentText();
|
||||||
QString previous = itemText(currentIndex());
|
QString previous = itemText(currentIndex());
|
||||||
|
|
||||||
|
qDebug() << current << previous;
|
||||||
|
|
||||||
if (current.isEmpty())
|
if (current.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -82,9 +78,9 @@ void ProfilesComboBox::slotEditingFinished()
|
||||||
if (findText(current) != -1)
|
if (findText(current) != -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
if (currentIndex() == -1) {
|
if (currentIndex() == -1) {
|
||||||
addItem(currentText());
|
addItem(current);
|
||||||
|
setCurrentIndex(findText(current));
|
||||||
} else {
|
} else {
|
||||||
setItemText(currentIndex(), current);
|
setItemText(currentIndex(), current);
|
||||||
emit(profileRenamed(previous, current));
|
emit(profileRenamed(previous, current));
|
||||||
|
|
Loading…
Reference in a new issue