More work on integrating the settings parser, profiles are handled correctly

actorid
Pieter van der Kloet 12 years ago
parent 5d1bede9e5
commit 1b9cf8c23f

@ -293,22 +293,77 @@ void DataFilesPage::setupDataFiles()
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();
}
void DataFilesPage::loadSettings()
{
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()
{
QString profile = mLauncherSettings.value(QString("Profiles/CurrentProfile"));
if (profile.isEmpty()) {
profile = mProfilesComboBox->currentText();
mLauncherSettings.setValue(QString("Profiles/CurrentProfile"), profile);
}
qDebug() << "save settings" << profile;
mLauncherSettings.remove(QString("Profiles/") + profile + QString("/master"));
mLauncherSettings.remove(QString("Profiles/") + profile + QString("/plugin"));
QStringList items = mMastersModel->checkedItems();
foreach(const QString &master, items) {
qDebug() << "setting " << master;
mLauncherSettings.setMultiValue(QString("Profiles/") + profile + QString("/master"), master);
}
@ -482,17 +537,11 @@ void DataFilesPage::writeConfig(QString profile)
void DataFilesPage::newProfile()
{
// if (mNewProfileDialog->exec() == QDialog::Accepted) {
// const QString text = mNewProfileDialog->lineEdit()->text();
// mProfilesComboBox->addItem(text);
// mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(text));
// }
mDeleteProfileAction->setEnabled(false);
mProfilesComboBox->setCurrentIndex(-1);
mProfilesComboBox->setEditEnabled(true);
mProfilesComboBox->lineEdit()->setFocus();
if (mNewProfileDialog->exec() == QDialog::Accepted) {
QString profile = mNewProfileDialog->lineEdit()->text();
mProfilesComboBox->addItem(profile);
mProfilesComboBox->setCurrentIndex(mProfilesComboBox->findText(profile));
}
}
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 &currentKey, 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 &currentKey, 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)
{

@ -9,6 +9,9 @@ public:
LauncherSettings();
~LauncherSettings();
QStringList subKeys(const QString &key);
QStringList values(const QString &key, Qt::MatchFlags flags = Qt::MatchExactly);
bool writeFile(QTextStream &stream);
};

@ -24,12 +24,20 @@ public:
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)
{
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);
if (!values.contains(value)) {
// 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()) {
mSettings = mCache; // This is the first time we read a file
return true;

@ -3,6 +3,7 @@
#include <QString>
#include <QDebug>
#include <QApplication>
#include <QKeyEvent>
#include "profilescombobox.hpp"
#include "comboboxlineedit.hpp"
@ -18,12 +19,11 @@ ProfilesComboBox::ProfilesComboBox(QWidget *parent) :
connect(this, SIGNAL(currentIndexChanged(int)), this,
SLOT(slotIndexChanged(int)));
setInsertPolicy(QComboBox::NoInsert);
}
void ProfilesComboBox::setEditEnabled(bool editable)
{
qDebug() << "called";
if (isEditable() == editable)
return;
@ -50,29 +50,25 @@ void ProfilesComboBox::setEditEnabled(bool editable)
void ProfilesComboBox::slotTextChanged(const QString &text)
{
QString previous = itemText(currentIndex());
// lineEdit()->setPalette(QApplication::palette());
if (text.isEmpty())
return;
QPalette *palette = new QPalette();
palette->setColor(QPalette::Text,Qt::red);
if (text == previous)
return;
int index = findText(text);
qDebug() << "textChanged";
if (findText(text) != -1) {
QPalette *palette = new QPalette();
palette->setColor(QPalette::Text,Qt::red);
if (text.isEmpty() || (index != -1 && index != currentIndex())) {
lineEdit()->setPalette(*palette);
} else {
lineEdit()->setPalette(QApplication::palette());
}
}
void ProfilesComboBox::slotEditingFinished()
{
qDebug() << "returnpressed";
QString current = currentText();
QString previous = itemText(currentIndex());
qDebug() << current << previous;
if (current.isEmpty())
return;
@ -82,9 +78,9 @@ void ProfilesComboBox::slotEditingFinished()
if (findText(current) != -1)
return;
if (currentIndex() == -1) {
addItem(currentText());
addItem(current);
setCurrentIndex(findText(current));
} else {
setItemText(currentIndex(), current);
emit(profileRenamed(previous, current));

Loading…
Cancel
Save