bugfixes, new plugin "Vibed" and more
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@111 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
@@ -472,9 +472,10 @@ void arpAndChordsTabWidget::processNote( notePlayHandle * _n )
|
||||
|
||||
// now follows code for arpeggio
|
||||
|
||||
if( _n->baseNote() == FALSE || m_arpDirectionBtnGrp->value() == OFF ||
|
||||
!m_arpGroupBox->isActive() ||
|
||||
( _n->released() && _n->releaseFramesDone() >=
|
||||
if( _n->baseNote() == FALSE ||
|
||||
( m_arpDirectionBtnGrp->value() + 1) == OFF ||
|
||||
!m_arpGroupBox->isActive() ||
|
||||
( _n->released() && _n->releaseFramesDone() >=
|
||||
_n->actualReleaseFramesToDo() ) )
|
||||
{
|
||||
return;
|
||||
@@ -483,13 +484,13 @@ void arpAndChordsTabWidget::processNote( notePlayHandle * _n )
|
||||
|
||||
const int selected_arp = m_arpComboBox->value();
|
||||
|
||||
constNotePlayHandleVector cnphv = notePlayHandle::nphsOfChannelTrack(
|
||||
_n->getInstrumentTrack() );
|
||||
constNotePlayHandleVector cnphv = notePlayHandle::nphsOfInstrumentTrack(
|
||||
_n->getInstrumentTrack() );
|
||||
if( m_arpModeComboBox->value() != FREE && cnphv.size() == 0 )
|
||||
{
|
||||
// maybe we're playing only a preset-preview-note?
|
||||
cnphv = presetPreviewPlayHandle::nphsOfChannelTrack(
|
||||
_n->getInstrumentTrack() );
|
||||
cnphv = presetPreviewPlayHandle::nphsOfInstrumentTrack(
|
||||
_n->getInstrumentTrack() );
|
||||
if( cnphv.size() == 0 )
|
||||
{
|
||||
// still nothing found here, so lets return
|
||||
@@ -654,7 +655,7 @@ void arpAndChordsTabWidget::saveSettings( QDomDocument & _doc,
|
||||
_this.setAttribute( "arprange", m_arpRangeKnob->value() );
|
||||
_this.setAttribute( "arptime", m_arpTimeKnob->value() );
|
||||
_this.setAttribute( "arpgate", m_arpGateKnob->value() );
|
||||
_this.setAttribute( "arpdir", m_arpDirectionBtnGrp->value() );
|
||||
_this.setAttribute( "arpdir", m_arpDirectionBtnGrp->value() + 1 );
|
||||
_this.setAttribute( "arpsyncmode",
|
||||
( int ) m_arpTimeKnob->getSyncMode() );
|
||||
|
||||
@@ -675,14 +676,14 @@ void arpAndChordsTabWidget::loadSettings( const QDomElement & _this )
|
||||
m_arpTimeKnob->setValue( _this.attribute( "arptime" ).toFloat() );
|
||||
m_arpGateKnob->setValue( _this.attribute( "arpgate" ).toFloat() );
|
||||
m_arpDirectionBtnGrp->setInitValue(
|
||||
_this.attribute( "arpdir" ).toInt() );
|
||||
_this.attribute( "arpdir" ).toInt() - 1 );
|
||||
m_arpTimeKnob->setSyncMode(
|
||||
( tempoSyncKnob::tempoSyncMode ) _this.attribute(
|
||||
"arpsyncmode" ).toInt() );
|
||||
|
||||
m_arpModeComboBox->setValue( _this.attribute( "arpmode" ).toInt() );
|
||||
|
||||
m_arpGroupBox->setState( m_arpDirectionBtnGrp->value() != OFF &&
|
||||
m_arpGroupBox->setState( _this.attribute( "arpdir" ).toInt() != OFF &&
|
||||
!_this.attribute( "arpdisabled" ).toInt() );
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
#include "import_filter.h"
|
||||
#include "track_container.h"
|
||||
#include "project_journal.h"
|
||||
|
||||
#ifdef QT4
|
||||
|
||||
@@ -75,6 +76,10 @@ void importFilter::import( const QString & _file_to_import,
|
||||
#endif
|
||||
);
|
||||
|
||||
// do not record changes while importing files
|
||||
const bool j = _tc->eng()->getProjectJournal()->isJournalling();
|
||||
_tc->eng()->getProjectJournal()->setJournalling( FALSE );
|
||||
|
||||
for( vvector<plugin::descriptor>::iterator it = d.begin();
|
||||
it != d.end(); ++it )
|
||||
{
|
||||
@@ -93,6 +98,8 @@ void importFilter::import( const QString & _file_to_import,
|
||||
}
|
||||
}
|
||||
|
||||
_tc->eng()->getProjectJournal()->setJournalling( j );
|
||||
|
||||
delete[] s;
|
||||
|
||||
if( successful == FALSE )
|
||||
|
||||
@@ -348,7 +348,7 @@ int notePlayHandle::index( void ) const
|
||||
|
||||
|
||||
|
||||
constNotePlayHandleVector notePlayHandle::nphsOfChannelTrack(
|
||||
constNotePlayHandleVector notePlayHandle::nphsOfInstrumentTrack(
|
||||
const instrumentTrack * _it )
|
||||
{
|
||||
const playHandleVector & phv = _it->eng()->getMixer()->playHandles();
|
||||
|
||||
@@ -56,12 +56,15 @@ class previewTrackContainer : public trackContainer
|
||||
public:
|
||||
previewTrackContainer( engine * _engine ) :
|
||||
trackContainer( _engine ),
|
||||
m_previewChannelTrack( dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK,
|
||||
this ) )),
|
||||
m_previewInstrumentTrack( NULL ),
|
||||
m_previewNote( NULL ),
|
||||
m_dataMutex()
|
||||
{
|
||||
setJournalling( FALSE );
|
||||
m_previewInstrumentTrack = dynamic_cast<instrumentTrack *>(
|
||||
track::create( track::CHANNEL_TRACK,
|
||||
this ) );
|
||||
m_previewInstrumentTrack->setJournalling( FALSE );
|
||||
hide();
|
||||
}
|
||||
|
||||
@@ -81,9 +84,9 @@ public:
|
||||
return( "previewtc" );
|
||||
}
|
||||
|
||||
instrumentTrack * previewChannelTrack( void )
|
||||
instrumentTrack * previewInstrumentTrack( void )
|
||||
{
|
||||
return( m_previewChannelTrack );
|
||||
return( m_previewInstrumentTrack );
|
||||
}
|
||||
|
||||
notePlayHandle * previewNote( void )
|
||||
@@ -108,7 +111,7 @@ public:
|
||||
|
||||
|
||||
private:
|
||||
instrumentTrack * m_previewChannelTrack;
|
||||
instrumentTrack * m_previewInstrumentTrack;
|
||||
notePlayHandle * m_previewNote;
|
||||
QMutex m_dataMutex;
|
||||
|
||||
@@ -141,21 +144,21 @@ presetPreviewPlayHandle::presetPreviewPlayHandle(
|
||||
|
||||
|
||||
multimediaProject mmp( _preset_file );
|
||||
previewTC()->previewChannelTrack()->loadTrackSpecificSettings(
|
||||
printf("load track sp\n");
|
||||
previewTC()->previewInstrumentTrack()->loadTrackSpecificSettings(
|
||||
mmp.content().firstChild().toElement() );
|
||||
printf("here\n");
|
||||
|
||||
// make sure, our preset-preview-track does not appear in any MIDI-
|
||||
// devices list, so just disable receiving/sending MIDI-events at all
|
||||
previewTC()->previewChannelTrack()->m_midiPort->setMode(
|
||||
previewTC()->previewInstrumentTrack()->m_midiPort->setMode(
|
||||
midiPort::DUMMY );
|
||||
|
||||
// create temporary note
|
||||
note n();
|
||||
// create note-play-handle for it
|
||||
m_previewNote = new notePlayHandle( previewTC()->previewChannelTrack(),
|
||||
0, ~0,
|
||||
m_previewNote = new notePlayHandle(
|
||||
previewTC()->previewInstrumentTrack(), 0, ~0,
|
||||
note( NULL, 0, 0, static_cast<tones>( A ),
|
||||
static_cast<octaves>( DEFAULT_OCTAVE-1 ), 100 ) );
|
||||
static_cast<octaves>( DEFAULT_OCTAVE - 1 ), 100 ) );
|
||||
|
||||
|
||||
previewTC()->setPreviewNote( m_previewNote );
|
||||
@@ -210,7 +213,7 @@ void presetPreviewPlayHandle::cleanUp( engine * _engine )
|
||||
|
||||
|
||||
|
||||
constNotePlayHandleVector presetPreviewPlayHandle::nphsOfChannelTrack(
|
||||
constNotePlayHandleVector presetPreviewPlayHandle::nphsOfInstrumentTrack(
|
||||
const instrumentTrack * _it )
|
||||
{
|
||||
constNotePlayHandleVector cnphv;
|
||||
|
||||
@@ -1368,7 +1368,8 @@ void songEditor::clearProject( void )
|
||||
|
||||
eng()->getProjectNotes()->clear();
|
||||
|
||||
eng()->getProjectJournal()->clear();
|
||||
eng()->getProjectJournal()->clearInvalidJournallingObjects();
|
||||
eng()->getProjectJournal()->clearJournal();
|
||||
|
||||
eng()->getProjectJournal()->setJournalling( TRUE );
|
||||
}
|
||||
|
||||
@@ -595,7 +595,7 @@ trackContentWidget::~trackContentWidget()
|
||||
|
||||
|
||||
|
||||
trackContentObject * FASTCALL trackContentWidget::getTCO( csize _tco_num )
|
||||
trackContentObject * trackContentWidget::getTCO( csize _tco_num )
|
||||
{
|
||||
if( _tco_num < m_trackContentObjects.size() )
|
||||
{
|
||||
@@ -618,8 +618,7 @@ csize trackContentWidget::numOfTCOs( void )
|
||||
|
||||
|
||||
|
||||
trackContentObject * FASTCALL trackContentWidget::addTCO(
|
||||
trackContentObject * _tco )
|
||||
trackContentObject * trackContentWidget::addTCO( trackContentObject * _tco )
|
||||
{
|
||||
QMap<QString, QVariant> map;
|
||||
map["id"] = _tco->id();
|
||||
@@ -639,7 +638,7 @@ trackContentObject * FASTCALL trackContentWidget::addTCO(
|
||||
|
||||
|
||||
|
||||
void FASTCALL trackContentWidget::removeTCO( csize _tco_num, bool _also_delete )
|
||||
void trackContentWidget::removeTCO( csize _tco_num, bool _also_delete )
|
||||
{
|
||||
removeTCO( getTCO( _tco_num ), _also_delete );
|
||||
}
|
||||
@@ -661,10 +660,12 @@ void trackContentWidget::removeTCO( trackContentObject * _tco,
|
||||
map["id"] = _tco->id();
|
||||
map["state"] = mmp.toString();
|
||||
addJournalEntry( journalEntry( REMOVE_TCO, map ) );
|
||||
|
||||
if( _also_delete )
|
||||
{
|
||||
delete _tco;
|
||||
}
|
||||
|
||||
m_trackContentObjects.erase( it );
|
||||
getTrack()->eng()->getSongEditor()->setModified();
|
||||
}
|
||||
@@ -873,15 +874,16 @@ void trackContentWidget::undoStep( journalEntry & _je )
|
||||
case ADD_TCO:
|
||||
{
|
||||
QMap<QString, QVariant> map = _je.data().toMap();
|
||||
journallingObject * jo =
|
||||
eng()->getProjectJournal()->getJournallingObject( map["id"].toInt() );
|
||||
assert( jo != NULL );
|
||||
trackContentObject * tco =
|
||||
dynamic_cast<trackContentObject *>(
|
||||
eng()->getProjectJournal()->getJournallingObject( map["id"].toInt() ) );
|
||||
assert( tco != NULL );
|
||||
multimediaProject mmp(
|
||||
multimediaProject::JOURNAL_DATA );
|
||||
jo->saveState( mmp, mmp.content() );
|
||||
tco->saveState( mmp, mmp.content() );
|
||||
map["state"] = mmp.toString();
|
||||
_je.data() = map;
|
||||
delete jo;
|
||||
tco->close();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1141,6 +1143,7 @@ void trackOperationsWidget::muteBtnRightClicked( void )
|
||||
|
||||
trackWidget::trackWidget( track * _track, QWidget * _parent ) :
|
||||
QWidget( _parent ),
|
||||
journallingObject( _track->eng() ),
|
||||
m_track( _track ),
|
||||
m_trackOperationsWidget( this ),
|
||||
m_trackSettingsWidget( this ),
|
||||
@@ -1232,6 +1235,46 @@ void trackWidget::changePosition( const midiTime & _new_pos )
|
||||
|
||||
|
||||
|
||||
void trackWidget::undoStep( journalEntry & _je )
|
||||
{
|
||||
saveJournallingState( FALSE );
|
||||
switch( _je.actionID() )
|
||||
{
|
||||
case MOVE_TRACK:
|
||||
{
|
||||
trackContainer * tc = m_track->getTrackContainer();
|
||||
if( _je.data().toInt() > 0 )
|
||||
{
|
||||
tc->moveTrackUp( m_track );
|
||||
}
|
||||
else
|
||||
{
|
||||
tc->moveTrackDown( m_track );
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RESIZE_TRACK:
|
||||
setFixedHeight( tMax<int>( height() +
|
||||
_je.data().toInt(),
|
||||
MINIMAL_TRACK_HEIGHT ) );
|
||||
m_track->getTrackContainer()->realignTracks();
|
||||
break;
|
||||
}
|
||||
restoreJournallingState();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackWidget::redoStep( journalEntry & _je )
|
||||
{
|
||||
journalEntry je( _je.actionID(), -_je.data().toInt() );
|
||||
undoStep( je );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackWidget::dragEnterEvent( QDragEnterEvent * _dee )
|
||||
{
|
||||
stringPairDrag::processDragEnterEvent( _dee, "track_" +
|
||||
@@ -1320,6 +1363,7 @@ void trackWidget::mouseMoveEvent( QMouseEvent * _me )
|
||||
{
|
||||
tc->moveTrackDown( m_track );
|
||||
}
|
||||
addJournalEntry( journalEntry( MOVE_TRACK, _me->y() ) );
|
||||
}
|
||||
}
|
||||
else if( m_action == RESIZE_TRACK )
|
||||
@@ -1429,7 +1473,7 @@ track::~track()
|
||||
|
||||
|
||||
|
||||
track * FASTCALL track::create( trackTypes _tt, trackContainer * _tc )
|
||||
track * track::create( trackTypes _tt, trackContainer * _tc )
|
||||
{
|
||||
// while adding track, pause mixer for not getting into any trouble
|
||||
// because of track being not created completely so far
|
||||
@@ -1460,8 +1504,7 @@ track * FASTCALL track::create( trackTypes _tt, trackContainer * _tc )
|
||||
|
||||
|
||||
|
||||
track * FASTCALL track::create( const QDomElement & _this,
|
||||
trackContainer * _tc )
|
||||
track * track::create( const QDomElement & _this, trackContainer * _tc )
|
||||
{
|
||||
track * t = create( static_cast<trackTypes>( _this.attribute(
|
||||
"type" ).toInt() ), _tc );
|
||||
@@ -1472,7 +1515,7 @@ track * FASTCALL track::create( const QDomElement & _this,
|
||||
|
||||
|
||||
|
||||
track * FASTCALL track::clone( track * _track )
|
||||
track * track::clone( track * _track )
|
||||
{
|
||||
QDomDocument doc;
|
||||
QDomElement parent = doc.createElement( "clone" );
|
||||
@@ -1492,7 +1535,7 @@ tact track::length( void ) const
|
||||
|
||||
|
||||
|
||||
void FASTCALL track::saveSettings( QDomDocument & _doc, QDomElement & _this )
|
||||
void track::saveSettings( QDomDocument & _doc, QDomElement & _this )
|
||||
{
|
||||
csize num_of_tcos = getTrackContentWidget()->numOfTCOs();
|
||||
|
||||
@@ -1518,7 +1561,7 @@ void FASTCALL track::saveSettings( QDomDocument & _doc, QDomElement & _this )
|
||||
|
||||
|
||||
|
||||
void FASTCALL track::loadSettings( const QDomElement & _this )
|
||||
void track::loadSettings( const QDomElement & _this )
|
||||
{
|
||||
if( _this.attribute( "type" ).toInt() != type() )
|
||||
{
|
||||
@@ -1550,7 +1593,11 @@ void FASTCALL track::loadSettings( const QDomElement & _this )
|
||||
trackContentObject * tco = createTCO(
|
||||
midiTime( 0 ) );
|
||||
tco->restoreState( node.toElement() );
|
||||
getTrackContentWidget()->saveJournallingState(
|
||||
FALSE );
|
||||
addTCO( tco );
|
||||
getTrackContentWidget()->
|
||||
restoreJournallingState();
|
||||
}
|
||||
}
|
||||
node = node.nextSibling();
|
||||
@@ -1566,7 +1613,7 @@ void FASTCALL track::loadSettings( const QDomElement & _this )
|
||||
|
||||
|
||||
|
||||
trackContentObject * FASTCALL track::addTCO( trackContentObject * _tco )
|
||||
trackContentObject * track::addTCO( trackContentObject * _tco )
|
||||
{
|
||||
return( getTrackContentWidget()->addTCO( _tco ) );
|
||||
}
|
||||
@@ -1574,7 +1621,7 @@ trackContentObject * FASTCALL track::addTCO( trackContentObject * _tco )
|
||||
|
||||
|
||||
|
||||
void FASTCALL track::removeTCO( csize _tco_num )
|
||||
void track::removeTCO( csize _tco_num )
|
||||
{
|
||||
getTrackContentWidget()->removeTCO( _tco_num );
|
||||
}
|
||||
@@ -1590,7 +1637,7 @@ csize track::numOfTCOs( void )
|
||||
|
||||
|
||||
|
||||
trackContentObject * FASTCALL track::getTCO( csize _tco_num )
|
||||
trackContentObject * track::getTCO( csize _tco_num )
|
||||
{
|
||||
return( getTrackContentWidget()->getTCO( _tco_num ) );
|
||||
|
||||
@@ -1599,7 +1646,7 @@ trackContentObject * FASTCALL track::getTCO( csize _tco_num )
|
||||
|
||||
|
||||
|
||||
csize FASTCALL track::getTCONum( trackContentObject * _tco )
|
||||
csize track::getTCONum( trackContentObject * _tco )
|
||||
{
|
||||
for( csize i = 0; i < getTrackContentWidget()->numOfTCOs(); ++i )
|
||||
{
|
||||
@@ -1608,16 +1655,14 @@ csize FASTCALL track::getTCONum( trackContentObject * _tco )
|
||||
return( i );
|
||||
}
|
||||
}
|
||||
#ifdef LMMS_DEBUG
|
||||
qFatal( "track::getTCONum(...) -> _tco not found!\n" );
|
||||
#endif
|
||||
qWarning( "track::getTCONum(...) -> _tco not found!\n" );
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void FASTCALL track::getTCOsInRange( vlist<trackContentObject *> & _tco_v,
|
||||
void track::getTCOsInRange( vlist<trackContentObject *> & _tco_v,
|
||||
const midiTime & _start,
|
||||
const midiTime & _end )
|
||||
{
|
||||
@@ -1655,7 +1700,7 @@ void FASTCALL track::getTCOsInRange( vlist<trackContentObject *> & _tco_v,
|
||||
|
||||
|
||||
|
||||
void FASTCALL track::swapPositionOfTCOs( csize _tco_num1, csize _tco_num2 )
|
||||
void track::swapPositionOfTCOs( csize _tco_num1, csize _tco_num2 )
|
||||
{
|
||||
getTrackContentWidget()->swapPositionOfTCOs( _tco_num1, _tco_num2 );
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
#include "import_filter.h"
|
||||
#include "instrument.h"
|
||||
#include "rubberband.h"
|
||||
#include "project_journal.h"
|
||||
|
||||
|
||||
|
||||
@@ -202,6 +203,10 @@ void trackContainer::cloneTrack( track * _track )
|
||||
|
||||
void trackContainer::addTrack( track * _track )
|
||||
{
|
||||
QMap<QString, QVariant> map;
|
||||
map["id"] = _track->id();
|
||||
addJournalEntry( journalEntry( ADD_TRACK, map ) );
|
||||
|
||||
m_trackWidgets.push_back( _track->getTrackWidget() );
|
||||
#ifndef QT4
|
||||
m_scrollArea->addChild( _track->getTrackWidget() );
|
||||
@@ -221,6 +226,13 @@ void trackContainer::removeTrack( track * _track )
|
||||
m_trackWidgets.end(), _track->getTrackWidget() );
|
||||
if( it != m_trackWidgets.end() )
|
||||
{
|
||||
QMap<QString, QVariant> map;
|
||||
multimediaProject mmp( multimediaProject::JOURNAL_DATA );
|
||||
_track->saveState( mmp, mmp.content() );
|
||||
map["id"] = _track->id();
|
||||
map["state"] = mmp.toString();
|
||||
addJournalEntry( journalEntry( REMOVE_TRACK, map ) );
|
||||
|
||||
eng()->getMixer()->pause();
|
||||
#ifndef QT4
|
||||
m_scrollArea->removeChild( _track->getTrackWidget() );
|
||||
@@ -417,6 +429,60 @@ void trackContainer::setPixelsPerTact( Uint16 _ppt )
|
||||
|
||||
|
||||
|
||||
void trackContainer::undoStep( journalEntry & _je )
|
||||
{
|
||||
saveJournallingState( FALSE );
|
||||
switch( _je.actionID() )
|
||||
{
|
||||
case ADD_TRACK:
|
||||
{
|
||||
QMap<QString, QVariant> map = _je.data().toMap();
|
||||
track * tr =
|
||||
dynamic_cast<track *>(
|
||||
eng()->getProjectJournal()->getJournallingObject( map["id"].toInt() ) );
|
||||
assert( tr != NULL );
|
||||
multimediaProject mmp(
|
||||
multimediaProject::JOURNAL_DATA );
|
||||
tr->saveState( mmp, mmp.content() );
|
||||
map["state"] = mmp.toString();
|
||||
_je.data() = map;
|
||||
removeTrack( tr );
|
||||
break;
|
||||
}
|
||||
|
||||
case REMOVE_TRACK:
|
||||
{
|
||||
multimediaProject mmp(
|
||||
_je.data().toMap()["state"].toString(), FALSE );
|
||||
track::create( mmp.content().firstChild().toElement(),
|
||||
this );
|
||||
break;
|
||||
}
|
||||
}
|
||||
restoreJournallingState();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackContainer::redoStep( journalEntry & _je )
|
||||
{
|
||||
switch( _je.actionID() )
|
||||
{
|
||||
case ADD_TRACK:
|
||||
case REMOVE_TRACK:
|
||||
_je.actionID() = ( _je.actionID() == ADD_TRACK ) ?
|
||||
REMOVE_TRACK : ADD_TRACK;
|
||||
undoStep( _je );
|
||||
_je.actionID() = ( _je.actionID() == ADD_TRACK ) ?
|
||||
REMOVE_TRACK : ADD_TRACK;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void trackContainer::dragEnterEvent( QDragEnterEvent * _dee )
|
||||
{
|
||||
stringPairDrag::processDragEnterEvent( _dee,
|
||||
|
||||
@@ -69,6 +69,7 @@ journallingObject::~journallingObject()
|
||||
|
||||
void journallingObject::undo( void )
|
||||
{
|
||||
printf("undo: %d\n", id() );
|
||||
if( m_journalEntries.empty() == TRUE )
|
||||
{
|
||||
return;
|
||||
@@ -85,6 +86,7 @@ void journallingObject::undo( void )
|
||||
|
||||
void journallingObject::redo( void )
|
||||
{
|
||||
printf("undo: %d\n", id() );
|
||||
if( m_journalEntries.empty() == TRUE )
|
||||
{
|
||||
return;
|
||||
@@ -103,9 +105,9 @@ QDomElement journallingObject::saveState( QDomDocument & _doc,
|
||||
QDomElement & _parent )
|
||||
{
|
||||
QDomElement _this = _doc.createElement( nodeName() );
|
||||
_parent.appendChild( _this );
|
||||
saveSettings( _doc, _this );
|
||||
saveJournal( _doc, _this );
|
||||
_parent.appendChild( _this );
|
||||
return( _this );
|
||||
}
|
||||
|
||||
@@ -115,7 +117,11 @@ QDomElement journallingObject::saveState( QDomDocument & _doc,
|
||||
void journallingObject::restoreState( const QDomElement & _this )
|
||||
{
|
||||
saveJournallingState( FALSE );
|
||||
|
||||
// load actual settings
|
||||
loadSettings( _this );
|
||||
|
||||
// search for journal-node
|
||||
QDomNode node = _this.firstChild();
|
||||
while( !node.isNull() )
|
||||
{
|
||||
@@ -125,13 +131,14 @@ void journallingObject::restoreState( const QDomElement & _this )
|
||||
}
|
||||
node = node.nextSibling();
|
||||
}
|
||||
|
||||
restoreJournallingState();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void journallingObject::addJournalEntry( const journalEntry & _edit_step )
|
||||
void journallingObject::addJournalEntry( const journalEntry & _je )
|
||||
{
|
||||
if( !( eng() == NULL ||
|
||||
eng()->getProjectJournal()->isJournalling() == FALSE ||
|
||||
@@ -139,7 +146,7 @@ void journallingObject::addJournalEntry( const journalEntry & _edit_step )
|
||||
{
|
||||
m_journalEntries.erase( m_currentJournalEntry,
|
||||
m_journalEntries.end() );
|
||||
m_journalEntries.push_back( _edit_step );
|
||||
m_journalEntries.push_back( _je );
|
||||
m_currentJournalEntry = m_journalEntries.end();
|
||||
eng()->getProjectJournal()->journalEntryAdded( id() );
|
||||
}
|
||||
|
||||
@@ -152,10 +152,8 @@ multimediaProject::multimediaProject( const QString & _in_file_name,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QDomElement root = documentElement();
|
||||
m_type = type( root.attribute( "type" ) );
|
||||
|
||||
QDomNode node = root.firstChild();
|
||||
while( !node.isNull() )
|
||||
{
|
||||
@@ -308,7 +306,10 @@ QString multimediaProject::typeName( projectTypes _project_type )
|
||||
{
|
||||
if( _project_type >= UNKNOWN && _project_type < PROJ_TYPE_COUNT )
|
||||
{
|
||||
return( s_types[_project_type].m_name );
|
||||
return( s_types[_project_type].m_name
|
||||
#warning compat-code, remove in 0.3.0
|
||||
.section( ',', 0, 0 )
|
||||
);
|
||||
}
|
||||
return( s_types[UNKNOWN].m_name );
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@ void projectJournal::redo( void )
|
||||
|
||||
journallingObject * jo;
|
||||
|
||||
printf("%d\n", m_joIDs[*(m_currentJournalEntry+1)] );
|
||||
if( m_currentJournalEntry < m_journalEntries.end() &&
|
||||
( jo = m_joIDs[*m_currentJournalEntry++] ) != NULL )
|
||||
{
|
||||
@@ -97,7 +98,7 @@ void projectJournal::journalEntryAdded( const jo_id_t _id )
|
||||
m_journalEntries.push_back( _id );
|
||||
m_currentJournalEntry = m_journalEntries.end();
|
||||
eng()->getSongEditor()->setModified();
|
||||
printf("history size:%d\n", m_journalEntries.size());
|
||||
printf("history size: %d\n", m_journalEntries.size() );
|
||||
}
|
||||
|
||||
|
||||
@@ -122,7 +123,7 @@ jo_id_t projectJournal::allocID( journallingObject * _obj )
|
||||
|
||||
void projectJournal::reallocID( const jo_id_t _id, journallingObject * _obj )
|
||||
{
|
||||
//printf("realloc %d %d\n", _id, _obj);
|
||||
//printf("realloc %d %d\n", _id, _obj );
|
||||
if( m_joIDs.contains( _id ) )
|
||||
{
|
||||
m_joIDs[_id] = _obj;
|
||||
@@ -134,6 +135,7 @@ void projectJournal::reallocID( const jo_id_t _id, journallingObject * _obj )
|
||||
|
||||
void projectJournal::forgetAboutID( const jo_id_t _id )
|
||||
{
|
||||
printf("forget about %d\n", _id );
|
||||
journalEntryVector::iterator it;
|
||||
while( ( it = qFind( m_journalEntries.begin(), m_journalEntries.end(),
|
||||
_id ) ) != m_journalEntries.end() )
|
||||
@@ -150,12 +152,22 @@ void projectJournal::forgetAboutID( const jo_id_t _id )
|
||||
|
||||
|
||||
|
||||
void projectJournal::clear( void )
|
||||
void projectJournal::clearInvalidJournallingObjects( void )
|
||||
{
|
||||
while( m_joIDs.size() )
|
||||
vlist<journallingObject *>::const_iterator it;
|
||||
for( joIDMap::iterator it = m_joIDs.begin(); it != m_joIDs.end(); )
|
||||
{
|
||||
forgetAboutID( m_joIDs.keys().front() );
|
||||
if( it.data() == NULL )
|
||||
{
|
||||
forgetAboutID( it.key() );
|
||||
it = m_joIDs.begin();
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
}
|
||||
//clearJournal();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -357,7 +357,8 @@ bool FASTCALL bbTrack::play( const midiTime & _start,
|
||||
{
|
||||
if( _tco_num >= 0 )
|
||||
{
|
||||
return( eng()->getBBEditor()->play( _start, _start_frame, _frames,
|
||||
return( eng()->getBBEditor()->play( _start, _start_frame,
|
||||
_frames,
|
||||
_frame_base,
|
||||
s_infoMap[this] ) );
|
||||
}
|
||||
@@ -424,7 +425,8 @@ void bbTrack::saveTrackSpecificSettings( QDomDocument & _doc,
|
||||
/* _this.setAttribute( "current", s_infoMap[this] ==
|
||||
eng()->getBBEditor()->currentBB() );*/
|
||||
if( s_infoMap[this] == 0 &&
|
||||
_this.parentNode().nodeName() != "clone" )
|
||||
_this.parentNode().nodeName() != "clone" &&
|
||||
_this.parentNode().nodeName() != "journaldata" )
|
||||
{
|
||||
eng()->getBBEditor()->saveState( _doc, _this );
|
||||
}
|
||||
|
||||
@@ -415,7 +415,9 @@ void instrumentTrack::saveSettingsBtnClicked( void )
|
||||
{
|
||||
multimediaProject mmp(
|
||||
multimediaProject::INSTRUMENT_TRACK_SETTINGS );
|
||||
saveTrackSpecificSettings( mmp, mmp.content() );
|
||||
QDomElement _this = mmp.createElement( nodeName() );
|
||||
saveTrackSpecificSettings( mmp, _this );
|
||||
mmp.content().appendChild( _this );
|
||||
#ifdef QT4
|
||||
mmp.writeFile( sfd.selectedFiles()[0] );
|
||||
#else
|
||||
|
||||
@@ -419,7 +419,7 @@ void pattern::saveSettings( QDomDocument & _doc, QDomElement & _this )
|
||||
// pattern, we must not store actual position, instead we store -1
|
||||
// which tells loadSettings() not to mess around with position
|
||||
if( _this.parentNode().nodeName() == "clipboard" ||
|
||||
_this.parentNode().nodeName() == "dnddata" )
|
||||
_this.parentNode().nodeName() == "dnddata" )
|
||||
{
|
||||
_this.setAttribute( "pos", -1 );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user