X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.h;h=140235e890b9254474188ee3891c06dae1022080;hb=99aa8c6338e47b41143f799fdcb35d1699548076;hp=8adc647d761c39179f39053f50081e80dbceb99b;hpb=5f13eb411ee69b4a810de4a7258c39384e5e1d4f;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 8adc647d76..140235e890 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -25,7 +25,6 @@ #include #include #include -#include #include @@ -42,6 +41,7 @@ #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 { @@ -130,6 +131,7 @@ class RegionLayeringOrderEditor; class ProgressReporter; class EditorCursor; class MouseCursors; +class VerboseCursor; /* */ class ImageFrameView; @@ -324,7 +326,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void show_editor_list (bool yn); void set_selected_mixer_strip (TimeAxisView&); void mixer_strip_width_changed (); - void hide_track_in_display (TimeAxisView* tv, bool temporary = false); + void hide_track_in_display (TimeAxisView* tv, bool apply_to_selection = false); /* nudge is initiated by transport controls owned by ARDOUR_UI */ @@ -415,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; @@ -447,6 +446,12 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD 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); @@ -497,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; @@ -539,9 +545,9 @@ 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); @@ -639,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,7 +677,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD 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; @@ -688,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; @@ -771,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; @@ -788,7 +789,7 @@ 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 (); @@ -933,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; @@ -952,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; @@ -1035,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 (); @@ -1088,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); @@ -1131,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 (); @@ -1154,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); @@ -1218,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 (); @@ -1288,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; @@ -1336,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 */ @@ -1383,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; @@ -1412,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 (); @@ -1529,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; @@ -1658,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; @@ -1821,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; @@ -1978,7 +1968,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD RegionSelection get_regions_from_selection (); RegionSelection get_regions_from_selection_and_edit_point (); RegionSelection get_regions_from_selection_and_entered (); - RegionSelection add_route_group_regions_to_selection (RegionSelection regions); void start_updating_meters (); void stop_updating_meters (); @@ -2024,6 +2013,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD EditorSummary* _summary; void region_view_added (RegionView *); + void region_view_removed (); void update_canvas_now ();