update drobilla's fascistic dir-locals.el to force emacs users into whitespace submis...
[ardour.git] / gtk2_ardour / editor_imageframe.cc
index a2606175dfb7b0e76a196e0ee6773830890fbc2b..752e43a5859fa49e6716be8d70241e17d24bb63e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2000-2003 Paul Davis 
+    Copyright (C) 2000-2003 Paul Davis
     Written by Colin Law, CMT, Glasgow
 
     This program is free software; you can redistribute it and/or modify
@@ -16,7 +16,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #include "imageframe_view.h"
@@ -31,7 +30,7 @@
 #include "canvas_impl.h"
 
 #include <gtkmm2ext/gtk_ui.h>
-#include <pbd/error.h>
+#include "pbd/error.h"
 
 #include <sys/types.h>
 #include <sys/socket.h>
 #include "imageframe_socket_handler.h"
 #include "ardour_image_compositor_socket.h"
 #include "public_editor.h"
+#include "gui_thread.h"
 
 using namespace Gtk;
 using namespace PBD;
+using namespace std;
+
+TimeAxisView*
+Editor::get_named_time_axis(const string & name)
+{
+       TimeAxisView* tav = 0 ;
+
+       for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i)
+       {
+               if (((TimeAxisView*)*i)->name() == name)
+               {
+                       tav = ((TimeAxisView*)*i) ;
+                       break ;
+               }
+       }
+       return(tav) ;
+}
 
 /* <CMT Additions file="editor.cc"> */
 
@@ -58,7 +75,7 @@ Editor::add_imageframe_time_axis(const string & track_name, void* src)
        }
        else
        {
-               Gtkmm2ext::UI::instance()->call_slot(bind(mem_fun(*this, &Editor::handle_new_imageframe_time_axis_view),track_name, src)) ;
+               Gtkmm2ext::UI::instance()->call_slot (boost::bind (&Editor::handle_new_imageframe_time_axis_view, this,track_name, src));
        }
 }
 
@@ -69,7 +86,7 @@ Editor::connect_to_image_compositor()
        {
                image_socket_listener = ImageFrameSocketHandler::create_instance(*this) ;
        }
-       
+
        if(image_socket_listener->is_connected() == true)
        {
                return ;
@@ -77,16 +94,16 @@ Editor::connect_to_image_compositor()
 
        // XXX should really put this somewhere safe
        const char * host_ip = "127.0.0.1" ;
-       
+
        bool retcode = image_socket_listener->connect(host_ip, ardourvis::DEFAULT_PORT) ;
-       
+
        if(retcode == false)
        {
                // XXX need to get some return status here
                warning << "Image Compositor Connection attempt failed" << std::endl ;
                return ;
        }
-       
+
        // add the socket to the gui loop, and keep the retuned tag value of the input
        gint tag = gdk_input_add(image_socket_listener->get_socket_descriptor(), GDK_INPUT_READ,ImageFrameSocketHandler::image_socket_callback,image_socket_listener) ;
        image_socket_listener->set_gdk_input_tag(tag) ;
@@ -96,38 +113,38 @@ void
 Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item)
 {
        // GTK2FIX
-       //nframes_t offset = static_cast<nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
-       nframes_t offset = 0;
+       //framepos_t offset = static_cast<framepos_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
+       framepos_t offset = 0;
 
-       nframes_t x_pos = 0 ;
+       framepos_t x_pos = 0 ;
 
        if (item->get_position() < offset) {
                x_pos = 0 ;
        } else {
                x_pos = item->get_position() - offset + (item->get_duration() / 2);
        }
-       
-       reposition_x_origin (x_pos);
+
+       reset_x_origin (x_pos);
 }
 
 void
 Editor::add_imageframe_marker_time_axis(const string & track_name, TimeAxisView* marked_track, void* src)
 {
-       // Can we only bind 2 data Items?
-       // @todo we really want to bind the src attribute too, for the moment tracks can only be added remotely,
+       // Can we only sigc::bind 2 data Items?
+       // @todo we really want to sigc::bind the src attribute too, for the moment tracks can only be added remotely,
        //       so this is not too much of an issue, however will need to be looked at again
-       Gtkmm2ext::UI::instance()->call_slot(sigc::bind(mem_fun(*this, &Editor::handle_new_imageframe_marker_time_axis_view),track_name, marked_track)) ;
+       Gtkmm2ext::UI::instance()->call_slot (boost::bind (&Editor::handle_new_imageframe_marker_time_axis_view, this, track_name, marked_track));
 }
 
 void
 Editor::popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item)
 {
        ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview) ;
