X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fregion_view.cc;h=0554cc41413d6f92322947ebf0875c4ebc00a4b4;hb=299b58ebf8982e0edec2f327ac70e8c1f61ca0a1;hp=24e476704ab2036e6e91ea04fc070fecf7c36a84;hpb=959a7909c1adca430a63f783fd16687242a7be3d;p=ardour.git diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index 24e476704a..0554cc4141 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -31,8 +31,10 @@ #include #include +#include "ardour_ui.h" #include "streamview.h" #include "region_view.h" +#include "automation_region_view.h" #include "route_time_axis.h" #include "simplerect.h" #include "simpleline.h" @@ -57,11 +59,11 @@ static const int32_t sync_mark_width = 9; sigc::signal RegionView::RegionViewGoingAway; -RegionView::RegionView (ArdourCanvas::Group* parent, - TimeAxisView& tv, +RegionView::RegionView (ArdourCanvas::Group* parent, + TimeAxisView& tv, boost::shared_ptr r, - double spu, - Gdk::Color& basic_color) + double spu, + Gdk::Color& basic_color) : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowNameText| TimeAxisViewItem::ShowNameHighlight| @@ -71,8 +73,8 @@ RegionView::RegionView (ArdourCanvas::Group* parent, , editor(0) , current_visible_sync_position(0.0) , valid(false) + , _enable_display(false) , _pixel_width(1.0) - , _height(1.0) , in_destructor(false) , wait_for_data(false) { @@ -87,8 +89,8 @@ RegionView::RegionView (const RegionView& other) editor = other.editor; current_visible_sync_position = other.current_visible_sync_position; valid = false; + _enable_display = false; _pixel_width = other._pixel_width; - _height = other._height; } RegionView::RegionView (ArdourCanvas::Group* parent, @@ -103,8 +105,8 @@ RegionView::RegionView (ArdourCanvas::Group* parent, , editor(0) , current_visible_sync_position(0.0) , valid(false) + , _enable_display(false) , _pixel_width(1.0) - , _height(1.0) , in_destructor(false) , wait_for_data(false) { @@ -113,10 +115,10 @@ RegionView::RegionView (ArdourCanvas::Group* parent, void RegionView::init (Gdk::Color& basic_color, bool wfd) { - valid = true; - in_destructor = false; - _height = 0; - wait_for_data = wfd; + valid = true; + _enable_display = false; + in_destructor = false; + wait_for_data = wfd; compute_colors (basic_color); @@ -141,7 +143,10 @@ RegionView::init (Gdk::Color& basic_color, bool wfd) reset_width_dependent_items ((double) _region->length() / samples_per_unit); - set_height (trackview.height); + if (wfd) + _enable_display = true; + + set_y_position_and_height (0, trackview.height - 2); _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed)); @@ -150,7 +155,7 @@ RegionView::init (Gdk::Color& basic_color, bool wfd) set_colors (); - ColorChanged.connect (mem_fun (*this, &RegionView::color_handler)); + ColorsChanged.connect (mem_fun (*this, &RegionView::color_handler)); /* XXX sync mark drag? */ } @@ -252,14 +257,11 @@ RegionView::reset_width_dependent_items (double pixel_width) { TimeAxisViewItem::reset_width_dependent_items (pixel_width); _pixel_width = pixel_width; -} -void -RegionView::set_height (gdouble height) -{ - TimeAxisViewItem::set_height (height - 2); - - _height = height; + for (AutomationChildren::iterator i = _automation_children.begin(); + i != _automation_children.end(); ++i) { + i->second->reset_width_dependent_items(pixel_width); + } } void @@ -283,24 +285,12 @@ RegionView::region_opacity () set_frame_color (); } -void -RegionView::raise () -{ - _region->raise (); -} - void RegionView::raise_to_top () { _region->raise_to_top (); } -void -RegionView::lower () -{ - _region->lower (); -} - void RegionView::lower_to_bottom () { @@ -325,6 +315,11 @@ RegionView::set_position (nframes_t pos, void* src, double* ignored) for (vector::iterator i = ghosts.begin(); i != ghosts.end(); ++i) { (*i)->group->move (delta, 0.0); } + + for (AutomationChildren::iterator i = _automation_children.begin(); + i != _automation_children.end(); ++i) { + i->second->get_canvas_group()->move(delta, 0.0); + } } return ret; @@ -405,26 +400,37 @@ RegionView::hide_region_editor() } } -void -RegionView::region_renamed () +Glib::ustring +RegionView::make_name () const { - string str; + Glib::ustring str; + + // XXX nice to have some good icons for this if (_region->locked()) { str += '>'; str += _region->name(); str += '<'; + } else if (_region->position_locked()) { + str += '{'; + str += _region->name(); + str += '}'; } else { str = _region->name(); } - // speed mismatch handled in audio_region_view.cc - // FIXME: come up with more elegant solution for this - if (_region->muted()) { str = string ("!") + str; } + return str; +} + +void +RegionView::region_renamed () +{ + Glib::ustring str = make_name (); + set_item_name (str, this); set_name_text (str); reset_width_dependent_items (_pixel_width); @@ -483,7 +489,7 @@ RegionView::region_sync_changed () void RegionView::move (double x_delta, double y_delta) { - if (_region->locked() || (x_delta == 0 && y_delta == 0)) { + if (!_region->can_move() || (x_delta == 0 && y_delta == 0)) { return; } @@ -494,6 +500,11 @@ RegionView::move (double x_delta, double y_delta) for (vector::iterator i = ghosts.begin(); i != ghosts.end(); ++i) { (*i)->group->move (x_delta, 0.0); } + + for (AutomationChildren::iterator i = _automation_children.begin(); + i != _automation_children.end(); ++i) { + i->second->get_canvas_group()->move(x_delta, 0.0); + } } void