X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_imageframe.cc;h=6b8691b09fe2d2f6b7ef50abd0d95d2a77a29e76;hb=0a24970b4eeb84a3313755266872b1981c708d95;hp=57dbd0613eccc350628ba84a8e60ed76eb3cc06a;hpb=209d967b1bb80a9735d690d8f4f0455ecb9970ca;p=ardour.git diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc index 57dbd0613e..6b8691b09f 100644 --- a/gtk2_ardour/editor_imageframe.cc +++ b/gtk2_ardour/editor_imageframe.cc @@ -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,7 +28,9 @@ #include "marker_view.h" #include "editor.h" #include "i18n.h" -#include +#include "canvas_impl.h" + +#include #include #include @@ -20,10 +43,13 @@ #include "ardour_image_compositor_socket.h" #include "public_editor.h" +using namespace Gtk; +using namespace PBD; + /* */ 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)) @@ -32,7 +58,7 @@ Editor::add_imageframe_time_axis(std::string track_name, void* src) } else { - Gtkmmext::UI::instance()->call_slot(bind(slot(*this, &Editor::handle_new_imageframe_time_axis_view),track_name, src)) ; + Gtkmm2ext::UI::instance()->call_slot(bind(mem_fun(*this, &Editor::handle_new_imageframe_time_axis_view),track_name, src)) ; } } @@ -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(frames_per_unit * (edit_hscroll_slider_width/2)) ; - + // GTK2FIX + //jack_nframes_t offset = static_cast(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,16 +113,16 @@ 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, // so this is not too much of an issue, however will need to be looked at again - Gtkmmext::UI::instance()->call_slot(SigC::bind(slot(*this, &Editor::handle_new_imageframe_marker_time_axis_view),track_name, marked_track)) ; + Gtkmm2ext::UI::instance()->call_slot(sigc::bind(mem_fun(*this, &Editor::handle_new_imageframe_marker_time_axis_view),track_name, marked_track)) ; } void -Editor::popup_imageframe_edit_menu(int button, int32_t time, GtkCanvasItem* ifv, bool with_item) +Editor::popup_imageframe_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_item) { ImageFrameTimeAxis* ifta = dynamic_cast(clicked_trackview) ; @@ -111,7 +139,7 @@ Editor::popup_imageframe_edit_menu(int button, int32_t time, GtkCanvasItem* ifv, } void -Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, GtkCanvasItem* 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(clicked_trackview) ; @@ -126,11 +154,11 @@ Editor::popup_marker_time_axis_edit_menu(int button, int32_t time, GtkCanvasItem } 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) /* */ - -/** - * --------------------------------------------------------------------------------------------------- - * Static event handlers - * These handlers deal with events from the GtkCanvas, a c-based component - */ - - -gint -Editor::_canvas_imageframe_start_handle_event(GtkCanvasItem *item, GdkEvent *event, gpointer data) -{ - ImageFrameView* ifv = (ImageFrameView*) data ; - Editor* editor = dynamic_cast (&ifv->get_time_axis_view().editor); - return editor->canvas_imageframe_start_handle_event(item,event,ifv); -} - -gint -Editor::_canvas_imageframe_end_handle_event(GtkCanvasItem *item, GdkEvent *event, gpointer data) -{ - ImageFrameView* ifv = (ImageFrameView*) data ; - Editor* editor = dynamic_cast (&ifv->get_time_axis_view().editor); - return editor->canvas_imageframe_end_handle_event(item,event,ifv); -} - - -gint -Editor::_canvas_imageframe_item_view_event(GtkCanvasItem *item, GdkEvent* event, gpointer data) -{ - ImageFrameView *ifv = (ImageFrameView *) data ; - Editor* editor = dynamic_cast (&ifv->get_time_axis_view().editor); - return editor->canvas_imageframe_item_view_event (item, event, ifv) ; -} - -gint -Editor::_canvas_imageframe_view_event(GtkCanvasItem *item, GdkEvent* event, gpointer data) -{ - ImageFrameTimeAxis *ifta = (ImageFrameTimeAxis*) data ; - Editor* editor = dynamic_cast (&ifta->editor); - return editor->canvas_imageframe_view_event (item, event, ifta); -} - -gint -Editor::_canvas_marker_time_axis_view_event(GtkCanvasItem* item, GdkEvent* event, gpointer data) -{ - MarkerTimeAxis* mta = (MarkerTimeAxis*)data ; - Editor* editor = dynamic_cast (&mta->editor); - return editor->canvas_marker_time_axis_view_event(item,event,mta); -} - -gint -Editor::_canvas_markerview_item_view_event(GtkCanvasItem *item, GdkEvent* event, gpointer data) -{ - MarkerView* mv = (MarkerView*) data ; - Editor* editor = dynamic_cast (&mv->get_time_axis_view().editor); - return editor->canvas_markerview_item_view_event(item,event,mv); -} - -gint -Editor::_canvas_markerview_start_handle_event(GtkCanvasItem* item, GdkEvent* event, gpointer data) -{ - MarkerView* mv = (MarkerView*)data ; - Editor* editor = dynamic_cast (&mv->get_time_axis_view().editor); - return editor->canvas_markerview_start_handle_event(item,event,mv); -} - -gint -Editor::_canvas_markerview_end_handle_event(GtkCanvasItem* item, GdkEvent* event, gpointer data) -{ - MarkerView* mv = (MarkerView*)data ; - Editor* editor = dynamic_cast (&mv->get_time_axis_view().editor); - return editor->canvas_markerview_end_handle_event(item,event,mv); -} - -/** - * --------------------------------------------------------------------------------------------------- - * End of Static event handlers - */ - -gint -Editor::canvas_imageframe_item_view_event(GtkCanvasItem *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(GtkCanvasItem *item, GdkEvent *event, return(ret) ; } -gint -Editor::canvas_imageframe_start_handle_event(GtkCanvasItem *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(GtkCanvasItem *item, GdkEvent *even return(ret) ; } -gint -Editor::canvas_imageframe_end_handle_event(GtkCanvasItem *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(GtkCanvasItem *item, GdkEvent *event, return(ret) ; } -gint -Editor::canvas_imageframe_view_event(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event, Image return(ret) ; } -gint -Editor::canvas_marker_time_axis_view_event(GtkCanvasItem *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(GtkCanvasItem *item, GdkEvent* event, } -gint -Editor::canvas_markerview_item_view_event(GtkCanvasItem *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(GtkCanvasItem *item, GdkEvent* event, return(ret) ; } -gint -Editor::canvas_markerview_start_handle_event(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* even return(ret) ; } -gint -Editor::canvas_markerview_end_handle_event(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event, /* */ void -Editor::start_imageframe_grab(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event) so move them to the top afterwards. */ - gtk_canvas_item_raise_to_top(drag_info.item) ; - gtk_canvas_item_raise_to_top(drag_info.last_trackview->canvas_display) ; - //gtk_canvas_item_raise_to_top(time_line_group) ; - gtk_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(GtkCanvasItem* item, GdkEvent* event) void -Editor::start_markerview_grab(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event) so move them to the top afterwards. */ - gtk_canvas_item_raise_to_top(drag_info.item) ; - gtk_canvas_item_raise_to_top(drag_info.last_trackview->canvas_display) ; - //gtk_canvas_item_raise_to_top(time_line_group) ; - gtk_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(GtkCanvasItem* item, GdkEvent* event) void -Editor::markerview_drag_motion_callback(GtkCanvasItem*, GdkEvent* event) +Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event) { double cx, cy ; @@ -586,7 +536,7 @@ Editor::markerview_drag_motion_callback(GtkCanvasItem*, GdkEvent* event) } void -Editor::imageframe_drag_motion_callback(GtkCanvasItem*, GdkEvent* event) +Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event) { double cx, cy ; @@ -625,7 +575,7 @@ Editor::imageframe_drag_motion_callback(GtkCanvasItem*, GdkEvent* event) } void -Editor::timeaxis_item_drag_finished_callback(GtkCanvasItem*, GdkEvent* event) +Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* event) { jack_nframes_t where ; TimeAxisViewItem* tavi = reinterpret_cast(drag_info.data) ; @@ -663,7 +613,7 @@ Editor::timeaxis_item_drag_finished_callback(GtkCanvasItem*, GdkEvent* event) void -Editor::imageframe_start_handle_op(GtkCanvasItem* 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(clicked_trackview) ; @@ -684,8 +634,6 @@ Editor::imageframe_start_handle_op(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event) } void -Editor::imageframe_end_handle_op(GtkCanvasItem* 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(clicked_trackview) ; @@ -716,8 +664,6 @@ Editor::imageframe_end_handle_op(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event) } void -Editor::imageframe_start_handle_trim_motion(GtkCanvasItem* item, GdkEvent* event) +Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) { ImageFrameView* ifv = reinterpret_cast (drag_info.data) ; @@ -796,7 +742,7 @@ Editor::imageframe_start_handle_trim_motion(GtkCanvasItem* item, GdkEvent* event } void -Editor::imageframe_start_handle_end_trim(GtkCanvasItem* item, GdkEvent* event) +Editor::imageframe_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) { ImageFrameView* ifv = reinterpret_cast (drag_info.data) ; @@ -811,12 +757,10 @@ Editor::imageframe_start_handle_end_trim(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event) +Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) { ImageFrameView* ifv = reinterpret_cast (drag_info.data) ; @@ -875,7 +819,7 @@ Editor::imageframe_end_handle_trim_motion(GtkCanvasItem* item, GdkEvent* event) void -Editor::imageframe_end_handle_end_trim (GtkCanvasItem* item, GdkEvent* event) +Editor::imageframe_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* event) { ImageFrameView* ifv = reinterpret_cast (drag_info.data) ; @@ -891,13 +835,11 @@ Editor::imageframe_end_handle_end_trim (GtkCanvasItem* item, GdkEvent* event) ifv->set_duration(new_duration, this) ; } } - - flush_track_canvas (); } void -Editor::markerview_item_start_handle_op(GtkCanvasItem* item, GdkEvent* event) +Editor::markerview_item_start_handle_op(ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast(clicked_trackview)->get_view()->get_selected_time_axis_item() ; @@ -916,13 +858,11 @@ Editor::markerview_item_start_handle_op(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event) +Editor::markerview_item_end_handle_op(ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast(clicked_trackview)->get_view()->get_selected_time_axis_item() ; if (mv == 0) @@ -940,14 +880,12 @@ Editor::markerview_item_end_handle_op(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event) +Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast (drag_info.data) ; @@ -1021,7 +959,7 @@ Editor::markerview_start_handle_trim_motion(GtkCanvasItem* item, GdkEvent* event } void -Editor::markerview_start_handle_end_trim(GtkCanvasItem* item, GdkEvent* event) +Editor::markerview_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast (drag_info.data) ; @@ -1036,12 +974,10 @@ Editor::markerview_start_handle_end_trim(GtkCanvasItem* 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(GtkCanvasItem* item, GdkEvent* event) +Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast (drag_info.data) ; @@ -1117,7 +1053,7 @@ Editor::markerview_end_handle_trim_motion(GtkCanvasItem* item, GdkEvent* event) void -Editor::markerview_end_handle_end_trim (GtkCanvasItem* item, GdkEvent* event) +Editor::markerview_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* event) { MarkerView* mv = reinterpret_cast (drag_info.data) ; @@ -1130,8 +1066,6 @@ Editor::markerview_end_handle_end_trim (GtkCanvasItem* 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,33 +1080,37 @@ Editor::markerview_end_handle_end_trim (GtkCanvasItem* item, GdkEvent* event) /* */ 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() ; - iftav->GoingAway.connect(bind(slot(*this, &Editor::remove_route), (TimeAxisView*)iftav)) ; - iftav->gui_changed.connect(slot(*this, &Editor::handle_gui_changes)) ; + + 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() ; - mta->GoingAway.connect(bind(slot (*this, &Editor::remove_route), (TimeAxisView*)mta)) ; + + 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)) ; }