Globalization of user settings

This commit is contained in:
Glorf 2013-06-12 12:36:35 +02:00
parent 10165d3c6b
commit 548f4d683f
6 changed files with 70 additions and 73 deletions

View File

@ -61,6 +61,17 @@ void CS::Editor::setupDataFiles()
QString path = QString::fromStdString(iter->string()); QString path = QString::fromStdString(iter->string());
mFileDialog.addFiles(path); mFileDialog.addFiles(path);
} }
//Settings setup
QStringList settingFiles;
QString userPath = QString::fromStdString(mCfgMgr.getUserPath().string());
settingFiles.append(QString("opencs.cfg"));
settingFiles.append(userPath + QString("opencs.cfg"));
mUserSettings.setSettingsFiles(settingFiles);
mUserSettings.readSettings();
} }
void CS::Editor::createDocument() void CS::Editor::createDocument()

View File

@ -10,6 +10,7 @@
#include "view/doc/viewmanager.hpp" #include "view/doc/viewmanager.hpp"
#include "view/doc/startup.hpp" #include "view/doc/startup.hpp"
#include "view/doc/filedialog.hpp" #include "view/doc/filedialog.hpp"
#include "model/settings/usersettings.hpp"
namespace CS namespace CS
{ {
@ -17,6 +18,7 @@ namespace CS
{ {
Q_OBJECT Q_OBJECT
CSMSettings::UserSettings mUserSettings;
CSMDoc::DocumentManager mDocumentManager; CSMDoc::DocumentManager mDocumentManager;
CSVDoc::ViewManager mViewManager; CSVDoc::ViewManager mViewManager;
CSVDoc::StartupDialogue mStartup; CSVDoc::StartupDialogue mStartup;

View File

@ -30,17 +30,25 @@ namespace boost
} /* namespace boost */ } /* namespace boost */
#endif /* (BOOST_VERSION <= 104600) */ #endif /* (BOOST_VERSION <= 104600) */
CSMSettings::UserSettings *CSMSettings::UserSettings::mUserSettingsInstance = 0;
CSMSettings::UserSettings::UserSettings() CSMSettings::UserSettings::UserSettings()
{ {
assert(!mUserSettingsInstance);
mUserSettingsInstance = this; mUserSettingsInstance = this;
} }
CSMSettings::UserSettings::~UserSettings() CSMSettings::UserSettings::~UserSettings()
{ {
mUserSettingsInstance = 0;
} }
QFile *CSMSettings::UserSettings::openFile (const QString &filename) CSMSettings::SectionMap CSMSettings::UserSettings::getSettingsMap() const
{
return mSectionMap;
}
QFile *CSMSettings::UserSettings::openFile (const QString &filename) const
{ {
QFile *file = new QFile(filename); QFile *file = new QFile(filename);
@ -64,7 +72,7 @@ QFile *CSMSettings::UserSettings::openFile (const QString &filename)
return file; return file;
} }
bool CSMSettings::UserSettings::writeFile(QFile *file, QMap<QString, CSMSettings::SettingList *> &settings) bool CSMSettings::UserSettings::writeFile(QFile *file, QMap<QString, CSMSettings::SettingList *> &settings) const
{ {
if (!file) if (!file)
return false; return false;
@ -89,7 +97,7 @@ bool CSMSettings::UserSettings::writeFile(QFile *file, QMap<QString, CSMSettings
return true; return true;
} }
void CSMSettings::UserSettings::getSettings(QTextStream &stream, SectionMap &sections) void CSMSettings::UserSettings::getSettings(QTextStream &stream, SectionMap &sections) const
{ {
//looks for a square bracket, "'\\[" //looks for a square bracket, "'\\["
//that has one or more "not nothing" in it, "([^]]+)" //that has one or more "not nothing" in it, "([^]]+)"
@ -137,19 +145,11 @@ void CSMSettings::UserSettings::getSettings(QTextStream &stream, SectionMap &sec
sections.insert(section, settings); sections.insert(section, settings);
} }
QString CSMSettings::UserSettings::getSettingValue(QString section, QString setting) void CSMSettings::UserSettings::readSettings()
{ {
Files::ConfigurationManager configMgr;
QString userPath = QString::fromStdString(configMgr.getUserPath().string());
QStringList list;
list.append(QString("opencs.cfg"));
list.append(userPath + QString("opencs.cfg"));
CSMSettings::SectionMap sectionMap; CSMSettings::SectionMap sectionMap;
foreach (const QString &path, list) foreach (const QString &path, mSettingsFiles)
{ {
qDebug() << "Loading config file:" << qPrintable(path); qDebug() << "Loading config file:" << qPrintable(path);
QFile file(path); QFile file(path);
@ -166,22 +166,36 @@ QString CSMSettings::UserSettings::getSettingValue(QString section, QString sett
Please make sure you have the right permissions \ Please make sure you have the right permissions \
and try again.<br>").arg(file.fileName())); and try again.<br>").arg(file.fileName()));
msgBox.exec(); msgBox.exec();
return QString(); return;
} }
QTextStream stream(&file); QTextStream stream(&file);
stream.setCodec(QTextCodec::codecForName("UTF-8")); stream.setCodec(QTextCodec::codecForName("UTF-8"));
getSettings(stream, sectionMap);
getSettings(stream, mSectionMap);
} }
file.close(); file.close();
} }
}
if(sectionMap.find(section) == sectionMap.end()) void CSMSettings::UserSettings::setSettingsFiles(QStringList files)
{
mSettingsFiles = files;
}
QStringList CSMSettings::UserSettings::getSettingsFiles () const
{
return mSettingsFiles;
}
QString CSMSettings::UserSettings::getSettingValue(QString section, QString setting) const
{
if(mSectionMap.find(section) == mSectionMap.end())
return QString(); return QString();
CSMSettings::SettingMap *settings = sectionMap.value(section); CSMSettings::SettingMap *settings = mSectionMap.value(section);
if(settings->find(setting) == settings->end()) if(settings->find(setting) == settings->end())
return QString(); return QString();
@ -191,3 +205,9 @@ QString CSMSettings::UserSettings::getSettingValue(QString section, QString sett
return settingContainer->getValue(); return settingContainer->getValue();
} }
const CSMSettings::UserSettings& CSMSettings::UserSettings::instance()
{
assert(mUserSettingsInstance);
return *mUserSettingsInstance;
}

