X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_drag.h;h=170c9a80802c84043e8641f790a1780fb2401c3a;hb=67460c2af45d0455e64623572480c064445c2e5b;hp=c10034c83519471e7c5b07f3944c96904fc87617;hpb=7b8adc78b6082efb2c46822ddb5d8347a4e20e9e;p=ardour.git diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index c10034c835..170c9a8080 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2009 Paul Davis + Copyright (C) 2009 Paul Davis 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 @@ -41,7 +41,7 @@ class TimeAxisView; /** Abstract base class for dragging of things within the editor */ class Drag { - + public: Drag (Editor *, ArdourCanvas::Item *); virtual ~Drag () {} @@ -116,7 +116,7 @@ public: protected: nframes64_t adjusted_current_frame (GdkEvent *) const; - + Editor* _editor; ///< our editor ArdourCanvas::Item* _item; ///< our item nframes64_t _pointer_frame_offset; ///< offset from the mouse's position for the drag @@ -136,9 +136,10 @@ protected: bool _x_constrained; ///< true if x motion is constrained, otherwise false bool _y_constrained; ///< true if y motion is constrained, otherwise false bool _was_rolling; ///< true if the session was rolling before the drag started, otherwise false + bool _have_transaction; ///< true if a transaction has been started, false otherwise. Must be set true by derived class. private: - + bool _ending; ///< true if end_grab is in progress, otherwise false bool _had_movement; ///< true if movement has occurred, otherwise false bool _move_threshold_passed; ///< true if the move threshold has been passed, otherwise false @@ -153,12 +154,13 @@ public: virtual ~RegionDrag () {} protected: - + RegionView* _primary; ///< the view that was clicked on (or whatever) to start the drag std::list _views; ///< all views that are being dragged private: void region_going_away (RegionView *); + boost::signals2::scoped_connection death_connection; }; @@ -166,7 +168,7 @@ private: class RegionMotionDrag : public RegionDrag { public: - + RegionMotionDrag (Editor *, ArdourCanvas::Item *, RegionView *, std::list const &, bool); virtual ~RegionMotionDrag () {} @@ -177,13 +179,13 @@ public: protected: struct TimeAxisViewSummary { TimeAxisViewSummary () : height_list(512) {} - + std::bitset<512> tracks; std::vector height_list; int visible_y_low; int visible_y_high; }; - + void copy_regions (GdkEvent *); bool y_movement_disallowed (int, int, int, TimeAxisViewSummary const &) const; std::map > find_time_axis_views_and_layers (); @@ -194,8 +196,8 @@ protected: ); TimeAxisViewSummary get_time_axis_view_summary (); - virtual bool x_move_allowed () const = 0; - + bool x_move_allowed () const; + TimeAxisView* _dest_trackview; ARDOUR::layer_t _dest_layer; bool check_possible (RouteTimeAxisView **, ARDOUR::layer_t *); @@ -215,14 +217,12 @@ public: virtual void start_grab (GdkEvent *, Gdk::Cursor *); void motion (GdkEvent *, bool); void finished (GdkEvent *, bool); - + bool apply_move_threshold () const { return true; } private: - bool x_move_allowed () const; - bool _copy; }; @@ -233,9 +233,6 @@ public: RegionInsertDrag (Editor *, boost::shared_ptr, RouteTimeAxisView*, nframes64_t); void finished (GdkEvent *, bool); - -private: - bool x_move_allowed () const; }; /** Region drag in splice mode */ @@ -281,7 +278,7 @@ private: class NoteDrag : public Drag { - public: + public: NoteDrag (Editor*, ArdourCanvas::Item*); void start_grab (GdkEvent *, Gdk::Cursor* c = 0); @@ -383,7 +380,7 @@ public: private: EditorCursor* _cursor; ///< cursor being dragged bool _stop; ///< true to stop the transport on starting the drag, otherwise false - + }; /** Region fade-in drag */ @@ -421,7 +418,7 @@ public: private: void update_item (ARDOUR::Location *); - + Marker* _marker; ///< marker being dragged std::list _copied_locations; ArdourCanvas::Line* _line; @@ -441,7 +438,7 @@ public: bool active (Editing::MouseMode m); private: - + ControlPoint* _point; double _cumulative_x_drag; double _cumulative_y_drag; @@ -457,7 +454,7 @@ public: void start_grab (GdkEvent *, Gdk::Cursor* c = 0); void motion (GdkEvent *, bool); void finished (GdkEvent *, bool); - + bool active (Editing::MouseMode) { return true; } @@ -497,7 +494,7 @@ class ScrubDrag : public Drag { public: ScrubDrag (Editor *e, ArdourCanvas::Item *i) : Drag (e, i) {} - + void start_grab (GdkEvent *, Gdk::Cursor* c = 0); void motion (GdkEvent *, bool); void finished (GdkEvent *, bool);