diff --git a/include/DataFile.h b/include/DataFile.h index 499853bf0..bf93b7ae0 100644 --- a/include/DataFile.h +++ b/include/DataFile.h @@ -77,6 +77,24 @@ public: return m_type; } + // small helper class for adjusting application's locale settings + // when loading or saving floating point values rendered to strings + class LocaleHelper + { + public: + enum Modes + { + ModeLoad, + ModeSave, + ModeCount + }; + typedef Modes Mode; + + LocaleHelper( Mode mode ); + ~LocaleHelper(); + + }; + private: static Type type( const QString& typeName ); diff --git a/src/core/DataFile.cpp b/src/core/DataFile.cpp index 27b5a4dc9..b7b43c4a0 100644 --- a/src/core/DataFile.cpp +++ b/src/core/DataFile.cpp @@ -61,6 +61,38 @@ DataFile::typeDescStruct +DataFile::LocaleHelper::LocaleHelper( Mode mode ) +{ + switch( mode ) + { + case ModeLoad: + // set a locale for which QString::fromFloat() returns valid values if + // floating point separator is a comma - otherwise we would fail to load + // older projects made by people from various countries due to their + // locale settings + QLocale::setDefault( QLocale::German ); + break; + + case ModeSave: + // set default locale to C so that floating point decimals are rendered to + // strings with periods as decimal point instead of commas in some countries + QLocale::setDefault( QLocale::C ); + + default: break; + } +} + + + +DataFile::LocaleHelper::~LocaleHelper() +{ + // revert to original locale + QLocale::setDefault( QLocale::system() ); +} + + + + DataFile::DataFile( Type type ) : QDomDocument( "lmms-project" ), m_content(),