#include "editor_items.h"
#include "region_selection.h"
#include "selection_memento.h"
#include "editor_items.h"
#include "region_selection.h"
#include "selection_memento.h"
- double sample_to_pixel (framepos_t sample) const {
- return round (sample / (double) samples_per_pixel);
+ double sample_to_pixel (framepos_t sample) const {
+ return round (sample / (double) samples_per_pixel);
- bool get_selection_extents ( framepos_t &start, framepos_t &end ); // the time extents of the current selection, whether Range, Region(s), Control Points, or Notes
+ bool get_selection_extents (framepos_t &start, framepos_t &end) const; // the time extents of the current selection, whether Range, Region(s), Control Points, or Notes
void select_all_in_track (Selection::Operation op);
void select_all_objects (Selection::Operation op);
void invert_selection_in_track ();
void select_all_in_track (Selection::Operation op);
void select_all_objects (Selection::Operation op);
void invert_selection_in_track ();
- void analyze_region_selection();
- void analyze_range_selection();
+ void loudness_analyze_region_selection();
+ void loudness_analyze_range_selection();
+
+ void spectral_analyze_region_selection();
+ void spectral_analyze_range_selection();
Editing::ZoomFocus get_zoom_focus () const { return zoom_focus; }
framecnt_t get_current_zoom () const { return samples_per_pixel; }
void cycle_zoom_focus ();
Editing::ZoomFocus get_zoom_focus () const { return zoom_focus; }
framecnt_t get_current_zoom () const { return samples_per_pixel; }
void cycle_zoom_focus ();
- void temporal_zoom_step (bool coarser);
- void temporal_zoom_step_mouse_focus (bool coarser);
+ void temporal_zoom_step (bool zoom_out);
+ void temporal_zoom_step_scale (bool zoom_out, double scale);
+ void temporal_zoom_step_mouse_focus (bool zoom_out);
+ void temporal_zoom_step_mouse_focus_scale (bool zoom_out, double scale);
void ensure_time_axis_view_is_visible (TimeAxisView const & tav, bool at_top);
void tav_zoom_step (bool coarser);
void tav_zoom_smooth (bool coarser, bool force_all);
void ensure_time_axis_view_is_visible (TimeAxisView const & tav, bool at_top);
void tav_zoom_step (bool coarser);
void tav_zoom_smooth (bool coarser, bool force_all);
void set_selected_mixer_strip (TimeAxisView&);
void mixer_strip_width_changed ();
void hide_track_in_display (TimeAxisView* tv, bool apply_to_selection = false);
void set_selected_mixer_strip (TimeAxisView&);
void mixer_strip_width_changed ();
void hide_track_in_display (TimeAxisView* tv, bool apply_to_selection = false);
unsigned get_grid_beat_divisions(framepos_t position);
Evoral::Beats get_grid_type_as_beats (bool& success, framepos_t position);
unsigned get_grid_beat_divisions(framepos_t position);
Evoral::Beats get_grid_type_as_beats (bool& success, framepos_t position);
void nudge_forward (bool next, bool force_playhead);
void nudge_backward (bool next, bool force_playhead);
void nudge_forward (bool next, bool force_playhead);
void nudge_backward (bool next, bool force_playhead);
Editing::ImportDisposition disposition,
Editing::ImportMode mode,
ARDOUR::SrcQuality quality,
Editing::ImportDisposition disposition,
Editing::ImportMode mode,
ARDOUR::SrcQuality quality,
- void snap_to (framepos_t& first,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false,
- bool ensure_snap = false);
+ void snap_to (ARDOUR::MusicFrame& first,
+ ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
+ bool for_mark = false,
+ bool ensure_snap = false);
- void snap_to_with_modifier (framepos_t& first,
- GdkEvent const * ev,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ void snap_to_with_modifier (ARDOUR::MusicFrame& first,
+ GdkEvent const * ev,
+ ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
+ bool for_mark = false);
- void snap_to (framepos_t& first,
- framepos_t& last,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ void snap_to (ARDOUR::MusicFrame& first,
+ ARDOUR::MusicFrame& last,
+ ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
+ bool for_mark = false);
/* editing operations that need to be public */
void mouse_add_new_marker (framepos_t where, bool is_cd=false);
/* editing operations that need to be public */
void mouse_add_new_marker (framepos_t where, bool is_cd=false);
void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false);
RegionSelection get_regions_from_selection_and_mouse (framepos_t);
void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false);
RegionSelection get_regions_from_selection_and_mouse (framepos_t);
Gtk::Notebook _the_notebook;
bool _notebook_shrunk;
void add_notebook_page (std::string const &, Gtk::Widget &);
bool notebook_tab_clicked (GdkEventButton *, Gtk::Widget *);
Gtk::Notebook _the_notebook;
bool _notebook_shrunk;
void add_notebook_page (std::string const &, Gtk::Widget &);
bool notebook_tab_clicked (GdkEventButton *, Gtk::Widget *);
void remove_marker (ArdourCanvas::Item&, GdkEvent*);
gint really_remove_marker (ARDOUR::Location* loc);
void goto_nth_marker (int nth);
void remove_marker (ArdourCanvas::Item&, GdkEvent*);
gint really_remove_marker (ARDOUR::Location* loc);
void goto_nth_marker (int nth);
uint32_t location_marker_color;
uint32_t location_range_color;
uint32_t location_loop_color;
uint32_t location_marker_color;
uint32_t location_range_color;
uint32_t location_loop_color;
void get_equivalent_regions (RegionView* rv, std::vector<RegionView*> &, PBD::PropertyID) const;
RegionSelection get_equivalent_regions (RegionSelection &, PBD::PropertyID) const;
void get_equivalent_regions (RegionView* rv, std::vector<RegionView*> &, PBD::PropertyID) const;
RegionSelection get_equivalent_regions (RegionSelection &, PBD::PropertyID) const;
void mapover_tracks (sigc::slot<void,RouteTimeAxisView&,uint32_t> sl, TimeAxisView*, PBD::PropertyID) const;
void mapover_tracks_with_unique_playlists (sigc::slot<void,RouteTimeAxisView&,uint32_t> sl, TimeAxisView*, PBD::PropertyID) const;
void mapover_tracks (sigc::slot<void,RouteTimeAxisView&,uint32_t> sl, TimeAxisView*, PBD::PropertyID) const;
void mapover_tracks_with_unique_playlists (sigc::slot<void,RouteTimeAxisView&,uint32_t> sl, TimeAxisView*, PBD::PropertyID) const;
void popup_note_context_menu (ArdourCanvas::Item *, GdkEvent *);
Gtk::Menu _note_context_menu;
void popup_note_context_menu (ArdourCanvas::Item *, GdkEvent *);
Gtk::Menu _note_context_menu;
ArdourCanvas::Container *tempo_group;
ArdourCanvas::Container *meter_group;
ArdourCanvas::Container *marker_group;
ArdourCanvas::Container *tempo_group;
ArdourCanvas::Container *meter_group;
ArdourCanvas::Container *marker_group;
void update_just_timecode ();
void compute_fixed_ruler_scale (); //calculates the RulerScale of the fixed rulers
void update_fixed_rulers ();
void update_just_timecode ();
void compute_fixed_ruler_scale (); //calculates the RulerScale of the fixed rulers
void update_fixed_rulers ();
void popup_ruler_menu (framepos_t where = 0, ItemType type = RegionItem);
void update_ruler_visibility ();
void set_ruler_visible (RulerType, bool);
void popup_ruler_menu (framepos_t where = 0, ItemType type = RegionItem);
void update_ruler_visibility ();
void set_ruler_visible (RulerType, bool);
- void compute_bbt_ruler_scale (framepos_t lower, framepos_t upper,
- ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_begin,
- ARDOUR::TempoMap::BBTPointList::const_iterator current_bbt_points_end);
+ void compute_bbt_ruler_scale (framepos_t lower, framepos_t upper);
framepos_t get_region_boundary (framepos_t pos, int32_t dir, bool with_selection, bool only_onscreen);
framepos_t get_region_boundary (framepos_t pos, int32_t dir, bool with_selection, bool only_onscreen);
void control_step_tracks_down ();
void control_view (uint32_t);
void control_scroll (float);
void control_step_tracks_down ();
void control_view (uint32_t);
void control_scroll (float);
void control_unselect ();
void access_action (std::string,std::string);
bool deferred_control_scroll (framepos_t);
void control_unselect ();
void access_action (std::string,std::string);
bool deferred_control_scroll (framepos_t);
/* track views */
TrackViewList track_views;
std::pair<TimeAxisView*, double> trackview_by_y_position (double, bool trackview_relative_offset = true) const;
/* track views */
TrackViewList track_views;
std::pair<TimeAxisView*, double> trackview_by_y_position (double, bool trackview_relative_offset = true) const;
- RouteTimeAxisView* axis_view_from_route (boost::shared_ptr<ARDOUR::Route>) const;
+
+ AxisView* axis_view_by_stripable (boost::shared_ptr<ARDOUR::Stripable>) const;
+ AxisView* axis_view_by_control (boost::shared_ptr<ARDOUR::AutomationControl>) const;
+
+ TimeAxisView* time_axis_view_from_stripable (boost::shared_ptr<ARDOUR::Stripable> s) const {
+ return dynamic_cast<TimeAxisView*> (axis_view_by_stripable (s));
+ }
TrackViewList get_tracks_for_range_action () const;
sigc::connection super_rapid_screen_update_connection;
TrackViewList get_tracks_for_range_action () const;
sigc::connection super_rapid_screen_update_connection;
void center_screen_internal (framepos_t, float);
void super_rapid_screen_update ();
void center_screen_internal (framepos_t, float);
void super_rapid_screen_update ();
void normalize_region ();
void reset_region_scale_amplitude ();
void adjust_region_gain (bool up);
void normalize_region ();
void reset_region_scale_amplitude ();
void adjust_region_gain (bool up);
void loop_location (ARDOUR::Location&);
void calc_extra_zoom_edges(framepos_t &start, framepos_t &end);
void loop_location (ARDOUR::Location&);
void calc_extra_zoom_edges(framepos_t &start, framepos_t &end);
void temporal_zoom_session ();
void temporal_zoom (framecnt_t samples_per_pixel);
void temporal_zoom_by_frame (framepos_t start, framepos_t end);
void temporal_zoom_session ();
void temporal_zoom (framecnt_t samples_per_pixel);
void temporal_zoom_by_frame (framepos_t start, framepos_t end);
int check_whether_and_how_to_import(std::string, bool all_or_nothing = true);
bool check_multichannel_status (const std::vector<std::string>& paths);
int check_whether_and_how_to_import(std::string, bool all_or_nothing = true);
bool check_multichannel_status (const std::vector<std::string>& paths);
void import_audio (bool as_tracks);
void do_import (std::vector<std::string> paths, bool split, bool as_tracks);
void import_audio (bool as_tracks);
void do_import (std::vector<std::string> paths, bool split, bool as_tracks);
void set_loop_from_selection (bool play);
void set_punch_from_selection ();
void set_punch_from_region ();
void set_loop_from_selection (bool play);
void set_punch_from_selection ();
void set_punch_from_region ();
void set_loop_range (framepos_t start, framepos_t end, std::string cmd);
void set_punch_range (framepos_t start, framepos_t end, std::string cmd);
void set_loop_range (framepos_t start, framepos_t end, std::string cmd);
void set_punch_range (framepos_t start, framepos_t end, std::string cmd);
bool canvas_stream_view_event (GdkEvent* event,ArdourCanvas::Item*, RouteTimeAxisView*);
bool canvas_marker_event (GdkEvent* event,ArdourCanvas::Item*, ArdourMarker*);
bool canvas_tempo_marker_event (GdkEvent* event,ArdourCanvas::Item*, TempoMarker*);
bool canvas_stream_view_event (GdkEvent* event,ArdourCanvas::Item*, RouteTimeAxisView*);
bool canvas_marker_event (GdkEvent* event,ArdourCanvas::Item*, ArdourMarker*);
bool canvas_tempo_marker_event (GdkEvent* event,ArdourCanvas::Item*, TempoMarker*);
bool canvas_meter_marker_event (GdkEvent* event,ArdourCanvas::Item*, MeterMarker*);
bool canvas_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*);
bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item *);
bool canvas_meter_marker_event (GdkEvent* event,ArdourCanvas::Item*, MeterMarker*);
bool canvas_automation_track_event(GdkEvent* event, ArdourCanvas::Item*, AutomationTimeAxisView*);
bool canvas_note_event (GdkEvent* event, ArdourCanvas::Item *);
void queue_visual_videotimeline_update ();
void embed_audio_from_video (std::string, framepos_t n = 0, bool lock_position_to_video = true);
void queue_visual_videotimeline_update ();
void embed_audio_from_video (std::string, framepos_t n = 0, bool lock_position_to_video = true);
friend class DragManager;
friend class EditorRouteGroups;
friend class EditorRegions;
friend class DragManager;
friend class EditorRouteGroups;
friend class EditorRegions;
void edit_meter_marker (MeterMarker&);
void edit_control_point (ArdourCanvas::Item*);
void edit_notes (MidiRegionView*);
void edit_meter_marker (MeterMarker&);
void edit_control_point (ArdourCanvas::Item*);
void edit_notes (MidiRegionView*);
void marker_menu_edit ();
void marker_menu_remove ();
void marker_menu_rename ();
void rename_marker (ArdourMarker *marker);
void marker_menu_edit ();
void marker_menu_remove ();
void marker_menu_rename ();
void rename_marker (ArdourMarker *marker);
+ void toggle_marker_lock_style ();
+ void toggle_tempo_clamped ();
+ void toggle_tempo_type ();
+ void continue_previous_tempo ();
+ void ramp_to_next_tempo ();
void toggle_marker_menu_lock ();
void toggle_marker_menu_glue ();
void marker_menu_hide ();
void toggle_marker_menu_lock ();
void toggle_marker_menu_glue ();
void marker_menu_hide ();
void marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void tempo_or_meter_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void new_transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void tempo_or_meter_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void new_transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void build_new_transport_marker_menu ();
void dynamic_cast_marker_object (void*, MeterMarker**, TempoMarker**) const;
void build_new_transport_marker_menu ();
void dynamic_cast_marker_object (void*, MeterMarker**, TempoMarker**) const;
- void compute_current_bbt_points (framepos_t left, framepos_t right,
- ARDOUR::TempoMap::BBTPointList::const_iterator& begin,
- ARDOUR::TempoMap::BBTPointList::const_iterator& end);
+ void compute_current_bbt_points (std::vector<ARDOUR::TempoMap::BBTPoint>& grid, framepos_t left, framepos_t right);
void region_selection_changed ();
sigc::connection editor_regions_selection_changed_connection;
void sensitize_all_region_actions (bool);
void region_selection_changed ();
sigc::connection editor_regions_selection_changed_connection;
void sensitize_all_region_actions (bool);
bool _all_region_actions_sensitized;
/** Flag to block region action handlers from doing what they normally do;
* I tried Gtk::Action::block_activate() but this doesn't work (ie it doesn't
bool _all_region_actions_sensitized;
/** Flag to block region action handlers from doing what they normally do;
* I tried Gtk::Action::block_activate() but this doesn't work (ie it doesn't
/** computes the timeline frame (sample) of an event whose coordinates
* are in canvas units (pixels, scroll offset included).
/** computes the timeline frame (sample) of an event whose coordinates
* are in canvas units (pixels, scroll offset included).
void get_regions_at (RegionSelection&, framepos_t where, const TrackViewList& ts) const;
void get_regions_after (RegionSelection&, framepos_t where, const TrackViewList& ts) const;
void get_regions_at (RegionSelection&, framepos_t where, const TrackViewList& ts) const;
void get_regions_after (RegionSelection&, framepos_t where, const TrackViewList& ts) const;
- RegionSelection get_regions_from_selection_and_edit_point ();
- RegionSelection get_regions_from_selection_and_entered ();
+ RegionSelection get_regions_from_selection_and_edit_point (Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE,
+ bool use_context_click = false,
+ bool from_outside_canvas = false);
+ RegionSelection get_regions_from_selection_and_entered () const;
- void snap_to_internal (framepos_t& first,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false,
- bool ensure_snap = false);
+ void snap_to_internal (ARDOUR::MusicFrame& first,
+ ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
+ bool for_mark = false,
+ bool ensure_snap = false);
- void timecode_snap_to_internal (framepos_t& first,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ void timecode_snap_to_internal (ARDOUR::MusicFrame& first,
+ ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
+ bool for_mark = false);
std::map<ARDOUR::FadeShape, Gtk::Image*> _xfade_in_images;
std::map<ARDOUR::FadeShape, Gtk::Image*> _xfade_out_images;
std::map<ARDOUR::FadeShape, Gtk::Image*> _xfade_in_images;
std::map<ARDOUR::FadeShape, Gtk::Image*> _xfade_out_images;
- /* private helper functions to help with registering axis */
+ /* private helper functions to help with registering region actions */
+
+ Glib::RefPtr<Gtk::Action> register_region_action (Glib::RefPtr<Gtk::ActionGroup> group, Editing::RegionActionTarget, char const * name, char const * label, sigc::slot<void> slot);
+ void register_toggle_region_action (Glib::RefPtr<Gtk::ActionGroup> group, Editing::RegionActionTarget, char const * name, char const * label, sigc::slot<void> slot);
Glib::RefPtr<Gtk::Action> reg_sens (Glib::RefPtr<Gtk::ActionGroup> group, char const * name, char const * label, sigc::slot<void> slot);
void toggle_reg_sens (Glib::RefPtr<Gtk::ActionGroup> group, char const * name, char const * label, sigc::slot<void> slot);
void radio_reg_sens (Glib::RefPtr<Gtk::ActionGroup> action_group, Gtk::RadioAction::Group& radio_group, char const * name, char const * label, sigc::slot<void> slot);
Glib::RefPtr<Gtk::Action> reg_sens (Glib::RefPtr<Gtk::ActionGroup> group, char const * name, char const * label, sigc::slot<void> slot);
void toggle_reg_sens (Glib::RefPtr<Gtk::ActionGroup> group, char const * name, char const * label, sigc::slot<void> slot);
void radio_reg_sens (Glib::RefPtr<Gtk::ActionGroup> action_group, Gtk::RadioAction::Group& radio_group, char const * name, char const * label, sigc::slot<void> slot);
friend class RegionDrag;
friend class RegionMoveDrag;
friend class RegionSpliceDrag;
friend class RegionRippleDrag;
friend class TrimDrag;
friend class RegionDrag;
friend class RegionMoveDrag;
friend class RegionSpliceDrag;
friend class RegionRippleDrag;
friend class TrimDrag;