X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.h;h=5778a3cbbbb40d64e9b9ab51727a1d008418de03;hb=234b06a18cf3e8c07bc44fb4f8c1218e17fb65f1;hp=fd308bed125429f331554da05827af07c3456c1b;hpb=7de6128169f5e7834c6670b2d43e944aae2dd193;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index fd308bed12..5778a3cbbb 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -62,25 +62,25 @@ #include "selection_memento.h" namespace Gtkmm2ext { - class TearOff; class Bindings; } namespace ARDOUR { - class RouteGroup; - class Playlist; class AudioPlaylist; class AudioRegion; - class Region; - class Location; - class TempoSection; - class Session; - class Filter; + class AudioTrack; class ChanCount; + class Filter; + class Location; class MidiOperator; - class Track; + class MidiRegion; class MidiTrack; - class AudioTrack; + class Playlist; + class Region; + class RouteGroup; + class Session; + class TempoSection; + class Track; } namespace LADSPA { @@ -111,14 +111,16 @@ class EditorSnapshots; class EditorSummary; class GroupedButtons; class GUIObjectState; -class Marker; +class ArdourMarker; class MidiRegionView; +class MidiExportDialog; class MixerStrip; class MouseCursors; class NoteBase; class PlaylistSelector; class PluginSelector; class ProgressReporter; +class QuantizeDialog; class RhythmFerret; class RulerDialog; class Selection; @@ -140,6 +142,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_session (ARDOUR::Session *); ARDOUR::Session* session() const { return _session; } + Gtk::Window* use_own_window (bool and_fill_it); + void first_idle (); virtual bool have_idled () const { return _have_idled; } @@ -261,6 +265,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_selected_regionview_from_region_list (boost::shared_ptr region, Selection::Operation op = Selection::Set); + void remove_tracks (); + /* tempo */ void set_show_measures (bool yn); @@ -268,8 +274,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /* analysis window */ - 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(); /* export */ @@ -279,15 +288,14 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void export_range (); void export_region (); - void add_transport_frame (Gtk::Container&); - void add_toplevel_menu (Gtk::Container&); - Gtk::HBox& get_status_bar_packer() { return status_bar_hpacker; } + bool process_midi_export_dialog (MidiExportDialog& dialog, boost::shared_ptr midi_region); void set_zoom_focus (Editing::ZoomFocus); 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 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); @@ -344,7 +352,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_summary (); void set_group_tabs (); void toggle_measure_visibility (); - void toggle_logo_visibility (); /* fades */ @@ -359,12 +366,17 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void ensure_float (Gtk::Window&); - void show_window (); - void scroll_tracks_down_line (); void scroll_tracks_up_line (); - bool scroll_up_one_track (); - bool scroll_down_one_track (); + + bool scroll_up_one_track (bool skip_child_views = false); + bool scroll_down_one_track (bool skip_child_views = false); + + void scroll_left_step (); + void scroll_right_step (); + + void scroll_left_half_page (); + void scroll_right_half_page (); void prepare_for_cleanup (); void finish_cleanup (); @@ -372,9 +384,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void maximise_editing_space(); void restore_editing_space(); - void update_tearoff_visibility(); - void reattach_all_tearoffs (); - double get_y_origin () const; void reset_x_origin (framepos_t); void reset_x_origin_to_follow_playhead (); @@ -382,7 +391,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void reset_zoom (framecnt_t); void reposition_and_zoom (framepos_t, double); - framepos_t get_preferred_edit_position (bool ignore_playhead = false, + framepos_t get_preferred_edit_position (Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE, bool use_context_click = false, bool from_outside_canvas = false); @@ -406,6 +415,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD int get_regionview_count_from_region_list (boost::shared_ptr); + void do_ptimport(std::string path, ARDOUR::SrcQuality quality); + void do_import (std::vector paths, Editing::ImportDisposition disposition, Editing::ImportMode mode, @@ -428,12 +439,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD TrackViewList axis_views_from_routes (boost::shared_ptr) const; - Gtkmm2ext::TearOff* mouse_mode_tearoff () const { return _mouse_mode_tearoff; } - Gtkmm2ext::TearOff* tools_tearoff () const { return _tools_tearoff; } - void snap_to (framepos_t& first, ARDOUR::RoundMode direction = ARDOUR::RoundNearest, - bool for_mark = false); + bool for_mark = false, + bool ensure_snap = false); void snap_to_with_modifier (framepos_t& first, GdkEvent const * ev, @@ -496,7 +505,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD TimeAxisView* stepping_axis_view () { return _stepping_axis_view; } - + void set_stepping_axis_view (TimeAxisView* v) { _stepping_axis_view = v; } @@ -519,11 +528,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void metric_get_minsec (std::vector&, gdouble, gdouble, gint); /* editing operations that need to be public */ - void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false); + void mouse_add_new_marker (framepos_t where, bool is_cd=false); void split_regions_at (framepos_t, RegionSelection&); 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); - + void mouse_add_new_tempo_event (framepos_t where); void mouse_add_new_meter_event (framepos_t where); void edit_tempo_section (ARDOUR::TempoSection*); @@ -627,6 +636,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void remove_marker (ArdourCanvas::Item&, GdkEvent*); gint really_remove_marker (ARDOUR::Location* loc); void goto_nth_marker (int nth); + void trigger_script (int nth); void toggle_marker_lines (); void set_marker_line_visibility (bool); @@ -637,8 +647,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD uint32_t location_cd_marker_color; struct LocationMarkers { - Marker* start; - Marker* end; + ArdourMarker* start; + ArdourMarker* end; bool valid; LocationMarkers () : start(0), end(0), valid (true) {} @@ -659,9 +669,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD }; LocationMarkers *find_location_markers (ARDOUR::Location *) const; - ARDOUR::Location* find_location_from_marker (Marker *, bool& is_start) const; - Marker* find_marker_from_location_id (PBD::ID const &, bool) const; - Marker* entered_marker; + ARDOUR::Location* find_location_from_marker (ArdourMarker *, bool& is_start) const; + ArdourMarker* find_marker_from_location_id (PBD::ID const &, bool) const; + ArdourMarker* entered_marker; bool _show_marker_lines; typedef std::map LocationMarkerMap; @@ -669,7 +679,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void update_marker_labels (); void update_marker_labels (ArdourCanvas::Container *); - void check_marker_label (Marker *); + void check_marker_label (ArdourMarker *); /** A set of lists of Markers that are in each of the canvas groups * for the marker sections at the top of the editor. These lists @@ -677,12 +687,14 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD * a marker has moved we can decide whether we need to update the labels * for all markers or for just a few. */ - std::map > _sorted_marker_lists; - void remove_sorted_marker (Marker *); + std::map > _sorted_marker_lists; + void remove_sorted_marker (ArdourMarker *); void hide_marker (ArdourCanvas::Item*, GdkEvent*); void clear_marker_display (); void mouse_add_new_range (framepos_t); + void mouse_add_new_loop (framepos_t); + void mouse_add_new_punch (framepos_t); bool choose_new_marker_name(std::string &name); void update_cd_marker_display (); void ensure_cd_marker_updated (LocationMarkers * lam, ARDOUR::Location * location); @@ -710,7 +722,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void mapped_use_new_playlist (RouteTimeAxisView&, uint32_t, std::vector > const &); void mapped_use_copy_playlist (RouteTimeAxisView&, uint32_t, std::vector > const &); void mapped_clear_playlist (RouteTimeAxisView&, uint32_t); - + void button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type); bool button_release_can_deselect; bool _mouse_changed_selection; @@ -762,9 +774,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void add_routes (ARDOUR::RouteList&); void timeaxisview_deleted (TimeAxisView *); - Gtk::HBox global_hpacker; - Gtk::VBox global_vpacker; - Gtk::VBox vpacker; + Gtk::HBox global_hpacker; + Gtk::VBox global_vpacker; /* Cursor stuff. Do not use directly, use via CursorContext. */ friend class CursorContext; @@ -799,15 +810,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::EventBox time_bars_event_box; Gtk::VBox time_bars_vbox; - ArdourCanvas::Pixbuf *logo_item; -#if 0 - /* these will be needed when we have canvas rulers */ - ArdourCanvas::Container *minsec_group; - ArdourCanvas::Container *bbt_group; - ArdourCanvas::Container *timecode_group; - ArdourCanvas::Container *frame_group; -#endif - ArdourCanvas::Container *tempo_group; ArdourCanvas::Container *meter_group; ArdourCanvas::Container *marker_group; @@ -999,7 +1001,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void toggle_ruler_video (bool onoff) {ruler_video_action->set_active(onoff);} int videotl_bar_height; /* in units of timebar_height; default: 4 */ int get_videotl_bar_height () const { return videotl_bar_height; } - void export_video (bool range = false); void toggle_region_video_lock (); friend class EditorCursor; @@ -1027,7 +1028,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void selected_marker_to_selection_end (); void select_all_selectables_using_cursor (EditorCursor *, bool); - void select_all_selectables_using_edit (bool); + void select_all_selectables_using_edit (bool, bool); void select_all_selectables_between (bool within); void select_range_between (); @@ -1173,8 +1174,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void register_region_actions (); void load_bindings (); - Gtkmm2ext::ActionMap editor_action_map; - Gtkmm2ext::Bindings key_bindings; /* CUT/COPY/PASTE */ @@ -1238,7 +1237,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void region_fill_track (); void audition_playlist_region_standalone (boost::shared_ptr); - void audition_playlist_region_via_route (boost::shared_ptr, ARDOUR::Route&); void split_multichannel_region(); void reverse_region (); void strip_region_silence (); @@ -1251,12 +1249,18 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void legatize_regions (const RegionSelection& rs, bool shrink_only); void transform_region (); void transform_regions (const RegionSelection& rs); + void transpose_region (); + void transpose_regions (const RegionSelection& rs); void insert_patch_change (bool from_context); void fork_region (); void do_insert_time (); void insert_time (framepos_t, framecnt_t, Editing::InsertTimeOption, bool, bool, bool, bool, bool, bool); + void do_remove_time (); + void remove_time (framepos_t pos, framecnt_t distance, Editing::InsertTimeOption opt, bool ignore_music_glue, bool markers_too, + bool glued_markers_too, bool locked_markers_too, bool tempo_too); + void tab_to_transient (bool forward); void set_tempo_from_region (); @@ -1270,7 +1274,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void naturalize_region (); - void reset_focus (); + void reset_focus (Gtk::Widget*); void split_region (); @@ -1307,6 +1311,18 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void insert_region_list_selection (float times); + /* PT import */ + void external_pt_dialog (); + typedef struct ptflookup { + uint16_t index1; + uint16_t index2; + PBD::ID id; + + bool operator ==(const struct ptflookup& other) { + return (this->index1 == other.index1); + } + } ptflookup_t; + /* import & embed */ void add_external_audio_action (Editing::ImportMode); @@ -1434,6 +1450,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_punch_from_selection (); void set_punch_from_region (); + void set_session_start_from_playhead (); + void set_session_end_from_playhead (); void set_session_extents_from_selection (); void set_loop_from_region (bool play); @@ -1454,8 +1472,13 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD int scrub_reverse_distance; void scrub (framepos_t, double); - void keyboard_selection_begin (); - void keyboard_selection_finish (bool add); + void set_punch_start_from_edit_point (); + void set_punch_end_from_edit_point (); + void set_loop_start_from_edit_point (); + void set_loop_end_from_edit_point (); + + void keyboard_selection_begin ( Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE ); + void keyboard_selection_finish (bool add, Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE); bool have_pending_keyboard_selection; framepos_t pending_keyboard_selection_start; @@ -1542,7 +1565,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD bool canvas_region_view_name_event (GdkEvent* event,ArdourCanvas::Item*, RegionView*); bool canvas_feature_line_event (GdkEvent* event, ArdourCanvas::Item*, RegionView*); bool canvas_stream_view_event (GdkEvent* event,ArdourCanvas::Item*, RouteTimeAxisView*); - bool canvas_marker_event (GdkEvent* event,ArdourCanvas::Item*, Marker*); + 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*); @@ -1595,6 +1618,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void initialize_canvas (); + void manage_action_scripts (); + void set_script_action_name (int i, const std::string&); + /* display control */ bool _show_measures; @@ -1630,7 +1656,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void marker_menu_edit (); void marker_menu_remove (); void marker_menu_rename (); - void rename_marker (Marker *marker); + void rename_marker (ArdourMarker *marker); void toggle_marker_menu_lock (); void toggle_marker_menu_glue (); void marker_menu_hide (); @@ -1667,13 +1693,13 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::Menu* cd_marker_menu; ArdourCanvas::Item* marker_menu_item; - typedef std::list Marks; + typedef std::list Marks; Marks metric_marks; void remove_metric_marks (); void draw_metric_marks (const ARDOUR::Metrics& metrics); - void compute_current_bbt_points (framepos_t left, framepos_t right, + void compute_current_bbt_points (framepos_t left, framepos_t right, ARDOUR::TempoMap::BBTPointList::const_iterator& begin, ARDOUR::TempoMap::BBTPointList::const_iterator& end); @@ -1709,7 +1735,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::Table toolbar_selection_clock_table; Gtk::Label toolbar_selection_cursor_label; - Gtkmm2ext::TearOff* _mouse_mode_tearoff; ArdourButton mouse_select_button; ArdourButton mouse_draw_button; ArdourButton mouse_move_button; @@ -1768,23 +1793,17 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Glib::RefPtr zoom_focus_action (Editing::ZoomFocus); Gtk::HBox _zoom_box; - Gtkmm2ext::TearOff* _zoom_tearoff; void zoom_adjustment_changed(); void setup_toolbar (); void setup_tooltips (); - Gtkmm2ext::TearOff* _tools_tearoff; Gtk::HBox toolbar_hbox; Gtk::EventBox toolbar_base; Gtk::Frame toolbar_frame; Gtk::Viewport _toolbar_viewport; - /* midi toolbar */ - - Gtk::HBox panic_box; - void setup_midi_toolbar (); /* selection process */ @@ -1824,10 +1843,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD ArdourCanvas::Rectangle* cd_marker_bar_drag_rect; ArdourCanvas::Rectangle* range_bar_drag_rect; ArdourCanvas::Rectangle* transport_bar_drag_rect; - -#ifdef GTKOSX - ArdourCanvas::Rectangle *bogus_background_rect; -#endif ArdourCanvas::Rectangle *transport_bar_range_rect; ArdourCanvas::Rectangle *transport_bar_preroll_rect; ArdourCanvas::Rectangle *transport_bar_postroll_rect; @@ -1999,8 +2014,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD int pitch_shift (RegionSelection&, float cents); void pitch_shift_region (); - void transpose_region (); - /* editor-mixer strip */ MixerStrip *current_mixer_strip; @@ -2009,9 +2022,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void cms_new (boost::shared_ptr); void current_mixer_strip_hidden (); - void detach_tearoff (Gtk::Box* b, Gtk::Window* w); - void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n); -#ifdef GTKOSX +#ifdef __APPLE__ void ensure_all_elements_drawn (); #endif /* nudging tracks */ @@ -2073,9 +2084,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void toggle_gain_envelope_active (); void reset_region_gain_envelopes (); - bool on_key_press_event (GdkEventKey*); - bool on_key_release_event (GdkEventKey*); - void session_state_saved (std::string); Glib::RefPtr undo_action; @@ -2087,8 +2095,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void history_changed (); - Gtk::HBox status_bar_hpacker; - Editing::EditPoint _edit_point; ArdourDropdown edit_point_selector; @@ -2122,7 +2128,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void snap_to_internal (framepos_t& first, ARDOUR::RoundMode direction = ARDOUR::RoundNearest, - bool for_mark = false); + bool for_mark = false, + bool ensure_snap = false); void timecode_snap_to_internal (framepos_t& first, ARDOUR::RoundMode direction = ARDOUR::RoundNearest, @@ -2134,7 +2141,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void fit_selection (); void set_track_height (Height); - void remove_tracks (); + void _remove_tracks (); + bool idle_remove_tracks (); void toggle_tracks_active (); bool _have_idled; @@ -2224,6 +2232,17 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void update_bring_in_message (Gtk::Label* label, uint32_t n, uint32_t total, std::string name); void bring_all_sources_into_session (); + QuantizeDialog* quantize_dialog; + MainMenuDisabler* _main_menu_disabler; + + /* private helper functions to help with registering axis */ + + 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); + void radio_reg_sens (Glib::RefPtr action_group, Gtk::RadioAction::Group& radio_group, char const * name, char const * label, sigc::slot slot); + + Gtkmm2ext::ActionMap myactions; + friend class Drag; friend class RegionDrag; friend class RegionMoveDrag;