Ardour  9.5-34-g533997b920
editing_context.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2005-2007 Doug McLain <doug@nostar.net>
3  * Copyright (C) 2005-2018 Paul Davis <paul@linuxaudiosystems.com>
4  * Copyright (C) 2005 Karsten Wiese <fzuuzf@googlemail.com>
5  * Copyright (C) 2006-2009 Sampo Savolainen <v2@iki.fi>
6  * Copyright (C) 2006-2015 David Robillard <d@drobilla.net>
7  * Copyright (C) 2006-2017 Tim Mayberry <mojofunk@gmail.com>
8  * Copyright (C) 2007-2012 Carl Hetherington <carl@carlh.net>
9  * Copyright (C) 2008-2011 Sakari Bergen <sakari.bergen@beatwaves.net>
10  * Copyright (C) 2008 Hans Baier <hansfbaier@googlemail.com>
11  * Copyright (C) 2013-2015 Colin Fletcher <colin.m.fletcher@googlemail.com>
12  * Copyright (C) 2013-2019 Robin Gareus <robin@gareus.org>
13  * Copyright (C) 2014-2017 Nick Mainsbridge <mainsbridge@gmail.com>
14  * Copyright (C) 2014-2019 Ben Loftis <ben@harrisonconsoles.com>
15  * Copyright (C) 2015-2019 Damien Zammit <damien@zamaudio.com>
16  * Copyright (C) 2015 AndrĂ© Nusser <andre.nusser@googlemail.com>
17  *
18  * This program is free software; you can redistribute it and/or modify
19  * it under the terms of the GNU General Public License as published by
20  * the Free Software Foundation; either version 2 of the License, or
21  * (at your option) any later version.
22  *
23  * This program is distributed in the hope that it will be useful,
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26  * GNU General Public License for more details.
27  *
28  * You should have received a copy of the GNU General Public License along
29  * with this program; if not, write to the Free Software Foundation, Inc.,
30  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
31  */
32 
33 #pragma once
34 
35 #include "pbd/signals.h"
36 
37 #include "temporal/timeline.h"
38 #include "temporal/scope.h"
39 
40 #include "ardour/chord_provider.h"
41 #include "ardour/midi_operator.h"
42 #include "ardour/session_handle.h"
43 #include "ardour/types.h"
44 
45 #include "canvas/ruler.h"
46 
47 #include "widgets/ardour_button.h"
49 #include "widgets/ardour_spacer.h"
50 
51 #include "axis_provider.h"
52 #include "editing.h"
53 #include "editor_items.h"
54 #include "selection.h"
55 
58 
59 namespace Temporal {
60  class TempoMap;
61 }
62 
63 namespace ARDOUR {
64  class Strum;
65 }
66 
67 class XMLNode;
68 
69 class ControlPoint;
70 class CursorContext;
71 class DragManager;
72 class EditorCursor;
73 class EditNoteDialog;
74 class GridLines;
75 class MidiRegionView;
76 class MidiView;
77 class MouseCursors;
78 class PianorollWindow;
79 class VerboseCursor;
80 class TrackViewList;
81 class Selection;
82 class SelectionMemento;
83 class SelectableOwner;
84 
85 class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider, public Temporal::ScopedTempoMapOwner, public ARDOUR::ChordProvider, public virtual sigc::trackable
86 {
87  public:
88  EditingContext (std::string const &);
90 
91  std::string editor_name() const { return _name; }
92  std::string scope_name() const { return _name; }
93 
95 
97 
98  DragManager* drags () const {
99  return _drags;
100  }
101 
102  bool drag_active () const;
104 
105  virtual std::list<SelectableOwner*> selectable_owners() = 0;
106 
107  virtual ArdourCanvas::Duple upper_left() const { return ArdourCanvas::Duple (0, 0); }
108 
109  virtual void select_all_within (Temporal::timepos_t const &, Temporal::timepos_t const &, double, double, std::list<SelectableOwner*> const &, ARDOUR::SelectionOperation, bool) = 0;
110  virtual void get_per_region_note_selection (std::list<std::pair<PBD::ID, std::set<std::shared_ptr<Evoral::Note<Temporal::Beats> > > > >&) const = 0;
111  virtual void get_regionviews_by_id (PBD::ID const id, RegionSelection & regions) const = 0;
113  virtual TrackViewList axis_views_from_routes (std::shared_ptr<ARDOUR::RouteList>) const = 0;
114 
116  virtual ArdourMarker* find_marker_from_location_id (PBD::ID const&, bool) const = 0;
119 
120 
123 
124  virtual void maybe_autoscroll (bool, bool, bool from_headers) = 0;
125  virtual void stop_canvas_autoscroll () = 0;
126  virtual bool autoscroll_active() const = 0;
127 
132 
133  virtual void redisplay_grid (bool immediate_redraw) = 0;
135 
138 
143  void set_follow_playhead (bool yn, bool catch_up = true);
144 
147 
149  bool follow_playhead () const;
150 
152  bool use_context_click = false,
153  bool from_outside_canvas = false) {
154  return _get_preferred_edit_position (eio, use_context_click, from_outside_canvas);
155  }
156 
157  virtual void instant_save() = 0;
158 
159  virtual void begin_selection_op_history () = 0;
160  virtual void begin_reversible_selection_op (std::string cmd_name) = 0;
161  virtual void commit_reversible_selection_op () = 0;
162  virtual void abort_reversible_selection_op () = 0;
163  virtual void undo_selection_op () = 0;
164  virtual void redo_selection_op () = 0;
165 
166  /* Some EditingContexts may defer to the Session, which IS-A
167  * HistoryOwner (Editor does this).
168  *
169  * Others may themselves have the IS-A HistoryOwner inheritance, and so
170  * they just proxy back to their base class (CueEditor does this).
171  */
172 
173  virtual PBD::HistoryOwner& history() = 0;
174 
175  virtual void add_command (PBD::Command *) = 0;
176  virtual void add_commands (std::vector<PBD::Command *>) = 0;
177  virtual void begin_reversible_command (std::string cmd_name) = 0;
178  virtual void begin_reversible_command (GQuark) = 0;
179  virtual void abort_reversible_command () = 0;
180  virtual void commit_reversible_command () = 0;
181 
183 
185 
186  void temporal_zoom_step (bool zoom_out);
187  void temporal_zoom_step_scale (bool zoom_out, double scale);
188  void temporal_zoom_step_mouse_focus (bool zoom_out);
189  void temporal_zoom_step_mouse_focus_scale (bool zoom_out, double scale);
190 
194  void temporal_zoom_to_sample (bool coarser, samplepos_t sample);
195 
196  double timeline_origin() const { return _timeline_origin; }
197 
198  /* NOTE: these functions assume that the "pixel" coordinate is
199  in canvas coordinates. These coordinates already take into
200  account any scrolling offsets.
201  */
202 
204 
205  /* pixel can be less than zero when motion events are
206  processed. Since the pixel value is in canvas units (since
207  it comes from an event delivered to the canvas), we've
208  already run the window->canvas transform, that means that
209  the location *really* is "off to the right" and thus really
210  is "before the start".
211  */
212 
213  if (pixel >= _timeline_origin) {
214  return (pixel - _timeline_origin) * samples_per_pixel;
215  } else {
216  return 0;
217  }
218  }
219 
220  /* It makes no sense to ever call these functions to convert to or from a
221  * non-timeline relative pixel position, so they all assume that is
222  * what they are being asked to do.
223  */
224 
225  samplepos_t pixel_to_sample (double pixel) const {
226  return pixel * samples_per_pixel;
227  }
228 
229  double sample_to_pixel (samplepos_t sample) const {
230  return round (sample / (double) samples_per_pixel);
231  }
232 
233  double sample_to_pixel_unrounded (samplepos_t sample) const {
234  return (sample / (double) samples_per_pixel);
235  }
236 
237  double time_to_pixel (Temporal::timepos_t const & pos) const;
238  double time_to_pixel_unrounded (Temporal::timepos_t const & pos) const;
239 
241 
242  /* deprecated, prefer time_delta_to_pixel
243  * first taking the duation and then rounding leads to different results:
244  * duration_to_pixels (start.distance(end)) != time_to_pixel (end) - time_to_pixel (start)
245  */
246  double duration_to_pixels (Temporal::timecnt_t const & pos) const;
248 
249  samplecnt_t pixel_duration_to_samples (double pixels) const {
250  return pixels * samples_per_pixel;
251  }
252 
253  /* These two convert between timeline-relative x-axis pixel positions and
254  * global canvas ones.
255  */
256 
257  double timeline_to_canvas (double p) const { return p + _timeline_origin; }
258  double canvas_to_timeline (double p) const { return p - _timeline_origin; }
259 
260  double visible_canvas_width () const { return _visible_canvas_width; }
261  double visible_canvas_height () const { return _visible_canvas_height; }
262 
268  Temporal::timepos_t canvas_event_time (GdkEvent const*, double* px = 0, double* py = 0) const;
269 
273  samplepos_t canvas_event_sample (GdkEvent const * event, double* pcx = nullptr, double* pcy = nullptr) const;
274 
275  virtual bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item*) = 0;
277  virtual bool canvas_velocity_event (GdkEvent* event, ArdourCanvas::Item*) = 0;
279  virtual bool canvas_cue_start_event (GdkEvent* event, ArdourCanvas::Item*) { return true; }
280  virtual bool canvas_cue_end_event (GdkEvent* event, ArdourCanvas::Item*) { return true; }
281  virtual bool canvas_bg_event (GdkEvent* event, ArdourCanvas::Item*) = 0;
282 
286 
289 
292  bool grid_musical () const;
293 
299 
301  void set_draw_velocity (int);
302  void set_draw_channel (int);
303  virtual void set_note_mode (ARDOUR::NoteMode) {}
304 
306  int draw_velocity () const;
307  int draw_channel () const;
308  virtual ARDOUR::NoteMode note_mode() const { return ARDOUR::Sustained; }
309 
311 
312  virtual void snap_to (Temporal::timepos_t & first,
315  bool ensure_snap = false) const;
316 
318  GdkEvent const* ev,
321  bool ensure_snap = false) const;
322 
324  Temporal::RoundMode direction,
325  ARDOUR::SnapPref gpref) const;
326 
327  virtual double get_y_origin () const = 0;
328 
330  void reset_y_origin (double);
332  virtual double max_extents_scale() const { return 1.0; }
333  virtual void set_samples_per_pixel (samplecnt_t) = 0;
334 
335  virtual void cycle_zoom_focus ();
336  virtual void set_zoom_focus (Editing::ZoomFocus) = 0;
338 
340 
341  virtual void reposition_and_zoom (samplepos_t, double) = 0;
342 
343  sigc::signal<void> ZoomChanged;
344 
345  virtual Selection& get_selection() const { return *selection; }
346  virtual Selection& get_cut_buffer () const { return *cut_buffer; }
347 
349 
350  virtual void point_selection_changed () = 0;
351  virtual void region_selection_changed ();
352 
358  virtual void set_mouse_mode (Editing::MouseMode, bool force = false);
362  virtual void step_mouse_mode (bool next) = 0;
369 
371  virtual bool internal_editing() const = 0;
372 
373  virtual bool get_smart_mode() const { return false; }
374 
377 
378  struct CursorRAII {
380  : ec (e), old_cursor (ec.get_canvas_cursor ()) { ec.set_canvas_cursor (new_cursor); }
382 
385  };
386 
387  virtual Gdk::Cursor* get_canvas_cursor () const;
388  static MouseCursors const* cursors () {
389  return _cursors;
390  }
391  virtual VerboseCursor& verbose_cursor () const {
392  return *_verbose_cursor;
393  }
394 
395  virtual void note_entered () {}
396  virtual void note_left () {}
397 
398  virtual void set_snapped_cursor_position (Temporal::timepos_t const & pos) = 0;
399 
400  static sigc::signal<void> DropDownKeys;
401 
404 
405  typedef std::vector<MidiView*> MidiViews;
406 
407  /* MIDI actions, proxied to selected MidiRegionView(s) */
413  virtual void midi_action (void (MidiView::*method)());
414  std::vector<MidiView*> filter_to_unique_midi_region_views (RegionSelection const & rs) const;
415  std::vector<MidiView*> filter_to_unique_midi_region_views (MidiViews const & ms) const;
416 
419  void legatize_region (bool shrink_only);
421 
422  void quantize_regions (const MidiViews& rs);
423  void legatize_regions (const MidiViews& rs, bool shrink_only);
424  void strum_notes (const MidiViews& rs, bool forward);
425  void transform_regions (const MidiViews& rs);
426  void transpose_regions (const MidiViews& rs);
427 
429 
430  static bool need_shared_actions;
431  void register_midi_actions (Gtkmm2ext::Bindings*, std::string const &);
432  void register_common_actions (Gtkmm2ext::Bindings*, std::string const &);
433  void register_automation_actions (Gtkmm2ext::Bindings*, std::string const &);
434  virtual void set_action_defaults ();
437 
439 
444  virtual bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*) { return false; }
445 
447 
448  virtual void set_horizontal_position (double);
449  double horizontal_position () const;
450 
451  virtual samplecnt_t current_page_samples() const = 0;
452 
454  virtual ArdourCanvas::GtkCanvas* get_canvas() const = 0;
455 
458 
460  void pre_render ();
461 
463 
464  virtual Gdk::Cursor* which_track_cursor () const = 0;
465  virtual Gdk::Cursor* which_mode_cursor () const = 0;
466  virtual Gdk::Cursor* which_trim_cursor (bool left_side) const = 0;
467  virtual Gdk::Cursor* which_canvas_cursor (ItemType type) const = 0;
468 
472  void undo (uint32_t n = 1) { do_undo (n); }
473 
477  void redo (uint32_t n = 1) { do_redo (n); }
478 
479  virtual void history_changed() = 0;
481 
483 
487  samplepos_t window_event_sample (GdkEvent const*, double* px = 0, double* py = 0) const;
488 
489  /* returns false if mouse pointer is not in track or marker canvas
490  */
491  bool mouse_sample (samplepos_t&, bool& in_track_canvas) const;
492 
493  /* editing actions */
494 
495  virtual void delete_ () = 0;
496  virtual void paste (float times, bool from_context_menu) = 0;
497  virtual void keyboard_paste () = 0;
498  virtual void cut_copy (Editing::CutCopyOp) = 0;
499 
500  void cut ();
501  void copy ();
502  void alt_delete_ ();
503 
504  virtual void update_grid ();
505 
506  virtual bool allow_trim_cursors () const;
507  virtual void make_a_region() {}
508 
511 
514 
515  /* playhead/screen stuff */
516 
517  void set_stationary_playhead (bool yn);
519  bool stationary_playhead() const;
520 
521  bool dragging_playhead () const { return _dragging_playhead; }
522 
524  AutomationRecord () : state (0) , line (nullptr) {}
525  AutomationRecord (XMLNode* s, const AutomationLine* l) : state (s) , line (l) {}
526 
529  std::shared_ptr<Evoral::ControlList> copy;
530  };
531 
533 
534  bool get_midi_chord (int root_pitch, std::vector<int>& pitches) const { return false; }
535  Glib::RefPtr<Gtk::RadioAction> draw_chord_action (int num);
536  Glib::RefPtr<Gtk::RadioAction> no_chord_action () { return _no_chord_action; }
537 
538  static std::vector<std::string> const & chord_name_list() { return _chord_name_list; }
539  static void change_chord_list (std::vector<std::string>::size_type, std::string const & new_chord_name);
540  static PBD::Signal<void()> ChordsChanged;
541 
542  std::string const & draw_chord_name() const { return _draw_chord_name; }
543  bool have_draw_chord() const { return !_draw_chord_name.empty(); }
544 
545  virtual void add_semitone_interval (int semitones);
546 
547  void pianoroll_edit ();
549 
550  protected:
551  std::string _name;
553 
554  Glib::RefPtr<Gtk::ActionGroup> _midi_actions;
555  Glib::RefPtr<Gtk::ActionGroup> _common_actions;
556  Glib::RefPtr<Gtk::ActionGroup> _automation_actions;
557  Glib::RefPtr<Gtk::ActionGroup> editor_actions;
558  Glib::RefPtr<Gtk::ActionGroup> snap_actions;
559  Glib::RefPtr<Gtk::ActionGroup> length_actions;
560  Glib::RefPtr<Gtk::ActionGroup> channel_actions;
561  Glib::RefPtr<Gtk::ActionGroup> velocity_actions;
562  Glib::RefPtr<Gtk::ActionGroup> chord_actions;
563  Glib::RefPtr<Gtk::ActionGroup> zoom_actions;
564 
565  virtual void load_shared_bindings ();
566 
567  virtual Gtk::Window* transient_parent () = 0;
568 
573 
574  static std::vector<std::string> grid_type_strings;
575  static std::vector<std::string> grid_type_short_labels;
576 
577  std::map<Editing::GridType, Glib::RefPtr<Gtk::RadioAction> > grid_actions;
578  std::map<Editing::SnapMode, Glib::RefPtr<Gtk::RadioAction> > snap_mode_actions;
579  std::map<Editing::GridType, Glib::RefPtr<Gtk::RadioAction> > draw_length_actions;
580  std::map<Editing::MouseMode, Glib::RefPtr<Gtk::RadioAction> > mouse_mode_actions;
581  std::map<ARDOUR::NoteMode, Glib::RefPtr<Gtk::RadioAction> > note_mode_actions;
582  std::map<Editing::ZoomFocus, Glib::RefPtr<Gtk::RadioAction> > zoom_focus_actions;
583  std::map<int, Glib::RefPtr<Gtk::RadioAction> > draw_velocity_actions;
584  std::map<int, Glib::RefPtr<Gtk::RadioAction> > draw_channel_actions;
585  std::vector<Glib::RefPtr<Gtk::RadioAction> > draw_chord_actions;
586  Glib::RefPtr<Gtk::RadioAction> _no_chord_action;
587 
588  void draw_chord_chosen (int);
593 
594  sigc::signal<void> DrawLengthChanged;
595  sigc::signal<void> DrawVelocityChanged;
596  sigc::signal<void> DrawChannelChanged;
597 
601 
603 
606 
611 
614 
619 
623 
626 
628  virtual void note_mode_clicked() {}
629  virtual void full_zoom_clicked() {};
630  virtual void set_visible_channel (int) {}
631 
633 
636 
638  virtual void update_tempo_based_rulers () {};
639  virtual void show_rulers_for_grid () {};
640 
642 
643  /* playhead and edit cursor */
644 
647 
648  Glib::RefPtr<Gtk::ToggleAction> follow_playhead_action;
650 
651  Glib::RefPtr<Gtk::ToggleAction> stationary_playhead_action;
653 
654  /* selection process */
655 
659 
660  std::list<XMLNode*> before; /* used in *_reversible_command */
661 
663 
664  std::unique_ptr<VerboseCursor> _verbose_cursor;
665 
667 
668  virtual Editing::ZoomFocus effective_zoom_focus() const { return zoom_focus(); }
669 
671  Temporal::RoundMode direction,
672  ARDOUR::SnapPref gpref,
674 
676  Temporal::RoundMode direction,
677  ARDOUR::SnapPref gpref) const = 0;
678 
679  virtual void snap_to_internal (Temporal::timepos_t& first,
682  bool ensure_snap = false) const = 0;
683 
685 
698  };
699 
701  uint32_t bbt_bars;
703 
704  uint32_t count_bars (Temporal::Beats const & start, Temporal::Beats const & end) const;
706 
710 
712 
713 
720  virtual bool motion_handler (ArdourCanvas::Item*, GdkEvent*, bool from_autoscroll = false) = 0;
725 
728 
731 
733 
735 
737 
739  friend class EditorSummary;
742 
750 
751  virtual void register_actions() = 0;
753 
755 
759 
762 
763  void pack_draw_box (bool with_channel);
764  void pack_snap_box ();
765 
768 
769  void set_common_editing_state (XMLNode const & node);
770  void get_common_editing_state (XMLNode& node) const;
771 
772  struct VisualChange {
773  enum Type {
774  TimeOrigin = 0x1,
775  ZoomLevel = 0x2,
776  YOrigin = 0x4,
777  VideoTimeline = 0x8
778  };
779 
783  double y_origin;
784 
788 
790  void add (Type t) {
791  pending = Type (pending | t);
792  }
793  };
794 
797 
798  static int _idle_visual_changer (void* arg);
801  virtual void visual_changer (const VisualChange&) = 0;
802 
803  sigc::connection autoscroll_connection;
806  uint32_t autoscroll_cnt;
808 
810  virtual void parameter_changed (std::string);
811  virtual void ui_parameter_changed (std::string);
812 
814  std::vector<std::string> zoom_focus_strings;
815  virtual void build_zoom_focus_menu () = 0;
816 
824 
826 
828 
829  std::vector<ArdourCanvas::Ruler::Mark> grid_marks;
830  std::unique_ptr<GridLines> grid_lines;
832 
833  void drop_grid ();
836 
837  virtual void metric_get_timecode (std::vector<ArdourCanvas::Ruler::Mark>&, int64_t, int64_t, gint) {}
838  virtual void metric_get_bbt (std::vector<ArdourCanvas::Ruler::Mark>&, int64_t, int64_t, gint) {}
839  virtual void metric_get_samples (std::vector<ArdourCanvas::Ruler::Mark>&, int64_t, int64_t, gint) {}
840 
849  };
850 
852 
856 
857  void metric_get_minsec (std::vector<ArdourCanvas::Ruler::Mark>&, int64_t, int64_t, gint);
860  samplepos_t sample_rate,
861  long* hrs_p,
862  long* mins_p,
863  long* secs_p,
864  long* millisecs_p);
865 
866  virtual void set_entered_track (TimeAxisView*) {};
867 
868  virtual std::pair<Temporal::timepos_t,Temporal::timepos_t> max_zoom_extent() const = 0;
869 
871  bool use_context_click,
872  bool from_outside_canvas) = 0;
873 
875  virtual void escape () {}
876 
877  virtual void do_undo (uint32_t n) = 0;
878  virtual void do_redo (uint32_t n) = 0;
879 
880  Glib::RefPtr<Gtk::Action> undo_action;
881  Glib::RefPtr<Gtk::Action> redo_action;
882  Glib::RefPtr<Gtk::Action> alternate_redo_action;
883  Glib::RefPtr<Gtk::Action> alternate_alternate_redo_action;
884 
885  /* protected helper functions to help with registering actions */
886 
887  static Glib::RefPtr<Gtk::Action> reg_sens (Glib::RefPtr<Gtk::ActionGroup> group, char const* name, char const* label, sigc::slot<void> slot);
888  static Glib::RefPtr<Gtk::ToggleAction> toggle_reg_sens (Glib::RefPtr<Gtk::ActionGroup> group, char const* name, char const* label, sigc::slot<void> slot);
889  static Glib::RefPtr<Gtk::RadioAction> radio_reg_sens (Glib::RefPtr<Gtk::ActionGroup> action_group, Gtk::RadioAction::Group& radio_group, char const* name, char const* label, sigc::slot<void> slot);
890 
892 
893  virtual void automation_create_point_at_edit_point(bool with_guard_points) {}
894  virtual void automation_raise_points () {}
895  virtual void automation_lower_points () {};
896  virtual void automation_move_points_later () {};
897  virtual void automation_move_points_earlier () {};
898  virtual void automation_begin_edit () {};
899  virtual void automation_end_edit () {};
900 
903  static std::vector<std::string> _chord_name_list;
904  std::string _draw_chord_name;
905 
907 };
virtual samplecnt_t current_page_samples() const =0
virtual void abort_reversible_command()=0
VisualChange pending_visual_change
bool dragging_playhead() const
virtual Gdk::Cursor * which_canvas_cursor(ItemType type) const =0
PBD::Signal< void()> MouseModeChanged
void zoom_focus_chosen(Editing::ZoomFocus)
ArdourWidgets::ArdourButton zoom_out_button
virtual std::list< SelectableOwner * > selectable_owners()=0
ArdourWidgets::ArdourDropdown grid_type_selector
void reset_point_selection()
void reset_zoom(samplecnt_t)
double visible_canvas_width() const
virtual void grid_type_chosen(Editing::GridType)
void calc_extra_zoom_edges(samplepos_t &start, samplepos_t &end)
void scroll_left_step()
double sample_to_pixel(samplepos_t sample) const
std::map< Editing::MouseMode, Glib::RefPtr< Gtk::RadioAction > > mouse_mode_actions
void sample_to_clock_parts(samplepos_t sample, samplepos_t sample_rate, long *hrs_p, long *mins_p, long *secs_p, long *millisecs_p)
Glib::RefPtr< Gtk::ActionGroup > chord_actions
PBD::ScopedConnection escape_connection
void bind_mouse_mode_buttons()
virtual bool canvas_cue_end_event(GdkEvent *event, ArdourCanvas::Item *)
virtual MidiViews midiviews_from_region_selection(RegionSelection const &) const
void toggle_follow_playhead()
MinsecRulerScale minsec_ruler_scale
void center_screen(samplepos_t)
Glib::RefPtr< Gtk::ToggleAction > follow_playhead_action
virtual Temporal::timepos_t snap_to_grid(Temporal::timepos_t const &start, Temporal::RoundMode direction, ARDOUR::SnapPref gpref) const =0
void maybe_draw_grid_lines(ArdourCanvas::Container *)
Glib::RefPtr< Gtk::Action > undo_action
virtual void metric_get_bbt(std::vector< ArdourCanvas::Ruler::Mark > &, int64_t, int64_t, gint)
virtual void begin_reversible_command(std::string cmd_name)=0
void register_common_actions(Gtkmm2ext::Bindings *, std::string const &)
virtual Temporal::timepos_t _get_preferred_edit_position(Editing::EditIgnoreOption, bool use_context_click, bool from_outside_canvas)=0
static bool need_shared_actions
virtual void set_visible_channel(int)
bool follow_playhead() const
virtual bool canvas_control_point_event(GdkEvent *event, ArdourCanvas::Item *, ControlPoint *)=0
void temporal_zoom_step_mouse_focus_scale(bool zoom_out, double scale)
static MouseCursors const * cursors()
virtual void undo_selection_op()=0
void transform_region()
virtual bool canvas_bg_event(GdkEvent *event, ArdourCanvas::Item *)=0
virtual bool enter_handler(ArdourCanvas::Item *, GdkEvent *, ItemType)=0
virtual void delete_()=0
static Glib::RefPtr< Gtk::ToggleAction > toggle_reg_sens(Glib::RefPtr< Gtk::ActionGroup > group, char const *name, char const *label, sigc::slot< void > slot)
std::map< Editing::GridType, Glib::RefPtr< Gtk::RadioAction > > grid_actions
QuantizeDialog * quantize_dialog
void enable_automation_bindings()
virtual bool canvas_velocity_event(GdkEvent *event, ArdourCanvas::Item *)=0
void undo(uint32_t n=1)
void temporal_zoom_step_mouse_focus(bool zoom_out)
std::string const & draw_chord_name() const
void legatize_regions(const MidiViews &rs, bool shrink_only)
Editing::MouseMode old_mouse_mode
Gtk::Adjustment vertical_adjustment
static Glib::RefPtr< Gtk::Action > reg_sens(Glib::RefPtr< Gtk::ActionGroup > group, char const *name, char const *label, sigc::slot< void > slot)
virtual std::pair< Temporal::timepos_t, Temporal::timepos_t > max_zoom_extent() const =0
Glib::RefPtr< Gtk::ActionGroup > channel_actions
virtual void mouse_mode_chosen(Editing::MouseMode)=0
Gtk::Adjustment horizontal_adjustment
samplepos_t pixel_to_sample_from_event(double pixel) const
samplepos_t pixel_to_sample(double pixel) const
bool autoscroll_horizontal_allowed
virtual RegionSelection region_selection()=0
Editing::ZoomFocus zoom_focus() const
virtual Selection & get_selection() const
virtual bool autoscroll_active() const =0
virtual void get_regionviews_by_id(PBD::ID const id, RegionSelection &regions) const =0
virtual bool key_press_handler(ArdourCanvas::Item *, GdkEvent *, ItemType)=0
void set_minsec_ruler_scale(samplepos_t lower, samplepos_t upper)
void strum_notes(const MidiViews &rs, bool forward)
virtual ArdourCanvas::ScrollGroup * get_cursor_scroll_group() const =0
ArdourWidgets::ArdourButton follow_playhead_button
virtual bool button_press_dispatch(GdkEventButton *)=0
Glib::RefPtr< Gtk::ActionGroup > snap_actions
samplecnt_t get_current_zoom() const
virtual TrackViewList axis_views_from_routes(std::shared_ptr< ARDOUR::RouteList >) const =0
virtual void make_a_region()
virtual ArdourCanvas::GtkCanvas * get_canvas() const =0
Selection * selection
Glib::RefPtr< Gtk::ActionGroup > velocity_actions
virtual void begin_reversible_selection_op(std::string cmd_name)=0
bool mouse_sample(samplepos_t &, bool &in_track_canvas) const
double visible_canvas_height() const
void quantize_regions(const MidiViews &rs)
uint32_t autoscroll_cnt
virtual VerboseCursor & verbose_cursor() const
std::vector< MidiView * > MidiViews
void set_grid_type(Editing::GridType)
virtual void note_entered()
std::vector< MidiView * > filter_to_unique_midi_region_views(MidiViews const &ms) const
bool _mouse_changed_selection
Glib::RefPtr< Gtk::RadioAction > _no_chord_action
ArdourWidgets::ArdourButton note_mode_button
virtual void set_note_mode(ARDOUR::NoteMode)
virtual void register_actions()=0
void set_stationary_playhead(bool yn)
samplecnt_t samples_per_pixel
Temporal::Beats get_a_grid_type_as_beats(Editing::GridType, bool &success, Temporal::timepos_t const &position) const
bool have_draw_chord() const
Editing::GridType pre_internal_grid_type
virtual bool leave_handler(ArdourCanvas::Item *, GdkEvent *, ItemType)=0
virtual ARDOUR::NoteMode note_mode() const
virtual bool canvas_cue_start_event(GdkEvent *event, ArdourCanvas::Item *)
virtual void do_redo(uint32_t n)=0
static std::vector< std::string > grid_type_strings
std::map< Editing::GridType, Glib::RefPtr< Gtk::RadioAction > > draw_length_actions
Glib::RefPtr< Gtk::ActionGroup > _midi_actions
static sigc::signal< void > DropDownKeys
void transpose_region()
void pack_draw_box(bool with_channel)
virtual ARDOUR::Location * find_location_from_marker(ArdourMarker *, bool &) const =0
double _track_canvas_width
void set_common_editing_state(XMLNode const &node)
ArdourWidgets::ArdourDropdown zoom_focus_selector
Glib::RefPtr< Gtk::ActionGroup > zoom_actions
void select_automation_line(GdkEventButton *, ArdourCanvas::Item *, ARDOUR::SelectionOperation)
virtual void set_selected_midi_region_view(MidiRegionView &)
Gtk::HBox snap_box
int32_t get_grid_music_divisions(Editing::GridType gt) const
Gtk::HBox draw_box
virtual void snap_to_internal(Temporal::timepos_t &first, Temporal::RoundMode direction=Temporal::RoundNearest, ARDOUR::SnapPref gpref=ARDOUR::SnapToAny_Visual, bool ensure_snap=false) const =0
virtual ArdourCanvas::Container * get_noscroll_group() const =0
virtual void play_note_selection_clicked()
Gtkmm2ext::Bindings * own_bindings
void draw_velocity_changed()
Gtk::Label visible_channel_label
static std::vector< std::string > _chord_name_list
std::vector< std::string > zoom_focus_strings
std::string scope_name() const
virtual double get_y_origin() const =0
SelectionMemento * _selection_memento
virtual PBD::HistoryOwner & history()=0
Temporal::timecnt_t snap_relative_time_to_relative_time(Temporal::timepos_t const &origin, Temporal::timecnt_t const &x, bool ensure_snap) const
ARDOUR::Strum * get_strum_op(bool, bool)
void temporal_zoom_step_scale(bool zoom_out, double scale)
virtual bool canvas_playhead_cursor_event(GdkEvent *event, ArdourCanvas::Item *)
samplecnt_t pixel_duration_to_samples(double pixels) const
ArdourMarker * entered_marker
ArdourWidgets::ArdourButton mouse_cut_button
void set_draw_length(Editing::GridType)
virtual bool button_release_dispatch(GdkEventButton *)=0
Editing::GridType internal_grid_type
virtual void build_zoom_focus_menu()=0
EditorCursor * _playhead_cursor
virtual void point_selection_changed()=0
virtual void full_zoom_clicked()
static void change_chord_list(std::vector< std::string >::size_type, std::string const &new_chord_name)
virtual Gdk::Cursor * which_trim_cursor(bool left_side) const =0
EditorCursor * _snapped_cursor
void apply_midi_note_edit_op(ARDOUR::MidiOperator &op, const RegionSelection &rs)
void scroll_left_half_page()
ArdourWidgets::ArdourButton mouse_select_button
virtual ARDOUR::Quantize * get_quantize_op()
virtual void automation_move_points_later()
virtual void step_mouse_mode(bool next)=0
void edit_notes(MidiView *)
virtual Gdk::Cursor * which_mode_cursor() const =0
double horizontal_position() const
void quantize_region()
double duration_to_pixels_unrounded(Temporal::timecnt_t const &pos) const
ArdourCanvas::Rectangle * rubberband_rect
Glib::RefPtr< Gtk::ActionGroup > length_actions
std::list< XMLNode * > before
virtual void ui_parameter_changed(std::string)
double time_to_pixel(Temporal::timepos_t const &pos) const
static Glib::RefPtr< Gtk::RadioAction > radio_reg_sens(Glib::RefPtr< Gtk::ActionGroup > action_group, Gtk::RadioAction::Group &radio_group, char const *name, char const *label, sigc::slot< void > slot)
std::vector< ArdourCanvas::Ruler::Mark > grid_marks
void next_grid_choice()
virtual void redisplay_grid(bool immediate_redraw)=0
bool snap_mode_button_clicked(GdkEventButton *)
sigc::connection autoscroll_connection
EditingContext(std::string const &)
Temporal::timepos_t canvas_event_time(GdkEvent const *, double *px=0, double *py=0) const
std::string _name
virtual bool button_press_handler(ArdourCanvas::Item *, GdkEvent *, ItemType)=0
virtual Gdk::Cursor * get_canvas_cursor() const
virtual ArdourCanvas::Duple upper_left() const
virtual void automation_lower_points()
virtual void mark_region_boundary_cache_dirty()
void temporal_zoom(samplecnt_t samples_per_pixel)
double time_to_pixel_unrounded(Temporal::timepos_t const &pos) const
Glib::RefPtr< Gtk::RadioAction > no_chord_action()
virtual void snap_mode_chosen(Editing::SnapMode)
void transpose_regions(const MidiViews &rs)
void register_automation_actions(Gtkmm2ext::Bindings *, std::string const &)
Gtkmm2ext::BindingSet bindings
virtual void set_entered_track(TimeAxisView *)
void legatize_region(bool shrink_only)
sigc::signal< void > DrawLengthChanged
std::unique_ptr< GridLines > grid_lines
Gtk::HBox grid_box
virtual void begin_reversible_command(GQuark)=0
ArdourCanvas::Container * time_line_group
virtual double max_extents_scale() const
samplepos_t _leftmost_sample
virtual void select_all_within(Temporal::timepos_t const &, Temporal::timepos_t const &, double, double, std::list< SelectableOwner * > const &, ARDOUR::SelectionOperation, bool)=0
virtual Selection & get_cut_buffer() const
virtual void abort_reversible_selection_op()=0
virtual void note_left()
void prev_grid_choice()
ArdourWidgets::ArdourButton mouse_draw_button
ArdourWidgets::ArdourButton play_note_selection_button
void enable_midi_bindings()
PBD::ScopedConnectionList parameter_connections
samplecnt_t minsec_mark_interval
ArdourWidgets::ArdourButton mouse_move_button
Temporal::timepos_t get_preferred_edit_position(Editing::EditIgnoreOption eio=Editing::EDIT_IGNORE_NONE, bool use_context_click=false, bool from_outside_canvas=false)
void choose_canvas_cursor_on_entry(ItemType)
void hide_grid_lines()
ArdourWidgets::ArdourButton mouse_grid_button
void follow_playhead_chosen()
ARDOUR::Location * transport_loop_location()
virtual bool canvas_note_event(GdkEvent *event, ArdourCanvas::Item *)=0
PianorollWindow * pianoroll_window
virtual bool key_release_handler(ArdourCanvas::Item *, GdkEvent *, ItemType)=0
samplepos_t window_event_sample(GdkEvent const *, double *px=0, double *py=0) const
bool get_midi_chord(int root_pitch, std::vector< int > &pitches) const
bool grid_type_is_musical(Editing::GridType) const
Selection * cut_buffer
virtual void set_mouse_mode(Editing::MouseMode, bool force=false)
void register_grid_actions()
DragManager * _drags
sigc::signal< void > ZoomChanged
bool autoscroll_vertical_allowed
ArdourWidgets::ArdourButton zoom_in_button
void scroll_right_half_page()
static PBD::Signal< void()> ChordsChanged
virtual void begin_selection_op_history()=0
Glib::RefPtr< Gtk::ActionGroup > _automation_actions
virtual StripableTimeAxisView * get_stripable_time_axis_by_id(const PBD::ID &id) const =0
virtual bool button_release_handler(ArdourCanvas::Item *, GdkEvent *, ItemType)=0
void reset_x_origin(samplepos_t)
void alt_delete_()
std::map< int, Glib::RefPtr< Gtk::RadioAction > > draw_channel_actions
virtual void load_shared_bindings()
virtual void set_zoom_focus(Editing::ZoomFocus)=0
Editing::SnapMode pre_internal_snap_mode
virtual void cycle_zoom_focus()
void temporal_zoom_step(bool zoom_out)
virtual bool canvas_velocity_base_event(GdkEvent *event, ArdourCanvas::Item *)=0
virtual void note_mode_chosen(ARDOUR::NoteMode)
virtual void snap_to(Temporal::timepos_t &first, Temporal::RoundMode direction=Temporal::RoundNearest, ARDOUR::SnapPref pref=ARDOUR::SnapToAny_Visual, bool ensure_snap=false) const
uint32_t count_bars(Temporal::Beats const &start, Temporal::Beats const &end) const
virtual ArdourCanvas::Container * get_trackview_group() const =0
Glib::RefPtr< Gtk::RadioAction > draw_chord_action(int num)
virtual void add_command(PBD::Command *)=0
EditorCursor * snapped_cursor() const
int idle_visual_changer()
virtual Gdk::Cursor * which_track_cursor() const =0
double _visible_canvas_width
virtual Gtk::Menu * get_single_region_context_menu()
void check_best_snap(Temporal::timepos_t const &presnap, Temporal::timepos_t &test, Temporal::timepos_t &dist, Temporal::timepos_t &best) const
void draw_channel_changed()
PBD::Signal< void()> SnapChanged
virtual void instant_save()=0
virtual bool get_smart_mode() const
virtual void reposition_and_zoom(samplepos_t, double)=0
virtual void commit_reversible_command()=0
virtual Temporal::timepos_t snap_to_bbt(Temporal::timepos_t const &start, Temporal::RoundMode direction, ARDOUR::SnapPref gpref) const
virtual Temporal::timecnt_t get_nudge_distance(Temporal::timepos_t const &pos, Temporal::timecnt_t &next) const =0
std::map< Editing::ZoomFocus, Glib::RefPtr< Gtk::RadioAction > > zoom_focus_actions
virtual void automation_end_edit()
virtual void add_semitone_interval(int semitones)
ArdourWidgets::ArdourDropdown draw_length_selector
ArdourWidgets::ArdourButton mouse_content_button
virtual void update_tempo_based_rulers()
static int _idle_visual_changer(void *arg)
std::string _draw_chord_name
virtual void maybe_autoscroll(bool, bool, bool from_headers)=0
virtual void commit_reversible_selection_op()=0
Editing::MouseMode current_mouse_mode() const
void transform_regions(const MidiViews &rs)
Editing::GridType grid_type() const
void stationary_playhead_chosen()
void register_midi_actions(Gtkmm2ext::Bindings *, std::string const &)
virtual void set_samples_per_pixel(samplecnt_t)=0
void draw_velocity_chosen(int)
virtual void automation_move_points_earlier()
void center_screen_internal(samplepos_t, float)
double timeline_to_canvas(double p) const
ArdourWidgets::ArdourVSpacer _grid_box_spacer
void draw_chord_chosen(int)
static Gtkmm2ext::Bindings * button_bindings
void disable_automation_bindings()
void build_draw_midi_menus()
virtual void midi_action(void(MidiView::*method)())
virtual bool allow_trim_cursors() const
virtual ArdourCanvas::ScrollGroup * get_hscroll_group() const =0
ArdourWidgets::ArdourButton follow_edits_button
virtual void set_horizontal_position(double)
void scroll_right_step()
void update_undo_redo_actions(PBD::UndoHistory const &)
void note_edit_done(int, EditNoteDialog *)
virtual bool internal_editing() const =0
void pianoroll_edit()
virtual void redo_selection_op()=0
virtual Gtk::Window * transient_parent()=0
void draw_length_changed()
void cycle_snap_mode()
virtual Editing::ZoomFocus effective_zoom_focus() const
bool preview_video_drag_active() const
virtual ArdourCanvas::GtkCanvasViewport * get_canvas_viewport() const =0
ArdourWidgets::ArdourDropdown draw_velocity_selector
virtual void escape()
bool typed_event(ArdourCanvas::Item *, GdkEvent *, ItemType)
bool grid_musical() const
void compute_bbt_ruler_scale(samplepos_t lower, samplepos_t upper)
void temporal_zoom_by_sample(samplepos_t start, samplepos_t end)
virtual Editing::MouseMode effective_mouse_mode() const
ArdourWidgets::ArdourVSpacer _draw_box_spacer
static std::vector< std::string > const & chord_name_list()
Temporal::timecnt_t relative_distance(Temporal::timepos_t const &origin, Temporal::timecnt_t const &duration, Temporal::TimeDomain domain)
Temporal::timepos_t snap_to_bbt_via_grid(Temporal::timepos_t const &start, Temporal::RoundMode direction, ARDOUR::SnapPref gpref, Editing::GridType grid_type) const
ArdourWidgets::ArdourButton snap_mode_button
virtual void midi_view_selection_changed(SimpleMidiNoteSelection &selection)
PBD::Command * apply_midi_note_edit_op_to_region(ARDOUR::MidiOperator &op, MidiView &mrv)
Gtk::Menu _note_context_menu
virtual void set_snapped_cursor_position(Temporal::timepos_t const &pos)=0
samplepos_t canvas_event_sample(GdkEvent const *event, double *pcx=nullptr, double *pcy=nullptr) const
void pack_snap_box()
DragManager * drags() const
double _visible_canvas_height
height of the visible area of the track canvas
Editing::SnapMode snap_mode() const
int32_t get_grid_beat_divisions(Editing::GridType gt) const
void draw_channel_chosen(int)
virtual void metric_get_timecode(std::vector< ArdourCanvas::Ruler::Mark > &, int64_t, int64_t, gint)
double duration_to_pixels(Temporal::timecnt_t const &pos) const
Glib::RefPtr< Gtk::ActionGroup > _common_actions
std::map< ARDOUR::NoteMode, Glib::RefPtr< Gtk::RadioAction > > note_mode_actions
void disable_midi_bindings()
double time_delta_to_pixel(Temporal::timepos_t const &start, Temporal::timepos_t const &end) const
ArdourWidgets::ArdourDropdown draw_channel_selector
std::map< Editing::SnapMode, Glib::RefPtr< Gtk::RadioAction > > snap_mode_actions
bool temporary_zoom_focus_change
Temporal::Beats get_grid_type_as_beats(bool &success, Temporal::timepos_t const &position) const
virtual void parameter_changed(std::string)
XMLNode * button_settings() const
virtual void add_commands(std::vector< PBD::Command * >)=0
Glib::RefPtr< Gtk::ToggleAction > stationary_playhead_action
virtual void automation_create_point_at_edit_point(bool with_guard_points)
virtual void metric_get_samples(std::vector< ArdourCanvas::Ruler::Mark > &, int64_t, int64_t, gint)
void reset_x_origin_to_follow_playhead()
double sample_to_pixel_unrounded(samplepos_t sample) const
virtual void get_per_region_note_selection(std::list< std::pair< PBD::ID, std::set< std::shared_ptr< Evoral::Note< Temporal::Beats > > > > > &) const =0
void popup_note_context_menu(ArdourCanvas::Item *, GdkEvent *)
virtual void note_mode_clicked()
virtual ArdourMarker * find_marker_from_location_id(PBD::ID const &, bool) const =0
std::string editor_name() const
virtual void use_appropriate_mouse_mode_for_sections()
static std::vector< std::string > grid_type_short_labels
Temporal::Beats get_draw_length_as_beats(bool &success, Temporal::timepos_t const &position) const
virtual bool button_press_handler_2(ArdourCanvas::Item *, GdkEvent *, ItemType)=0
virtual void cut_copy(Editing::CutCopyOp)=0
Glib::RefPtr< Gtk::ActionGroup > editor_actions
BBTRulerScale bbt_ruler_scale
virtual void keyboard_paste()=0
virtual void do_undo(uint32_t n)=0
ArdourWidgets::ArdourButton mouse_timefx_button
RegionView * entered_regionview
virtual void snap_to_with_modifier(Temporal::timepos_t &first, GdkEvent const *ev, Temporal::RoundMode direction=Temporal::RoundNearest, ARDOUR::SnapPref gpref=ARDOUR::SnapToAny_Visual, bool ensure_snap=false) const
sigc::signal< void > DrawChannelChanged
std::vector< MidiView * > filter_to_unique_midi_region_views(RegionSelection const &rs) const
virtual void set_canvas_cursor(Gdk::Cursor *)
bool on_velocity_scroll_event(GdkEventScroll *)
ArdourWidgets::ArdourButton full_zoom_button
void set_session(ARDOUR::Session *)
int draw_channel() const
void ensure_visual_change_idle_handler()
ArdourCanvas::Rect autoscroll_boundary
EditorCursor * playhead_cursor() const
virtual void automation_raise_points()
ArdourWidgets::ArdourDropdown visible_channel_selector
TimeAxisView * entered_track
void set_draw_velocity(int)
double timeline_origin() const
void reset_y_origin(double)
void set_draw_channel(int)
virtual MeterMarker * find_marker_for_meter(Temporal::MeterPoint const &)=0
void get_common_editing_state(XMLNode &node) const
std::vector< Glib::RefPtr< Gtk::RadioAction > > draw_chord_actions
void toggle_stationary_playhead()
Editing::GridType draw_length() const
Temporal::TimeDomain time_domain() const
std::map< int, Glib::RefPtr< Gtk::RadioAction > > draw_velocity_actions
Editing::SnapMode internal_snap_mode
uint32_t bbt_bar_helper_on
Glib::RefPtr< Gtk::Action > redo_action
virtual void paste(float times, bool from_context_menu)=0
void redo(uint32_t n=1)
virtual void visual_changer(const VisualChange &)=0
virtual void history_changed()=0
virtual void set_action_defaults()
void metric_get_minsec(std::vector< ArdourCanvas::Ruler::Mark > &, int64_t, int64_t, gint)
Glib::RefPtr< Gtk::Action > alternate_redo_action
virtual void region_selection_changed()
void set_snap_mode(Editing::SnapMode)
static MouseCursors * _cursors
bool drag_active() const
virtual void update_grid()
void set_follow_playhead(bool yn, bool catch_up=true)
virtual void show_rulers_for_grid()
void build_grid_type_menu()
double canvas_to_timeline(double p) const
virtual bool button_press_handler_1(ArdourCanvas::Item *, GdkEvent *, ItemType)=0
virtual void automation_begin_edit()
int draw_velocity() const
void temporal_zoom_to_sample(bool coarser, samplepos_t sample)
virtual bool motion_handler(ArdourCanvas::Item *, GdkEvent *, bool from_autoscroll=false)=0
sigc::signal< void > DrawVelocityChanged
void apply_midi_note_edit_op(ARDOUR::MidiOperator &op, const MidiViews &rs)
void draw_length_chosen(Editing::GridType)
virtual void stop_canvas_autoscroll()=0
Glib::RefPtr< Gtk::Action > alternate_alternate_redo_action
virtual TempoMarker * find_marker_for_tempo(Temporal::TempoPoint const &)=0
bool stationary_playhead() const
std::unique_ptr< VerboseCursor > _verbose_cursor
Definition: id.h:33
Lists of selected things.
Definition: xml++.h:114
ItemType
Definition: editor_items.h:24
GtkImageIconNameData name
Definition: gtkimage.h:6
std::set< NoteBase * > SimpleMidiNoteSelection
PBD::PropertyDescriptor< bool > regions
PBD::PropertyDescriptor< timepos_t > start
Temporal::samplecnt_t samplecnt_t
Temporal::samplepos_t samplepos_t
CutCopyOp
Definition: editing.h:241
SnapMode
Definition: editing.h:71
GridType
Definition: editing.h:53
EditIgnoreOption
Definition: editing.h:254
@ EDIT_IGNORE_NONE
Definition: editing.h:255
ZoomFocus
Definition: editing.h:127
MouseMode
Definition: editing.h:99
std::vector< Bindings * > BindingSet
Definition: bindings.h:224
@ RoundNearest
Round to nearest.
AutomationRecord(XMLNode *s, const AutomationLine *l)
XMLNode * state
state before any operation
std::shared_ptr< Evoral::ControlList > copy
copied events for the cut buffer
const AutomationLine * line
line this came from
CursorRAII(EditingContext &e, Gdk::Cursor *new_cursor)