Split journal ID range between new and loaded elements

This commit is contained in:
Javier Serrano Polo
2016-06-26 02:43:52 +02:00
parent 01e9ebc9cf
commit f97b431c8d
5 changed files with 19 additions and 7 deletions

View File

@@ -76,6 +76,8 @@ public:
reallocID( _id, NULL );
}
static jo_id_t idToSave( jo_id_t id );
void clearJournal();
void stopAllJournalling();
JournallingObject * journallingObject( const jo_id_t _id )

View File

@@ -29,7 +29,7 @@
#include <QMainWindow>
#include <QCloseEvent>
#include "JournallingObject.h"
#include "SerializingObject.h"
class QAction;
class QComboBox;

View File

@@ -28,6 +28,7 @@
#include "ControllerConnection.h"
#include "lmms_math.h"
#include "Mixer.h"
#include "ProjectJournal.h"
float AutomatableModel::s_copiedValue = 0;
long AutomatableModel::s_periodCounter = 0;
@@ -98,7 +99,7 @@ void AutomatableModel::saveSettings( QDomDocument& doc, QDomElement& element, co
// scale type also needs an extra value
// => it must be appended as a node
QDomElement me = doc.createElement( name );
me.setAttribute( "id", id() );
me.setAttribute( "id", ProjectJournal::idToSave( id() ) );
me.setAttribute( "value", m_value );
me.setAttribute( "scale_type", m_scaleType == Logarithmic ? "log" : "linear" );
element.appendChild( me );

View File

@@ -535,7 +535,8 @@ void AutomationPattern::saveSettings( QDomDocument & _doc, QDomElement & _this )
if( *it )
{
QDomElement element = _doc.createElement( "object" );
element.setAttribute( "id", ( *it )->id() );
element.setAttribute( "id",
ProjectJournal::idToSave( ( *it )->id() ) );
_this.appendChild( element );
}
}

View File

@@ -29,6 +29,8 @@
#include "JournallingObject.h"
#include "Song.h"
static const int EO_ID_MSB = 1 << 23;
const int ProjectJournal::MAX_UNDO_STATES = 100; // TODO: make this configurable in settings
ProjectJournal::ProjectJournal() :
@@ -131,11 +133,9 @@ void ProjectJournal::addJournalCheckPoint( JournallingObject *jo )
jo_id_t ProjectJournal::allocID( JournallingObject * _obj )
{
const jo_id_t EO_ID_MAX = (1 << 23)-1;
jo_id_t id;
while( m_joIDs.contains( id =
static_cast<jo_id_t>( (jo_id_t)rand()*(jo_id_t)rand() %
EO_ID_MAX ) ) )
for( jo_id_t tid = rand(); m_joIDs.contains( id = tid % EO_ID_MSB
| EO_ID_MSB ); tid++ )
{
}
@@ -159,6 +159,14 @@ void ProjectJournal::reallocID( const jo_id_t _id, JournallingObject * _obj )
jo_id_t ProjectJournal::idToSave( jo_id_t id )
{
return id & ~EO_ID_MSB;
}
void ProjectJournal::clearJournal()
{
m_undoCheckPoints.clear();