From 86b005648800285e474d479c645ddcf9aac26661 Mon Sep 17 00:00:00 2001 From: Achim Settelmeier Date: Sun, 31 May 2009 22:51:42 +0200 Subject: [PATCH] En-/disable loop points via MidiControlListener MidiControlListener's toggleLoop action makes the song object emit a loopPointsChanged signal, which timeLine connects to and enables or disables the loop points accordingly. Signed-off-by: Tobias Doerffel --- include/midi_control_listener.h | 7 +++++-- include/song.h | 8 ++++++-- src/core/midi/midi_control_listener.cpp | 21 ++++++++++++++++++++- src/core/timeline.cpp | 4 ++++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/include/midi_control_listener.h b/include/midi_control_listener.h index 63a1a6d38..3f2eb2843 100644 --- a/include/midi_control_listener.h +++ b/include/midi_control_listener.h @@ -44,9 +44,12 @@ public: ActionNone = 0, ActionControl, ActionPlay, - ActionStop + ActionStop, + ActionToggleLoop, + ActionJumpToLoopStart, + ActionJumpToLoopEnd } EventAction; - static const int numActions = 4; + static const int numActions = 7; typedef QMap ActionMap; diff --git a/include/song.h b/include/song.h index 3544c5fde..47bd0d9f0 100644 --- a/include/song.h +++ b/include/song.h @@ -192,7 +192,11 @@ public: return m_timeSigModel; } - + inline void toggleLoopPoints( int _mode ) + { + emit loopPointsChanged( _mode ); + } + public slots: void play( void ); void record( void ); @@ -316,7 +320,7 @@ signals: void tempoChanged( bpm_t _new_bpm ); void timeSignatureChanged( int _old_ticks_per_tact, int _ticks_per_tact ); - + void loopPointsChanged( int _mode ); } ; diff --git a/src/core/midi/midi_control_listener.cpp b/src/core/midi/midi_control_listener.cpp index 22939d953..91edd2282 100644 --- a/src/core/midi/midi_control_listener.cpp +++ b/src/core/midi/midi_control_listener.cpp @@ -36,6 +36,7 @@ #include "engine.h" #include "note.h" #include "song.h" +#include "timeline.h" #include "config_mgr.h" const QString MidiControlListener::configClass = "MidiControlListener"; @@ -46,7 +47,10 @@ const MidiControlListener::ActionNameMap MidiControlListener::actionNames[] = { MidiControlListener::ActionNone, "", "" }, { MidiControlListener::ActionControl, "Control key", "control" }, { MidiControlListener::ActionPlay, "Play", "play" }, - { MidiControlListener::ActionStop, "Stop", "stop" } + { MidiControlListener::ActionStop, "Stop", "stop" }, + { MidiControlListener::ActionToggleLoop, "Toggle loop", "toggleLoop" }, + { MidiControlListener::ActionJumpToLoopStart, "Jump to loop start", "jumpToLoopStart" }, + { MidiControlListener::ActionJumpToLoopEnd, "Jump to loop end", "jumpToLoopEnd" } }; @@ -152,6 +156,7 @@ void MidiControlListener::processInEvent( const midiEvent & _me, void MidiControlListener::act( EventAction _action ) { + timeLine * tl = engine::getSong()->getPlayPos( song::Mode_PlaySong ).m_timeLine; switch( _action ) { case ActionNone: @@ -164,6 +169,20 @@ void MidiControlListener::act( EventAction _action ) case ActionStop: engine::getSong()->stop(); break; + case ActionToggleLoop: + if( tl->loopPointsEnabled() ) + { + engine::getSong()->toggleLoopPoints( timeLine::LoopPointsDisabled ); + } + else + { + engine::getSong()->toggleLoopPoints( timeLine::LoopPointsEnabled ); + } + break; + case ActionJumpToLoopStart: + break; + case ActionJumpToLoopEnd: + break; } } diff --git a/src/core/timeline.cpp b/src/core/timeline.cpp index 4dec88463..4ed3a14a6 100644 --- a/src/core/timeline.cpp +++ b/src/core/timeline.cpp @@ -131,6 +131,10 @@ void timeLine::addToolButtons( QWidget * _tool_bar ) SLOT( toggleLoopPoints( int ) ) ); connect( this, SIGNAL( loopPointStateLoaded( int ) ), loopPoints, SLOT( changeState( int ) ) ); + connect( engine::getSong(), SIGNAL( loopPointsChanged( int ) ), this, + SLOT( toggleLoopPoints( int ) ) ); + connect( engine::getSong(), SIGNAL( loopPointsChanged( int ) ), + loopPoints, SLOT( changeState( int ) ) ); nStateButton * behaviourAtStop = new nStateButton( _tool_bar ); behaviourAtStop->addState( embed::getIconPixmap( "back_to_zero" ),