Extend time canvas to use available space to the rigt (and line up nicely).
[ardour.git] / gtk2_ardour / midi_region_view.h
index 3161d0eb059db222f4ac9610134c2f575bf88c5c..4a00102cecd56f49321e4e30c7b48ff4e9f0fd75 100644 (file)
@@ -25,6 +25,7 @@
 #include <libgnomecanvasmm/polygon.h>
 #include <sigc++/signal.h>
 #include <ardour/midi_region.h>
+#include <ardour/types.h>
 
 #include "region_view.h"
 #include "route_time_axis.h"
@@ -46,21 +47,29 @@ class MidiRegionView : public RegionView
 {
   public:
        MidiRegionView (ArdourCanvas::Group *, 
-                RouteTimeAxisView&,
-                ARDOUR::MidiRegion&,
-                double initial_samples_per_unit,
-                Gdk::Color& basic_color);
+                       RouteTimeAxisView&,
+                       boost::shared_ptr<ARDOUR::MidiRegion>,
+                       double initial_samples_per_unit,
+                       Gdk::Color& basic_color);
 
        ~MidiRegionView ();
        
        virtual void init (Gdk::Color& base_color, bool wait_for_data = false);
        
-       ARDOUR::MidiRegion& midi_region() const;
+       boost::shared_ptr<ARDOUR::MidiRegion> midi_region() const;
+       
+       void set_y_position_and_height (double, double);
     
     void show_region_editor ();
 
     GhostRegion* add_ghost (AutomationTimeAxisView&);
 
+       void add_event(const ARDOUR::MidiEvent& ev);
+
+       void begin_write();
+       void end_write();
+       void extend_active_notes();
+
   protected:
 
     /* this constructor allows derived types
@@ -69,16 +78,25 @@ class MidiRegionView : public RegionView
     */
     
     MidiRegionView (ArdourCanvas::Group *, 
-                            RouteTimeAxisView&,
-                            ARDOUR::MidiRegion&,
-                            double      samples_per_unit,
-                            Gdk::Color& basic_color,
-                            TimeAxisViewItem::Visibility);
+                       RouteTimeAxisView&,
+                       boost::shared_ptr<ARDOUR::MidiRegion>,
+                       double samples_per_unit,
+                       Gdk::Color& basic_color,
+                       TimeAxisViewItem::Visibility);
     
-    void region_moved (void *);
+    void region_resized (ARDOUR::Change);
 
     void set_flags (XMLNode *);
     void store_flags ();
+    
+       void reset_width_dependent_items (double pixel_width);
+
+  private:
+
+       void display_events();
+
+       std::vector<ArdourCanvas::Item*> _events;
+       ArdourCanvas::SimpleRect**       _active_notes;
 };
 
 #endif /* __gtk_ardour_midi_region_view_h__ */