Pan automation work. Almost, but not quite, working.
[ardour.git] / libs / ardour / session_events.cc
index c9b433968641061f06af6f9ee2b363a8b0b94c5a..35c1019c0e43cb11ce6906b8be920a34b2e2216f 100644 (file)
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #include <cmath>
 
 #include <ardour/ardour.h>
 #include <ardour/session.h>
-#include <ardour/diskstream.h>
+#include <ardour/audio_diskstream.h>
 
 #include "i18n.h"
 
 using namespace ARDOUR;
-//using namespace sigc;
+using namespace PBD;
 
 MultiAllocSingleReleasePool Session::Event::pool ("event", sizeof (Session::Event), 512);
 
@@ -59,21 +58,21 @@ static const char* event_names[] = {
 };
 
 void
-Session::add_event (jack_nframes_t frame, Event::Type type, jack_nframes_t target_frame)
+Session::add_event (nframes_t frame, Event::Type type, nframes_t target_frame)
 {
        Event* ev = new Event (type, Event::Add, frame, target_frame, 0);
        queue_event (ev);
 }
 
 void
-Session::remove_event (jack_nframes_t frame, Event::Type type)
+Session::remove_event (nframes_t frame, Event::Type type)
 {
        Event* ev = new Event (type, Event::Remove, frame, 0, 0);
        queue_event (ev);
 }
 
 void
-Session::replace_event (Event::Type type, jack_nframes_t frame, jack_nframes_t target)
+Session::replace_event (Event::Type type, nframes_t frame, nframes_t target)
 {
        Event* ev = new Event (type, Event::Replace, frame, target, 0);
        queue_event (ev);
@@ -305,16 +304,29 @@ Session::process_event (Event* ev)
        */
 
        if (non_realtime_work_pending()) {
-               immediate_events.insert (immediate_events.end(), ev);
-               _remove_event (ev);
-               return;
+               
+               /* except locates, which we have the capability to handle */
+
+               if (ev->type != Event::Locate) {
+                       immediate_events.insert (immediate_events.end(), ev);
+                       _remove_event (ev);
+                       return;
+               }
        }
 
        //printf("Processing event: %s\n", event_names[ev->type]);
 
        switch (ev->type) {
        case Event::SetLoop:
-               set_auto_loop (ev->yes_or_no);
+               set_play_loop (ev->yes_or_no);
+               break;
+
+       case Event::AutoLoop:
+               if (play_loop) {
+                       start_locate (ev->target_frame, true, false, Config->get_seamless_loop());
+               }
+               remove = false;
+               del = false;
                break;
 
        case Event::Locate:
@@ -345,7 +357,7 @@ Session::process_event (Event* ev)
                
        case Event::PunchIn:
                // cerr << "PunchIN at " << transport_frame() << endl;
-               if (punch_in && record_status() == Enabled) {
+               if (Config->get_punch_in() && record_status() == Enabled) {
                        enable_record ();
                }
                remove = false;
@@ -354,7 +366,7 @@ Session::process_event (Event* ev)
                
        case Event::PunchOut:
                // cerr << "PunchOUT at " << transport_frame() << endl;
-               if (punch_out) {
+               if (Config->get_punch_out()) {
                        step_back_from_record ();
                }
                remove = false;
@@ -384,28 +396,20 @@ Session::process_event (Event* ev)
                del = false;
                break;
 
-       case Event::AutoLoop:
-               if (auto_loop) {
-                       start_locate (ev->target_frame, true, false, seamless_loop);
-               }
-               remove = false;
-               del = false;
-               break;
-
        case Event::Overwrite:
-               overwrite_some_buffers (static_cast<DiskStream*>(ev->ptr));
+               overwrite_some_buffers (static_cast<AudioDiskstream*>(ev->ptr));
                break;
 
        case Event::SetDiskstreamSpeed:
-               set_diskstream_speed (static_cast<DiskStream*> (ev->ptr), ev->speed);
+               set_diskstream_speed (static_cast<Diskstream*> (ev->ptr), ev->speed);
                break;
 
        case Event::SetSlaveSource:
-               set_slave_source (ev->slave, ev->target_frame);
+               set_slave_source (ev->slave);
                break;
 
        case Event::Audition:
-               set_audition (static_cast<AudioRegion*> (ev->ptr));
+               set_audition (ev->region);
                break;
 
        case Event::InputConfigurationChange: