+/** Region drag in ripple mode */
+
+class RegionRippleDrag : public RegionMoveDrag
+{
+public:
+ RegionRippleDrag (Editor *, ArdourCanvas::Item *, RegionView *, std::list<RegionView*> const &);
+ ~RegionRippleDrag () { delete exclude; }
+
+ void motion (GdkEvent *, bool);
+ void finished (GdkEvent *, bool);
+ void aborted (bool);
+protected:
+ bool y_movement_allowed (int delta_track, double delta_layer, int skip_invisible = 0) const;
+
+private:
+ TimeAxisView *prev_tav; // where regions were most recently dragged from
+ TimeAxisView *orig_tav; // where drag started
+ ARDOUR::framecnt_t prev_amount;
+ ARDOUR::framepos_t prev_position;
+ ARDOUR::framecnt_t selection_length;
+ bool allow_moves_across_tracks; // only if all selected regions are on one track
+ ARDOUR::RegionList *exclude;
+ void add_all_after_to_views (TimeAxisView *tav, ARDOUR::framepos_t where, const RegionSelection &exclude, bool drag_in_progress);
+ void remove_unselected_from_views (ARDOUR::framecnt_t amount, bool move_regions);
+
+};
+
+/** "Drag" to cut a region (action only on button release) */
+class RegionCutDrag : public Drag
+{
+ public:
+ RegionCutDrag (Editor*, ArdourCanvas::Item*, framepos_t);
+ ~RegionCutDrag ();
+
+ void start_grab (GdkEvent *, Gdk::Cursor* c = 0);
+ void motion (GdkEvent*, bool);
+ void finished (GdkEvent*, bool);
+ void aborted (bool);
+
+ private:
+ EditorCursor* line;
+};
+