Skip to content
Snippets Groups Projects
Commit 8a4f348c authored by luyikei's avatar luyikei Committed by Hugo Beauzée-Luyssen
Browse files

Have very basic Settings


Signed-off-by: default avatarHugo Beauzée-Luyssen <hugo@beauzee.fr>
parent d5ca0316
No related branches found
No related tags found
No related merge requests found
......@@ -33,7 +33,8 @@
#include <QFileInfo>
#include <QDir>
#include <QDomElement>
#include <QJsonDocument>
#include <QJsonObject>
Settings::Settings(const QString &settingsFile)
......@@ -68,53 +69,40 @@ Settings::setSettingsFile(const QString &settingsFile)
}
bool
Settings::save( QXmlStreamWriter& project )
Settings::save( QJsonDocument& doc )
{
QReadLocker lock( &m_rwLock );
SettingMap::const_iterator it = m_settings.begin();
SettingMap::const_iterator end = m_settings.end();
project.writeStartElement( "settings" );
QJsonObject top;
for ( ; it != end; ++it )
{
if ( ( (*it)->flags() & SettingValue::Runtime ) != 0 )
continue ;
project.writeStartElement( "setting" );
project.writeAttribute( "key", (*it)->key() );
if ( (*it)->get().canConvert<QString>() == false )
vlmcWarning() << "Can't serialize" << (*it)->key();
project.writeAttribute( "value", (*it)->get().toString() );
project.writeEndElement();
if ( top.insert( (*it)->key(), QJsonValue::fromVariant( (*it)->get() ) ) == top.end() )
vlmcWarning() << "Failed to set:" << (*it)->key();
}
project.writeEndElement();
doc.setObject( top );
return true;
}
bool
Settings::load( const QDomDocument& document )
Settings::load( const QJsonDocument& doc )
{
QDomElement element = document.firstChildElement( "settings" );
if ( element.isNull() == true )
if ( doc.isNull() == true )
{
vlmcWarning() << "Invalid settings node";
return false;
}
QDomElement s = element.firstChildElement( "setting" );
while ( s.isNull() == false )
for ( auto it = doc.object().constBegin();
it != doc.object().constEnd();
++it )
{
QString key = s.attribute( "key" );
QString value = s.attribute( "value" );
if ( key.isEmpty() == true )
vlmcWarning() << "Invalid setting node.";
else
{
vlmcDebug() << "Loading" << key << "=>" << value;
if ( setValue( key, value ) == false )
vlmcWarning() << "Loaded invalid project setting:" << key;
}
s = s.nextSiblingElement();
if ( setValue( it.key(), (*it).toVariant() ) == false )
vlmcWarning() << "Loaded invalid project setting:" << it.key();
}
return true;
}
......@@ -122,15 +110,17 @@ Settings::load( const QDomDocument& document )
bool
Settings::load()
{
QDomDocument doc("root");
if ( m_settingsFile->open( QFile::ReadOnly ) == false )
{
vlmcWarning() << "Failed to open settings file" << m_settingsFile->fileName();
return false;
}
if ( doc.setContent( m_settingsFile ) == false )
QJsonParseError error;
QJsonDocument doc = QJsonDocument::fromJson( m_settingsFile->readAll(), &error );
if ( error.error != QJsonParseError::NoError )
{
vlmcWarning() << "Failed to load settings file" << m_settingsFile->fileName();
vlmcWarning() << error.errorString();
return false;
}
bool res = load( doc );
......@@ -143,12 +133,10 @@ Settings::save()
{
if ( m_settingsFile == nullptr )
return false;
QByteArray settingsContent;
QXmlStreamWriter streamWriter( &settingsContent );
streamWriter.setAutoFormatting( true );
save( streamWriter );
QJsonDocument doc;
save( doc );
m_settingsFile->open( QFile::WriteOnly );
m_settingsFile->write( settingsContent );
m_settingsFile->write( doc.toJson( QJsonDocument::Compact ) );
m_settingsFile->close();
return true;
}
......
......@@ -37,7 +37,7 @@
class SettingValue;
class QFile;
class QDomElement;
class QJsonDocument;
//Var helpers :
......@@ -113,11 +113,11 @@ class Settings
SettingList group( const QString &groupName ) const;
bool load();
bool save();
bool save( QXmlStreamWriter& project );
bool save( QJsonDocument& project );
void restoreDefaultValues();
void setSettingsFile( const QString& settingsFile );
bool load( const QDomDocument& document );
bool load( const QJsonDocument& document );
private:
SettingMap m_settings;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment