r228@gwythaint (orig r768): fugalh | 2006-08-09 08:14:55 -0600
[ardour.git] / gtk2_ardour / editor_imageframe.cc
index 925e5250997bf3985c5004679148f2a626e8e8a5..6b8691b09fe2d2f6b7ef50abd0d95d2a77a29e76 100644 (file)
@@ -1,3 +1,24 @@
+/*
+    Copyright (C) 2000-2003 Paul Davis 
+    Written by Colin Law, CMT, Glasgow
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    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"
 #include "imageframe_time_axis.h"
 #include "imageframe_time_axis_view.h"
@@ -7,6 +28,8 @@
 #include "marker_view.h"
 #include "editor.h"
 #include "i18n.h"
+#include "canvas_impl.h"
+
 #include <gtkmm2ext/gtk_ui.h>
 #include <pbd/error.h>
 
 #include "ardour_image_compositor_socket.h"
 #include "public_editor.h"
 
+using namespace Gtk;
+using namespace PBD;
+
 /* <CMT Additions file="editor.cc"> */
 
 void
-Editor::add_imageframe_time_axis(std::string track_name, void* src)
+Editor::add_imageframe_time_axis(const string & track_name, void* src)
 {
        // check for duplicate name
        if(get_named_time_axis(track_name))
@@ -50,9 +76,9 @@ Editor::connect_to_image_compositor()
        }
 
        // XXX should really put this somewhere safe
-       std::string host_ip = "127.0.0.1" ;
+       const char * host_ip = "127.0.0.1" ;
        
-       bool retcode = image_socket_listener->connect(host_ip,ardourvis::DEFAULT_PORT) ;
+       bool retcode = image_socket_listener->connect(host_ip, ardourvis::DEFAULT_PORT) ;
        
        if(retcode == false)
        {
@@ -69,8 +95,10 @@ Editor::connect_to_image_compositor()
 void
 Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item)
 {
-       jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
-       
+       // GTK2FIX
+       //jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
+       jack_nframes_t offset = 0;
+
        jack_nframes_t x_pos = 0 ;
        if(item->get_position() < offset)
        {
@@ -85,7 +113,7 @@ Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item)
 }
 
 void
-Editor::add_imageframe_marker_time_axis(std::string track_name, TimeAxisView* marked_track, void* src)
+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,
@@ -94,7 +122,7 @@ Editor::add_imageframe_marker_time_axis(std::string track_name, TimeAxisView* ma
 }
 
 void
-Editor::popup_imageframe_edit_menu(int button, int32_t time, GnomeCanvasItem* ifv, bool with_item)
+Editor::popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item)
 {
        ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview) ;
        
@@ -111,7 +139,7 @@ Editor::popup_imageframe_edit_menu(int button, int32_t time, GnomeCanvasItem* if
 }
 
 void
-Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, GnomeCanvasItem* ifv, bool with_item)
+Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item)
 {
        MarkerTimeAxis* mta = dynamic_cast<MarkerTimeAxis*>(clicked_trackview) ;
        
@@ -126,11 +154,11 @@ Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, GnomeCanvasIt
 }
 
 TimeAxisView*
-Editor::get_named_time_axis(std::string name)
+Editor::get_named_time_axis(const string & name)
 {
        TimeAxisView* tav = 0 ;
        
-       for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i)
+       for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i)
        {
                if (((TimeAxisView*)*i)->name() == name)
                {
@@ -149,86 +177,8 @@ Editor::get_named_time_axis(std::string name)
 
 
 /* <CMT Additions file="editor_canvas_events.cc"> */
-/**
- * ---------------------------------------------------------------------------------------------------
- * Static event handlers
- * These handlers deal with events from the GnomeCanvas, a c-based component
- */
-
-
-gint
-Editor::_canvas_imageframe_start_handle_event(GnomeCanvasItem *item, GdkEvent *event, gpointer data)
-{
-       ImageFrameView* ifv = (ImageFrameView*) data ;
-       Editor* editor = dynamic_cast<Editor*> (&ifv->get_time_axis_view().editor);
-       return editor->signal_canvas_imageframe_start_handle_event()(item,event,ifv);
-}
-
-gint
-Editor::_canvas_imageframe_end_handle_event(GnomeCanvasItem *item, GdkEvent *event, gpointer data)
-{
-       ImageFrameView* ifv = (ImageFrameView*) data ;
-       Editor* editor = dynamic_cast<Editor*> (&ifv->get_time_axis_view().editor);
-       return editor->signal_canvas_imageframe_end_handle_event()(item,event,ifv);
-}
-
-
-gint
-Editor::_canvas_imageframe_item_view_event(GnomeCanvasItem *item, GdkEvent* event, gpointer data)
-{
-       ImageFrameView *ifv = (ImageFrameView *) data ;
-       Editor* editor = dynamic_cast<Editor*> (&ifv->get_time_axis_view().editor);
-       return editor->signal_canvas_imageframe_item_view_event() (item, event, ifv) ;
-}
-
-gint
-Editor::_canvas_imageframe_view_event(GnomeCanvasItem *item, GdkEvent* event, gpointer data)
-{
-       ImageFrameTimeAxis *ifta = (ImageFrameTimeAxis*) data ;
-       Editor* editor = dynamic_cast<Editor*> (&ifta->editor);
-       return editor->signal_canvas_imageframe_view_event() (item, event, ifta);
-}
-
-gint
-Editor::_canvas_marker_time_axis_view_event(GnomeCanvasItem* item, GdkEvent* event, gpointer data)
-{
-       MarkerTimeAxis* mta = (MarkerTimeAxis*)data ;
-       Editor* editor = dynamic_cast<Editor*> (&mta->editor);
-       return editor->signal_canvas_marker_time_axis_view_event()(item,event,mta);
-}
-
-gint
-Editor::_canvas_markerview_item_view_event(GnomeCanvasItem *item, GdkEvent* event, gpointer data)
-{
-       MarkerView* mv = (MarkerView*) data ;
-       Editor* editor = dynamic_cast<Editor*> (&mv->get_time_axis_view().editor);
-       return editor->signal_canvas_markerview_item_view_event()(item,event,mv);
-}
-gint
-Editor::_canvas_markerview_start_handle_event(GnomeCanvasItem* item, GdkEvent* event, gpointer data)
-{
-       MarkerView* mv = (MarkerView*)data ;
-       Editor* editor = dynamic_cast<Editor*> (&mv->get_time_axis_view().editor);
-       return editor->signal_canvas_markerview_start_handle_event()(item,event,mv);
-}
-
-gint
-Editor::_canvas_markerview_end_handle_event(GnomeCanvasItem* item, GdkEvent* event, gpointer data)
-{
-       MarkerView* mv = (MarkerView*)data ;
-       Editor* editor = dynamic_cast<Editor*> (&mv->get_time_axis_view().editor);
-       return editor->signal_canvas_markerview_end_handle_event()(item,event,mv);
-}
-
-/**
- * ---------------------------------------------------------------------------------------------------
- * End of Static event handlers
- */
-
-gint
-Editor::canvas_imageframe_item_view_event(GnomeCanvasItem *item, GdkEvent *event, ImageFrameView *ifv)
+bool
+Editor::canvas_imageframe_item_view_event (GdkEvent *event, ArdourCanvas::Item* item, ImageFrameView *ifv)
 {
        gint ret = FALSE ;
        ImageFrameTimeAxisGroup* iftag = 0 ;
@@ -255,8 +205,8 @@ Editor::canvas_imageframe_item_view_event(GnomeCanvasItem *item, GdkEvent *event
        return(ret) ;
 }
 
-gint
-Editor::canvas_imageframe_start_handle_event(GnomeCanvasItem *item, GdkEvent *event, ImageFrameView *ifv)
+bool
+Editor::canvas_imageframe_start_handle_event (GdkEvent *event, ArdourCanvas::Item* item, ImageFrameView *ifv)
 {
        gint ret = FALSE ;
        ImageFrameTimeAxisGroup* iftag = 0 ;
@@ -290,8 +240,8 @@ Editor::canvas_imageframe_start_handle_event(GnomeCanvasItem *item, GdkEvent *ev
        return(ret) ;
 }
 
-gint
-Editor::canvas_imageframe_end_handle_event(GnomeCanvasItem *item, GdkEvent *event, ImageFrameView *ifv)
+bool
+Editor::canvas_imageframe_end_handle_event (GdkEvent *event, ArdourCanvas::Item* item, ImageFrameView *ifv)
 {
        gint ret = FALSE ;
        ImageFrameTimeAxisGroup* iftag = 0 ;
@@ -325,8 +275,8 @@ Editor::canvas_imageframe_end_handle_event(GnomeCanvasItem *item, GdkEvent *even
        return(ret) ;
 }
 
-gint
-Editor::canvas_imageframe_view_event(GnomeCanvasItem* item, GdkEvent* event, ImageFrameTimeAxis* ifta)
+bool
+Editor::canvas_imageframe_view_event (GdkEvent* event, ArdourCanvas::Item* item, ImageFrameTimeAxis* ifta)
 {
        gint ret = FALSE ;
        switch (event->type)
@@ -348,8 +298,8 @@ Editor::canvas_imageframe_view_event(GnomeCanvasItem* item, GdkEvent* event, Ima
        return(ret) ;
 }
 
-gint
-Editor::canvas_marker_time_axis_view_event(GnomeCanvasItem *item, GdkEvent* event, MarkerTimeAxis* mta)
+bool
+Editor::canvas_marker_time_axis_view_event (GdkEvent* event, ArdourCanvas::Item* item, MarkerTimeAxis* mta)
 {
        gint ret = FALSE ;
        switch (event->type)
@@ -371,8 +321,8 @@ Editor::canvas_marker_time_axis_view_event(GnomeCanvasItem *item, GdkEvent* even
 }
 
 
-gint
-Editor::canvas_markerview_item_view_event(GnomeCanvasItem *item, GdkEvent* event, MarkerView* mta)
+bool
+Editor::canvas_markerview_item_view_event (GdkEvent* event, ArdourCanvas::Item* item, MarkerView* mta)
 {
        gint ret = FALSE ;
        switch (event->type)
@@ -396,8 +346,8 @@ Editor::canvas_markerview_item_view_event(GnomeCanvasItem *item, GdkEvent* event
        return(ret) ;
 }
 
-gint
-Editor::canvas_markerview_start_handle_event(GnomeCanvasItem* item, GdkEvent* event, MarkerView* mta)
+bool
+Editor::canvas_markerview_start_handle_event (GdkEvent* event, ArdourCanvas::Item* item, MarkerView* mta)
 {
        gint ret = FALSE ;
        switch (event->type)
@@ -427,8 +377,8 @@ Editor::canvas_markerview_start_handle_event(GnomeCanvasItem* item, GdkEvent* ev
        return(ret) ;
 }
 
-gint
-Editor::canvas_markerview_end_handle_event(GnomeCanvasItem* item, GdkEvent* event, MarkerView* mta)
+bool
+Editor::canvas_markerview_end_handle_event (GdkEvent* event, ArdourCanvas::Item* item, MarkerView* mta)
 {
        gint ret = FALSE ;
        switch (event->type)
@@ -473,7 +423,7 @@ Editor::canvas_markerview_end_handle_event(GnomeCanvasItem* item, GdkEvent* even
 /* <CMT Additions file="editor_mouse.cc"> */
 
 void
-Editor::start_imageframe_grab(GnomeCanvasItem* item, GdkEvent* event)
+Editor::start_imageframe_grab(ArdourCanvas::Item* item, GdkEvent* event)
 {
        ImageFrameView* ifv = ((ImageFrameTimeAxis*)clicked_trackview)->get_view()->get_selected_imageframe_view() ;
        drag_info.copy = false ;
@@ -494,10 +444,10 @@ Editor::start_imageframe_grab(GnomeCanvasItem* item, GdkEvent* event)
           so move them to the top afterwards.
        */
 
-       gnome_canvas_item_raise_to_top(drag_info.item) ;
-       gnome_canvas_item_raise_to_top(drag_info.last_trackview->canvas_display) ;
-       //gnome_canvas_item_raise_to_top(time_line_group) ;
-       gnome_canvas_item_raise_to_top (cursor_group);
+       drag_info.item->raise_to_top();
+       drag_info.last_trackview->canvas_display->raise_to_top();
+       //time_line_group->raise_to_top();
+       cursor_group->raise_to_top ();
 
        start_grab(event) ;
 
@@ -506,7 +456,7 @@ Editor::start_imageframe_grab(GnomeCanvasItem* item, GdkEvent* event)
 
 
 void
-Editor::start_markerview_grab(GnomeCanvasItem* item, GdkEvent* event)
+Editor::start_markerview_grab(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = ((MarkerTimeAxis*)clicked_trackview)->get_view()->get_selected_time_axis_item() ;
        drag_info.copy = false ;
@@ -527,10 +477,10 @@ Editor::start_markerview_grab(GnomeCanvasItem* item, GdkEvent* event)
           so move them to the top afterwards.
        */
 
-       gnome_canvas_item_raise_to_top(drag_info.item) ;
-       gnome_canvas_item_raise_to_top(drag_info.last_trackview->canvas_display) ;
-       //gnome_canvas_item_raise_to_top(time_line_group) ;
-       gnome_canvas_item_raise_to_top (cursor_group);
+       drag_info.item->raise_to_top();
+       drag_info.last_trackview->canvas_display->raise_to_top();
+       //time_line_group->raise_to_top();
+       cursor_group->raise_to_top ();
 
        start_grab(event) ;
   
@@ -539,7 +489,7 @@ Editor::start_markerview_grab(GnomeCanvasItem* item, GdkEvent* event)
 
 
 void
-Editor::markerview_drag_motion_callback(GnomeCanvasItem*, GdkEvent* event)
+Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
 {
        double cx, cy ;
 
@@ -586,7 +536,7 @@ Editor::markerview_drag_motion_callback(GnomeCanvasItem*, GdkEvent* event)
 }
 
 void
-Editor::imageframe_drag_motion_callback(GnomeCanvasItem*, GdkEvent* event)
+Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
 {
        double cx, cy ;
        
@@ -625,7 +575,7 @@ Editor::imageframe_drag_motion_callback(GnomeCanvasItem*, GdkEvent* event)
 }
 
 void
-Editor::timeaxis_item_drag_finished_callback(GnomeCanvasItem*, GdkEvent* event)
+Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* event)
 {
        jack_nframes_t where ;
        TimeAxisViewItem* tavi = reinterpret_cast<TimeAxisViewItem*>(drag_info.data) ;
@@ -663,7 +613,7 @@ Editor::timeaxis_item_drag_finished_callback(GnomeCanvasItem*, GdkEvent* event)
 
 
 void
-Editor::imageframe_start_handle_op(GnomeCanvasItem* item, GdkEvent* event)
+Editor::imageframe_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
 {
        // get the selected item from the parent time axis
        ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview) ;
@@ -684,8 +634,6 @@ Editor::imageframe_start_handle_op(GnomeCanvasItem* item, GdkEvent* event)
                drag_info.motion_callback = &Editor::imageframe_start_handle_trim_motion ;
                drag_info.finished_callback = &Editor::imageframe_start_handle_end_trim ;
                
-               flush_track_canvas() ;
-               
                start_grab(event) ;
                
                show_verbose_time_cursor(ifv->get_position(), 10) ;
@@ -693,7 +641,7 @@ Editor::imageframe_start_handle_op(GnomeCanvasItem* item, GdkEvent* event)
 }
 
 void
-Editor::imageframe_end_handle_op(GnomeCanvasItem* item, GdkEvent* event)
+Editor::imageframe_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
 {
        // get the selected item from the parent time axis
        ImageFrameTimeAxis* ifta = dynamic_cast<ImageFrameTimeAxis*>(clicked_trackview) ;
@@ -716,8 +664,6 @@ Editor::imageframe_end_handle_op(GnomeCanvasItem* item, GdkEvent* event)
                drag_info.motion_callback = &Editor::imageframe_end_handle_trim_motion ;
                drag_info.finished_callback = &Editor::imageframe_end_handle_end_trim ;
 
-               flush_track_canvas() ;
-
                start_grab(event, trimmer_cursor) ;
 
                show_verbose_time_cursor(ifv->get_position() + ifv->get_duration(), 10) ;
@@ -725,7 +671,7 @@ Editor::imageframe_end_handle_op(GnomeCanvasItem* item, GdkEvent* event)
 }
 
 void
-Editor::imageframe_start_handle_trim_motion(GnomeCanvasItem* item, GdkEvent* event)
+Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event)
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView*> (drag_info.data) ;
        
@@ -796,7 +742,7 @@ Editor::imageframe_start_handle_trim_motion(GnomeCanvasItem* item, GdkEvent* eve
 }
 
 void
-Editor::imageframe_start_handle_end_trim(GnomeCanvasItem* item, GdkEvent* event)
+Editor::imageframe_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event)
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView *> (drag_info.data) ;
        
@@ -811,12 +757,10 @@ Editor::imageframe_start_handle_end_trim(GnomeCanvasItem* item, GdkEvent* event)
                ifv->set_position((jack_nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
                ifv->set_duration((jack_nframes_t) drag_info.cumulative_x_drag, this) ;
        }
-
-       flush_track_canvas() ;
 }
 
 void
-Editor::imageframe_end_handle_trim_motion(GnomeCanvasItem* item, GdkEvent* event)
+Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event)
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView *> (drag_info.data) ;
        
@@ -875,7 +819,7 @@ Editor::imageframe_end_handle_trim_motion(GnomeCanvasItem* item, GdkEvent* event
 
 
 void
-Editor::imageframe_end_handle_end_trim (GnomeCanvasItem* item, GdkEvent* event)
+Editor::imageframe_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* event)
 {
        ImageFrameView* ifv = reinterpret_cast<ImageFrameView *> (drag_info.data) ;
 
@@ -891,13 +835,11 @@ Editor::imageframe_end_handle_end_trim (GnomeCanvasItem* item, GdkEvent* event)
                        ifv->set_duration(new_duration, this) ;
                }
        }
-
-       flush_track_canvas ();
 }
 
 
 void
-Editor::markerview_item_start_handle_op(GnomeCanvasItem* item, GdkEvent* event)
+Editor::markerview_item_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerTimeAxis*>(clicked_trackview)->get_view()->get_selected_time_axis_item() ;
 
@@ -916,13 +858,11 @@ Editor::markerview_item_start_handle_op(GnomeCanvasItem* item, GdkEvent* event)
        drag_info.motion_callback = &Editor::markerview_start_handle_trim_motion ;
        drag_info.finished_callback = &Editor::markerview_start_handle_end_trim ;
 
-       flush_track_canvas() ;
-
        start_grab(event, trimmer_cursor) ;
 }
 
 void
-Editor::markerview_item_end_handle_op(GnomeCanvasItem* item, GdkEvent* event)
+Editor::markerview_item_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerTimeAxis*>(clicked_trackview)->get_view()->get_selected_time_axis_item() ;
        if (mv == 0)
@@ -940,14 +880,12 @@ Editor::markerview_item_end_handle_op(GnomeCanvasItem* item, GdkEvent* event)
        drag_info.motion_callback = &Editor::markerview_end_handle_trim_motion ;
        drag_info.finished_callback = &Editor::markerview_end_handle_end_trim ;
        
-       flush_track_canvas () ;
-
        start_grab(event, trimmer_cursor) ;
 }
 
 
 void
-Editor::markerview_start_handle_trim_motion(GnomeCanvasItem* item, GdkEvent* event)
+Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
        
@@ -1021,7 +959,7 @@ Editor::markerview_start_handle_trim_motion(GnomeCanvasItem* item, GdkEvent* eve
 }
 
 void
-Editor::markerview_start_handle_end_trim(GnomeCanvasItem* item, GdkEvent* event)
+Editor::markerview_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
        
@@ -1036,12 +974,10 @@ Editor::markerview_start_handle_end_trim(GnomeCanvasItem* item, GdkEvent* event)
                mv->set_position((jack_nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
                mv->set_duration((jack_nframes_t) drag_info.cumulative_x_drag, this) ;
        }
-
-       flush_track_canvas() ;
 }
 
 void
-Editor::markerview_end_handle_trim_motion(GnomeCanvasItem* item, GdkEvent* event)
+Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
        
@@ -1117,7 +1053,7 @@ Editor::markerview_end_handle_trim_motion(GnomeCanvasItem* item, GdkEvent* event
 
 
 void
-Editor::markerview_end_handle_end_trim (GnomeCanvasItem* item, GdkEvent* event)
+Editor::markerview_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* event)
 {
        MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
 
@@ -1130,8 +1066,6 @@ Editor::markerview_end_handle_end_trim (GnomeCanvasItem* item, GdkEvent* event)
                jack_nframes_t new_duration = (jack_nframes_t)drag_info.cumulative_x_drag ;
                mv->set_duration(new_duration, this) ;
        }
-
-       flush_track_canvas() ;
 }
 
 
@@ -1146,32 +1080,36 @@ Editor::markerview_end_handle_end_trim (GnomeCanvasItem* item, GdkEvent* event)
 /* <CMT Additions file="editor_route_list.cc"> */
 
 void
-Editor::handle_new_imageframe_time_axis_view(std::string track_name, void* src)
+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->set_time_axis_name(track_name, this) ;
        track_views.push_back(iftav) ;
-       const gchar *rowdata[1] ;
-       rowdata[0] = iftav->name().c_str() ;
-       route_list.rows().push_back(rowdata) ;
-       route_list.rows().back().set_data(iftav) ;
-       route_list.rows().back().select() ;
+
+       TreeModel::Row row = *(route_display_model->append());
+
+       row[route_display_columns.text] = iftav->name();
+       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)) ;
 }
 
 void
-Editor::handle_new_imageframe_marker_time_axis_view(std::string track_name, TimeAxisView* marked_track)
+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) ;
        ((ImageFrameTimeAxis*)marked_track)->add_marker_time_axis(mta, this) ;
        track_views.push_back(mta) ;
-       const gchar *rowdata[1] ;
-       rowdata[0] = mta->name().c_str() ;
-       route_list.rows().push_back(rowdata) ;
-       route_list.rows().back().set_data (mta) ;
-       route_list.rows().back().select() ;
+
+       TreeModel::Row row = *(route_display_model->append());
+
+       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)) ;
  }