X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.h;h=ccf45bf80d10f953fed9ec22beb08b0d59b972e4;hb=185be4e841e182bbe7cb7820f9cb6371ebebe15d;hp=63f8adaf48d40baf2186801fb66a9c92532392d6;hpb=532f6aad4ac79ca15d69deccd18fca90e444c437;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 63f8adaf48..ccf45bf80d 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__ @@ -44,7 +43,7 @@ #include #include #include -#include +#include #include "audio_clock.h" #include "gtk-custom-ruler.h" @@ -61,10 +60,6 @@ namespace Gtkmm2ext { class TearOff; } -namespace LinuxAudioSystems { - class AudioEngine; -} - namespace ARDOUR { class AudioDiskstream; class RouteGroup; @@ -122,7 +117,7 @@ class TimeAxisViewItem ; class Editor : public PublicEditor { public: - Editor (ARDOUR::AudioEngine&); + Editor (); ~Editor (); void connect_to_session (ARDOUR::Session *); @@ -147,11 +142,11 @@ class Editor : public PublicEditor void step_mouse_mode (bool next); Editing::MouseMode current_mouse_mode () { 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*) ; + 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) ; void consider_auditioning (boost::shared_ptr); void hide_a_region (boost::shared_ptr); @@ -171,6 +166,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 */ @@ -268,6 +264,7 @@ 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 set_selected_mixer_strip (TimeAxisView&); void hide_track_in_display (TimeAxisView& tv); @@ -309,6 +306,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); @@ -332,11 +330,15 @@ class Editor : public PublicEditor bool new_regionviews_display_gain () { return _new_regionviews_show_envelope; } void prepare_for_cleanup (); - void reposition_x_origin (nframes_t sample); - void maximise_editing_space(); void restore_editing_space(); + void reset_x_origin (nframes_t); + 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,7 +348,6 @@ class Editor : public PublicEditor private: ARDOUR::Session *session; - ARDOUR::AudioEngine& engine; bool constructed; PlaylistSelector* _playlist_selector; @@ -417,12 +418,15 @@ class Editor : public PublicEditor CrossfadeView* clicked_crossfadeview; ControlPoint* clicked_control_point; + void sort_track_selection (); + void get_relevant_tracks (std::set& relevant_tracks); + void get_equivalent_regions (RegionView* rv, std::vector&); void mapover_tracks (sigc::slot sl); /* functions to be passed to mapover_tracks(), possibly with sigc::bind()-supplied arguments */ - void mapped_set_selected_regionview_from_click (RouteTimeAxisView&, uint32_t, RegionView*, vector*); + void mapped_get_equivalent_regions (RouteTimeAxisView&, uint32_t, RegionView*, vector*); void mapped_use_new_playlist (RouteTimeAxisView&, uint32_t); void mapped_use_copy_playlist (RouteTimeAxisView&, uint32_t); void mapped_clear_playlist (RouteTimeAxisView&, uint32_t); @@ -435,9 +439,10 @@ 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 (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); @@ -464,7 +469,7 @@ class Editor : public PublicEditor 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_crossfade_context_items (AudioStreamView*, ARDOUR::Crossfade*, Gtk::Menu_Helpers::MenuList&, bool many); + 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 handle_new_route (ARDOUR::Session::RouteList&); @@ -498,6 +503,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; @@ -554,6 +560,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; @@ -602,7 +609,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); @@ -647,6 +654,7 @@ class Editor : public PublicEditor void controls_layout_size_request (Gtk::Requisition*); Gtk::HScrollbar edit_hscrollbar; + bool _dragging_hscrollbar; void reset_hscrollbar_stepping (); @@ -678,10 +686,31 @@ class Editor : public PublicEditor void tie_vertical_scrolling (); void canvas_horizontally_scrolled (); - void reposition_and_zoom (nframes_t sample, double fpu); - gint deferred_reposition_and_zoom (nframes_t sample, double fpu); + struct VisualChange { + enum Type { + TimeOrigin = 0x1, + ZoomLevel = 0x2 + }; + + Type pending; + nframes_t time_origin; + double frames_per_unit; + + int idle_handler_id; + + VisualChange() : pending ((VisualChange::Type) 0), time_origin (0), frames_per_unit (0), idle_handler_id (-1) {} + }; + + + VisualChange pending_visual_change; + + static int _idle_visual_changer (void *arg); + int idle_visual_changer (); + + void queue_visual_change (nframes_t); + void queue_visual_change (double); + void end_location_changed (ARDOUR::Location*); - bool repos_zoom_queued; struct RegionListDisplayModelColumns : public Gtk::TreeModel::ColumnRecord { RegionListDisplayModelColumns() { @@ -743,10 +772,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 */ @@ -765,20 +796,21 @@ class Editor : public PublicEditor Gtkmm2ext::DnDTreeView named_selection_display; Gtk::ScrolledWindow named_selection_scroller; - void name_selection(); - void named_selection_name_chosen (); - void create_named_selection (const string &); + 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&); void redisplay_named_selections (); - gint named_selection_display_button_press (GdkEventButton *ev); + bool named_selection_display_button_release (GdkEventButton *ev); + bool named_selection_display_key_release (GdkEventKey *ev); void named_selection_display_selection_changed (); /* track views */ - int track_spacing; TrackViewList track_views; TimeAxisView *trackview_by_y_position (double ypos); @@ -881,6 +913,8 @@ class Editor : public PublicEditor void align_relative (ARDOUR::RegionPoint); void naturalize (); + void reset_focus (); + void cut (); void copy (); void paste (float times); @@ -969,6 +1003,7 @@ class Editor : public PublicEditor void edit_cursor_forward (); void playhead_backward (); void playhead_forward (); + void scroll_playhead (bool forward); void scroll_backward (float pages=0.8f); void scroll_forward (float pages=0.8f); void scroll_tracks_down (); @@ -1042,6 +1077,12 @@ class Editor : public PublicEditor void fade_out_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*); void fade_in_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); void fade_out_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*); + + void set_fade_in_shape (ARDOUR::AudioRegion::FadeShape); + void set_fade_out_shape (ARDOUR::AudioRegion::FadeShape); + + void set_fade_in_active (bool); + void set_fade_out_active (bool); std::set > motion_frozen_playlists; void region_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*); @@ -1132,13 +1173,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); @@ -1205,6 +1250,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 (); @@ -1240,7 +1286,7 @@ 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); uint32_t bbt_beat_subdivision; @@ -1391,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; @@ -1735,9 +1781,9 @@ class Editor : public PublicEditor ImageFrameSocketHandler* image_socket_listener ; /* */ - void toggle_xfade_active (ARDOUR::Crossfade*); - void toggle_xfade_length (ARDOUR::Crossfade*); - void edit_xfade (ARDOUR::Crossfade*); + void toggle_xfade_active (boost::weak_ptr); + void toggle_xfade_length (boost::weak_ptr); + void edit_xfade (boost::weak_ptr); void xfade_edit_left_region (); void xfade_edit_right_region (); @@ -1799,7 +1845,6 @@ class Editor : public PublicEditor Glib::RefPtr redo_action; void history_changed (); - }; #endif /* __ardour_editor_h__ */