X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.h;h=b9a4f29ceca704815b80d414d7e987a4c5ed9314;hb=e0b7de13b7e704fcdd401dc0a109c499dda70d73;hp=94d85f976cfa0ce21d6909ec85e62b6aa2548641;hpb=f4fe4d36b1db9d5c267273e2f772e9d6b3746d1c;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 94d85f976c..b9a4f29cec 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_editor_h__ @@ -61,10 +60,6 @@ namespace Gtkmm2ext { class TearOff; } -namespace LinuxAudioSystems { - class AudioEngine; -} - namespace ARDOUR { class AudioDiskstream; class RouteGroup; @@ -77,6 +72,7 @@ namespace ARDOUR { class Session; class AudioFilter; class Crossfade; + class ChanCount; } namespace LADSPA { @@ -84,7 +80,6 @@ namespace LADSPA { } class TimeAxisView; -class RouteTimeAxisView; class AudioTimeAxisView; class AutomationTimeAxisView; class AudioRegionView; @@ -122,7 +117,7 @@ class TimeAxisViewItem ; class Editor : public PublicEditor { public: - Editor (ARDOUR::AudioEngine&); + Editor (); ~Editor (); void connect_to_session (ARDOUR::Session *); @@ -145,13 +140,15 @@ class Editor : public PublicEditor void set_mouse_mode (Editing::MouseMode, bool force=true); void step_mouse_mode (bool next); - Editing::MouseMode current_mouse_mode () { return mouse_mode; } + Editing::MouseMode current_mouse_mode () const { return mouse_mode; } - void add_imageframe_time_axis(const string & track_name, void*) ; - void add_imageframe_marker_time_axis(const string & track_name, TimeAxisView* marked_track, void*) ; +#ifdef WITH_CMT + void add_imageframe_time_axis(const std::string & track_name, void*) ; + void add_imageframe_marker_time_axis(const std::string & track_name, TimeAxisView* marked_track, void*) ; void connect_to_image_compositor() ; void scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item) ; - TimeAxisView* get_named_time_axis(const string & name) ; + TimeAxisView* get_named_time_axis(const std::string & name) ; +#endif void consider_auditioning (boost::shared_ptr); void hide_a_region (boost::shared_ptr); @@ -171,6 +168,7 @@ class Editor : public PublicEditor void separate_region_from_selection (); void separate_regions_using_location (ARDOUR::Location&); void toggle_playback (bool with_abort); + void transition_to_rolling (bool forward); /* undo related */ @@ -220,9 +218,9 @@ class Editor : public PublicEditor bool extend_selection_to_track (TimeAxisView&); void play_selection (); - void select_all_in_track (Selection::Operation op); + void select_all_in_selected_tracks (Selection::Operation op); void select_all (Selection::Operation op); - void invert_selection_in_track (); + void invert_selection_in_selected_tracks (); void invert_selection (); /* tempo */ @@ -268,7 +266,9 @@ class Editor : public PublicEditor TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0); Width editor_mixer_strip_width; + void maybe_add_mixer_strip_width (XMLNode&); void show_editor_mixer (bool yn); + void show_editor_list (bool yn); void set_selected_mixer_strip (TimeAxisView&); void hide_track_in_display (TimeAxisView& tv); void show_track_in_display (TimeAxisView& tv); @@ -309,6 +309,7 @@ class Editor : public PublicEditor void toggle_xfades_active (); void toggle_xfade_visibility (); bool xfade_visibility() const { return _xfade_visibility; } + void update_xfade_visibility (); void update_crossfade_model (); void set_crossfade_model (ARDOUR::CrossfadeModel); @@ -339,6 +340,8 @@ class Editor : public PublicEditor void reset_zoom (double); void reposition_and_zoom (nframes_t, double); + nframes_t edit_cursor_position(bool); + protected: void map_transport_state (); void map_position_change (nframes_t); @@ -346,9 +349,10 @@ class Editor : public PublicEditor void on_realize(); private: - + + /// The session that we are editing, or 0 + void color_handler (); ARDOUR::Session *session; - ARDOUR::AudioEngine& engine; bool constructed; PlaylistSelector* _playlist_selector; @@ -411,9 +415,14 @@ class Editor : public PublicEditor void clear_marker_display (); void mouse_add_new_marker (nframes_t where); - TimeAxisView* clicked_trackview; - AudioTimeAxisView* clicked_audio_trackview; + TimeAxisView* clicked_axisview; + RouteTimeAxisView* clicked_routeview; + /** The last RegionView that was clicked on, or 0 if the last click was not + * on a RegionView. This is set up by the canvas event handlers in + * editor_canvas_events.cc + */ RegionView* clicked_regionview; + RegionView* latest_regionview; uint32_t clicked_selection; CrossfadeView* clicked_crossfadeview; @@ -421,16 +430,16 @@ class Editor : public PublicEditor void sort_track_selection (); - void get_relevant_audio_tracks (std::set& relevant_tracks); + void get_relevant_tracks (std::set& relevant_tracks); void get_equivalent_regions (RegionView* rv, std::vector&); - void mapover_audio_tracks (sigc::slot sl); + void mapover_tracks (sigc::slot sl); - /* functions to be passed to mapover_audio_tracks(), possibly with sigc::bind()-supplied arguments */ + /* functions to be passed to mapover_tracks(), possibly with sigc::bind()-supplied arguments */ void mapped_get_equivalent_regions (RouteTimeAxisView&, uint32_t, RegionView*, vector*); - void mapped_use_new_playlist (AudioTimeAxisView&, uint32_t); - void mapped_use_copy_playlist (AudioTimeAxisView&, uint32_t); - void mapped_clear_playlist (AudioTimeAxisView&, uint32_t); + void mapped_use_new_playlist (RouteTimeAxisView&, uint32_t); + void mapped_use_copy_playlist (RouteTimeAxisView&, uint32_t); + void mapped_clear_playlist (RouteTimeAxisView&, uint32_t); /* end */ @@ -440,38 +449,24 @@ class Editor : public PublicEditor void catch_vanishing_regionview (RegionView *); bool set_selected_track (TimeAxisView&, Selection::Operation op = Selection::Set, bool no_remove=false); + void select_all_tracks (); bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false); bool set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool no_remove=false); bool set_selected_regionview_from_click (bool press, Selection::Operation op = Selection::Set, bool no_track_remove=false); void set_selected_regionview_from_region_list (boost::shared_ptr region, Selection::Operation op = Selection::Set); - bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, boost::weak_ptr); void collect_new_region_view (RegionView *); - Gtk::Menu track_context_menu; - Gtk::Menu track_region_context_menu; - Gtk::Menu track_selection_context_menu; - Gtk::Menu track_crossfade_context_menu; - - Gtk::MenuItem* region_edit_menu_split_item; - Gtk::MenuItem* region_edit_menu_split_multichannel_item; - Gtk::Menu * track_region_edit_playlist_menu; - Gtk::Menu * track_edit_playlist_submenu; - Gtk::Menu * track_selection_edit_playlist_submenu; - - void popup_track_context_menu (int, int, ItemType, bool, nframes_t); + void popup_track_context_menu (int, int, nframes_t); Gtk::Menu* build_track_context_menu (nframes_t); - Gtk::Menu* build_track_bus_context_menu (nframes_t); - Gtk::Menu* build_track_region_context_menu (nframes_t frame); - Gtk::Menu* build_track_crossfade_context_menu (nframes_t); - Gtk::Menu* build_track_selection_context_menu (nframes_t); - void add_dstream_context_items (Gtk::Menu_Helpers::MenuList&); - void add_bus_context_items (Gtk::Menu_Helpers::MenuList&); - void add_region_context_items (AudioStreamView*, boost::shared_ptr, Gtk::Menu_Helpers::MenuList&); + void add_bus_or_audio_track_context_items (Gtk::Menu_Helpers::MenuList&); + void add_region_context_items (Gtk::Menu_Helpers::MenuList&); void add_crossfade_context_items (AudioStreamView*, boost::shared_ptr, Gtk::Menu_Helpers::MenuList&, bool many); void add_selection_context_items (Gtk::Menu_Helpers::MenuList&); + void add_item_with_sensitivity (Gtk::Menu_Helpers::MenuList&, Gtk::Menu_Helpers::MenuElem, bool) const; + void handle_new_route (ARDOUR::Session::RouteList&); void remove_route (TimeAxisView *); bool route_removal; @@ -503,6 +498,7 @@ class Editor : public PublicEditor Gtk::EventBox time_canvas_event_box; Gtk::EventBox track_canvas_event_box; Gtk::EventBox time_button_event_box; + Gtk::Frame time_button_frame; ArdourCanvas::Group *minsec_group; ArdourCanvas::Group *bbt_group; @@ -559,6 +555,7 @@ class Editor : public PublicEditor gint metric_get_frames (GtkCustomRulerMark **, gdouble, gdouble, gint); gint metric_get_minsec (GtkCustomRulerMark **, gdouble, gdouble, gint); + Gtk::Widget *_ruler_separator; GtkWidget *_smpte_ruler; GtkWidget *_bbt_ruler; GtkWidget *_frames_ruler; @@ -579,13 +576,6 @@ class Editor : public PublicEditor ArdourCanvas::SimpleRect* range_marker_bar; ArdourCanvas::SimpleRect* transport_marker_bar; - - ArdourCanvas::SimpleLine* tempo_line; - ArdourCanvas::SimpleLine* meter_line; - ArdourCanvas::SimpleLine* marker_line; - ArdourCanvas::SimpleLine* range_marker_line; - ArdourCanvas::SimpleLine* transport_marker_line; - Gtk::Label minsec_label; Gtk::Label bbt_label; Gtk::Label smpte_label; @@ -607,7 +597,7 @@ class Editor : public PublicEditor nframes_t current_frame; double length; - Cursor (Editor&, const string& color, bool (Editor::*)(GdkEvent*,ArdourCanvas::Item*)); + Cursor (Editor&, bool (Editor::*)(GdkEvent*,ArdourCanvas::Item*)); ~Cursor (); void set_position (nframes_t); @@ -652,6 +642,7 @@ class Editor : public PublicEditor void controls_layout_size_request (Gtk::Requisition*); Gtk::HScrollbar edit_hscrollbar; + bool _dragging_hscrollbar; void reset_hscrollbar_stepping (); @@ -674,7 +665,6 @@ class Editor : public PublicEditor Gtk::VBox track_canvas_vbox; Gtk::VBox time_canvas_vbox; Gtk::VBox edit_controls_vbox; - Gtk::HBox edit_controls_hbox; void control_scroll (float); bool deferred_control_scroll (nframes_t); @@ -732,7 +722,6 @@ class Editor : public PublicEditor Gtk::Menu *region_list_menu; Gtk::ScrolledWindow region_list_scroller; - Gtk::Frame region_list_frame; bool region_list_display_key_press (GdkEventKey *); bool region_list_display_key_release (GdkEventKey *); @@ -769,10 +758,12 @@ class Editor : public PublicEditor SnapshotDisplayModelColumns snapshot_display_columns; Glib::RefPtr snapshot_display_model; Gtk::TreeView snapshot_display; + Gtk::Menu snapshot_context_menu; bool snapshot_display_button_press (GdkEventButton*); void snapshot_display_selection_changed (); void redisplay_snapshots(); + void popup_snapshot_context_menu (int, int32_t, Glib::ustring); /* named selections */ @@ -794,6 +785,8 @@ class Editor : public PublicEditor void create_named_selection (); void paste_named_selection (float times); void remove_selected_named_selections (); + void remove_snapshot (Glib::ustring); + void rename_snapshot (Glib::ustring); void handle_new_named_selection (); void add_named_selection_to_named_selection_display (ARDOUR::NamedSelection&); @@ -804,7 +797,6 @@ class Editor : public PublicEditor void named_selection_display_selection_changed (); /* track views */ - int track_spacing; TrackViewList track_views; TimeAxisView *trackview_by_y_position (double ypos); @@ -846,16 +838,17 @@ class Editor : public PublicEditor int ensure_cursor (nframes_t* pos); - void handle_new_audio_region (boost::weak_ptr); - void handle_audio_region_removed (boost::weak_ptr); - void add_audio_region_to_region_display (boost::shared_ptr); + void handle_new_region (boost::weak_ptr); + void handle_region_removed (boost::weak_ptr); + void add_region_to_region_display (boost::shared_ptr); void region_hidden (boost::shared_ptr); void redisplay_regions (); - void insert_into_tmp_audio_regionlist(boost::shared_ptr); + void insert_into_tmp_regionlist(boost::shared_ptr); - list > tmp_audio_region_list; + list > tmp_region_list; void cut_copy (Editing::CutCopyOp); + bool can_cut_copy () const; void cut_copy_points (Editing::CutCopyOp); void cut_copy_regions (Editing::CutCopyOp); void cut_copy_ranges (Editing::CutCopyOp); @@ -866,12 +859,11 @@ class Editor : public PublicEditor /* EDITING OPERATIONS */ void reset_point_selection (); - void toggle_region_mute (); - void toggle_region_lock (); - void toggle_region_opaque (); - void raise_region (); + void set_region_mute (bool); + void set_region_lock (bool); + void set_region_position_lock (bool); + void set_region_opaque (bool); void raise_region_to_top (); - void lower_region (); void lower_region_to_bottom (); void split_region (); void split_region_at (nframes_t); @@ -884,8 +876,8 @@ class Editor : public PublicEditor void align_selection_relative (ARDOUR::RegionPoint point, nframes_t position); void align_region (boost::shared_ptr, ARDOUR::RegionPoint point, nframes_t position); void align_region_internal (boost::shared_ptr, ARDOUR::RegionPoint point, nframes_t position); + void remove_selected_regions (); void remove_clicked_region (); - void destroy_clicked_region (); void edit_region (); void duplicate_some_regions (RegionSelection&, float times); void duplicate_selection (float times); @@ -895,9 +887,9 @@ class Editor : public PublicEditor 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 normalize_region (); - void denormalize_region (); + void reverse_regions (); + void normalize_regions (); + void denormalize_regions (); void audition_region_from_region_list (); void hide_region_from_region_list (); @@ -946,7 +938,7 @@ class Editor : public PublicEditor void amplitude_zoom (gdouble scale); void amplitude_zoom_step (bool in); - void insert_region_list_drag (boost::shared_ptr, int x, int y); + void insert_region_list_drag (boost::shared_ptr, int x, int y); void insert_region_list_selection (float times); void add_external_audio_action (Editing::ImportMode); @@ -1049,6 +1041,8 @@ class Editor : public PublicEditor Editing::SnapType snap_type; Editing::SnapMode snap_mode; + + /// Snap threshold in pixels double snap_threshold; void handle_gui_changes (const string &, void *); @@ -1167,13 +1161,17 @@ class Editor : public PublicEditor bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*); bool canvas_edit_cursor_event (GdkEvent* event, ArdourCanvas::Item*); - bool track_canvas_event (GdkEvent* event, ArdourCanvas::Item*); bool track_canvas_scroll (GdkEventScroll* event); + bool track_canvas_scroll_event (GdkEventScroll* event); + bool track_canvas_button_press_event (GdkEventButton* event); + bool track_canvas_button_release_event (GdkEventButton* event); + bool track_canvas_motion_notify_event (GdkEventMotion* event); + Gtk::Allocation canvas_allocation; bool canvas_idle_queued; void track_canvas_allocate (Gtk::Allocation alloc); - bool track_canvas_idle (); + bool track_canvas_size_allocated (); void set_edit_cursor (GdkEvent* event); void set_playhead_cursor (GdkEvent* event); @@ -1203,8 +1201,11 @@ class Editor : public PublicEditor /* display control */ bool _show_measures; + /// true to show waveforms, otherwise false bool _show_waveforms; + /// true if the editor should follow the playhead, otherwise false bool _follow_playhead; + /// true if waveforms should be shown while recording audio tracks, otherwise false bool _show_waveforms_recording; ARDOUR::TempoMap::BBTPointList *current_bbt_points; @@ -1240,6 +1241,7 @@ class Editor : public PublicEditor void marker_menu_hide (); void marker_menu_loop_range (); void marker_menu_select_all_selectables_using_range (); + void marker_menu_select_using_range (); void marker_menu_separate_regions_using_location (); void marker_menu_play_from (); void marker_menu_play_range (); @@ -1275,16 +1277,25 @@ class Editor : public PublicEditor void draw_metric_marks (const ARDOUR::Metrics& metrics); void tempo_map_changed (ARDOUR::Change); - void redisplay_tempo (); + void redisplay_tempo (bool immediate_redraw); - void snap_to (nframes_t& first, int32_t direction = 0, bool for_mark = false); + void snap_to (nframes64_t& first, int32_t direction = 0, bool for_mark = false); + void snap_to (nframes_t& first, int32_t direction = 0, bool for_mark = false) { + /* XXX remove this function when everything moves to 64 bit frame counts */ + nframes64_t first64 = first; + snap_to (first64, direction, for_mark); + first = (nframes_t) first64; + } + uint32_t bbt_beat_subdivision; /* toolbar */ - Gtk::ToggleButton editor_mixer_button; + Gtk::ToggleButton editor_mixer_button; + Gtk::ToggleButton editor_list_button; void editor_mixer_button_toggled (); + void editor_list_button_toggled (); AudioClock edit_cursor_clock; AudioClock zoom_range_clock; @@ -1426,7 +1437,7 @@ class Editor : public PublicEditor void drag_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event); void end_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event); - bool select_all_within (nframes_t start, nframes_t end, gdouble topy, gdouble boty, Selection::Operation op); + bool select_all_within (nframes_t start, nframes_t end, gdouble topy, gdouble boty, const TrackViewList&, Selection::Operation op); ArdourCanvas::SimpleRect *rubberband_rect; @@ -1615,7 +1626,7 @@ class Editor : public PublicEditor void external_edit_region (); int write_audio_selection (TimeSelection&); - bool write_audio_range (ARDOUR::AudioPlaylist&, uint32_t channels, list&); + bool write_audio_range (ARDOUR::AudioPlaylist&, const ARDOUR::ChanCount& channels, list&); void write_selection (); @@ -1623,7 +1634,8 @@ class Editor : public PublicEditor UndoAction get_memento() const; - XMLNode *before; /* used in *_reversible_command */ + XMLNode *before; /* used in *_reversible_command */ + void begin_reversible_command (string cmd_name); void commit_reversible_command (); @@ -1658,8 +1670,8 @@ class Editor : public PublicEditor static void* _freeze_thread (void*); void* freeze_thread (); - void freeze_route (); - void unfreeze_route (); + void freeze_routes (); + void unfreeze_routes (); /* edit-group solo + mute */ @@ -1722,13 +1734,13 @@ class Editor : public PublicEditor /* nudging tracks */ - void nudge_track (bool use_edit_cursor, bool forwards); + void nudge_selected_tracks (bool use_edit_cursor, bool forwards); /* xfades */ bool _xfade_visibility; - /* */ +#ifdef WITH_CMT void handle_new_imageframe_time_axis_view(const string & track_name, void* src) ; void handle_new_imageframe_marker_time_axis_view(const string & track_name, TimeAxisView* marked_track) ; @@ -1767,7 +1779,7 @@ class Editor : public PublicEditor void popup_marker_time_axis_edit_menu(int button, int32_t time, ArdourCanvas::Item* ifv, bool with_frame) ; ImageFrameSocketHandler* image_socket_listener ; - /* */ +#endif void toggle_xfade_active (boost::weak_ptr); void toggle_xfade_length (boost::weak_ptr); @@ -1815,8 +1827,8 @@ class Editor : public PublicEditor bool _new_regionviews_show_envelope; - void toggle_gain_envelope_visibility (); - void toggle_gain_envelope_active (); + void set_gain_envelope_visibility (bool); + void set_gain_envelope_active (bool); void reset_region_gain_envelopes (); Gtk::CheckMenuItem* region_envelope_visible_item;