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);
|
||||
}
|
||||
|
||||
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 ¤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)
|
||||
{
|
||||
|
|
|
@ -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());
|
||||
QPalette *palette = new QPalette();
|
||||
palette->setColor(QPalette::Text,Qt::red);
|
||||
|
||||
if (text.isEmpty())
|
||||
return;
|
||||
int index = findText(text);
|
||||
|
||||
if (text == previous)
|
||||
return;
|
||||
|
||||
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…
Reference in a new issue