View File

@ -24,23 +24,27 @@ namespace CSMSettings {
public: public:
static UserSettings &instance() UserSettings();
{ ~UserSettings();
static UserSettings instance;
return instance; static const UserSettings& instance();
}
QFile *openFile (const QString &); void readSettings();
bool writeFile(QFile *file, QMap<QString, SettingList *> &sections); void setSettingsFiles(QStringList files);
void getSettings (QTextStream &stream, SectionMap &settings);
QString getSettingValue(QString section, QString setting); QFile *openFile (const QString &) const;
bool writeFile(QFile *file, QMap<QString, SettingList *> &sections) const;
void getSettings (QTextStream &stream, SectionMap &settings) const;
QStringList getSettingsFiles () const;
CSMSettings::SectionMap getSettingsMap() const;
QString getSettingValue(QString section, QString setting) const;
private: private:
UserSettings *mUserSettingsInstance; static UserSettings *mUserSettingsInstance;
UserSettings();
~UserSettings(); CSMSettings::SectionMap mSectionMap;
QStringList mSettingsFiles;
UserSettings (UserSettings const &); //not implemented UserSettings (UserSettings const &); //not implemented
void operator= (UserSettings const &); //not implemented void operator= (UserSettings const &); //not implemented

View File

@ -23,7 +23,7 @@ CSVSettings::UserSettingsDialog::UserSettingsDialog(QMainWindow *parent) :
{ {
setWindowTitle(QString::fromUtf8 ("User Settings")); setWindowTitle(QString::fromUtf8 ("User Settings"));
buildPages(); buildPages();
setWidgetStates (loadSettings()); setWidgetStates (CSMSettings::UserSettings::instance().getSettingsMap());
positionWindow (); positionWindow ();
connect (mListWidget, connect (mListWidget,
@ -119,46 +119,6 @@ void CSVSettings::UserSettingsDialog::positionWindow ()
} }
CSMSettings::SectionMap CSVSettings::UserSettingsDialog::loadSettings ()
{
QString userPath = QString::fromStdString(mCfgMgr.getUserPath().string());
mPaths.append(QString("opencs.cfg"));
mPaths.append(userPath + QString("opencs.cfg"));
CSMSettings::SectionMap settingsMap;
foreach (const QString &path, mPaths)
{
qDebug() << "Loading config file:" << qPrintable(path);
QFile file(path);
if (file.exists())
{
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QMessageBox msgBox;
msgBox.setWindowTitle(tr("Error opening OpenCS configuration file"));
msgBox.setIcon(QMessageBox::Critical);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setText(QObject::tr("<br><b>Could not open %0 for reading</b><br><br> \
Please make sure you have the right permissions \
and try again.<br>").arg(file.fileName()));
msgBox.exec();
return settingsMap;
}
QTextStream stream(&file);
stream.setCodec(QTextCodec::codecForName("UTF-8"));
CSMSettings::UserSettings::instance().getSettings(stream, settingsMap);
}
file.close();
}
return settingsMap;
}
void CSVSettings::UserSettingsDialog::writeSettings() void CSVSettings::UserSettingsDialog::writeSettings()
{ {
@ -170,7 +130,9 @@ void CSVSettings::UserSettingsDialog::writeSettings()
settings [page->objectName()] = page->getSettings(); settings [page->objectName()] = page->getSettings();
} }
CSMSettings::UserSettings::instance().writeFile(CSMSettings::UserSettings::instance().openFile(mPaths.back()), settings); QStringList paths = CSMSettings::UserSettings::instance().getSettingsFiles();
CSMSettings::UserSettings::instance().writeFile(CSMSettings::UserSettings::instance().openFile(paths.back()), settings);
} }

View File

@ -25,7 +25,6 @@ namespace CSVSettings {
{ {
Q_OBJECT Q_OBJECT
QStringList mPaths;
QListWidget *mListWidget; QListWidget *mListWidget;
QStackedWidget *mStackedWidget; QStackedWidget *mStackedWidget;
Files::ConfigurationManager mCfgMgr; Files::ConfigurationManager mCfgMgr;
@ -41,7 +40,6 @@ namespace CSVSettings {
void setWidgetStates (CSMSettings::SectionMap settingsMap); void setWidgetStates (CSMSettings::SectionMap settingsMap);
void buildPages(); void buildPages();
void positionWindow (); void positionWindow ();
CSMSettings::SectionMap loadSettings();
void writeSettings(); void writeSettings();
void createSamplePage(); void createSamplePage();