/*
- 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
/** Abstract base class for dragging of things within the editor */
class Drag
{
-
+
public:
Drag (Editor *, ArdourCanvas::Item *);
virtual ~Drag () {}
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
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
virtual ~RegionDrag () {}
protected:
-
+
RegionView* _primary; ///< the view that was clicked on (or whatever) to start the drag
std::list<RegionView*> _views; ///< all views that are being dragged
private:
void region_going_away (RegionView *);
+ boost::signals2::scoped_connection death_connection;
};
class RegionMotionDrag : public RegionDrag
{
public:
-
+
RegionMotionDrag (Editor *, ArdourCanvas::Item *, RegionView *, std::list<RegionView*> const &, bool);
virtual ~RegionMotionDrag () {}
protected:
struct TimeAxisViewSummary {
TimeAxisViewSummary () : height_list(512) {}
-
+
std::bitset<512> tracks;
std::vector<int32_t> 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<RegionView*, std::pair<RouteTimeAxisView*, int> > find_time_axis_views_and_layers ();
);
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 *);
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;
};
RegionInsertDrag (Editor *, boost::shared_ptr<ARDOUR::Region>, RouteTimeAxisView*, nframes64_t);
void finished (GdkEvent *, bool);
-
-private:
- bool x_move_allowed () const;
};
/** Region drag in splice mode */
class NoteDrag : public Drag
{
- public:
+ public:
NoteDrag (Editor*, ArdourCanvas::Item*);
void start_grab (GdkEvent *, Gdk::Cursor* c = 0);
private:
EditorCursor* _cursor; ///< cursor being dragged
bool _stop; ///< true to stop the transport on starting the drag, otherwise false
-
+
};
/** Region fade-in drag */
private:
void update_item (ARDOUR::Location *);
-
+
Marker* _marker; ///< marker being dragged
std::list<ARDOUR::Location*> _copied_locations;
ArdourCanvas::Line* _line;
bool active (Editing::MouseMode m);
private:
-
+
ControlPoint* _point;
double _cumulative_x_drag;
double _cumulative_y_drag;
void start_grab (GdkEvent *, Gdk::Cursor* c = 0);
void motion (GdkEvent *, bool);
void finished (GdkEvent *, bool);
-
+
bool active (Editing::MouseMode) {
return true;
}
{
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);