diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 64cfeb718..45abfd932 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -70,6 +70,7 @@ public: virtual void saveSettings(QDomDocument & doc, QDomElement & parent); virtual void loadSettings(const QDomElement & parent); + QString nodeName() const { return "automationeditor"; @@ -262,6 +263,9 @@ public: void setCurrentPattern(AutomationPattern* pattern); const AutomationPattern* currentPattern(); + virtual void dropEvent( QDropEvent * _de ); + virtual void dragEnterEvent( QDragEnterEvent * _dee ); + void open(AutomationPattern* pattern); AutomationEditor* m_editor; diff --git a/include/AutomationTrack.h b/include/AutomationTrack.h index b8d3da38d..f805f1344 100644 --- a/include/AutomationTrack.h +++ b/include/AutomationTrack.h @@ -52,6 +52,7 @@ public: QDomElement & _parent ); virtual void loadTrackSpecificSettings( const QDomElement & _this ); + private: friend class AutomationTrackView; diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index f839eb5a6..4558ff7f0 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -64,6 +64,8 @@ #include "PianoRoll.h" #include "debug.h" #include "MeterModel.h" +#include "StringPairDrag.h" +#include "ProjectJournal.h" QPixmap * AutomationEditor::s_toolDraw = NULL; @@ -239,6 +241,7 @@ void AutomationEditor::loadSettings( const QDomElement & dom_parent) + // qproperty access methods QColor AutomationEditor::gridColor() const @@ -2220,6 +2223,7 @@ AutomationEditorWindow::AutomationEditorWindow() : setFocusPolicy( Qt::StrongFocus ); setFocus(); setWindowIcon( embed::getIconPixmap( "automation" ) ); + setAcceptDrops( true ); } @@ -2282,6 +2286,35 @@ const AutomationPattern* AutomationEditorWindow::currentPattern() return m_editor->currentPattern(); } +void AutomationEditorWindow::dropEvent(QDropEvent *_de) +{ + QString type = StringPairDrag::decodeKey( _de ); + QString val = StringPairDrag::decodeValue( _de ); + if( type == "automatable_model" ) + { + AutomatableModel * mod = dynamic_cast( + Engine::projectJournal()-> + journallingObject( val.toInt() ) ); + if( mod != NULL ) + { + if( m_editor->m_pattern->firstObject() ) + { + m_editor->m_pattern->objectDestroyed( m_editor->m_pattern->firstObject()->id() ); + } + m_editor->m_pattern->addObject( mod ); + setCurrentPattern( m_editor->m_pattern ); + + } + } + + update(); +} + +void AutomationEditorWindow::dragEnterEvent(QDragEnterEvent *_dee) +{ + StringPairDrag::processDragEnterEvent( _dee, "automatable_model" ); +} + void AutomationEditorWindow::open(AutomationPattern* pattern) { setCurrentPattern(pattern); diff --git a/src/tracks/AutomationTrack.cpp b/src/tracks/AutomationTrack.cpp index 2b397862d..1b552aba3 100644 --- a/src/tracks/AutomationTrack.cpp +++ b/src/tracks/AutomationTrack.cpp @@ -127,6 +127,7 @@ void AutomationTrack::loadTrackSpecificSettings( const QDomElement & _this ) + AutomationTrackView::AutomationTrackView( AutomationTrack * _at, TrackContainerView* tcv ) : TrackView( _at, tcv ) {