open un-writable sessions without complaining, and desensitize all/most actions that...
[ardour.git] / gtk2_ardour / region_view.cc
index e3ab94e79e7e7c5f19405e576d1012671f3f215c..47d0c38ef91a553d56b87b2be0e4a73afb3ab9b2 100644 (file)
@@ -62,8 +62,9 @@ RegionView::RegionView (ArdourCanvas::Group* parent,
                         TimeAxisView&        tv,
                         boost::shared_ptr<ARDOUR::Region> r,
                         double               spu,
-                        Gdk::Color&          basic_color)
-       : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(),
+                        Gdk::Color&          basic_color
+                                               )
+       : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), false,
                            TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowNameText|
                                                          TimeAxisViewItem::ShowNameHighlight|
                                                          TimeAxisViewItem::ShowFrame))
@@ -74,7 +75,6 @@ RegionView::RegionView (ArdourCanvas::Group* parent,
          , current_visible_sync_position(0.0)
          , valid(false)
          , _pixel_width(1.0)
-         , _height(1.0)
          , in_destructor(false)
          , wait_for_data(false)
 {
@@ -86,11 +86,24 @@ RegionView::RegionView (const RegionView& 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;
-       _height = other._height;
+}
+
+RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other_region)
+       : TimeAxisViewItem (other)
+{
+       /* this is a pseudo-copy constructor used when dragging regions 
+          around on the canvas.
+       */
+
+       /* derived concrete type will call init () */
+
+       _region = other_region;
+       current_visible_sync_position = other.current_visible_sync_position;
+       valid = false;
+       _pixel_width = other._pixel_width;
 }
 
 RegionView::RegionView (ArdourCanvas::Group*         parent, 
@@ -98,8 +111,9 @@ RegionView::RegionView (ArdourCanvas::Group*         parent,
                         boost::shared_ptr<ARDOUR::Region> r,
                         double                       spu,
                         Gdk::Color&                  basic_color,
+                                               bool recording,
                         TimeAxisViewItem::Visibility visibility)
-       : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), visibility)
+       : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), recording, visibility)
        , _region (r)
        , sync_mark(0)
        , sync_line(0)
@@ -107,7 +121,6 @@ RegionView::RegionView (ArdourCanvas::Group*         parent,
        , current_visible_sync_position(0.0)
        , valid(false)
        , _pixel_width(1.0)
-       , _height(1.0)
        , in_destructor(false)
        , wait_for_data(false)
 {
@@ -116,34 +129,35 @@ 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;
        sync_mark     = 0;
        sync_line     = 0;
 
        compute_colors (basic_color);
 
-       name_highlight->set_data ("regionview", this);
+       if (name_highlight) {
+               name_highlight->set_data ("regionview", this);
+               name_highlight->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_name_highlight_event), name_highlight, this));
+       }
 
-       if (name_text) {
-               name_text->set_data ("regionview", this);
+       if (name_pixbuf) {
+               name_pixbuf->set_data ("regionview", this);
        }
 
        reset_width_dependent_items ((double) _region->length() / samples_per_unit);
 
-       set_height (trackview.height);
+       set_height (trackview.current_height());
 
        _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed));
 
        group->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_event), group, this));
-       name_highlight->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_name_highlight_event), name_highlight, this));
 
        set_colors ();
 
        ColorsChanged.connect (mem_fun (*this, &RegionView::color_handler));
-
        /* XXX sync mark drag? */
 }
 
@@ -202,7 +216,8 @@ RegionView::region_changed (Change what_changed)
                region_sync_changed ();
        }
        if (what_changed & Region::LayerChanged) {
-               region_layered ();
+               // this is handled by the playlist i believe
+               //region_layered ();
        }
        if (what_changed & Region::LockChanged) {
                region_locked ();
@@ -251,7 +266,7 @@ RegionView::region_layered ()
 {
        RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*>(&get_time_axis_view());
        assert(rtv);
-       rtv->view()->region_layered (this);
+       //rtv->view()->region_layered (this);
 }
        
 void
@@ -378,8 +393,8 @@ RegionView::fake_set_opaque (bool yn)
        } else {
                fill_opacity = 0;
        }
-
-       TimeAxisViewItem::set_frame_color ();
+       
+       set_frame_color ();
 }
 
 void