-       
+
        if(ifta)
        {
                ImageFrameTimeAxisGroup* iftag = ifta->get_view()->get_selected_imageframe_group() ;
-       
+
                if(iftag)
                {
                        ImageFrameView* selected_ifv = ifta->get_view()->get_selected_imageframe_view() ;
@@ -140,7 +157,7 @@ void
 Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item)
 {
        MarkerTimeAxis* mta = dynamic_cast<MarkerTimeAxis*>(clicked_axisview) ;
-       
+
        if(mta)
        {
                MarkerView* selected_mv = mta->get_view()->get_selected_time_axis_item() ;
@@ -150,37 +167,15 @@ Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas:
                }
        }
 }
-
-TimeAxisView*
-Editor::get_named_time_axis(const string & name)
-{
-       TimeAxisView* tav = 0 ;
-       
-       for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i)
-       {
-               if (((TimeAxisView*)*i)->name() == name)
-               {
-                       tav = ((TimeAxisView*)*i) ;
-                       break ;
-               }
-       }
-       return(tav) ;
-}
-
 /* </CMT Additions file="editor.cc"> */
 
-
-
-
-
-
 /* <CMT Additions file="editor_canvas_events.cc"> */
 bool
 Editor::canvas_imageframe_item_view_event (GdkEvent *event, ArdourCanvas::Item* item, ImageFrameView *ifv)
 {
        gint ret = FALSE ;
        ImageFrameTimeAxisGroup* iftag = 0 ;
-       
+
        switch (event->type)
        {
                case GDK_BUTTON_PRESS:
@@ -208,7 +203,7 @@ Editor::canvas_imageframe_start_handle_event (GdkEvent *event, ArdourCanvas::Ite
 {
        gint ret = FALSE ;
        ImageFrameTimeAxisGroup* iftag = 0 ;
-       
+
        switch (event->type)
        {
                case GDK_BUTTON_PRESS:
@@ -217,7 +212,7 @@ Editor::canvas_imageframe_start_handle_event (GdkEvent *event, ArdourCanvas::Ite
                        clicked_axisview = &ifv->get_time_axis_view() ;
                        iftag = ifv->get_time_axis_group() ;
                        dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview)->get_view()->set_selected_imageframe_view(iftag, ifv);
-                       
+
                        ret = button_press_handler (item, event, ImageFrameHandleStartItem) ;
                        break ;
                case GDK_BUTTON_RELEASE:
@@ -243,7 +238,7 @@ Editor::canvas_imageframe_end_handle_event (GdkEvent *event, ArdourCanvas::Item*
 {
        gint ret = FALSE ;
        ImageFrameTimeAxisGroup* iftag = 0 ;
-       
+
        switch (event->type)
        {
                case GDK_BUTTON_PRESS:
@@ -252,7 +247,7 @@ Editor::canvas_imageframe_end_handle_event (GdkEvent *event, ArdourCanvas::Item*
                        clicked_axisview = &ifv->get_time_axis_view() ;
                        iftag = ifv->get_time_axis_group() ;
                        dynamic_cast<ImageFrameTimeAxis*>(clicked_axisview)->get_view()->set_selected_imageframe_view(iftag, ifv);
-                       
+
                        ret = button_press_handler (item, event, ImageFrameHandleEndItem) ;
                        break ;
                case GDK_BUTTON_RELEASE:
@@ -430,9 +425,10 @@ Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event)
        drag_info.motion_callback = &Editor::imageframe_drag_motion_callback;
        drag_info.finished_callback = &Editor::timeaxis_item_drag_finished_callback;
        drag_info.last_frame_position = ifv->get_position() ;
-       drag_info.last_trackview = &ifv->get_time_axis_view() ;
-       
+
+       drag_info.source_trackview = &ifv->get_time_axis_view() ;
+       drag_info.dest_trackview = drag_info.source_trackview;
+
        /* this is subtle. raising the regionview itself won't help,
           because raise_to_top() just puts the item on the top of
           its parent's stack. so, we need to put the trackview canvas_display group
@@ -443,7 +439,7 @@ Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event)
        */
 
        drag_info.item->raise_to_top();
-       drag_info.last_trackview->canvas_display->raise_to_top();
+       drag_info.source_trackview->canvas_display->raise_to_top();
        //time_line_group->raise_to_top();
        cursor_group->raise_to_top ();
 
@@ -464,7 +460,8 @@ Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event)
        drag_info.finished_callback = &Editor::timeaxis_item_drag_finished_callback;
        drag_info.last_frame_position = mv->get_position() ;
 
-       drag_info.last_trackview = &mv->get_time_axis_view() ;
+       drag_info.source_trackview = &mv->get_time_axis_view() ;
+       drag_info.dest_trackview = drag_info.source_trackview;
 
        /* this is subtle. raising the regionview itself won't help,
           because raise_to_top() just puts the item on the top of
@@ -476,12 +473,12 @@ Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event)
        */
 
        drag_info.item->raise_to_top();
-       drag_info.last_trackview->canvas_display->raise_to_top();
+       drag_info.source_trackview->canvas_display->raise_to_top();
        //time_line_group->raise_to_top();
        cursor_group->raise_to_top ();
 
        start_grab(event) ;
-  
+
        drag_info.pointer_frame_offset = pixel_to_frame(drag_info.grab_x) - drag_info.last_frame_position ;
 }
 
@@ -492,25 +489,25 @@ Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
        double cx, cy ;
 
        MarkerView* mv = reinterpret_cast<MarkerView*>(drag_info.data) ;
-       nframes_t pending_region_position ;
-       nframes_t pointer_frame ;
+       framepos_t pending_region_position ;
+       framepos_t pointer_frame ;
 
        pointer_frame = event_frame(event, &cx, &cy) ;
 
        snap_to(pointer_frame) ;
 
-       if (pointer_frame > (nframes_t) drag_info.pointer_frame_offset)
+       if (pointer_frame > (framepos_t) drag_info.pointer_frame_offset)
        {
                pending_region_position = pointer_frame - drag_info.pointer_frame_offset ;
                snap_to(pending_region_position) ;
-               
+
                // we dont allow marker items to extend beyond, or in front of the marked items so
                // cap the value to the marked items position and duration
-               if((pending_region_position + mv->get_duration()) >= ((mv->get_marked_item()->get_position()) + (mv->get_marked_item()->get_duration()))) 
+               if((pending_region_position + mv->get_duration()) >= ((mv->get_marked_item()->get_position()) + (mv->get_marked_item()->get_duration())))
                {
                        pending_region_position = (mv->get_marked_item()->get_position() + mv->get_marked_item()->get_duration()) - (mv->get_duration()) ;
                }
-               else if(pending_region_position <= mv->get_marked_item()->get_position()) 
+               else if(pending_region_position <= mv->get_marked_item()->get_position())
                {
                        pending_region_position = mv->get_marked_item()->get_position() ;
                }
@@ -521,7 +518,7 @@ Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
        }
 
        drag_info.last_frame_position = pending_region_position ;
-       
+
        // we treat this as a special case, usually we want to send the identitiy of the caller
        // but in this case, that would trigger our socket handler to handle the event, sending
        // notification to the image compositor. This would be fine, except that we have not
@@ -537,17 +534,17 @@ void
 Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
 {
        double cx, cy ;
-       
+
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView*>(drag_info.data) ;
-       
-       nframes_t pending_region_position;
-       nframes_t pointer_frame;
+
+       framepos_t pending_region_position;
+       framepos_t pointer_frame;
 
        pointer_frame = event_frame(event, &cx, &cy) ;
 
        snap_to(pointer_frame) ;
 
-       if (pointer_frame > (nframes_t) drag_info.pointer_frame_offset)
+       if (pointer_frame > (framepos_t) drag_info.pointer_frame_offset)
        {
                pending_region_position = pointer_frame - drag_info.pointer_frame_offset ;
                snap_to(pending_region_position) ;
@@ -560,7 +557,7 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
        drag_info.grab_x = cx;
        //drag_info.last_frame_position = pending_region_position ;
        drag_info.current_pointer_frame = pending_region_position ;
-       
+
        // we treat this as a special case, usually we want to send the identitiy of the caller
        // but in this case, that would trigger our socket handler to handle the event, sending
        // notification to the image compositor. This would be fine, except that we have not
@@ -568,14 +565,14 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
        // completed the drag, only then do we want the image compositor notofied.
        // We therefore set the caller identity to the special case of 0
        ifv->set_position(pending_region_position, 0) ;
-       
+
        show_verbose_time_cursor(pending_region_position) ;
 }
 
 void
 Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* event)
 {
-       nframes_t where ;
+       framepos_t where ;
        TimeAxisViewItem* tavi = reinterpret_cast<TimeAxisViewItem*>(drag_info.data) ;
 
        bool item_x_movement = (drag_info.last_frame_position != tavi->get_position()) ;
@@ -597,7 +594,7 @@ Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* even
        {
                /* base the new region position on the current position of the regionview.*/
                where = drag_info.current_pointer_frame ;
-               
+
                // final call to set position after the motion to tell interested parties of the new position
                tavi->set_position(where, this) ;
        }
@@ -605,7 +602,7 @@ Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* even
        {
                //where = tavi->get_position() ;
        }
-  
+
 
 }
 
@@ -631,9 +628,9 @@ Editor::imageframe_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
                drag_info.cumulative_x_drag = 0;
                drag_info.motion_callback = &Editor::imageframe_start_handle_trim_motion ;
                drag_info.finished_callback = &Editor::imageframe_start_handle_end_trim ;
-               
+
                start_grab(event) ;
-               
+
                show_verbose_time_cursor(ifv->get_position(), 10) ;
        }
 }
@@ -647,14 +644,14 @@ Editor::imageframe_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
        if(ifta)
        {
                ImageFrameView* ifv = ifta->get_view()->get_selected_imageframe_view() ;
-       
+
                if (ifv == 0)
                {
                        fatal << _("programming error: no ImageFrameView selected") << endmsg ;
                        /*NOTREACHED*/
                        return ;
                }
-       
+
                drag_info.item = ifv->get_canvas_frame() ;
                drag_info.data = ifv ;
                drag_info.grab_x = event->motion.x ;
@@ -672,11 +669,11 @@ void
 Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event)
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView*> (drag_info.data) ;
-       
-       nframes_t start = 0 ;
-       nframes_t end = 0 ;
-       nframes_t pointer_frame = event_frame(event) ;
-       
+
+       framepos_t start = 0 ;
+       framepos_t end = 0 ;
+       framepos_t pointer_frame = event_frame(event) ;
+
        // chekc th eposition of the item is not locked
        if(!ifv->get_position_locked()) {
                snap_to(pointer_frame) ;
@@ -684,18 +681,18 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                if(pointer_frame != drag_info.last_pointer_frame) {
                        start = ifv->get_position() ;
                        end = ifv->get_position() + ifv->get_duration() ;
-                       
+
                        if (pointer_frame > end) {
                                start = end ;
                        } else {
                                start = pointer_frame ;
                        }
-                       
+
                        // are we getting bigger or smaller?
-                       nframes_t new_dur_val = end - start ;
-                       
+                       framepos_t new_dur_val = end - start ;
+
                        // start handle, so a smaller pointer frame increases our component size
-                       if(pointer_frame <= drag_info.grab_frame) 
+                       if(pointer_frame <= drag_info.grab_frame)
                        {
                                if(ifv->get_max_duration_active() && (new_dur_val > ifv->get_max_duration()))
                                {
@@ -719,9 +716,9 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                                        // current values are ok
                                }
                        }
-               
+
                        drag_info.last_pointer_frame = pointer_frame ;
-       
+
                        /* re-calculatethe duration and position of the imageframeview */
                        drag_info.cumulative_x_drag = new_dur_val ;
 
@@ -735,7 +732,7 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                        ifv->set_position(start, 0) ;
                }
        }
-       
+
        show_verbose_time_cursor(start, 10) ;
 }
 
@@ -743,17 +740,17 @@ void
 Editor::imageframe_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event)
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView *> (drag_info.data) ;
-       
+
        if (drag_info.cumulative_x_drag == 0)
        {
                /* just a click */
        }
        else
        {
-               nframes_t temp = ifv->get_position() + ifv->get_duration() ;
-               
-               ifv->set_position((nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
-               ifv->set_duration((nframes_t) drag_info.cumulative_x_drag, this) ;
+               framepos_t temp = ifv->get_position() + ifv->get_duration() ;
+
+               ifv->set_position((framepos_t) (temp - drag_info.cumulative_x_drag), this) ;
+               ifv->set_duration((framepos_t) drag_info.cumulative_x_drag, this) ;
        }
 }
 
@@ -761,14 +758,14 @@ void
 Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event)
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView *> (drag_info.data) ;
-       
-       nframes_t start = 0 ;
-       nframes_t end = 0 ;
-       nframes_t pointer_frame = event_frame(event) ;
-       nframes_t new_dur_val = 0 ;
+
+       framepos_t start = 0 ;
+       framepos_t end = 0 ;
+       framepos_t pointer_frame = event_frame(event) ;
+       framepos_t new_dur_val = 0 ;
 
        snap_to(pointer_frame) ;
-       
+
        if (pointer_frame != drag_info.last_pointer_frame)
        {
                start = ifv->get_position() ;
@@ -781,9 +778,9 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
                {
                        end = pointer_frame ;
                }
-               
+
                new_dur_val = end - start ;
-               
+
                // are we getting bigger or smaller?
                if(pointer_frame >= drag_info.last_pointer_frame)
                {
@@ -799,10 +796,10 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
                                new_dur_val = ifv->get_min_duration() ;
                        }
                }
-               
+
                drag_info.last_pointer_frame = pointer_frame ;
                drag_info.cumulative_x_drag = new_dur_val ;
-               
+
                // we treat this as a special case, usually we want to send the identitiy of the caller
                // but in this case, that would trigger our socket handler to handle the event, sending
                // notification to the image compositor. This would be fine, except that we have not
@@ -811,7 +808,7 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
                // We therefore set the caller identity to the special case of 0
                ifv->set_duration(new_dur_val, 0) ;
        }
-       
+
        show_verbose_time_cursor(new_dur_val, 10) ;
 }
 
@@ -827,7 +824,7 @@ Editor::imageframe_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even
        }
        else
        {
-               nframes_t new_duration = (nframes_t)drag_info.cumulative_x_drag ;
+               framepos_t new_duration = (framepos_t)drag_info.cumulative_x_drag ;
                if((new_duration <= ifv->get_max_duration()) && (new_duration >= ifv->get_min_duration()))
                {
                        ifv->set_duration(new_duration, this) ;
@@ -869,15 +866,15 @@ Editor::markerview_item_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
                /*NOTREACHED*/
                return ;
        }
-       
+
        drag_info.item = mv->get_canvas_frame() ;
        drag_info.data = mv ;
        drag_info.grab_x = event->motion.x ;
        drag_info.cumulative_x_drag = 0 ;
-       
+
        drag_info.motion_callback = &Editor::markerview_end_handle_trim_motion ;
        drag_info.finished_callback = &Editor::markerview_end_handle_end_trim ;
-       
+
        start_grab(event, trimmer_cursor) ;
 }
 
@@ -886,11 +883,11 @@ void
 Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
-       
-       nframes_t start = 0 ;
-       nframes_t end = 0 ;
-       nframes_t pointer_frame = event_frame(event) ;
-       
+
+       framepos_t start = 0 ;
+       framepos_t end = 0 ;
+       framepos_t pointer_frame = event_frame(event) ;
+
        // chekc th eposition of the item is not locked
        if(!mv->get_position_locked())
        {
@@ -899,7 +896,7 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                {
                        start = mv->get_position() ;
                        end = mv->get_position() + mv->get_duration() ;
-                       
+
                        if (pointer_frame > end)
                        {
                                start = end ;
@@ -908,10 +905,10 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                        {
                                start = pointer_frame ;
                        }
-                       
+
                        // are we getting bigger or smaller?
-                       nframes_t new_dur_val = end - start ;
-                       
+                       framepos_t new_dur_val = end - start ;
+
                        if(pointer_frame <= drag_info.grab_frame)
                        {
                                if(mv->get_max_duration_active() && (new_dur_val > mv->get_max_duration()))
@@ -936,12 +933,12 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                                        // current values are ok
                                }
                        }
-               
+
                        drag_info.last_pointer_frame = pointer_frame ;
-       
+
                        /* re-calculatethe duration and position of the imageframeview */
                        drag_info.cumulative_x_drag = new_dur_val ;
-        
+
                        // we treat this as a special case, usually we want to send the identitiy of the caller
                        // but in this case, that would trigger our socket handler to handle the event, sending
                        // notification to the image compositor. This would be fine, except that we have not
@@ -952,7 +949,7 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
                        mv->set_position(start, 0) ;
                }
        }
-       
+
        show_verbose_time_cursor(start, 10) ;
 }
 
@@ -960,17 +957,17 @@ void
 Editor::markerview_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
-       
+
        if (drag_info.cumulative_x_drag == 0)
        {
                /* just a click */
        }
        else
        {
-               nframes_t temp = mv->get_position() + mv->get_duration() ;
-               
-               mv->set_position((nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
-               mv->set_duration((nframes_t) drag_info.cumulative_x_drag, this) ;
+               framepos_t temp = mv->get_position() + mv->get_duration() ;
+
+               mv->set_position((framepos_t) (temp - drag_info.cumulative_x_drag), this) ;
+               mv->set_duration((framepos_t) drag_info.cumulative_x_drag, this) ;
        }
 }
 
@@ -978,19 +975,19 @@ void
 Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
-       
-       nframes_t start = 0 ;
-       nframes_t end = 0 ;
-       nframes_t pointer_frame = event_frame(event) ;
-       nframes_t new_dur_val = 0 ;
+
+       framepos_t start = 0 ;
+       framepos_t end = 0 ;
+       framepos_t pointer_frame = event_frame(event) ;
+       framepos_t new_dur_val = 0 ;
 
        snap_to(pointer_frame) ;
-       
+
        if (pointer_frame != drag_info.last_pointer_frame)
        {
                start = mv->get_position() ;
                end = mv->get_position() + mv->get_duration() ;
-               
+
                if(pointer_frame < start)
                {
                        end = start ;
@@ -999,16 +996,16 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
                {
                        end = pointer_frame ;
                }
-               
+
                new_dur_val = end - start ;
-               
+
                // are we getting bigger or smaller?
                if(pointer_frame >= drag_info.last_pointer_frame)
                {
                        // we cant extend beyond the item we are marking
                        ImageFrameView* marked_item = mv->get_marked_item() ;
-                       nframes_t marked_end = marked_item->get_position() + marked_item->get_duration() ;
-                       
+                       framepos_t marked_end = marked_item->get_position() + marked_item->get_duration() ;
+
                        if(mv->get_max_duration_active() && (new_dur_val > mv->get_max_duration()))
                        {
                                if((start + mv->get_max_duration()) > marked_end)
@@ -1036,7 +1033,7 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
 
                drag_info.last_pointer_frame = pointer_frame ;
                drag_info.cumulative_x_drag = new_dur_val ;
-               
+
                // we treat this as a special case, usually we want to send the identitiy of the caller
                // but in this case, that would trigger our socket handler to handle the event, sending
                // notification to the image compositor. This would be fine, except that we have not
@@ -1045,7 +1042,7 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
                // We therefore set the caller identity to the special case of 0
                mv->set_duration(new_dur_val, 0) ;
        }
-       
+
        show_verbose_time_cursor(new_dur_val, 10) ;
 }
 
@@ -1061,7 +1058,7 @@ Editor::markerview_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even
        }
        else
        {
-               nframes_t new_duration = (nframes_t)drag_info.cumulative_x_drag ;
+               framepos_t new_duration = (framepos_t)drag_info.cumulative_x_drag ;
                mv->set_duration(new_duration, this) ;
        }
 }
@@ -1081,7 +1078,7 @@ void
 Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* src)
 {
        ImageFrameTimeAxis* iftav ;
-       iftav = new ImageFrameTimeAxis(track_name, *this, *session, track_canvas) ;
+       iftav = new ImageFrameTimeAxis(track_name, *this, *session, *track_canvas) ;
        iftav->set_time_axis_name(track_name, this) ;
        track_views.push_back(iftav) ;
 
@@ -1091,14 +1088,13 @@ Editor::handle_new_imageframe_time_axis_view(const string & track_name, void* sr
        row[route_display_columns.tv] = iftav;
        route_list_display.get_selection()->select (row);
 
-       iftav->GoingAway.connect(bind(mem_fun(*this, &Editor::remove_route), (TimeAxisView*)iftav)) ;
-       iftav->gui_changed.connect(mem_fun(*this, &Editor::handle_gui_changes)) ;
+       iftav->gui_changed.connect(sigc::mem_fun(*this, &Editor::handle_gui_changes)) ;
 }
 
 void
 Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, TimeAxisView* marked_track)
 {
-       MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->current_session(), track_canvas, track_name, marked_track) ;
+       MarkerTimeAxis* mta = new MarkerTimeAxis (*this, *this->session(), *track_canvas, track_name, marked_track) ;
        ((ImageFrameTimeAxis*)marked_track)->add_marker_time_axis(mta, this) ;
        track_views.push_back(mta) ;
 
@@ -1107,9 +1103,7 @@ Editor::handle_new_imageframe_marker_time_axis_view(const string & track_name, T
        row[route_display_columns.text] = mta->name();
        row[route_display_columns.tv] = mta;
        route_list_display.get_selection()->select (row);
-
-       mta->GoingAway.connect(bind(mem_fun(*this, &Editor::remove_route), (TimeAxisView*)mta)) ;
- }
+}
 
 
 /* </CMT Additions file="editor_route_list.cc"> */