X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Feditor.h;h=571b612294203eb40d317ee9a8ad46c1f91f80ee;hb=3bc71af0ca89354670243e600c70374bfb224c6d;hp=d62057f30814ac9744072bc4fe6e7addcadf265c;hpb=ad4919ce920a1a588c9ecd3d822dacfb93d74bb7;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index d62057f308..571b612294 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -25,6 +25,7 @@ #include #include #include +#include #include @@ -44,13 +45,14 @@ #include #include -#include -#include -#include -#include -#include -#include -#include +#include "pbd/stateful.h" +#include "ardour/session.h" +#include "ardour/tempo.h" +#include "ardour/stretch.h" +#include "ardour/location.h" +#include "ardour/audioregion.h" +#include "ardour/track.h" +#include "ardour/types.h" #include "audio_clock.h" #include "gtk-custom-ruler.h" @@ -107,9 +109,9 @@ class AudioStreamView; class ControlPoint; class SoundFileOmega; class RhythmFerret; -#ifdef FFT_ANALYSIS class AnalysisWindow; -#endif +class BundleManager; +class GlobalPortMatrixWindow; /* */ class ImageFrameView; @@ -261,11 +263,9 @@ class Editor : public PublicEditor void set_show_measures (bool yn); bool show_measures () const { return _show_measures; } -#ifdef FFT_ANALYSIS /* analysis window */ void analyze_region_selection(); void analyze_range_selection(); -#endif /* export */ @@ -298,6 +298,7 @@ class Editor : public PublicEditor Width editor_mixer_strip_width; void maybe_add_mixer_strip_width (XMLNode&); void show_editor_mixer (bool yn); + void create_editor_mixer (); void show_editor_list (bool yn); void set_selected_mixer_strip (TimeAxisView&); void hide_track_in_display (TimeAxisView& tv, bool temporary = false); @@ -326,6 +327,10 @@ class Editor : public PublicEditor void toggle_measure_visibility (); void toggle_logo_visibility (); + double get_physical_screen_width () const { return physical_screen_width; }; + double physical_screen_width; + double physical_screen_height; + /* SMPTE timecode & video sync */ void smpte_fps_chosen (ARDOUR::SmpteFormat format); @@ -335,8 +340,13 @@ class Editor : public PublicEditor void update_smpte_mode(); void update_video_pullup(); void update_subframes_per_frame (); - /* xfades */ + /* fades/xfades */ + + void toggle_region_fades (); + void toggle_region_fades_visible (); + void toggle_selected_region_fades (int dir); + void update_region_fade_visibility (); void toggle_auto_xfade (); void toggle_xfades_active (); void toggle_xfade_visibility (); @@ -350,6 +360,7 @@ class Editor : public PublicEditor void update_layering_model (); void toggle_link_region_and_track_selection (); + void toggle_automation_follows_regions (); /* redirect shared ops menu. caller must free returned menu */ @@ -364,6 +375,8 @@ class Editor : public PublicEditor void scroll_tracks_down_line (); void scroll_tracks_up_line (); + void move_selected_tracks (bool up); + bool new_regionviews_display_gain () { return _new_regionviews_show_envelope; } void prepare_for_cleanup (); void finish_cleanup (); @@ -383,6 +396,8 @@ class Editor : public PublicEditor void toggle_meter_updating(); void show_rhythm_ferret(); + void show_bundle_manager (); + void show_global_port_matrix (ARDOUR::DataType); void goto_visual_state (uint32_t); void save_visual_state (uint32_t); @@ -529,8 +544,8 @@ class Editor : public PublicEditor /* functions to be passed to mapover_tracks(), possibly with sigc::bind()-supplied arguments */ void mapped_get_equivalent_regions (RouteTimeAxisView&, uint32_t, RegionView*, vector*) const; - void mapped_use_new_playlist (RouteTimeAxisView&, uint32_t); - void mapped_use_copy_playlist (RouteTimeAxisView&, uint32_t); + void mapped_use_new_playlist (RouteTimeAxisView&, uint32_t, vector > const &); + void mapped_use_copy_playlist (RouteTimeAxisView&, uint32_t, vector > const &); void mapped_clear_playlist (RouteTimeAxisView&, uint32_t); /* end */ @@ -542,7 +557,7 @@ class Editor : public PublicEditor void set_selected_track (TimeAxisView&, Selection::Operation op = Selection::Set, bool no_remove=false); void select_all_tracks (); - + int get_regionview_count_from_region_list (boost::shared_ptr region); bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false); @@ -580,7 +595,7 @@ class Editor : public PublicEditor void add_item_with_sensitivity (Gtk::Menu_Helpers::MenuList&, Gtk::Menu_Helpers::MenuElem, bool) const; - void handle_new_route (ARDOUR::Session::RouteList&); + void handle_new_route (ARDOUR::RouteList&); void remove_route (TimeAxisView *); bool route_removal; @@ -641,6 +656,13 @@ class Editor : public PublicEditor ArdourCanvas::Group* cd_marker_bar_group; /** The group containing all items that require horizontal scrolling. */ + ArdourCanvas::Group* _background_group; + /* + The _master_group is the group containing all items + that require horizontal scrolling.. + It is primarily used to separate canvas items + that require horizontal scrolling from those that do not. + */ ArdourCanvas::Group* _master_group; /* The group containing all trackviews. Only scrolled vertically. */ @@ -771,6 +793,7 @@ class Editor : public PublicEditor static const double timebar_height; guint32 visible_timebars; gdouble canvas_timebars_vsize; + gdouble get_canvas_timebars_vsize () const { return canvas_timebars_vsize; } Gtk::Menu *editor_ruler_menu; ArdourCanvas::SimpleRect* tempo_bar; @@ -872,7 +895,6 @@ class Editor : public PublicEditor double canvas_width; double canvas_height; double full_canvas_height; - nframes64_t last_canvas_frame; bool track_canvas_map_handler (GdkEventAny*); @@ -892,7 +914,10 @@ class Editor : public PublicEditor sigc::connection control_scroll_connection; gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;} + + ArdourCanvas::Group* get_background_group () const { return _background_group; } ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; } + double last_trackview_group_vertical_offset; void tie_vertical_scrolling (); void scroll_canvas_horizontally (); void scroll_canvas_vertically (); @@ -969,6 +994,9 @@ class Editor : public PublicEditor void region_list_region_changed (ARDOUR::Change, boost::weak_ptr); void region_list_selection_changed (); + sigc::connection region_list_change_connection; + void set_selected_in_region_list(RegionSelection&); + bool set_selected_in_region_list_subrow(boost::shared_ptr, Gtk::TreeModel::Row const &, int); bool region_list_selection_filter (const Glib::RefPtr& model, const Gtk::TreeModel::Path& path, bool yn); void region_name_edit (const Glib::ustring&, const Glib::ustring&); void get_regions_corresponding_to (boost::shared_ptr region, std::vector& regions); @@ -1052,7 +1080,7 @@ class Editor : public PublicEditor /* track views */ TrackViewList track_views; - TimeAxisView *trackview_by_y_position (double ypos); + std::pair trackview_by_y_position (double); static Gdk::Cursor* cross_hair_cursor; static Gdk::Cursor* trimmer_cursor; @@ -1130,6 +1158,7 @@ class Editor : public PublicEditor void toggle_region_mute (); void toggle_region_lock (); void toggle_region_opaque (); + void toggle_record_enable (); void set_region_lock_style (ARDOUR::Region::PositionLockStyle); void raise_region (); void raise_region_to_top (); @@ -1240,16 +1269,14 @@ class Editor : public PublicEditor void bring_in_external_audio (Editing::ImportMode mode, nframes64_t& pos); - void _do_import (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&); + bool idle_drop_paths (std::vector paths, nframes64_t frame, double ypos); + void drop_paths_part_two (const std::vector& paths, nframes64_t frame, double ypos); + void do_import (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&); - bool idle_do_import (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&); - - void _do_embed (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&); void do_embed (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&); - bool idle_do_embed (vector paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&); int import_sndfiles (vector paths, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t& pos, - int target_regions, int target_tracks, boost::shared_ptr&, bool); + int target_regions, int target_tracks, boost::shared_ptr, bool, uint32_t total); int embed_sndfiles (vector paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode, nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr&); @@ -1274,16 +1301,24 @@ class Editor : public PublicEditor void build_interthread_progress_window (); ARDOUR::InterThreadInfo* current_interthread_info; -#ifdef FFT_ANALYSIS AnalysisWindow* analysis_window; -#endif /* import specific info */ - ARDOUR::Session::import_status import_status; + struct EditorImportStatus : public ARDOUR::Session::ImportStatus { + Editing::ImportMode mode; + nframes64_t pos; + int target_tracks; + int target_regions; + boost::shared_ptr track; + bool replace; + }; + + EditorImportStatus import_status; gint import_progress_timeout (void *); static void *_import_thread (void *); void* import_thread (); + void finish_import (); /* to support this ... */ @@ -1332,6 +1367,7 @@ class Editor : public PublicEditor void add_location_mark (nframes64_t where); void add_location_from_audio_region (); + void add_locations_from_audio_region (); void add_location_from_selection (); void set_loop_from_selection (bool play); void set_punch_from_selection (); @@ -1376,6 +1412,7 @@ class Editor : public PublicEditor double snap_threshold; void handle_gui_changes (const string &, void *); + bool ignore_gui_changes; void hide_all_tracks (bool with_select); @@ -1391,6 +1428,8 @@ class Editor : public PublicEditor Gtk::Menu fade_context_menu; void popup_fade_context_menu (int, int, ArdourCanvas::Item*, ItemType); + void region_gain_motion_callback (ArdourCanvas::Item*, GdkEvent*); + void start_fade_in_grab (ArdourCanvas::Item*, GdkEvent*); void start_fade_out_grab (ArdourCanvas::Item*, GdkEvent*); void fade_in_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*); @@ -1412,7 +1451,7 @@ class Editor : public PublicEditor void region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); void create_region_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*); void create_region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); - bool check_region_drag_possible (RouteTimeAxisView**); + bool check_region_drag_possible (RouteTimeAxisView**, ARDOUR::layer_t*); void possibly_copy_regions_during_grab (GdkEvent*); void region_drag_splice_motion_callback (ArdourCanvas::Item*, GdkEvent*); void region_drag_splice_finished_callback (ArdourCanvas::Item*, GdkEvent*); @@ -1422,6 +1461,7 @@ class Editor : public PublicEditor void cursor_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*); void cursor_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); + void cursor_drag_finished_ensure_locate_callback (ArdourCanvas::Item*, GdkEvent*); void marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*); void marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); void control_point_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*); @@ -1442,6 +1482,7 @@ class Editor : public PublicEditor void start_region_brush_grab (ArdourCanvas::Item*, GdkEvent*); void start_selection_grab (ArdourCanvas::Item*, GdkEvent*); void start_cursor_grab (ArdourCanvas::Item*, GdkEvent*); + void start_cursor_grab_no_stop (ArdourCanvas::Item*, GdkEvent*); void start_marker_grab (ArdourCanvas::Item*, GdkEvent*); void start_control_point_grab (ArdourCanvas::Item*, GdkEvent*); void start_line_grab_from_regionview (ArdourCanvas::Item*, GdkEvent*); @@ -1571,6 +1612,7 @@ public: void edit_meter_section (ARDOUR::MeterSection*); void edit_tempo_marker (ArdourCanvas::Item*); void edit_meter_marker (ArdourCanvas::Item*); + void edit_control_point (ArdourCanvas::Item*); void marker_menu_edit (); void marker_menu_remove (); @@ -1591,7 +1633,7 @@ public: void new_transport_marker_menu_set_punch (); void update_loop_range_view (bool visibility=false); void update_punch_range_view (bool visibility=false); - gint new_transport_marker_menu_popdown (GdkEventAny*); + void new_transport_marker_menu_popdown (); void marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); void tm_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); void transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); @@ -1712,13 +1754,17 @@ public: /* midi toolbar */ Gtk::HBox midi_tool_button_box; - Gtkmm2ext::TearOff* midi_tool_tearoff; Gtk::ToggleButton midi_tool_pencil_button; Gtk::ToggleButton midi_tool_select_button; Gtk::ToggleButton midi_tool_resize_button; Gtk::ToggleButton midi_tool_erase_button; + Gtk::Button midi_panic_button; + Gtk::ToggleButton midi_sound_notes; GroupedButtons *midi_tool_button_set; void midi_edit_mode_toggled (Editing::MidiEditMode m); + void midi_panic_button_pressed (); + bool sound_notes () const { return midi_sound_notes.get_active(); } + bool ignore_midi_edit_mode_toggle; Gtkmm2ext::TearOff* midi_tools_tearoff; @@ -1736,6 +1782,7 @@ public: void time_selection_changed (); void track_selection_changed (); void region_selection_changed (); + sigc::connection editor_regions_selection_changed_connection; void sensitize_the_right_region_actions (bool have_selected_regions); void point_selection_changed (); void marker_selection_changed (); @@ -1777,7 +1824,9 @@ public: ArdourCanvas::SimpleRect* range_marker_drag_rect; void update_marker_drag_item (ARDOUR::Location *); - +#ifdef GTKOSX + ArdourCanvas::SimpleRect *bogus_background_rect; +#endif ArdourCanvas::SimpleRect *transport_bar_range_rect; ArdourCanvas::SimpleRect *transport_bar_preroll_rect; ArdourCanvas::SimpleRect *transport_bar_postroll_rect; @@ -1839,8 +1888,9 @@ public: void update_route_visibility (); - void sync_order_keys (); - bool ignore_route_order_sync; + void sync_order_keys (const char*); + bool route_redisplay_does_not_sync_order_keys; + bool route_redisplay_does_not_reset_order_keys; bool route_list_display_button_press (GdkEventButton*); void route_list_display_drag_data_received (const Glib::RefPtr& context, @@ -1988,7 +2038,6 @@ public: guint info, guint time); - void drop_paths (const Glib::RefPtr& context, gint x, gint y, @@ -2101,6 +2150,7 @@ public: Gtk::ComboBoxText stretch_opts_selector; Gtk::Label stretch_opts_label; Gtk::ToggleButton precise_button; + Gtk::ToggleButton preserve_formants_button; Gtk::HBox opts_box; Gtk::Button* cancel_button; @@ -2143,7 +2193,9 @@ public: void detach_tearoff (Gtk::Box* b, Gtk::Window* w); void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n); - +#ifdef GTKOSX + void ensure_all_elements_drawn (); +#endif /* nudging tracks */ void nudge_track (bool use_edit_point, bool forwards); @@ -2242,6 +2294,7 @@ public: bool entered_track_canvas (GdkEventCrossing*); void set_entered_track (TimeAxisView*); void set_entered_regionview (RegionView*); + void ensure_track_visible (TimeAxisView*); gint left_automation_track (); bool _new_regionviews_show_envelope; @@ -2298,15 +2351,11 @@ public: void snap_to_internal (nframes64_t& first, int32_t direction = 0, bool for_mark = false); RhythmFerret* rhythm_ferret; + BundleManager* _bundle_manager; + GlobalPortMatrixWindow* _global_port_matrix[ARDOUR::DataType::num_types]; void fit_tracks (); void set_track_height (uint32_t h); - void set_track_height_largest (); - void set_track_height_large (); - void set_track_height_larger (); - void set_track_height_normal (); - void set_track_height_smaller (); - void set_track_height_small (); void remove_tracks (); void toggle_tracks_active (); @@ -2318,6 +2367,12 @@ public: bool idle_resize(); friend gboolean _idle_resize (gpointer); std::vector pending_resizes; + + void visible_order_range (int*, int*) const; + bool y_movement_disallowed (int, int, int, int, int, std::bitset<512> const &, std::vector const &) const; + + void located (); + bool _pending_locate_request; }; #endif /* __ardour_editor_h__ */