1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-06 19:45:33 +00:00
openmw-tes3mp/apps/opencs/model/settings/settingmanager.cpp

160 lines
4.3 KiB
C++
Raw Normal View History

2014-04-23 03:17:19 +00:00
#include <QFile>
#include <QTextCodec>
#include <QMessageBox>
#include <QDebug>
#include <QList>
#include <QSettings>
2014-04-23 03:17:19 +00:00
#include "setting.hpp"
#include "settingmanager.hpp"
CSMSettings::SettingManager::SettingManager(QObject *parent) :
QObject(parent)
{
mReadWriteMessage = QObject::tr("<br><b>Could not open or create file for \
writing</b><br><br> Please make sure you have the right\
permissions and try again.<br>");
mReadOnlyMessage = QObject::tr("<br><b>Could not open file for \
reading</b><br><br> Please make sure you have the \
right permissions and try again.<br>");
}
2014-05-05 11:07:41 +00:00
2014-04-23 03:17:19 +00:00
CSMSettings::Setting *CSMSettings::SettingManager::createSetting
(CSMSettings::SettingType typ, const QString &page, const QString &name)
2014-04-23 03:17:19 +00:00
{
//get list of all settings for the current setting name
if (findSetting (page, name))
{
qWarning() << "Duplicate declaration encountered: "
<< (name + '/' + page);
2014-04-23 03:17:19 +00:00
return 0;
}
Setting *setting = new Setting (typ, name, page);
2014-04-23 03:17:19 +00:00
//add declaration to the model
mSettings.append (setting);
return setting;
}
void CSMSettings::SettingManager::displayFileErrorMessage(const QString &message,
bool isReadOnly) const
{
// File cannot be opened or created
QMessageBox msgBox;
msgBox.setWindowTitle(QObject::tr("OpenCS configuration file I/O error"));
msgBox.setIcon(QMessageBox::Critical);
msgBox.setStandardButtons(QMessageBox::Ok);
if (!isReadOnly)
msgBox.setText (mReadWriteMessage + message);
else
msgBox.setText (message);
msgBox.exec();
}
void CSMSettings::SettingManager::addDefinitions (const QSettings *settings)
2014-04-23 03:17:19 +00:00
{
foreach (const QString &key, settings->allKeys())
2014-04-23 03:17:19 +00:00
{
QStringList names = key.split('/');
Setting *setting = findSetting (names.at(0), names.at(1));
2014-04-23 03:17:19 +00:00
if (!setting)
2014-04-23 03:17:19 +00:00
{
qWarning() << "Found definitions for undeclared setting "
<< names.at(0) << "." << names.at(1);
continue;
}
2014-04-23 03:17:19 +00:00
QStringList values = settings->value (key).toStringList();
2014-04-23 03:17:19 +00:00
if (values.isEmpty())
values.append (setting->defaultValues());
2014-04-23 03:17:19 +00:00
setting->setDefinedValues (values);
qDebug() << "added definitons " << values;
2014-04-23 03:17:19 +00:00
}
}
QList <CSMSettings::Setting *> CSMSettings::SettingManager::findSettings
(const QStringList &list)
{
QList <CSMSettings::Setting *> settings;
foreach (const QString &value, list)
{
QStringList names = value.split(".", QString::SkipEmptyParts);
if (names.size() != 2)
continue;
Setting *setting = findSetting (names.at(0), names.at(1));
if (!setting)
continue;
settings.append (setting);
}
return settings;
}
CSMSettings::Setting *CSMSettings::SettingManager::findSetting
(const QString &pageName, const QString &settingName)
{
foreach (Setting *setting, mSettings)
{
2014-05-05 11:07:41 +00:00
if (setting->name() == settingName)
2014-04-23 03:17:19 +00:00
{
if (setting->page() == pageName)
return setting;
}
}
return 0;
}
2014-05-05 11:07:41 +00:00
2014-04-23 03:17:19 +00:00
QList <CSMSettings::Setting *> CSMSettings::SettingManager::findSettings
(const QString &pageName)
{
QList <CSMSettings::Setting *> settings;
foreach (Setting *setting, mSettings)
{
if (setting->page() == pageName)
settings.append (setting);
}
return settings;
}
2014-05-05 11:07:41 +00:00
2014-04-23 03:17:19 +00:00
CSMSettings::SettingPageMap CSMSettings::SettingManager::settingPageMap() const
{
SettingPageMap pageMap;
foreach (Setting *setting, mSettings)
pageMap[setting->page()].append (setting);
return pageMap;
}
void CSMSettings::SettingManager::updateUserSetting(const QString &settingKey,
const QStringList &list)
{
QStringList names = settingKey.split('/');
Setting *setting = findSetting (names.at(0), names.at(1));
setting->setDefinedValues (list);
emit userSettingUpdated (settingKey, list);
}