Fix decimal separator handling (#4547)
Makes LMMS can handle both periods and commas properly when loading real numbers.
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
#include "TrackContainer.h"
|
||||
#include "BBTrack.h"
|
||||
#include "InstrumentTrack.h"
|
||||
#include "LocaleHelper.h"
|
||||
|
||||
|
||||
extern "C"
|
||||
@@ -133,7 +134,7 @@ bool MidiExport::tryExport(const TrackContainer::TrackList &tracks,
|
||||
{
|
||||
base_pitch += masterPitch;
|
||||
}
|
||||
base_volume = it.attribute("volume", "100").toDouble()/100.0;
|
||||
base_volume = LocaleHelper::toDouble(it.attribute("volume", "100"))/100.0;
|
||||
}
|
||||
|
||||
if (n.nodeName() == "pattern")
|
||||
@@ -204,7 +205,7 @@ bool MidiExport::tryExport(const TrackContainer::TrackList &tracks,
|
||||
{
|
||||
base_pitch += masterPitch;
|
||||
}
|
||||
base_volume = it.attribute("volume", "100").toDouble() / 100.0;
|
||||
base_volume = LocaleHelper::toDouble(it.attribute("volume", "100")) / 100.0;
|
||||
}
|
||||
|
||||
if (n.nodeName() == "pattern")
|
||||
@@ -273,7 +274,7 @@ void MidiExport::writePattern(MidiNoteVector &pat, QDomNode n,
|
||||
// TODO interpret pan="0" fxch="0" pitchrange="1"
|
||||
MidiNote mnote;
|
||||
mnote.pitch = qMax(0, qMin(127, note.attribute("key", "0").toInt() + base_pitch));
|
||||
mnote.volume = qMin(qRound(base_volume * note.attribute("vol", "100").toDouble()), 127);
|
||||
mnote.volume = qMin(qRound(base_volume * LocaleHelper::toDouble(note.attribute("vol", "100"))), 127);
|
||||
mnote.time = base_time + note.attribute("pos", "0").toInt();
|
||||
mnote.duration = note.attribute("len", "0").toInt();
|
||||
pat.push_back(mnote);
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "VstEffectControls.h"
|
||||
#include "VstEffect.h"
|
||||
|
||||
#include "LocaleHelper.h"
|
||||
#include "MainWindow.h"
|
||||
#include "GuiApplication.h"
|
||||
#include <QMdiArea>
|
||||
@@ -85,8 +86,8 @@ void VstEffectControls::loadSettings( const QDomElement & _this )
|
||||
if( !( knobFModel[ i ]->isAutomated() ||
|
||||
knobFModel[ i ]->controllerConnection() ) )
|
||||
{
|
||||
knobFModel[ i ]->setValue( (s_dumpValues.at( 2 ) ).toFloat() );
|
||||
knobFModel[ i ]->setInitValue( (s_dumpValues.at( 2 ) ).toFloat() );
|
||||
knobFModel[ i ]->setValue(LocaleHelper::toFloat(s_dumpValues.at(2)));
|
||||
knobFModel[ i ]->setInitValue(LocaleHelper::toFloat(s_dumpValues.at(2)));
|
||||
}
|
||||
|
||||
connect( knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) );
|
||||
@@ -381,7 +382,7 @@ manageVSTEffectView::manageVSTEffectView( VstEffect * _eff, VstEffectControls *
|
||||
if( !hasKnobModel )
|
||||
{
|
||||
sprintf( paramStr, "%d", i);
|
||||
m_vi->knobFModel[ i ] = new FloatModel( ( s_dumpValues.at( 2 ) ).toFloat(),
|
||||
m_vi->knobFModel[ i ] = new FloatModel( LocaleHelper::toFloat(s_dumpValues.at(2)),
|
||||
0.0f, 1.0f, 0.01f, _eff, tr( paramStr ) );
|
||||
}
|
||||
connect( m_vi->knobFModel[ i ], SIGNAL( dataChanged() ), this,
|
||||
@@ -445,7 +446,7 @@ void manageVSTEffectView::syncPlugin( void )
|
||||
{
|
||||
sprintf( paramStr, "param%d", i );
|
||||
s_dumpValues = dump[ paramStr ].split( ":" );
|
||||
f_value = ( s_dumpValues.at( 2 ) ).toFloat();
|
||||
f_value = LocaleHelper::toFloat(s_dumpValues.at(2));
|
||||
m_vi2->knobFModel[ i ]->setAutomatedValue( f_value );
|
||||
m_vi2->knobFModel[ i ]->setInitValue( f_value );
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "InstrumentPlayHandle.h"
|
||||
#include "InstrumentTrack.h"
|
||||
#include "VstPlugin.h"
|
||||
#include "LocaleHelper.h"
|
||||
#include "MainWindow.h"
|
||||
#include "Mixer.h"
|
||||
#include "GuiApplication.h"
|
||||
@@ -203,8 +204,8 @@ void vestigeInstrument::loadSettings( const QDomElement & _this )
|
||||
|
||||
if( !( knobFModel[ i ]->isAutomated() || knobFModel[ i ]->controllerConnection() ) )
|
||||
{
|
||||
knobFModel[ i ]->setValue( ( s_dumpValues.at( 2 )).toFloat() );
|
||||
knobFModel[ i ]->setInitValue( ( s_dumpValues.at( 2 )).toFloat() );
|
||||
knobFModel[ i ]->setValue(LocaleHelper::toFloat(s_dumpValues.at(2)));
|
||||
knobFModel[ i ]->setInitValue(LocaleHelper::toFloat(s_dumpValues.at(2)));
|
||||
}
|
||||
|
||||
connect( knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) );
|
||||
@@ -991,7 +992,7 @@ manageVestigeInstrumentView::manageVestigeInstrumentView( Instrument * _instrume
|
||||
if( !hasKnobModel )
|
||||
{
|
||||
sprintf( paramStr, "%d", i);
|
||||
m_vi->knobFModel[ i ] = new FloatModel( (s_dumpValues.at( 2 )).toFloat(),
|
||||
m_vi->knobFModel[ i ] = new FloatModel( LocaleHelper::toFloat(s_dumpValues.at(2)),
|
||||
0.0f, 1.0f, 0.01f, castModel<vestigeInstrument>(), tr( paramStr ) );
|
||||
}
|
||||
connect( m_vi->knobFModel[i], SIGNAL( dataChanged() ), this, SLOT( setParameter() ) );
|
||||
@@ -1052,7 +1053,7 @@ void manageVestigeInstrumentView::syncPlugin( void )
|
||||
{
|
||||
sprintf( paramStr, "param%d", i );
|
||||
s_dumpValues = dump[ paramStr ].split( ":" );
|
||||
f_value = ( s_dumpValues.at( 2 ) ).toFloat();
|
||||
f_value = LocaleHelper::toFloat(s_dumpValues.at(2));
|
||||
m_vi->knobFModel[ i ]->setAutomatedValue( f_value );
|
||||
m_vi->knobFModel[ i ]->setInitValue( f_value );
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
|
||||
#include "ConfigManager.h"
|
||||
#include "GuiApplication.h"
|
||||
#include "LocaleHelper.h"
|
||||
#include "MainWindow.h"
|
||||
#include "Mixer.h"
|
||||
#include "Song.h"
|
||||
@@ -299,7 +300,7 @@ void VstPlugin::setParameterDump( const QMap<QString, QString> & _pdump )
|
||||
{
|
||||
( *it ).section( ':', 0, 0 ).toInt(),
|
||||
"",
|
||||
( *it ).section( ':', 2, -1 ).toFloat()
|
||||
LocaleHelper::toFloat((*it).section(':', 2, -1))
|
||||
} ;
|
||||
m.addInt( item.index );
|
||||
m.addString( item.shortLabel );
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
// Include LMMS headers
|
||||
#include "lmmsconfig.h"
|
||||
#include "IoHelper.h"
|
||||
#include "LocaleHelper.h"
|
||||
|
||||
|
||||
struct XmlData
|
||||
@@ -228,14 +229,14 @@ int QtXmlWrapper::dosavefile(const char *filename,
|
||||
|
||||
void QtXmlWrapper::addpar(const std::string &name, int val)
|
||||
{
|
||||
d->addparams("par", 2, "name", name.c_str(), "value", stringFrom<int>(
|
||||
val).c_str());
|
||||
d->addparams("par", 2, "name", name.c_str(), "value",
|
||||
QString::number(val).toLocal8Bit().constData());
|
||||
}
|
||||
|
||||
void QtXmlWrapper::addparreal(const std::string &name, float val)
|
||||
{
|
||||
d->addparams("par_real", 2, "name", name.c_str(), "value",
|
||||
stringFrom<float>(val).c_str());
|
||||
QString::number(val, 'f').toLocal8Bit().constData());
|
||||
}
|
||||
|
||||
void QtXmlWrapper::addparbool(const std::string &name, int val)
|
||||
@@ -510,7 +511,7 @@ float QtXmlWrapper::getparreal(const char *name, float defaultpar) const
|
||||
return defaultpar;
|
||||
}
|
||||
|
||||
return QLocale().toFloat( tmp.attribute( "value" ) );
|
||||
return LocaleHelper::toFloat( tmp.attribute( "value" ) );
|
||||
}
|
||||
|
||||
float QtXmlWrapper::getparreal(const char *name,
|
||||
|
||||
Reference in New Issue
Block a user