MIDI metering.
[ardour.git] / gtk2_ardour / region_view.cc
index c615fdae0cb3cde0f35231c2b021f2820fdb4c95..9ee64d27d76eaa645fcfae3b4f330e8c40a863d5 100644 (file)
@@ -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: regionview.cc 691 2006-07-23 12:03:19Z drobilla $
 */
 
 #include <cmath>
@@ -25,6 +24,7 @@
 #include <gtkmm.h>
 
 #include <gtkmm2ext/gtk_ui.h>
+#include <pbd/stacktrace.h>
 
 #include <ardour/playlist.h>
 #include <ardour/audioregion.h>
@@ -68,17 +68,27 @@ RegionView::RegionView (ArdourCanvas::Group* parent,
                                                          TimeAxisViewItem::ShowFrame))
          , _region (r)
          , sync_mark(0)
-         , no_wave_msg(0)
          , editor(0)
          , current_visible_sync_position(0.0)
          , valid(false)
          , _pixel_width(1.0)
-         , _height(1.0)
          , in_destructor(false)
          , wait_for_data(false)
 {
 }
 
+RegionView::RegionView (const RegionView& other)
+       : TimeAxisViewItem (other)
+{
+       /* derived concrete type will call init () */
+
+       _region = other._region;
+       editor = other.editor;
+       current_visible_sync_position = other.current_visible_sync_position;
+       valid = false;
+       _pixel_width = other._pixel_width;
+}
+
 RegionView::RegionView (ArdourCanvas::Group*         parent, 
                         TimeAxisView&                tv,
                         boost::shared_ptr<ARDOUR::Region> r,
@@ -88,12 +98,10 @@ RegionView::RegionView (ArdourCanvas::Group*         parent,
        : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), visibility)
        , _region (r)
        , sync_mark(0)
-       , no_wave_msg(0)
        , editor(0)
        , current_visible_sync_position(0.0)
        , valid(false)
        , _pixel_width(1.0)
-       , _height(1.0)
        , in_destructor(false)
        , wait_for_data(false)
 {
@@ -102,10 +110,8 @@ RegionView::RegionView (ArdourCanvas::Group*         parent,
 void
 RegionView::init (Gdk::Color& basic_color, bool wfd)
 {
-       editor        = 0;
        valid         = true;
        in_destructor = false;
-       _height       = 0;
        wait_for_data = wfd;
 
        compute_colors (basic_color);
@@ -131,7 +137,7 @@ RegionView::init (Gdk::Color& basic_color, bool wfd)
 
        reset_width_dependent_items ((double) _region->length() / samples_per_unit);
 
-       set_height (trackview.height);
+       set_y_position_and_height (0, trackview.height);
 
        _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed));
 
@@ -265,24 +271,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 ()
 {
@@ -367,6 +361,18 @@ RegionView::set_frame_color ()
        TimeAxisViewItem::set_frame_color ();
 }
 
+void
+RegionView::fake_set_opaque (bool yn)
+{
+       if (yn) {
+               fill_opacity = 130;
+       } else {
+               fill_opacity = 60;
+       }
+
+       TimeAxisViewItem::set_frame_color ();
+}
+
 void
 RegionView::hide_region_editor()
 {
@@ -375,27 +381,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();
        }
 
-       if (_region->speed_mismatch (trackview.session().frame_rate())) {
-               str = string ("*") + str;
-       }
-
        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);
@@ -454,7 +470,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;
        }