X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.h;h=e729a27fc110b95d4aa18727de7c33632f7664cf;hb=b6efb1fdd9efff6b2067c1abfb0621111b387022;hp=6b1342e2bed1cf2595e32b8601568878a7c7cb96;hpb=45addca9eb60a92acda39c8f811d25daa0cfb216;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 6b1342e2be..e729a27fc1 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -33,19 +33,19 @@ #include -#include - #include #include #include #include +#include #include #include #include #include #include +#include #include "audio_clock.h" #include "gtk-custom-ruler.h" @@ -55,6 +55,7 @@ #include "enums.h" #include "region_selection.h" #include "canvas.h" +#include "draginfo.h" namespace Gtkmm2ext { class TearOff; @@ -101,6 +102,7 @@ class AutomationSelection; class MixerStrip; class StreamView; class ControlPoint; +class AnalysisWindow; /* */ class ImageFrameView; @@ -214,8 +216,8 @@ class Editor : public PublicEditor Selection& get_cut_buffer() const { return *cut_buffer; } void play_selection (); - void select_all_in_track (bool add); - void select_all (bool add); + void select_all_in_track (Selection::Operation op); + void select_all (Selection::Operation op); void invert_selection_in_track (); void invert_selection (); @@ -224,6 +226,10 @@ class Editor : public PublicEditor void set_show_measures (bool yn); bool show_measures () const { return _show_measures; } + /* analysis window */ + void analyze_region_selection(); + void analyze_range_selection(); + /* export */ /* these initiate export ... */ @@ -253,13 +259,17 @@ class Editor : public PublicEditor jack_nframes_t leftmost_frame; void clear_playlist (ARDOUR::Playlist&); + void new_playlists (); + void copy_playlists (); + void clear_playlists (); + TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0); Width editor_mixer_strip_width; void show_editor_mixer (bool yn); void set_selected_mixer_strip (TimeAxisView&); - void unselect_strip_in_display (TimeAxisView& tv); - void select_strip_in_display (TimeAxisView* tv); + void hide_track_in_display (TimeAxisView& tv); + void show_track_in_display (TimeAxisView& tv); /* nudge is initiated by transport controls owned by ARDOUR_UI */ @@ -277,6 +287,13 @@ class Editor : public PublicEditor void toggle_follow_playhead (); bool follow_playhead() const { return _follow_playhead; } + void toggle_waveform_visibility (); + void toggle_waveforms_while_recording (); + void toggle_measure_visibility (); + + void set_meter_falloff (float); + void set_meter_hold (int32_t); + /* xfades */ void toggle_xfades_active(); @@ -302,6 +319,9 @@ class Editor : public PublicEditor void reposition_x_origin (jack_nframes_t sample); + void maximise_editing_space(); + void restore_editing_space(); + protected: void map_transport_state (); void map_position_change (jack_nframes_t); @@ -372,6 +392,7 @@ class Editor : public PublicEditor Editing::MouseMode mouse_mode; void mouse_insert (GdkEventButton *); + int pre_maximal_pane_position; void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*); Gtk::Notebook the_notebook; @@ -430,11 +451,22 @@ class Editor : public PublicEditor CrossfadeView* clicked_crossfadeview; ControlPoint* clicked_control_point; + void mapover_audio_tracks (sigc::slot sl); + + /* functions to be passed to mapover_audio_tracks(), possibly with sigc::bind()-supplied arguments */ + + void mapped_set_selected_regionview_from_click (AudioTimeAxisView&, uint32_t, AudioRegionView*, vector*); + void mapped_use_new_playlist (AudioTimeAxisView&, uint32_t); + void mapped_use_copy_playlist (AudioTimeAxisView&, uint32_t); + void mapped_clear_playlist (AudioTimeAxisView&, uint32_t); + + /* end */ + void catch_vanishing_audio_regionview (AudioRegionView *); - void set_selected_control_point_from_click (bool add = false, bool with_undo = true, bool no_remove=false); - void set_selected_track_from_click (bool add = false, bool with_undo = true, bool no_remove=false); - void set_selected_regionview_from_click (bool add = false, bool no_track_remove=false); - void set_selected_regionview_from_region_list (ARDOUR::Region& region, bool add = false); + void set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool with_undo = true, bool no_remove=false); + void set_selected_track_from_click (Selection::Operation op = Selection::Set, bool with_undo = true, bool no_remove=false); + void set_selected_regionview_from_click (Selection::Operation op = Selection::Set, bool no_track_remove=false); + void set_selected_regionview_from_region_list (ARDOUR::Region& region, Selection::Operation op = Selection::Set); bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, ARDOUR::Region*); void collect_new_region_view (AudioRegionView *); @@ -623,6 +655,7 @@ class Editor : public PublicEditor void cursor_to_region_point (Cursor*, ARDOUR::RegionPoint, int32_t dir); void cursor_to_selection_start (Cursor *); void cursor_to_selection_end (Cursor *); + void select_all_selectables_using_cursor (Cursor *, bool); ARDOUR::Region* find_next_region (jack_nframes_t, ARDOUR::RegionPoint, int32_t dir, TrackViewList&, TimeAxisView ** = 0); @@ -642,7 +675,8 @@ class Editor : public PublicEditor Gtk::Adjustment horizontal_adjustment; Gtk::Layout controls_layout; - bool Editor::control_layout_scroll (GdkEventScroll* ev); + bool control_layout_scroll (GdkEventScroll* ev); + void controls_layout_size_request (Gtk::Requisition*); Gtk::HScrollbar edit_hscrollbar; bool edit_hscroll_dragging; @@ -682,18 +716,21 @@ class Editor : public PublicEditor RegionListDisplayModelColumns() { add (name); add (region); + add (color_); } Gtk::TreeModelColumn name; Gtk::TreeModelColumn region; + Gtk::TreeModelColumn color_; }; RegionListDisplayModelColumns region_list_columns; - Gtk::TreeView region_list_display; + Gtkmm2ext::DnDTreeView region_list_display; Glib::RefPtr region_list_model; - Glib::RefPtr region_list_sort_model; - Glib::RefPtr toggle_full_region_list_action; + Glib::RefPtr toggle_full_region_list_action; + Glib::RefPtr toggle_show_auto_regions_action; void region_list_selection_changed (); + bool region_list_selection_filter (const Glib::RefPtr& model, const Gtk::TreeModel::Path& path, bool yn); Gtk::Menu *region_list_menu; Gtk::ScrolledWindow region_list_scroller; @@ -706,12 +743,7 @@ class Editor : public PublicEditor void region_list_clear (); void region_list_selection_mapover (sigc::slot); void build_region_list_menu (); - - Gtk::CheckMenuItem* toggle_auto_regions_item; - Gtk::CheckMenuItem* toggle_full_region_list_item; - - Gtk::MenuItem* import_audio_item; - Gtk::MenuItem* embed_audio_item; + void show_region_list_display_context_menu (int button, int time); bool show_automatic_regions_in_region_list; Editing::RegionListSortType region_list_sort_type; @@ -724,6 +756,26 @@ class Editor : public PublicEditor int region_list_sorter (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator); + /* snapshots */ + + Gtk::ScrolledWindow snapshot_display_scroller; + struct SnapshotDisplayModelColumns : public Gtk::TreeModel::ColumnRecord { + SnapshotDisplayModelColumns() { + add (visible_name); + add (real_name); + } + Gtk::TreeModelColumn visible_name; + Gtk::TreeModelColumn real_name; + }; + + SnapshotDisplayModelColumns snapshot_display_columns; + Glib::RefPtr snapshot_display_model; + Gtk::TreeView snapshot_display; + + bool snapshot_display_button_press (GdkEventButton*); + void snapshot_display_selection_changed (); + void redisplay_snapshots(); + /* named selections */ struct NamedSelectionDisplayModelColumns : public Gtk::TreeModel::ColumnRecord { @@ -738,8 +790,8 @@ class Editor : public PublicEditor NamedSelectionDisplayModelColumns named_selection_columns; Glib::RefPtr named_selection_model; - Gtk::TreeView named_selection_display; - Gtk::ScrolledWindow named_selection_scroller; + Gtkmm2ext::DnDTreeView named_selection_display; + Gtk::ScrolledWindow named_selection_scroller; void name_selection(); void named_selection_name_chosen (); @@ -832,6 +884,7 @@ class Editor : public PublicEditor void split_region_at (jack_nframes_t); void split_regions_at (jack_nframes_t, AudioRegionSelection&); void crop_region_to_selection (); + void set_a_regions_sync_position (ARDOUR::Region&, jack_nframes_t); void set_region_sync_from_edit_cursor (); void remove_region_sync(); void align_selection (ARDOUR::RegionPoint, jack_nframes_t position); @@ -901,12 +954,12 @@ class Editor : public PublicEditor void amplitude_zoom (gdouble scale); void amplitude_zoom_step (bool in); - void insert_region_list_drag (ARDOUR::AudioRegion&); + void insert_region_list_drag (ARDOUR::AudioRegion&, int x, int y); void insert_region_list_selection (float times); void insert_sndfile (bool as_tracks); void embed_audio (); // inserts into region list - int reject_because_rate_differs (const string & path, SF_INFO& finfo, const string & action, bool multiple_pending); + int reject_because_rate_differs (const string & path, ARDOUR::SoundFileInfo& finfo, const string & action, bool multiple_pending); void do_embed_sndfiles (vector paths, bool split); void embed_sndfile (string path, bool split, bool multiple_files, bool& check_sr); @@ -929,6 +982,7 @@ class Editor : public PublicEditor void interthread_cancel_clicked (); void build_interthread_progress_window (); ARDOUR::InterThreadInfo* current_interthread_info; + AnalysisWindow* analysis_window; /* import specific info */ @@ -971,7 +1025,9 @@ class Editor : public PublicEditor void cursor_align (bool playhead_to_edit); void remove_last_capture (); - + void select_all_selectables_using_time_selection (); + void select_all_selectables_using_loop(); + void select_all_selectables_using_punch(); void set_selection_from_range (ARDOUR::Location&); void set_selection_from_punch (); void set_selection_from_loop (); @@ -1008,43 +1064,7 @@ class Editor : public PublicEditor void hide_all_tracks (bool with_select); - void route_display_selection_changed (); - void redisplay_route_list(); - gint route_list_reordered (); - bool ignore_route_list_reorder; - void queue_route_list_reordered (); - - struct DragInfo { - ArdourCanvas::Item* item; - void* data; - jack_nframes_t last_frame_position; - int32_t pointer_frame_offset; - jack_nframes_t grab_frame; - jack_nframes_t last_pointer_frame; - jack_nframes_t current_pointer_frame; - double grab_x, grab_y; - double cumulative_x_drag; - double cumulative_y_drag; - double current_pointer_x; - double current_pointer_y; - void (Editor::*motion_callback)(ArdourCanvas::Item*, GdkEvent*); - void (Editor::*finished_callback)(ArdourCanvas::Item*, GdkEvent*); - TimeAxisView* last_trackview; - bool x_constrained; - bool copy; - bool was_rolling; - bool first_move; - bool move_threshold_passsed; - bool want_move_threshold; - bool brushing; - ARDOUR::Location* copied_location; - } drag_info; - - struct LineDragInfo { - uint32_t before; - uint32_t after; - }; - + DragInfo drag_info; LineDragInfo current_line_drag_info; void start_grab (GdkEvent*, Gdk::Cursor* cursor = 0); @@ -1092,7 +1112,9 @@ class Editor : public PublicEditor void start_line_grab_from_line (ArdourCanvas::Item*, GdkEvent*); void start_line_grab (AutomationLine *, GdkEvent*); void start_tempo_marker_grab (ArdourCanvas::Item*, GdkEvent*); + void start_tempo_marker_copy_grab (ArdourCanvas::Item*, GdkEvent*); void start_meter_marker_grab (ArdourCanvas::Item*, GdkEvent*); + void start_meter_marker_copy_grab (ArdourCanvas::Item*, GdkEvent*); void region_view_item_click (AudioRegionView&, GdkEventButton*); @@ -1161,13 +1183,16 @@ class Editor : public PublicEditor void kbd_driver (sigc::slot, bool use_track_canvas = true, bool use_time_canvas = true, bool can_select = true); void kbd_set_playhead_cursor (); void kbd_set_edit_cursor (); + void kbd_mute_unmute_region (); void kbd_split (); + void kbd_set_sync_position (); void kbd_align (ARDOUR::RegionPoint); void kbd_align_relative (ARDOUR::RegionPoint); void kbd_brush (); void kbd_audition (); void kbd_do_split (GdkEvent*); + void kbd_do_set_sync_position (GdkEvent* ev); void kbd_do_align (GdkEvent*, ARDOUR::RegionPoint); void kbd_do_align_relative (GdkEvent*, ARDOUR::RegionPoint); void kbd_do_brush (GdkEvent*); @@ -1220,6 +1245,7 @@ class Editor : public PublicEditor void marker_menu_rename (); void marker_menu_hide (); void marker_menu_loop_range (); + void marker_menu_select_all_selectables_using_range (); void marker_menu_play_from (); void marker_menu_set_playhead (); void marker_menu_set_from_playhead (); @@ -1233,6 +1259,7 @@ class Editor : public PublicEditor void tm_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); void transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); void new_transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*); + void build_range_marker_menu (); void build_marker_menu (); void build_tm_marker_menu (); void build_transport_marker_menu (); @@ -1406,7 +1433,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 (jack_nframes_t start, jack_nframes_t end, gdouble topy, gdouble boty, bool add); + bool select_all_within (jack_nframes_t start, jack_nframes_t end, gdouble topy, gdouble boty, Selection::Operation op); ArdourCanvas::SimpleRect *rubberband_rect; @@ -1424,39 +1451,59 @@ class Editor : public PublicEditor struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord { RouteDisplayModelColumns() { add (text); + add (visible); add (tv); } Gtk::TreeModelColumn text; - Gtk::TreeModelColumn tv; + Gtk::TreeModelColumn visible; + Gtk::TreeModelColumn tv; }; - RouteDisplayModelColumns route_display_columns; - Glib::RefPtr route_display_model; + RouteDisplayModelColumns route_display_columns; + Glib::RefPtr route_display_model; Glib::RefPtr route_display_selection; gint route_list_compare_func (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator); - Gtk::TreeView route_list; //GTK2FIX rename to route_display - Gtk::ScrolledWindow route_list_scroller; - Gtk::Menu *route_list_menu; + Gtkmm2ext::DnDTreeView route_list_display; + Gtk::ScrolledWindow route_list_scroller; + Gtk::Menu* route_list_menu; + + bool route_list_display_button_press (GdkEventButton*); + bool route_list_selection_filter (const Glib::RefPtr& model, const Gtk::TreeModel::Path& path, bool yn); + + void route_list_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&); + void route_list_delete (const Gtk::TreeModel::Path&); + void initial_route_list_display (); + void redisplay_route_list(); + void route_list_reordered (const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter, int* what); + bool ignore_route_list_reorder; + bool no_route_list_redisplay; + void queue_route_list_reordered (); - void route_list_column_click (); void build_route_list_menu (); - void select_all_routes (); - void unselect_all_routes (); - void select_all_audiotracks (); - void unselect_all_audiotracks (); - void select_all_audiobus (); - void unselect_all_audiobus (); + void show_route_list_menu (); + + void show_all_routes (); + void hide_all_routes (); + void show_all_audiotracks (); + void hide_all_audiotracks (); + void show_all_audiobus (); + void hide_all_audiobus (); + + void set_all_tracks_visibility (bool yn); + void set_all_audio_visibility (int type, bool yn); /* edit group management */ struct GroupListModelColumns : public Gtk::TreeModel::ColumnRecord { GroupListModelColumns () { add (is_active); + add (is_visible); add (text); add (routegroup); } Gtk::TreeModelColumn is_active; + Gtk::TreeModelColumn is_visible; Gtk::TreeModelColumn text; Gtk::TreeModelColumn routegroup; }; @@ -1465,23 +1512,26 @@ class Editor : public PublicEditor Glib::RefPtr group_model; Glib::RefPtr group_selection; - Gtk::Button edit_group_list_button; - Gtk::Label edit_group_list_button_label; - Gtk::TreeView edit_group_list; - Gtk::ScrolledWindow edit_group_list_scroller; - Gtk::Menu *edit_group_list_menu; - Gtk::VBox edit_group_vbox; + Gtk::TreeView edit_group_display; + Gtk::ScrolledWindow edit_group_display_scroller; + Gtk::Menu* edit_group_list_menu; - void edit_group_list_column_click (gint); void build_edit_group_list_menu (); - void select_all_edit_groups (); - void unselect_all_edit_groups (); + void activate_all_edit_groups (); + void disable_all_edit_groups (); + + bool in_edit_group_row_change; + void edit_group_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&); + void edit_group_name_edit (const Glib::ustring&, const Glib::ustring&); void new_edit_group (); void edit_group_list_button_clicked (); gint edit_group_list_button_press_event (GdkEventButton* ev); void edit_group_selection_changed (); void fake_add_edit_group (ARDOUR::RouteGroup* group); + void fake_remove_edit_group (ARDOUR::RouteGroup* group); void add_edit_group (ARDOUR::RouteGroup* group); + void remove_selected_edit_group (); + void edit_groups_changed (); void group_flags_changed (void*, ARDOUR::RouteGroup*); Gtk::VBox list_vpacker; @@ -1524,31 +1574,49 @@ class Editor : public PublicEditor /* Drag-n-Drop */ int convert_drop_to_paths (std::vector& paths, - GdkDragContext *context, + const Glib::RefPtr& context, gint x, gint y, - GtkSelectionData *data, + const Gtk::SelectionData& data, guint info, guint time); - void track_canvas_drag_data_received (GdkDragContext *context, + void track_canvas_drag_data_received (const Glib::RefPtr& context, gint x, gint y, - GtkSelectionData *data, + const Gtk::SelectionData& data, guint info, guint time); - - void region_list_display_drag_data_received (GdkDragContext *context, + + void region_list_display_drag_data_received (const Glib::RefPtr& context, gint x, gint y, - GtkSelectionData *data, + const Gtk::SelectionData& data, guint info, guint time); - + + + void drop_paths (const Glib::RefPtr& context, + gint x, + gint y, + const Gtk::SelectionData& data, + guint info, + guint time); + + void drop_regions (const Glib::RefPtr& context, + gint x, + gint y, + const Gtk::SelectionData& data, + guint info, + guint time); + /* audio export */ ExportDialog *export_dialog; + ExportDialog *export_range_markers_dialog; + void export_range (jack_nframes_t start, jack_nframes_t end); + void export_range_markers (); int write_region_selection(AudioRegionSelection&); bool write_region (string path, ARDOUR::AudioRegion&); @@ -1769,10 +1837,9 @@ class Editor : public PublicEditor void toggle_gain_envelope_visibility (); void toggle_gain_envelope_active (); - typedef std::map ColorStyleMap; - void init_colormap (); - bool on_key_press_event (GdkEventKey*); + + void session_state_saved (string); }; #endif /* __ardour_editor_h__ */