X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.h;h=917dacb53e2d7bd1080ddc162ae1bc42327350ee;hb=448bc635e528f068d88a34de03622fba0e3ea180;hp=8bbc7fee2b263b374dfdf9d233a5e099d15dd384;hpb=da7d7f950233f109f82f7e7ea5c62f81ef3d7bbb;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 8bbc7fee2b..917dacb53e 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -67,6 +67,10 @@ namespace Gtkmm2ext { class Bindings; } +namespace Evoral { + class SMF; +} + namespace ARDOUR { class AudioPlaylist; class AudioRegion; @@ -130,6 +134,7 @@ class SoundFileOmega; class StreamView; class TempoLines; class TimeAxisView; +class TimeInfoBox; class TimeFXDialog; class TimeSelection; class RegionLayeringOrderEditor; @@ -251,14 +256,16 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Selection& get_selection() const { return *selection; } 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 Selection& get_cut_buffer() const { return *cut_buffer; } - void track_mixer_selection (); + + void set_selection (std::list, Selection::Operation); bool extend_selection_to_track (TimeAxisView&); void play_selection (); - framepos_t get_preroll (); void maybe_locate_with_edit_preroll (framepos_t); void play_with_preroll (); + void rec_with_preroll (); + void rec_with_count_in (); void select_all_in_track (Selection::Operation op); void select_all_objects (Selection::Operation op); void invert_selection_in_track (); @@ -297,8 +304,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD 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); @@ -322,6 +331,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_selected_mixer_strip (TimeAxisView&); void mixer_strip_width_changed (); void hide_track_in_display (TimeAxisView* tv, bool apply_to_selection = false); + void show_track_in_display (TimeAxisView* tv, bool move_into_view = false); + void tempo_curve_selected (ARDOUR::TempoSection* ts, bool yn); /* nudge is initiated by transport controls owned by ARDOUR_UI */ @@ -330,7 +341,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD unsigned get_grid_beat_divisions(framepos_t position); Evoral::Beats get_grid_type_as_beats (bool& success, framepos_t position); - unsigned get_grid_music_divisions (uint32_t event_state); + int32_t get_grid_music_divisions (uint32_t event_state); void nudge_forward (bool next, bool force_playhead); void nudge_backward (bool next, bool force_playhead); @@ -360,8 +371,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /* fades */ - void toggle_region_fades (int dir); - void update_region_fade_visibility (); + void toggle_region_fades (int dir); + void update_region_fade_visibility (); /* redirect shared ops menu. caller must free returned menu */ @@ -426,6 +437,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Editing::ImportDisposition disposition, Editing::ImportMode mode, ARDOUR::SrcQuality quality, + ARDOUR::MidiTrackNameSource mts, + ARDOUR::MidiTempoMapDisposition mtd, framepos_t& pos, boost::shared_ptr instrument = boost::shared_ptr()); @@ -444,20 +457,20 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD TrackViewList axis_views_from_routes (boost::shared_ptr) const; - 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); void begin_selection_op_history (); void begin_reversible_selection_op (std::string cmd_name); @@ -534,7 +547,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /* editing operations that need to be public */ void mouse_add_new_marker (framepos_t where, bool is_cd=false); - void split_regions_at (framepos_t, RegionSelection&); + void split_regions_at (ARDOUR::MusicFrame, RegionSelection&, bool snap = true); void split_region_at_points (boost::shared_ptr, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false); RegionSelection get_regions_from_selection_and_mouse (framepos_t); @@ -563,6 +576,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD PlaylistSelector* _playlist_selector; + TimeInfoBox* _time_info_box; + typedef std::pair TAVState; struct VisualState { @@ -615,6 +630,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD boost::optional pre_notebook_shrink_pane_width; + Gtk::VBox _editor_list_vbox; Gtk::Notebook _the_notebook; bool _notebook_shrunk; void add_notebook_page (std::string const &, Gtk::Widget &); @@ -643,6 +659,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void toggle_marker_lines (); void set_marker_line_visibility (bool); + void jump_forward_to_mark (); + void jump_backward_to_mark (); + uint32_t location_marker_color; uint32_t location_range_color; uint32_t location_loop_color; @@ -717,6 +736,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void get_equivalent_regions (RegionView* rv, std::vector &, PBD::PropertyID) const; RegionSelection get_equivalent_regions (RegionSelection &, PBD::PropertyID) const; + RegionView* regionview_from_region (boost::shared_ptr) const; + RouteTimeAxisView* rtav_from_route (boost::shared_ptr) const; + void mapover_tracks (sigc::slot sl, TimeAxisView*, PBD::PropertyID) const; void mapover_tracks_with_unique_playlists (sigc::slot sl, TimeAxisView*, PBD::PropertyID) const; @@ -890,7 +912,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void update_just_timecode (); void compute_fixed_ruler_scale (); //calculates the RulerScale of the fixed rulers void update_fixed_rulers (); - void update_tempo_based_rulers (std::vector& grid); + void update_tempo_based_rulers (); void popup_ruler_menu (framepos_t where = 0, ItemType type = RegionItem); void update_ruler_visibility (); void set_ruler_visible (RulerType, bool); @@ -953,7 +975,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD gint bbt_nmarks; uint32_t bbt_bar_helper_on; uint32_t bbt_accent_modulo; - void compute_bbt_ruler_scale (std::vector& grid, framepos_t lower, framepos_t upper); + void compute_bbt_ruler_scale (framepos_t lower, framepos_t upper); ArdourCanvas::Ruler* timecode_ruler; ArdourCanvas::Ruler* bbt_ruler; @@ -1007,7 +1029,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD friend class EditorCursor; - EditorCursor* playhead_cursor; + EditorCursor* playhead_cursor; + framepos_t playhead_cursor_sample () const; framepos_t get_region_boundary (framepos_t pos, int32_t dir, bool with_selection, bool only_onscreen); @@ -1042,7 +1065,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::HBox toplevel_hpacker; - Gtk::HBox top_hbox; Gtk::HBox bottom_hbox; Gtk::Table edit_packer; @@ -1190,7 +1212,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void cut_copy_midi (Editing::CutCopyOp); void mouse_paste (); - void paste_internal (framepos_t position, float times); + void paste_internal (framepos_t position, float times, const int32_t sub_num); /* EDITING OPERATIONS */ @@ -1245,6 +1267,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void normalize_region (); void reset_region_scale_amplitude (); void adjust_region_gain (bool up); + void reset_region_gain (); void quantize_region (); void quantize_regions (const RegionSelection& rs); void legatize_region (bool shrink_only); @@ -1276,14 +1299,12 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void naturalize_region (); - void reset_focus (Gtk::Widget*); - void split_region (); void delete_ (); void cut (); void copy (); - void paste (float times, bool from_context_menu = false); + void paste (float times, bool from_context_menu); void place_transient (); void remove_transient (ArdourCanvas::Item* item); @@ -1304,8 +1325,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void loop_location (ARDOUR::Location&); void calc_extra_zoom_edges(framepos_t &start, framepos_t &end); - void temporal_zoom_selection (bool both_axes = false); - void temporal_zoom_region (bool both_axes); + void temporal_zoom_selection (Editing::ZoomAxis); void temporal_zoom_session (); void temporal_zoom (framecnt_t samples_per_pixel); void temporal_zoom_by_frame (framepos_t start, framepos_t end); @@ -1328,8 +1348,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /* import & embed */ void add_external_audio_action (Editing::ImportMode); - void external_audio_dialog (); - void session_import_dialog (); int check_whether_and_how_to_import(std::string, bool all_or_nothing = true); bool check_multichannel_status (const std::vector& paths); @@ -1392,6 +1410,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD AnalysisWindow* analysis_window; + /* import & embed */ + void external_audio_dialog (); + void session_import_dialog (); + /* import specific info */ struct EditorImportStatus : public ARDOUR::ImportStatus { @@ -1412,7 +1434,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void import_audio (bool as_tracks); void do_import (std::vector paths, bool split, bool as_tracks); - + void import_smf_tempo_map (Evoral::SMF const &, framepos_t pos); void move_to_start (); void move_to_end (); void center_playhead (); @@ -1430,8 +1452,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void clear_locations (); void unhide_markers (); void unhide_ranges (); - void jump_forward_to_mark (); - void jump_backward_to_mark (); void cursor_align (bool playhead_to_edit); void toggle_skip_playback (); @@ -1451,6 +1471,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_loop_from_selection (bool play); void set_punch_from_selection (); void set_punch_from_region (); + void set_auto_punch_range(); void set_session_start_from_playhead (); void set_session_end_from_playhead (); @@ -1461,7 +1482,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD 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 toggle_location_at_playhead_cursor (); void add_location_from_playhead_cursor (); + bool do_remove_location_at_playhead_cursor (); void remove_location_at_playhead_cursor (); bool select_new_marker; @@ -1591,6 +1614,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void queue_visual_videotimeline_update (); void embed_audio_from_video (std::string, framepos_t n = 0, bool lock_position_to_video = true); + bool track_selection_change_without_scroll () const { + return _track_selection_change_without_scroll; + } + PBD::Signal0 EditorFreeze; PBD::Signal0 EditorThaw; @@ -1621,8 +1648,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void initialize_canvas (); - void set_script_action_name (int i, const std::string&); - /* display control */ bool _show_measures; @@ -1653,13 +1678,20 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void edit_meter_marker (MeterMarker&); void edit_control_point (ArdourCanvas::Item*); void edit_notes (MidiRegionView*); + void edit_region (RegionView*); + + void edit_current_meter (); + void edit_current_tempo (); 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 (); @@ -1682,7 +1714,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD 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_range_marker_menu (bool, bool); + void build_range_marker_menu (ARDOUR::Location *, bool, bool); void build_marker_menu (ARDOUR::Location *); void build_tempo_marker_menu (TempoMarker *, bool); void build_meter_marker_menu (MeterMarker *, bool); @@ -1710,7 +1742,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void compute_current_bbt_points (std::vector& grid, framepos_t left, framepos_t right); void tempo_map_changed (const PBD::PropertyChange&); - void marker_position_changed (); + void tempometric_position_changed (const PBD::PropertyChange&); void redisplay_tempo (bool immediate_redraw); uint32_t bbt_beat_subdivision; @@ -1799,6 +1831,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Glib::RefPtr zoom_focus_action (Editing::ZoomFocus); + Gtk::HBox _track_box; + Gtk::HBox _zoom_box; void zoom_adjustment_changed(); @@ -1807,9 +1841,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void setup_tooltips (); Gtk::HBox toolbar_hbox; - Gtk::EventBox toolbar_base; - Gtk::Frame toolbar_frame; - Gtk::Viewport _toolbar_viewport; void setup_midi_toolbar (); @@ -1825,7 +1856,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void region_selection_changed (); sigc::connection editor_regions_selection_changed_connection; void sensitize_all_region_actions (bool); - void sensitize_the_right_region_actions (); + void sensitize_the_right_region_actions (bool because_canvas_crossing); 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 @@ -1836,7 +1867,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void point_selection_changed (); void marker_selection_changed (); - bool _ignore_follow_edits; + bool _track_selection_change_without_scroll; void cancel_selection (); void cancel_time_selection (); @@ -1999,6 +2030,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /* duplication */ void duplicate_range (bool with_dialog); + void duplicate_regions (float times); /** computes the timeline frame (sample) of an event whose coordinates * are in canvas units (pixels, scroll offset included). @@ -2124,7 +2156,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD 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_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 start_updating_meters (); @@ -2134,14 +2168,14 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void select_next_route (); void select_prev_route (); - 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); RhythmFerret* rhythm_ferret; @@ -2204,8 +2238,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD bool _region_selection_change_updates_region_list; void setup_fade_images (); - std::map _fade_in_images; - std::map _fade_out_images; std::map _xfade_in_images; std::map _xfade_out_images; @@ -2243,7 +2275,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD QuantizeDialog* quantize_dialog; MainMenuDisabler* _main_menu_disabler; - /* private helper functions to help with registering axis */ + /* private helper functions to help with registering region actions */ + + Glib::RefPtr register_region_action (Glib::RefPtr group, Editing::RegionActionTarget, char const * name, char const * label, sigc::slot slot); + void register_toggle_region_action (Glib::RefPtr group, Editing::RegionActionTarget, char const * name, char const * label, sigc::slot slot); Glib::RefPtr reg_sens (Glib::RefPtr group, char const * name, char const * label, sigc::slot slot); void toggle_reg_sens (Glib::RefPtr group, char const * name, char const * label, sigc::slot slot); @@ -2252,6 +2287,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtkmm2ext::ActionMap myactions; friend class Drag; + friend class RegionCutDrag; friend class RegionDrag; friend class RegionMoveDrag; friend class RegionSpliceDrag; @@ -2268,6 +2304,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD friend class ControlPointDrag; friend class LineDrag; friend class RubberbandSelectDrag; + friend class RulerZoomDrag; friend class EditorRubberbandSelectDrag; friend class TimeFXDrag; friend class ScrubDrag;