make dragging a region from the list not crash.
[ardour.git] / gtk2_ardour / automation_region_view.h
index 90fa9f3e44282984c789313ae862dd7260a3cad7..76632901f74a481ada0dfdedfab9628c46cd6c4b 100644 (file)
@@ -1,6 +1,6 @@
 /*
-    Copyright (C) 2007 Paul Davis 
-    Author: Dave Robillard
+    Copyright (C) 2007 Paul Davis
+    Author: David Robillard
 
     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
 #ifndef __gtk_ardour_automation_region_view_h__
 #define __gtk_ardour_automation_region_view_h__
 
-#include <ardour/diskstream.h>
-#include <ardour/types.h>
+#include "ardour/types.h"
 
 #include "region_view.h"
 #include "automation_time_axis.h"
 #include "automation_line.h"
 #include "enums.h"
-#include "canvas.h"
 
 namespace ARDOUR {
        class AutomationList;
@@ -39,42 +37,60 @@ class TimeAxisView;
 class AutomationRegionView : public RegionView
 {
 public:
-       AutomationRegionView(ArdourCanvas::Group*,
+       AutomationRegionView(ArdourCanvas::Container*,
                             AutomationTimeAxisView&,
                             boost::shared_ptr<ARDOUR::Region>,
-                            const ARDOUR::Parameter& parameter,
+                            const Evoral::Parameter& parameter,
                             boost::shared_ptr<ARDOUR::AutomationList>,
-                            double initial_samples_per_unit,
-                            Gdk::Color& basic_color);
+                            double initial_samples_per_pixel,
+                            uint32_t basic_color);
+
+       ~AutomationRegionView();
+
+       void init (bool wfd);
+
+       bool paste (framepos_t                                      pos,
+                   unsigned                                        paste_count,
+                   float                                           times,
+                   boost::shared_ptr<const ARDOUR::AutomationList> slist);
+
+       ARDOUR::DoubleBeatsFramesConverter const & region_relative_time_converter () const {
+               return _region_relative_time_converter;
+       }
+
+       ARDOUR::DoubleBeatsFramesConverter const & source_relative_time_converter () const {
+               return _source_relative_time_converter;
+       }
 
-       ~AutomationRegionView() {}
-       
-       void init (Gdk::Color& basic_color, bool wfd);
-       
        inline AutomationTimeAxisView* automation_view() const
                { return dynamic_cast<AutomationTimeAxisView*>(&trackview); }
-       
+
        boost::shared_ptr<AutomationLine> line() { return _line; }
-       
+
        // We are a ghost.  Meta ghosts?  Crazy talk.
-       virtual GhostRegion* add_ghost(TimeAxisView&) { return NULL; }
-       
+       virtual GhostRegion* add_ghost(TimeAxisView&) { return 0; }
+
+       uint32_t get_fill_color() const;
+
        void set_height (double);
        void reset_width_dependent_items(double pixel_width);
 
 protected:
        void create_line(boost::shared_ptr<ARDOUR::AutomationList> list);
-       bool set_position(nframes_t pos, void* src, double* ignored);
-       void set_y_position_and_height(double y, double h);
-       void region_resized(ARDOUR::Change what_changed);
-       bool canvas_event(GdkEvent* ev);
-       void add_automation_event (GdkEvent* event, nframes_t when, double y);
+       bool set_position(framepos_t pos, void* src, double* ignored);
+       void region_resized (const PBD::PropertyChange&);
+       bool canvas_group_event(GdkEvent* ev);
+       void add_automation_event (GdkEvent* event, framepos_t when, double y, bool with_guard_points);
+       void mouse_mode_changed ();
        void entered();
        void exited();
 
 private:
-       ARDOUR::Parameter                 _parameter;
-       boost::shared_ptr<AutomationLine> _line;
+       ARDOUR::DoubleBeatsFramesConverter _region_relative_time_converter;
+       ARDOUR::DoubleBeatsFramesConverter _source_relative_time_converter;
+       Evoral::Parameter                  _parameter;
+       boost::shared_ptr<AutomationLine>  _line;
+       PBD::ScopedConnection              _mouse_mode_connection;
 };
 
 #endif /* __gtk_ardour_automation_region_view_h__ */