X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.h;h=140235e890b9254474188ee3891c06dae1022080;hb=99aa8c6338e47b41143f799fdcb35d1699548076;hp=d9b1d4a8fac57becc03df80b7c0e6ca613088a7a;hpb=4441f5008da9fb6287e3721331cad8ceaf9f1071;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index d9b1d4a8fa..140235e890 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -25,7 +25,6 @@ #include #include #include -#include #include @@ -39,9 +38,10 @@ #include #include -#include -#include -#include +#include "gtkmm2ext/selector.h" +#include "gtkmm2ext/click_box.h" +#include "gtkmm2ext/dndtreeview.h" +#include "gtkmm2ext/stateful_button.h" #include "pbd/stateful.h" #include "pbd/signals.h" @@ -71,6 +71,7 @@ namespace Gnome { namespace Canvas { namespace Gtkmm2ext { class TearOff; + class Bindings; } namespace ARDOUR { @@ -128,6 +129,9 @@ class EditorSnapshots; class EditorSummary; class RegionLayeringOrderEditor; class ProgressReporter; +class EditorCursor; +class MouseCursors; +class VerboseCursor; /* */ class ImageFrameView; @@ -139,23 +143,6 @@ class ImageFrameSocketHandler ; class TimeAxisViewItem ; /* */ -struct EditorCursor { - Editor& editor; - ArdourCanvas::Points points; - ArdourCanvas::Line canvas_item; - framepos_t current_frame; - double length; - - EditorCursor (Editor&, bool (Editor::*)(GdkEvent*,ArdourCanvas::Item*)); - ~EditorCursor (); - - void set_position (framepos_t); - void set_length (double units); - void set_y_axis (double position); - - PBD::Signal1 PositionChanged; -}; - class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr { public: @@ -306,6 +293,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /* export */ void export_audio (); + void stem_export (); void export_selection (); void export_range (); void export_region (); @@ -337,7 +325,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD 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); + void mixer_strip_width_changed (); + void hide_track_in_display (TimeAxisView* tv, bool apply_to_selection = false); /* nudge is initiated by transport controls owned by ARDOUR_UI */ @@ -358,7 +347,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void toggle_stationary_playhead (); bool stationary_playhead() const { return _stationary_playhead; } - void set_follow_playhead (bool yn); + void set_follow_playhead (bool yn, bool catch_up = true); void toggle_follow_playhead (); bool follow_playhead() const { return _follow_playhead; } bool dragging_playhead () const { return _dragging_playhead; } @@ -428,9 +417,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void get_regions_corresponding_to (boost::shared_ptr region, std::vector& regions); - void show_verbose_canvas_cursor_with (const std::string& txt, int32_t xoffset = 0, int32_t yoffset = 0); - void hide_verbose_canvas_cursor(); - void center_screen (framepos_t); TrackViewList axis_views_from_routes (boost::shared_ptr) const; @@ -442,6 +428,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void snap_to (framepos_t& first, framepos_t& last, int32_t direction = 0, bool for_mark = false); void begin_reversible_command (std::string cmd_name); + void begin_reversible_command (GQuark); void commit_reversible_command (); DragManager* drags () const { @@ -450,37 +437,21 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void maybe_autoscroll (bool, bool); - /* handy cursors for everyone to use */ - - static Gdk::Cursor* cross_hair_cursor; - static Gdk::Cursor* trimmer_cursor; - static Gdk::Cursor* right_side_trim_cursor; - static Gdk::Cursor* left_side_trim_cursor; - static Gdk::Cursor* fade_in_cursor; - static Gdk::Cursor* fade_out_cursor; - static Gdk::Cursor* selector_cursor; - static Gdk::Cursor* grabber_cursor; - static Gdk::Cursor* grabber_note_cursor; - static Gdk::Cursor* grabber_edit_point_cursor; - static Gdk::Cursor* zoom_in_cursor; - static Gdk::Cursor* zoom_out_cursor; - static Gdk::Cursor* time_fx_cursor; - static Gdk::Cursor* fader_cursor; - static Gdk::Cursor* speaker_cursor; - static Gdk::Cursor* midi_pencil_cursor; - static Gdk::Cursor* midi_select_cursor; - static Gdk::Cursor* midi_resize_cursor; - static Gdk::Cursor* midi_erase_cursor; - static Gdk::Cursor* up_down_cursor; - static Gdk::Cursor* wait_cursor; - static Gdk::Cursor* timebar_cursor; - static Gdk::Cursor* transparent_cursor; - Gdk::Cursor* get_canvas_cursor () const { return current_canvas_cursor; } void set_canvas_cursor (Gdk::Cursor*, bool save=false); void set_current_trimmable (boost::shared_ptr); void set_current_movable (boost::shared_ptr); + MouseCursors const * cursors () const { + return _cursors; + } + + VerboseCursor* verbose_cursor () const { + return _verbose_cursor; + } + + void get_pointer_position (double &, double &) const; + protected: void map_transport_state (); void map_position_change (framepos_t); @@ -531,6 +502,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void post_zoom (); Editing::MouseMode mouse_mode; + Editing::MouseMode pre_internal_mouse_mode; bool _internal_editing; Editing::MouseMode effective_mouse_mode () const; @@ -556,7 +528,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD int pre_maximal_editor_height; void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*); - Gtk::Notebook the_notebook; + Gtk::Notebook _the_notebook; + bool _notebook_shrunk; + void add_notebook_page (std::string const &, Gtk::Widget &); + bool notebook_tab_clicked (GdkEventButton *, Gtk::Widget *); + Gtk::HPaned edit_pane; Gtk::VPaned editor_summary_pane; @@ -569,13 +545,15 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void location_changed (ARDOUR::Location *); void location_flags_changed (ARDOUR::Location *, void *); void refresh_location_display (); - void refresh_location_display_s (const PBD::PropertyChange&); void refresh_location_display_internal (ARDOUR::Locations::LocationList&); void add_new_location (ARDOUR::Location *); + ArdourCanvas::Group* add_new_location_internal (ARDOUR::Location *); void location_gone (ARDOUR::Location *); void remove_marker (ArdourCanvas::Item&, GdkEvent*); gint really_remove_marker (ARDOUR::Location* loc); void goto_nth_marker (int nth); + void toggle_marker_lines (); + void set_marker_line_visibility (bool); uint32_t location_marker_color; uint32_t location_range_color; @@ -584,28 +562,48 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD uint32_t location_cd_marker_color; struct LocationMarkers { - Marker* start; - Marker* end; - bool valid; - - LocationMarkers () : start(0), end(0), valid (true) {} - - ~LocationMarkers (); - - void hide(); - void show (); - void set_name (const std::string&); - void set_position (framepos_t start, framepos_t end = 0); - void set_color_rgba (uint32_t); + Marker* start; + Marker* end; + bool valid; + + LocationMarkers () : start(0), end(0), valid (true) {} + + ~LocationMarkers (); + + void hide (); + void show (); + + void set_show_lines (bool); + void set_selected (bool); + void canvas_height_set (double); + void setup_lines (); + + void set_name (const std::string&); + void set_position (framepos_t start, framepos_t end = 0); + void set_color_rgba (uint32_t); }; LocationMarkers *find_location_markers (ARDOUR::Location *) const; ARDOUR::Location* find_location_from_marker (Marker *, bool& is_start) const; Marker* entered_marker; + bool _show_marker_lines; typedef std::map LocationMarkerMap; LocationMarkerMap location_markers; + void update_marker_labels (); + void update_marker_labels (ArdourCanvas::Group *); + void check_marker_label (Marker *); + + /** 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 + * are kept sorted in time order between marker movements, so that after + * 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 *); + void hide_marker (ArdourCanvas::Item*, GdkEvent*); void clear_marker_display (); void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false); @@ -647,6 +645,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_selected_track (TimeAxisView&, Selection::Operation op = Selection::Set, bool no_remove=false); void select_all_tracks (); + void select_all_internal_edit (Selection::Operation); bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false); void set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool no_remove=false); @@ -670,15 +669,15 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::Menu * track_edit_playlist_submenu; Gtk::Menu * track_selection_edit_playlist_submenu; - void popup_track_context_menu (int, int, ItemType, bool, framepos_t); - Gtk::Menu* build_track_context_menu (framepos_t); - Gtk::Menu* build_track_bus_context_menu (framepos_t); - Gtk::Menu* build_track_region_context_menu (framepos_t frame); - Gtk::Menu* build_track_crossfade_context_menu (framepos_t); - Gtk::Menu* build_track_selection_context_menu (framepos_t); + void popup_track_context_menu (int, int, ItemType, bool); + Gtk::Menu* build_track_context_menu (); + Gtk::Menu* build_track_bus_context_menu (); + Gtk::Menu* build_track_region_context_menu (); + Gtk::Menu* build_track_crossfade_context_menu (); + Gtk::Menu* build_track_selection_context_menu (); void add_dstream_context_items (Gtk::Menu_Helpers::MenuList&); void add_bus_context_items (Gtk::Menu_Helpers::MenuList&); - void add_region_context_items (Gtk::Menu_Helpers::MenuList&, bool); + void add_region_context_items (Gtk::Menu_Helpers::MenuList&, boost::shared_ptr); void add_crossfade_context_items (AudioStreamView*, boost::shared_ptr, Gtk::Menu_Helpers::MenuList&, bool many); void add_selection_context_items (Gtk::Menu_Helpers::MenuList&); Gtk::MenuItem* _popup_region_menu_item; @@ -696,19 +695,13 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD ArdourCanvas::Canvas* track_canvas; - ArdourCanvas::NoEventText* verbose_canvas_cursor; - bool verbose_cursor_visible; + friend class VerboseCursor; + VerboseCursor* _verbose_cursor; void parameter_changed (std::string); bool track_canvas_motion (GdkEvent*); - void set_verbose_canvas_cursor (const std::string &, double x, double y); - void set_verbose_canvas_cursor_text (const std::string &); - void show_verbose_canvas_cursor(); - - bool verbose_cursor_on; // so far unused - Gtk::EventBox time_canvas_event_box; Gtk::EventBox track_canvas_event_box; Gtk::EventBox time_button_event_box; @@ -755,7 +748,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD enum RulerType { ruler_metric_timecode = 0, ruler_metric_bbt = 1, - ruler_metric_frames = 2, + ruler_metric_samples = 2, ruler_metric_minsec = 3, ruler_time_tempo = 4, @@ -779,9 +772,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Glib::RefPtr ruler_cd_marker_action; bool no_ruler_shown_update; - gint ruler_button_press (GdkEventButton*); - gint ruler_button_release (GdkEventButton*); - gint ruler_mouse_motion (GdkEventMotion*); + bool ruler_button_press (GdkEventButton*); + bool ruler_button_release (GdkEventButton*); + bool ruler_mouse_motion (GdkEventMotion*); bool ruler_scroll (GdkEventScroll* event); Gtk::Widget * ruler_grabbed_widget; @@ -796,13 +789,13 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_ruler_visible (RulerType, bool); void toggle_ruler_visibility (RulerType rt); void ruler_toggled (int); - gint ruler_label_button_release (GdkEventButton*); + bool ruler_label_button_release (GdkEventButton*); void store_ruler_visibility (); void restore_ruler_visibility (); static gint _metric_get_timecode (GtkCustomRulerMark **, gdouble, gdouble, gint); static gint _metric_get_bbt (GtkCustomRulerMark **, gdouble, gdouble, gint); - static gint _metric_get_frames (GtkCustomRulerMark **, gdouble, gdouble, gint); + static gint _metric_get_samples (GtkCustomRulerMark **, gdouble, gdouble, gint); static gint _metric_get_minsec (GtkCustomRulerMark **, gdouble, gdouble, gint); enum MinsecRulerScale { @@ -814,10 +807,10 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD MinsecRulerScale minsec_ruler_scale; - nframes_t minsec_mark_interval; + framecnt_t minsec_mark_interval; gint minsec_mark_modulo; gint minsec_nmarks; - void set_minsec_ruler_scale (gdouble lower, gdouble upper); + void set_minsec_ruler_scale (framepos_t, framepos_t); enum TimecodeRulerScale { timecode_show_bits, @@ -829,10 +822,12 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD TimecodeRulerScale timecode_ruler_scale; - nframes_t timecode_mark_interval; gint timecode_mark_modulo; gint timecode_nmarks; - void set_timecode_ruler_scale (gdouble lower, gdouble upper); + void set_timecode_ruler_scale (framepos_t, framepos_t); + + framecnt_t _samples_ruler_interval; + void set_samples_ruler_scale (framepos_t, framepos_t); enum BBTRulerScale { bbt_over, @@ -856,17 +851,17 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD gint metric_get_timecode (GtkCustomRulerMark **, gdouble, gdouble, gint); gint metric_get_bbt (GtkCustomRulerMark **, gdouble, gdouble, gint); - gint metric_get_frames (GtkCustomRulerMark **, gdouble, gdouble, gint); + gint metric_get_samples (GtkCustomRulerMark **, gdouble, gdouble, gint); gint metric_get_minsec (GtkCustomRulerMark **, gdouble, gdouble, gint); Gtk::Widget *_ruler_separator; GtkWidget *_timecode_ruler; GtkWidget *_bbt_ruler; - GtkWidget *_frames_ruler; + GtkWidget *_samples_ruler; GtkWidget *_minsec_ruler; Gtk::Widget *timecode_ruler; Gtk::Widget *bbt_ruler; - Gtk::Widget *frames_ruler; + Gtk::Widget *samples_ruler; Gtk::Widget *minsec_ruler; static Editor *ruler_editor; @@ -886,7 +881,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::Label minsec_label; Gtk::Label bbt_label; Gtk::Label timecode_label; - Gtk::Label frame_label; + Gtk::Label samples_label; Gtk::Label tempo_label; Gtk::Label meter_label; Gtk::Label mark_label; @@ -939,16 +934,21 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::Table edit_packer; Gtk::Adjustment vertical_adjustment; - + Gtk::Layout controls_layout; bool control_layout_scroll (GdkEventScroll* ev); - void controls_layout_size_request (Gtk::Requisition*); - sigc::connection controls_layout_size_request_connection; - - bool horizontal_scroll_left_press (); - void horizontal_scroll_left_release (); - bool horizontal_scroll_right_press (); - void horizontal_scroll_right_release (); + void reset_controls_layout_width (); + void reset_controls_layout_height (int32_t height); + + enum Direction { + LEFT, + RIGHT, + UP, + DOWN + }; + + bool scroll_press (Direction); + void scroll_release (); sigc::connection _scroll_connection; int _scroll_callbacks; @@ -958,7 +958,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD bool track_canvas_map_handler (GdkEventAny*); - gint edit_controls_button_release (GdkEventButton*); + bool edit_controls_button_release (GdkEventButton*); Gtk::Menu *edit_controls_left_menu; Gtk::Menu *edit_controls_right_menu; @@ -1021,8 +1021,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD TrackViewList get_tracks_for_range_action () const; - static void build_cursors (); - sigc::connection super_rapid_screen_update_connection; framepos_t last_update_frame; void center_screen_internal (framepos_t, float); @@ -1043,10 +1041,15 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD bool button_press_handler_1 (ArdourCanvas::Item *, GdkEvent *, ItemType); bool button_press_handler_2 (ArdourCanvas::Item *, GdkEvent *, ItemType); bool button_release_handler (ArdourCanvas::Item*, GdkEvent*, ItemType); + bool button_press_dispatch (GdkEventButton*); + bool button_release_dispatch (GdkEventButton*); bool motion_handler (ArdourCanvas::Item*, GdkEvent*, bool from_autoscroll = false); bool enter_handler (ArdourCanvas::Item*, GdkEvent*, ItemType); bool leave_handler (ArdourCanvas::Item*, GdkEvent*, ItemType); + Gtkmm2ext::Bindings* button_bindings; + XMLNode* button_settings () const; + /* KEYMAP HANDLING */ void register_actions (); @@ -1078,7 +1081,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void lower_region_to_bottom (); void split_regions_at (framepos_t, RegionSelection&); void split_region_at_transients (); - void split_region_at_points (boost::shared_ptr, ARDOUR::AnalysisFeatureList&, bool can_ferret); + void split_region_at_points (boost::shared_ptr, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false); void crop_region_to_selection (); void crop_region_to (framepos_t start, framepos_t end); void set_sync_point (framepos_t, const RegionSelection&); @@ -1096,6 +1099,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void duplicate_some_regions (RegionSelection&, float times); void duplicate_selection (float times); void region_fill_selection (); + void combine_regions (); + void uncombine_regions (); void region_fill_track (); void audition_playlist_region_standalone (boost::shared_ptr); @@ -1107,6 +1112,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void reset_region_scale_amplitude (); void adjust_region_gain (bool up); void quantize_region (); + void insert_patch_change (); void fork_region (); void do_insert_time (); @@ -1138,8 +1144,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void snap_regions_to_grid (); void close_region_gaps (); - int get_prefix (float&, bool&); - void keyboard_paste (); void region_from_selection (); @@ -1161,9 +1165,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void temporal_zoom_by_frame (framepos_t start, framepos_t end, const std::string & op); void temporal_zoom_to_frame (bool coarser, framepos_t frame); - 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_selection (float times); @@ -1225,25 +1226,15 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void move_to_start (); void move_to_end (); - void goto_frame (); void center_playhead (); void center_edit_point (); - void edit_cursor_backward (); - void edit_cursor_forward (); void playhead_forward_to_grid (); void playhead_backward_to_grid (); - 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 (); void scroll_tracks_up (); - void delete_sample_forward (); - void delete_sample_backward (); - void delete_screen (); - void search_backwards (); - void search_forwards (); void set_mark (); void clear_markers (); void clear_ranges (); @@ -1295,9 +1286,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD bool have_pending_keyboard_selection; framepos_t pending_keyboard_selection_start; - boost::shared_ptr select_region_for_operation (int dir, TimeAxisView **tv); - void extend_selection_to_end_of_region (bool next); - void extend_selection_to_start_of_region (bool previous); + void move_range_selection_start_or_end_to_region_boundary (bool, bool); Editing::SnapType _snap_type; Editing::SnapMode _snap_mode; @@ -1343,12 +1332,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void remove_control_point (ArdourCanvas::Item*, GdkEvent*); void mouse_brush_insert_region (RegionView*, framepos_t pos); - void brush (framepos_t); - - void show_verbose_time_cursor (framepos_t frame, double offset = 0, double xpos=-1, double ypos=-1); - void show_verbose_duration_cursor (framepos_t start, framepos_t end, double offset = 0, double xpos=-1, double ypos=-1); - double clamp_verbose_cursor_x (double); - double clamp_verbose_cursor_y (double); /* Canvas event handlers */ @@ -1390,6 +1373,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD bool canvas_markerview_item_view_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*); bool canvas_markerview_start_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*); bool canvas_markerview_end_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*); + + PBD::Signal0 EditorFreeze; + PBD::Signal0 EditorThaw; private: friend class DragManager; @@ -1397,6 +1383,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD friend class EditorRegions; ArdourCanvas::Item *last_item_entered; + /** true if the mouse is over a place where region trim can happen */ + bool _over_region_trim_target; /* non-public event handlers */ @@ -1417,12 +1405,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void set_playhead_cursor (); - void kbd_driver (sigc::slot, bool use_track_canvas = true, bool use_time_canvas = true, bool can_select = true); void toggle_region_mute (); - void kbd_brush (); - - void kbd_do_brush (GdkEvent*); - void kbd_do_audition (GdkEvent*); void initialize_canvas (); @@ -1486,15 +1469,14 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void tempo_or_meter_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 (bool loop_or_punch); - void build_marker_menu (bool, ARDOUR::Location *); + void build_range_marker_menu (bool); + void build_marker_menu (ARDOUR::Location *); void build_tempo_or_meter_marker_menu (bool); void build_new_transport_marker_menu (); void dynamic_cast_marker_object (void*, MeterMarker**, TempoMarker**) const; Gtk::Menu* tempo_or_meter_marker_menu; Gtk::Menu* marker_menu; - Gtk::Menu* session_range_marker_menu; Gtk::Menu* range_marker_menu; Gtk::Menu* transport_marker_menu; Gtk::Menu* new_transport_marker_menu; @@ -1507,7 +1489,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void remove_metric_marks (); void draw_metric_marks (const ARDOUR::Metrics& metrics); - void compute_current_bbt_points (nframes_t left, nframes_t right); + void compute_current_bbt_points (framepos_t left, framepos_t right); void tempo_map_changed (const PBD::PropertyChange&); void redisplay_tempo (bool immediate_redraw); @@ -1535,22 +1517,22 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::Label toolbar_selection_cursor_label; Gtkmm2ext::TearOff* _mouse_mode_tearoff; - Gtk::ToggleButton mouse_select_button; - Gtk::ToggleButton mouse_move_button; - Gtk::ToggleButton mouse_gain_button; - Gtk::ToggleButton mouse_zoom_button; - Gtk::ToggleButton mouse_timefx_button; - Gtk::ToggleButton mouse_audition_button; - Gtk::ToggleButton join_object_range_button; + Gtkmm2ext::StatefulToggleButton mouse_select_button; + Gtkmm2ext::StatefulToggleButton mouse_move_button; + Gtkmm2ext::StatefulToggleButton mouse_gain_button; + Gtkmm2ext::StatefulToggleButton mouse_zoom_button; + Gtkmm2ext::StatefulToggleButton mouse_timefx_button; + Gtkmm2ext::StatefulToggleButton mouse_audition_button; + Gtkmm2ext::StatefulToggleButton join_object_range_button; void mouse_mode_toggled (Editing::MouseMode m); void mouse_mode_object_range_toggled () {} bool ignore_mouse_mode_toggle; - Gtk::ToggleButton internal_edit_button; + Gtkmm2ext::StatefulToggleButton internal_edit_button; void toggle_internal_editing (); - gint mouse_select_button_release (GdkEventButton*); + bool mouse_select_button_release (GdkEventButton*); Gtk::VBox automation_box; Gtk::Button automation_mode_button; @@ -1558,6 +1540,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::ComboBoxText edit_mode_selector; Gtk::VBox edit_mode_box; + std::vector edit_mode_strings; void set_edit_mode (ARDOUR::EditMode); void cycle_edit_mode (); @@ -1600,7 +1583,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::HBox toolbar_hbox; Gtk::EventBox toolbar_base; Gtk::Frame toolbar_frame; - + Gtk::Viewport _toolbar_viewport; + /* midi toolbar */ Gtk::HBox panic_box; @@ -1662,7 +1646,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /* object rubberband select process */ - bool select_all_within (framepos_t, framepos_t, double, double, TrackViewList const &, Selection::Operation, bool); + void select_all_within (framepos_t, framepos_t, double, double, TrackViewList const &, Selection::Operation, bool); ArdourCanvas::SimpleRect *rubberband_rect; @@ -1706,11 +1690,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /* trimming */ void point_trim (GdkEvent *, framepos_t); - void single_contents_trim (RegionView&, framepos_t, bool, bool); - void single_start_trim (RegionView&, framepos_t, bool); - void single_end_trim (RegionView&, framepos_t, bool); - - void thaw_region_after_trim (RegionView& rv); void trim_region_front(); void trim_region_back(); @@ -1808,11 +1787,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void freeze_route (); void unfreeze_route (); - /* route-group solo + mute */ - - void set_route_group_solo (ARDOUR::Route&, bool); - void set_route_group_mute (ARDOUR::Route&, bool); - /* duplication */ void duplicate_dialog (bool with_dialog); @@ -1835,6 +1809,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void pitch_shift_region (); int time_fx (RegionSelection&, float val, bool pitching); + void transpose_region (); + /* editor-mixer strip */ MixerStrip *current_mixer_strip; @@ -1989,6 +1965,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void get_regions_at (RegionSelection&, framepos_t where, const TrackViewList& ts) const; void get_regions_after (RegionSelection&, framepos_t where, const TrackViewList& ts) const; + RegionSelection get_regions_from_selection (); RegionSelection get_regions_from_selection_and_edit_point (); RegionSelection get_regions_from_selection_and_entered (); @@ -2034,7 +2011,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::HBox _summary_hbox; EditorSummary* _summary; + void region_view_added (RegionView *); + void region_view_removed (); void update_canvas_now (); @@ -2069,6 +2048,12 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD Gtk::MenuItem& action_menu_item (std::string const &); void action_pre_activated (Glib::RefPtr const &); + void set_canvas_cursor_for_region_view (double, RegionView *); + + MouseCursors* _cursors; + + void resize_text_widgets (); + friend class Drag; friend class RegionDrag; friend class RegionMoveDrag;