X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmarker_time_axis_view.cc;h=124aac0852a73f1529ec28c3ec599dca8f76f28d;hb=99aa8c6338e47b41143f799fdcb35d1699548076;hp=22b55d3ead0a8d466a0a87fc27b5581dd4d329c4;hpb=d38e2213d79b1c8952c776a3b60f7709457edc0c;p=ardour.git diff --git a/gtk2_ardour/marker_time_axis_view.cc b/gtk2_ardour/marker_time_axis_view.cc index 22b55d3ead..124aac0852 100644 --- a/gtk2_ardour/marker_time_axis_view.cc +++ b/gtk2_ardour/marker_time_axis_view.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2003 Paul Davis + Copyright (C) 2003 Paul Davis 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 @@ -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 @@ -32,6 +31,7 @@ #include "public_editor.h" #include "rgb_macros.h" #include "gui_thread.h" +#include "ardour_ui.h" #include "i18n.h" @@ -40,7 +40,7 @@ using namespace Editing; //---------------------------------------------------------------------------------------// // Constructor / Desctructor - + /** * Construct a new MarkerTimeAxisView helper time axis helper * @@ -50,25 +50,24 @@ MarkerTimeAxisView::MarkerTimeAxisView(MarkerTimeAxis& tv) : _trackview (tv) { region_color = _trackview.color(); - stream_base_color = color_map[cMarkerTrackBase]; - - canvas_group = gtk_canvas_item_new (GTK_CANVAS_GROUP(_trackview.canvas_display), gtk_canvas_group_get_type (), 0); - - canvas_rect = gtk_canvas_item_new (GTK_CANVAS_GROUP(canvas_group), - gtk_canvas_simplerect_get_type(), - "x1", 0.0, - "y1", 0.0, - "x2", 1000000.0, - "y2", (double)20, - "outline_color_rgba", color_map[cMarkerTrackOutline], - "fill_color_rgba", stream_base_color, - 0) ; - - gtk_signal_connect(GTK_OBJECT(canvas_rect), "event", (GtkSignalFunc)PublicEditor::canvas_marker_time_axis_view_event, &_trackview) ; + stream_base_color = ARDOUR_UI::config()->canvasvar_MarkerTrack.get(); + + canvas_group = new ArdourCanvas::Group (*_trackview.canvas_display); + + canvas_rect = new ArdourCanvas::SimpleRect (*canvas_group); + canvas_rect->property_x1() = 0.0; + canvas_rect->property_y1() = 0.0; + canvas_rect->property_x2() = max_framepos; + canvas_rect->property_y2() = (double)20; + canvas_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerTrack.get(); + canvas_rect->property_fill_color_rgba() = stream_base_color; + + canvas_rect->signal_event().connect (sigc::bind (sigc::mem_fun (_trackview.editor, &PublicEditor::canvas_marker_time_axis_view_event), canvas_rect, &_trackview)); _samples_per_unit = _trackview.editor.get_current_zoom() ; - _trackview.editor.ZoomChanged.connect (mem_fun(*this, &MarkerTimeAxisView::reset_samples_per_unit)); + _trackview.editor.ZoomChanged.connect (sigc::mem_fun(*this, &MarkerTimeAxisView::reset_samples_per_unit)); + MarkerView::CatchDeletion.connect (*this, ui_bind (&MarkerTimeAxisView::remove_marker_view, this, _1), gui_context()); } /** @@ -82,28 +81,22 @@ MarkerTimeAxisView::~MarkerTimeAxisView() for(MarkerViewList::iterator iter = marker_view_list.begin(); iter != marker_view_list.end(); ++iter) { MarkerView* mv = (*iter) ; - + MarkerViewList::iterator next = iter ; next++ ; marker_view_list.erase(iter) ; delete mv ; mv = 0 ; - + iter = next ; } - - if(canvas_rect) - { - gtk_object_destroy(GTK_OBJECT(canvas_rect)) ; - canvas_rect = 0 ; - } - - if(canvas_group) - { - gtk_object_destroy(GTK_OBJECT(canvas_group)) ; - canvas_group = 0 ; - } + + delete canvas_rect; + canvas_rect = 0 ; + + delete canvas_group; + canvas_group = 0 ; } @@ -118,16 +111,14 @@ MarkerTimeAxisView::~MarkerTimeAxisView() int MarkerTimeAxisView::set_height(gdouble h) { - if (h < 10.0 || h > 1000.0) - { - return -1 ; + if (h < 10.0 || h > 1000.0) { + return -1; } - - gtk_object_set (GTK_OBJECT(canvas_rect), "y2", h, NULL); - for (MarkerViewList::iterator i = marker_view_list.begin(); i != marker_view_list.end(); ++i) - { - (*i)->set_height(h) ; + canvas_rect->property_y2() = h; + + for (MarkerViewList::iterator i = marker_view_list.begin(); i != marker_view_list.end(); ++i) { + (*i)->set_y_position_and_height(0, h); } return 0; @@ -142,14 +133,15 @@ MarkerTimeAxisView::set_height(gdouble h) int MarkerTimeAxisView::set_position(gdouble x, gdouble y) { - gtk_canvas_item_set (canvas_group, "x", x, "y", y, NULL); + canvas_group->property_x() = x; + canvas_group->property_y() = y; return 0; } /** * Sets the current samples per unit. * this method tells each item upon the time axis of the change - * + * * @param spu the new samples per canvas unit value */ int @@ -158,7 +150,7 @@ MarkerTimeAxisView::set_samples_per_unit(gdouble spp) if(spp < 1.0) { return -1 ; } - + _samples_per_unit = spp ; for(MarkerViewList::iterator i = marker_view_list.begin(); i != marker_view_list.end(); ++i) @@ -174,7 +166,7 @@ MarkerTimeAxisView::set_samples_per_unit(gdouble spp) * @param color the new base color */ void -MarkerTimeAxisView::apply_color(GdkColor& color) +MarkerTimeAxisView::apply_color(Gdk::Color& color) { region_color = color; @@ -187,7 +179,7 @@ MarkerTimeAxisView::apply_color(GdkColor& color) //---------------------------------------------------------------------------------------// // Child MarkerView Accessors/Mutators - + /** * Adds a marker view to the list of items upon this time axis view helper * the new MarkerView is returned @@ -198,16 +190,16 @@ MarkerTimeAxisView::apply_color(GdkColor& color) * @param start the position the new item should be placed upon the time line * @param duration the duration the new item should be placed upon the timeline * @param src the identity of the object that initiated the change - */ + */ MarkerView* -MarkerTimeAxisView::add_marker_view(ImageFrameView* ifv, std::string mark_type, std::string mark_id, jack_nframes_t start, jack_nframes_t dur, void* src) +MarkerTimeAxisView::add_marker_view(ImageFrameView* ifv, std::string mark_type, std::string mark_id, framepos_t start, framecnt_t dur, void* src) { if(ifv->has_marker_view_item(mark_id)) { return(0) ; } - - MarkerView* mv = new MarkerView(GTK_CANVAS_GROUP(canvas_group), + + MarkerView* mv = new MarkerView(canvas_group, &_trackview, ifv, _trackview.editor.get_current_zoom(), @@ -216,14 +208,12 @@ MarkerTimeAxisView::add_marker_view(ImageFrameView* ifv, std::string mark_type, mark_id, start, dur) ; - + ifv->add_marker_view_item(mv, src) ; marker_view_list.push_front(mv) ; - - mv->GoingAway.connect(bind (mem_fun(*this,&MarkerTimeAxisView::remove_marker_view), (void*)this)) ; - - MarkerViewAdded(mv,src) ; /* EMIT_SIGNAL */ - + + MarkerViewAdded(mv,src) ; /* EMIT_SIGNAL */ + return(mv) ; } @@ -237,7 +227,7 @@ MarkerView* MarkerTimeAxisView::get_named_marker_view(std::string item_id) { MarkerView* mv = 0 ; - + for(MarkerViewList::iterator i = marker_view_list.begin(); i != marker_view_list.end(); ++i) { if(((MarkerView*)*i)->get_item_name() == item_id) @@ -261,14 +251,14 @@ void MarkerTimeAxisView::remove_selected_marker_view(void* src) { std::string removed ; - + if (selected_time_axis_item) { MarkerViewList::iterator i ; if((i = find (marker_view_list.begin(), marker_view_list.end(), selected_time_axis_item)) != marker_view_list.end()) { marker_view_list.erase(i) ; - + MarkerViewRemoved(selected_time_axis_item->get_item_name(),src) ; /* EMIT_SIGNAL */ delete(selected_time_axis_item) ; @@ -292,24 +282,24 @@ MarkerView* MarkerTimeAxisView::remove_named_marker_view(std::string item_id, void* src) { MarkerView* mv = 0 ; - + MarkerViewList::iterator i = marker_view_list.begin() ; - + for(MarkerViewList::iterator iter = marker_view_list.begin(); iter != marker_view_list.end(); ++iter) { if(((MarkerView*)*i)->get_item_name() == item_id) { mv = ((MarkerView*)*i) ; marker_view_list.erase(i) ; - + MarkerViewRemoved(mv->get_item_name(), src) ; /* EMIT_SIGNAL */ - + // break from the for loop break; } i++ ; } - + return(mv) ; } @@ -320,22 +310,21 @@ MarkerTimeAxisView::remove_named_marker_view(std::string item_id, void* src) * @param src the identity of the object that initiated the change */ void -MarkerTimeAxisView::remove_marker_view(MarkerView* mv, void* src) +MarkerTimeAxisView::remove_marker_view (MarkerView* mv) { - ENSURE_GUI_THREAD(bind (mem_fun(*this, &MarkerTimeAxisView::remove_marker_view), mv, src)); - + ENSURE_GUI_THREAD (*this, &MarkerTimeAxisView::remove_marker_view, mv, src) + MarkerViewList::iterator i; if((i = find (marker_view_list.begin(), marker_view_list.end(), mv)) != marker_view_list.end()) { marker_view_list.erase(i) ; - + // Assume this remove happened locally, else use remove_named_marker_time_axis // let listeners know that the named MarkerTimeAxis has been removed MarkerViewRemoved(mv->get_item_name(), src) ; /* EMIT_SIGNAL */ } } - /** * Sets the duration of the selected MarkerView to the specified number of seconds * @@ -346,7 +335,7 @@ MarkerTimeAxisView::set_marker_duration_sec(double sec) { if(get_selected_time_axis_item() != 0) { - get_selected_time_axis_item()->set_duration((jack_nframes_t) (sec * _trackview.editor.current_session()->frame_rate()), this) ; + get_selected_time_axis_item()->set_duration((sec * _trackview.editor.session()->frame_rate()), this); } } @@ -374,7 +363,7 @@ MarkerTimeAxisView::clear_selected_time_axis_item() { selected_time_axis_item = 0 ; } - + /** * Returnsthe currently selected item upon this time axis *