Ardour  9.0-pre0-1467-gc8540a5ad6
cue_editor.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Paul Davis <paul@linuxaudiosystems.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 
19 #pragma once
20 
21 #include "pbd/history_owner.h"
22 
23 #include "canvas/canvas.h"
24 
25 #include "widgets/ardour_button.h"
26 #include "widgets/eventboxext.h"
27 
28 #include "editing.h"
29 #include "editing_context.h"
30 #include "region_ui_settings.h"
31 
32 namespace Gtk {
33  class HScrollbar;
34 }
35 
37 {
38  public:
39  CueEditor (std::string const & name, bool with_transport_controls);
41 
42  virtual Gtk::Widget& contents () = 0;
43 
45 
50 
53  TrackViewList axis_views_from_routes (std::shared_ptr<ARDOUR::RouteList>) const;
54  AxisView* axis_view_by_stripable (std::shared_ptr<ARDOUR::Stripable>) const { return nullptr; }
55  AxisView* axis_view_by_control (std::shared_ptr<ARDOUR::AutomationControl>) const { return nullptr; }
56 
61 
62  void maybe_autoscroll (bool, bool, bool from_headers);
64  bool autoscroll_active() const;
65 
66  void redisplay_grid (bool immediate_redraw);
68  std::list<SelectableOwner*> selectable_owners() { return std::list<SelectableOwner*>(); }
69 
70  void instant_save();
71 
73  void begin_reversible_selection_op (std::string cmd_name);
78 
80 
81  PBD::HistoryOwner& history() { return *this; }
82  void history_changed ();
84 
85  void add_command (PBD::Command * cmd) { HistoryOwner::add_command (cmd); }
86  void add_commands (std::vector<PBD::Command *> cmds) { HistoryOwner::add_commands (cmds); }
87  void begin_reversible_command (std::string cmd_name) { HistoryOwner::begin_reversible_command (cmd_name); }
88  void begin_reversible_command (GQuark gq) { HistoryOwner::begin_reversible_command (gq); }
89  void abort_reversible_command () { HistoryOwner::abort_reversible_command (); }
90  void commit_reversible_command () { HistoryOwner::commit_reversible_command (); }
91 
92  double get_y_origin () const;
93 
98 
99  void set_mouse_mode (Editing::MouseMode, bool force = false);
103  void step_mouse_mode (bool next);
105  bool internal_editing() const { return true; }
107 
109  MouseCursors const* cursors () const {
110  return _cursors;
111  }
113 
114  std::vector<MidiRegionView*> filter_to_unique_midi_region_views (RegionSelection const & ms) const;
115 
116  std::shared_ptr<Temporal::TempoMap const> start_local_tempo_map (std::shared_ptr<Temporal::TempoMap>);
117  void end_local_tempo_map (std::shared_ptr<Temporal::TempoMap const>);
118 
119  void scrolled ();
122 
123  std::pair<Temporal::timepos_t,Temporal::timepos_t> max_zoom_extent() const;
124 
127 
129 
130  virtual void set_show_source (bool);
131  virtual void set_region (std::shared_ptr<ARDOUR::Region>);
132  virtual void set_track (std::shared_ptr<ARDOUR::Track>);
134 
135  virtual void maybe_update () = 0;
136 
139 
140  int set_state (const XMLNode&, int version);
141  XMLNode& get_state () const;
142 
143  protected:
147  std::shared_ptr<ARDOUR::Region> _region;
148  std::shared_ptr<ARDOUR::Track> _track;
155 
156  void load_bindings ();
158 
159  /* The group containing all other groups that are scrolled vertically
160  and horizontally.
161  */
163 
164  /* The group containing all other groups that are scrolled horizontally ONLY
165  */
168 
169  /* Scroll group for cursors, scrolled horizontally, above everything else
170  */
172 
176 
180 
181  virtual void pack_inner (Gtk::Box&) = 0;
182  virtual void pack_outer (Gtk::Box&) = 0;
184 
185  virtual void update_rulers() {}
186  virtual bool canvas_enter_leave (GdkEventCrossing* ev) = 0;
187 
189  void do_undo (uint32_t n);
190  void do_redo (uint32_t n);
191 
192  Temporal::timepos_t _get_preferred_edit_position (Editing::EditIgnoreOption, bool use_context_click, bool from_outside_canvas);
193 
198 
200 
205 
208 
210 
212 
215  void blink_rec_enable (bool);
216  sigc::connection rec_blink_connection;
217 
218  sigc::connection _update_connection;
220 
222 
224  size_t n_timebars;
225 
226  /* autoscrolling */
227 
229  void start_canvas_autoscroll (bool allow_horiz, bool allow_vert, const ArdourCanvas::Rect& boundary);
231 
233 
234  std::shared_ptr<ARDOUR::Region> _visible_pending_region;
235 
237 
238  virtual void begin_write () = 0;
239  virtual void end_write () = 0;
240 
242 
243  sigc::connection count_in_connection;
245 
246  void count_in (Temporal::timepos_t, unsigned int);
248  virtual void show_count_in (std::string const &) = 0;
249  virtual void hide_count_in () = 0;
250 
252  virtual bool idle_data_captured () = 0;
253  std::atomic<int> idle_update_queued;
256 
257  virtual void unset (bool trigger_too);
258 
262 
263  void metric_get_bbt (std::vector<ArdourCanvas::Ruler::Mark>&, samplepos_t, samplepos_t, gint);
264 };
265 
Declaration of the main canvas classes.
void mouse_mode_chosen(Editing::MouseMode)
void set_mouse_mode(Editing::MouseMode, bool force=false)
Gtk::HBox button_bar
Definition: cue_editor.h:153
ARDOUR::TriggerReference ref
Definition: cue_editor.h:146
virtual void unset(bool trigger_too)
void data_captured(samplecnt_t)
double get_y_origin() const
void do_undo(uint32_t n)
AxisView * axis_view_by_control(std::shared_ptr< ARDOUR::AutomationControl >) const
Definition: cue_editor.h:55
bool bang_button_press(GdkEventButton *)
void session_going_away()
StripableTimeAxisView * get_stripable_time_axis_by_id(const PBD::ID &id) const
bool rec_button_press(GdkEventButton *)
void set_zoom_focus(Editing::ZoomFocus)
void set_snapped_cursor_position(Temporal::timepos_t const &pos)
void reposition_and_zoom(samplepos_t, double)
virtual void set_region(std::shared_ptr< ARDOUR::Region >)
void step_mouse_mode(bool next)
sigc::connection _update_connection
Definition: cue_editor.h:218
ArdourCanvas::Rectangle * transport_loop_range_rect
Definition: cue_editor.h:199
Temporal::Beats count_in_to
Definition: cue_editor.h:244
ArdourCanvas::Container * no_scroll_group
Definition: cue_editor.h:174
std::shared_ptr< ARDOUR::Region > _visible_pending_region
Definition: cue_editor.h:234
bool autoscroll_active() const
RegionSelection region_selection()
void zoom_to_show(Temporal::timecnt_t const &)
ArdourCanvas::ScrollGroup * cursor_scroll_group
Definition: cue_editor.h:171
void begin_reversible_selection_op(std::string cmd_name)
void set_recording_length(Temporal::BBT_Offset bars)
ArdourCanvas::GtkCanvasViewport * get_canvas_viewport() const
bool solo_button_press(GdkEventButton *)
void end_local_tempo_map(std::shared_ptr< Temporal::TempoMap const >)
void redisplay_grid(bool immediate_redraw)
void rec_enable_change()
virtual void set_trigger(ARDOUR::TriggerReference &)
Temporal::timepos_t _get_preferred_edit_position(Editing::EditIgnoreOption, bool use_context_click, bool from_outside_canvas)
std::shared_ptr< ARDOUR::Region > _region
Definition: cue_editor.h:147
void instant_save()
bool autoscroll_canvas()
std::shared_ptr< ARDOUR::Track > _track
Definition: cue_editor.h:148
virtual void begin_write()=0
void commit_reversible_command()
Definition: cue_editor.h:90
void maybe_set_from_rsu()
TempoMarker * find_marker_for_tempo(Temporal::TempoPoint const &)
virtual void set_from_rsu(RegionUISettings &)
AxisView * axis_view_by_stripable(std::shared_ptr< ARDOUR::Stripable >) const
Definition: cue_editor.h:54
void full_zoom_clicked()
void begin_reversible_command(std::string cmd_name)
Definition: cue_editor.h:87
sigc::connection rec_blink_connection
Definition: cue_editor.h:216
bool show_source
Definition: cue_editor.h:150
virtual bool idle_data_captured()=0
virtual Gtk::Widget & contents()=0
std::pair< Temporal::timepos_t, Temporal::timepos_t > max_zoom_extent() const
std::vector< MidiRegionView * > filter_to_unique_midi_region_views(RegionSelection const &ms) const
virtual void end_write()=0
void abort_reversible_selection_op()
virtual bool canvas_enter_leave(GdkEventCrossing *ev)=0
void undo_selection_op()
ArdourCanvas::Container * global_rect_group
Definition: cue_editor.h:173
virtual void pack_outer(Gtk::Box &)=0
ArdourCanvas::Container * get_noscroll_group() const
Definition: cue_editor.h:47
CueEditor(std::string const &name, bool with_transport_controls)
ArdourMarker * find_marker_from_location_id(PBD::ID const &, bool) const
Gtk::HBox rec_box
Definition: cue_editor.h:178
PBD::ScopedConnectionList capture_connections
Definition: cue_editor.h:254
bool zoom_in_allocate
Definition: cue_editor.h:209
void add_commands(std::vector< PBD::Command * > cmds)
Definition: cue_editor.h:86
std::atomic< int > idle_update_queued
Definition: cue_editor.h:253
void history_changed()
size_t n_timebars
Definition: cue_editor.h:224
samplecnt_t data_capture_duration
Definition: cue_editor.h:255
void count_in(Temporal::timepos_t, unsigned int)
MouseCursors const * cursors() const
Definition: cue_editor.h:109
void update_solo_display()
ArdourWidgets::ArdourButton loop_button
Definition: cue_editor.h:197
ArdourCanvas::Container * data_group
Definition: cue_editor.h:175
virtual void show_count_in(std::string const &)=0
bool ruler_event(GdkEvent *)
virtual void set_show_source(bool)
ArdourCanvas::GtkCanvas * get_canvas() const
ArdourWidgets::EventBoxExt _contents
Definition: cue_editor.h:151
void begin_reversible_command(GQuark gq)
Definition: cue_editor.h:88
bool play_button_press(GdkEventButton *)
Gdk::Cursor * get_canvas_cursor() const
samplecnt_t get_current_zoom() const
virtual void update_rulers()
Definition: cue_editor.h:185
ARDOUR::Location * find_location_from_marker(ArdourMarker *, bool &) const
XMLNode & get_state() const
PBD::ScopedConnectionList object_connections
Definition: cue_editor.h:219
void commit_reversible_selection_op()
Temporal::timecnt_t get_nudge_distance(Temporal::timepos_t const &pos, Temporal::timecnt_t &next) const
ArdourCanvas::ScrollGroup * get_hscroll_group() const
Definition: cue_editor.h:48
virtual void pack_inner(Gtk::Box &)=0
ArdourWidgets::ArdourButton solo_button
Definition: cue_editor.h:196
void add_command(PBD::Command *cmd)
Definition: cue_editor.h:85
bool loop_button_press(GdkEventButton *)
TrackViewList axis_views_from_routes(std::shared_ptr< ARDOUR::RouteList >) const
ArdourCanvas::Container * get_trackview_group() const
Definition: cue_editor.h:46
PBD::HistoryOwner & history()
Definition: cue_editor.h:81
bool internal_editing() const
Definition: cue_editor.h:105
ArdourCanvas::GtkCanvasViewport _canvas_viewport
Definition: cue_editor.h:144
double timebar_height
Definition: cue_editor.h:223
ArdourCanvas::ScrollGroup * hv_scroll_group
Definition: cue_editor.h:162
MeterMarker * find_marker_for_meter(Temporal::MeterPoint const &)
Gtk::VBox _toolbox
Definition: cue_editor.h:152
void start_canvas_autoscroll(bool allow_horiz, bool allow_vert, const ArdourCanvas::Rect &boundary)
ArdourWidgets::ArdourButton play_button
Definition: cue_editor.h:195
std::shared_ptr< Temporal::TempoMap const > start_local_tempo_map(std::shared_ptr< Temporal::TempoMap >)
void load_bindings()
virtual void manage_possible_header(Gtk::Allocation &)
Definition: cue_editor.h:241
void visual_changer(const VisualChange &)
void metric_get_bbt(std::vector< ArdourCanvas::Ruler::Mark > &, samplepos_t, samplepos_t, gint)
virtual void set_track(std::shared_ptr< ARDOUR::Track >)
bool canvas_pre_event(GdkEvent *)
void do_redo(uint32_t n)
void maybe_set_count_in()
std::list< SelectableOwner * > selectable_owners()
Definition: cue_editor.h:68
void build_upper_toolbar()
void register_actions()
void scrolled()
void trigger_arm_change()
void get_regionviews_by_id(PBD::ID const id, RegionSelection &regions) const
int set_state(const XMLNode &, int version)
PBD::ScopedConnection history_connection
Definition: cue_editor.h:83
Gtk::HScrollbar * _canvas_hscrollbar
Definition: cue_editor.h:154
bool with_transport_controls
Definition: cue_editor.h:149
virtual void hide_count_in()=0
void build_zoom_focus_menu()
virtual void set_samples_per_pixel(samplecnt_t)
void catch_pending_show_region()
void begin_selection_op_history()
RegionUISettings region_ui_settings
Definition: cue_editor.h:259
void blink_rec_enable(bool)
void ruler_locate(GdkEventButton *)
Gtk::Label length_label
Definition: cue_editor.h:177
ArdourWidgets::ArdourDropdown length_selector
Definition: cue_editor.h:206
ArdourCanvas::ScrollGroup * h_scroll_group
Definition: cue_editor.h:166
Temporal::BBT_Offset rec_length
Definition: cue_editor.h:207
void maybe_autoscroll(bool, bool, bool from_headers)
Gtk::HBox play_box
Definition: cue_editor.h:179
void redo_selection_op()
sigc::connection count_in_connection
Definition: cue_editor.h:243
ArdourCanvas::ScrollGroup * get_cursor_scroll_group() const
Definition: cue_editor.h:49
ArdourWidgets::ArdourButton rec_enable_button
Definition: cue_editor.h:194
void stop_canvas_autoscroll()
ArdourCanvas::GtkCanvas & _canvas
Definition: cue_editor.h:145
virtual void maybe_update()=0
ArdourCanvas::ScrollGroup * v_scroll_group
Definition: cue_editor.h:167
void abort_reversible_command()
Definition: cue_editor.h:89
static MouseCursors * _cursors
Definition: id.h:34
Definition: xml++.h:114
GtkImageIconNameData name
Definition: gtkimage.h:6
PBD::PropertyDescriptor< bool > regions
Temporal::samplecnt_t samplecnt_t
Temporal::samplepos_t samplepos_t
EditIgnoreOption
Definition: editing.h:241
ZoomFocus
Definition: editing.h:126
MouseMode
Definition: editing.h:98
Definition: ardour_ui.h:192