add canvas item types to enum system
[ardour.git] / gtk2_ardour / editor_drag.h
index 3cfb38d02029d38e6e4569a9298be8b822f90a35..3f4c82d2d006ac9116d711812209ff4a6c3597b7 100644 (file)
@@ -54,6 +54,7 @@ public:
        ~DragManager ();
 
        bool motion_handler (GdkEvent *, bool);
+       bool window_motion_handler (GdkEvent *, bool);
 
        void abort ();
        void add (Drag *);
@@ -62,6 +63,8 @@ public:
        bool end_grab (GdkEvent *);
        bool have_item (ArdourCanvas::Item *) const;
 
+        void mark_double_click ();
+
        /** @return true if an end drag or abort is in progress */
        bool ending () const {
                return _ending;
@@ -71,12 +74,12 @@ public:
                return !_drags.empty ();
        }
 
-       /** @return current pointer x position in trackview coordinates */
+       /** @return current pointer x position in canvas coordinates */
        double current_pointer_x () const {
                return _current_pointer_x;
        }
 
-       /** @return current pointer y position in trackview coordinates */
+       /** @return current pointer y position in canvas coordinates */
        double current_pointer_y () const {
                return _current_pointer_y;
        }
@@ -90,8 +93,8 @@ private:
        Editor* _editor;
        std::list<Drag*> _drags;
        bool _ending; ///< true if end_grab or abort is in progress, otherwise false
-       double _current_pointer_x; ///< trackview x of the current pointer
-       double _current_pointer_y; ///< trackview y of the current pointer
+       double _current_pointer_x; ///< canvas-coordinate space x of the current pointer
+       double _current_pointer_y; ///< canvas-coordinate space y of the current pointer
        ARDOUR::framepos_t _current_pointer_frame; ///< frame that the pointer is now at
        bool _old_follow_playhead; ///< state of Editor::follow_playhead() before the drags started
 };
@@ -100,7 +103,7 @@ private:
 class Drag
 {
 public:
-       Drag (Editor *, ArdourCanvas::Item *);
+        Drag (Editor *, ArdourCanvas::Item *);
        virtual ~Drag () {}
 
        void set_manager (DragManager* m) {
@@ -119,6 +122,9 @@ public:
        ARDOUR::framepos_t adjusted_frame (ARDOUR::framepos_t, GdkEvent const *, bool snap = true) const;
        ARDOUR::framepos_t adjusted_current_frame (GdkEvent const *, bool snap = true) const;
 
+        bool was_double_click() const { return _was_double_click; }
+        void set_double_click (bool yn) { _was_double_click = yn; }
+
        /** Called to start a grab of an item.
         *  @param e Event that caused the grab to start.
         *  @param c Cursor to use, or 0.
@@ -224,6 +230,7 @@ protected:
 private:
 
        bool _move_threshold_passed; ///< true if the move threshold has been passed, otherwise false
+        bool _was_double_click; ///< true if drag initiated by a double click event
        double _grab_x; ///< trackview x of the grab start position
        double _grab_y; ///< trackview y of the grab start position
        double _last_pointer_x; ///< trackview x of the pointer last time a motion occurred
@@ -499,7 +506,6 @@ private:
        double _cumulative_dx;
 };
 
-#ifdef WITH_VIDEOTIMELINE
 /** Container for details about audio regions being dragged along with video */
 class AVDraggingView
 {
@@ -512,7 +518,6 @@ public:
 
 /** Drag of video offset */
 class VideoTimeLineDrag : public Drag
-       //TODO , public sigc::trackable
 {
 public:
        VideoTimeLineDrag (Editor *e, ArdourCanvas::Item *i);
@@ -538,7 +543,6 @@ private:
        ARDOUR::frameoffset_t _startdrag_video_offset;
        ARDOUR::frameoffset_t _max_backwards_drag;
 };
-#endif
 
 /** Drag to trim region(s) */
 class TrimDrag : public RegionDrag
@@ -629,7 +633,7 @@ private:
 class CursorDrag : public Drag
 {
 public:
-       CursorDrag (Editor *, ArdourCanvas::Item *, bool);
+       CursorDrag (Editor *, EditorCursor&, bool);
 
        void start_grab (GdkEvent *, Gdk::Cursor* c = 0);
        void motion (GdkEvent *, bool);
@@ -651,6 +655,7 @@ public:
 private:
        void fake_locate (framepos_t);
 
+        EditorCursor& _cursor;
        bool _stop; ///< true to stop the transport on starting the drag, otherwise false
        double _grab_zoom; ///< editor frames per unit when our grab started
 };
@@ -695,7 +700,7 @@ public:
 class MarkerDrag : public Drag
 {
 public:
-       MarkerDrag (Editor *, ArdourCanvas::Item *);
+        MarkerDrag (Editor *, ArdourCanvas::Item *);
        ~MarkerDrag ();
 
        void start_grab (GdkEvent *, Gdk::Cursor* c = 0);