make notice about mismatched session/ardour versions more prominent, since you can...
[ardour.git] / gtk2_ardour / automation_line.h
index b78c2da676b365d61a3105f1b5d3a8884d3fc65e..cafeeee2ac1f811bbb145722f6fee0a84f168441 100644 (file)
@@ -80,11 +80,11 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
        bool control_points_adjacent (double xval, uint32_t& before, uint32_t& after);
 
        /* dragging API */
-       virtual void start_drag_single (ControlPoint*, double, float);
-       virtual void start_drag_line (uint32_t, uint32_t, float);
-       virtual void start_drag_multiple (std::list<ControlPoint*>, float, XMLNode *);
-       virtual std::pair<double, float> drag_motion (double, float, bool, bool);
-       virtual void end_drag ();
+        virtual void start_drag_single (ControlPoint*, double, float);
+        virtual void start_drag_line (uint32_t, uint32_t, float);
+        virtual void start_drag_multiple (std::list<ControlPoint*>, float, XMLNode *);
+        virtual std::pair<double, float> drag_motion (double, float, bool, bool with_push, uint32_t& final_index);
+        virtual void end_drag (bool with_push, uint32_t final_index);
 
        ControlPoint* nth (uint32_t);
        ControlPoint const * nth (uint32_t) const;
@@ -113,7 +113,9 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
        ArdourCanvas::Item&  grab_item() const { return *line; }
 
        std::string get_verbose_cursor_string (double) const;
+        std::string get_verbose_cursor_relative_string (double, double) const;
        std::string fraction_to_string (double) const;
+        std::string fraction_to_relative_string (double, double) const;
        double string_to_fraction (std::string const &) const;
        void   view_to_model_coord (double& x, double& y) const;
        void   view_to_model_coord_y (double &) const;
@@ -164,12 +166,13 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
        bool _our_time_converter;
 
        VisibleAspects _visible;
-
-       bool    _uses_gain_mapping        : 1;
-       bool    terminal_points_can_slide : 1;
-       bool    update_pending            : 1;
-       bool    no_draw                   : 1;
-       bool    _is_boolean               : 1;
+        bool    _uses_gain_mapping;
+        bool    terminal_points_can_slide;
+        bool    update_pending;
+        bool    have_timeout;
+        bool    no_draw;
+        bool    _is_boolean;
        /** true if we did a push at any point during the current drag */
        bool    did_push;
 
@@ -179,9 +182,26 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
        ArdourCanvas::Points        line_points; /* coordinates for canvas line */
        std::vector<ControlPoint*>  control_points; /* visible control points */
 
+        class ContiguousControlPoints : public std::list<ControlPoint*> {
+         public:
+           ContiguousControlPoints (AutomationLine& al);
+           double clamp_dx (double dx);
+           void move (double dx, double dy);
+           void compute_x_bounds ();
+         private:
+           AutomationLine& line;
+           double before_x;
+           double after_x;
+       };
+
+        friend class ContiguousControlPoints;
+
+       typedef boost::shared_ptr<ContiguousControlPoints> CCP;
+        std::vector<CCP> contiguous_points;
+
        void sync_model_with_view_point (ControlPoint&);
        void sync_model_with_view_points (std::list<ControlPoint*>);
-       void start_drag_common (double, float);
+        void start_drag_common (double, float);
 
        virtual void change_model (ARDOUR::AutomationList::iterator, double x, double y);