X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.h;h=1f66a69c7868c9447a55e5ca3237275b386c775e;hb=39f65bbce209e1be1591dd0a32c34ad6a11bcf97;hp=78496c4ca405bb3a04fff05ae8c27b6d601271b3;hpb=7db12f6b128eef0d63dd6a8eda3d04f4dab1fc79;p=ardour.git diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 78496c4ca4..1f66a69c78 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -128,6 +128,7 @@ class RulerDialog; class Selection; class SoundFileOmega; class StreamView; +class GridLines; class TempoLines; class TimeAxisView; class TimeInfoBox; @@ -161,19 +162,15 @@ public: double trackviews_height () const; void cycle_snap_mode (); - void next_snap_choice (); - void next_snap_choice_music_only (); - void next_snap_choice_music_and_time (); - void prev_snap_choice (); - void prev_snap_choice_music_only (); - void prev_snap_choice_music_and_time (); - void set_snap_to (Editing::SnapType); + void next_grid_choice (); + void prev_grid_choice (); + void set_grid_to (Editing::GridType); void set_snap_mode (Editing::SnapMode); - void set_snap_threshold (double pixel_distance) {snap_threshold = pixel_distance;} Editing::SnapMode snap_mode () const; - Editing::SnapType snap_type () const; - bool snap_musical () const; + Editing::GridType grid_type () const; + bool grid_musical () const; + bool grid_nonmusical () const; void undo (uint32_t n = 1); void redo (uint32_t n = 1); @@ -181,7 +178,7 @@ public: XMLNode& get_state (); int set_state (const XMLNode&, int version); - void set_mouse_mode (Editing::MouseMode, bool force=true); + void set_mouse_mode (Editing::MouseMode, bool force = false); void step_mouse_mode (bool next); Editing::MouseMode current_mouse_mode () const { return mouse_mode; } Editing::MidiEditMode current_midi_edit_mode () const; @@ -274,8 +271,7 @@ public: /* tempo */ - void set_show_measures (bool yn); - bool show_measures () const { return _show_measures; } + void update_grid (); /* analysis window */ @@ -362,10 +358,9 @@ public: void toggle_zero_line_visibility (); void set_summary (); void set_group_tabs (); - void toggle_measure_visibility (); /* returns the left-most and right-most time that the gui should allow the user to scroll to */ - std::pair session_gui_extents( bool use_extra = true ) const; + std::pair session_gui_extents (bool use_extra = true) const; /* fades */ @@ -459,18 +454,15 @@ public: void snap_to (ARDOUR::MusicSample& first, ARDOUR::RoundMode direction = ARDOUR::RoundNearest, - bool for_mark = false, - bool ensure_snap = false); + ARDOUR::SnapPref pref = ARDOUR::SnapToAny_Visual, + bool ensure_snap = false); void snap_to_with_modifier (ARDOUR::MusicSample& first, GdkEvent const * ev, ARDOUR::RoundMode direction = ARDOUR::RoundNearest, - bool for_mark = false); + ARDOUR::SnapPref pref = ARDOUR::SnapToAny_Visual); - void snap_to (ARDOUR::MusicSample& first, - ARDOUR::MusicSample& last, - ARDOUR::RoundMode direction = ARDOUR::RoundNearest, - bool for_mark = false); + void set_snapped_cursor_position (samplepos_t pos); void begin_selection_op_history (); void begin_reversible_selection_op (std::string cmd_name); @@ -533,6 +525,7 @@ public: ArdourCanvas::ScrollGroup* get_hscroll_group () const { return h_scroll_group; } ArdourCanvas::ScrollGroup* get_hvscroll_group () const { return hv_scroll_group; } ArdourCanvas::ScrollGroup* get_cursor_scroll_group () const { return cursor_scroll_group; } + ArdourCanvas::Container* get_drag_motion_group () const { return _drag_motion_group; } ArdourCanvas::GtkCanvasViewport* get_track_canvas () const; @@ -547,7 +540,7 @@ public: /* editing operations that need to be public */ void mouse_add_new_marker (samplepos_t where, bool is_cd=false); - void split_regions_at (ARDOUR::MusicSample, RegionSelection&, bool snap = true); + void split_regions_at (ARDOUR::MusicSample, RegionSelection&); void split_region_at_points (boost::shared_ptr, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false); RegionSelection get_regions_from_selection_and_mouse (samplepos_t); @@ -612,9 +605,9 @@ private: void on_samples_per_pixel_changed (); Editing::MouseMode mouse_mode; - Editing::SnapType pre_internal_snap_type; + Editing::GridType pre_internal_grid_type; Editing::SnapMode pre_internal_snap_mode; - Editing::SnapType internal_snap_type; + Editing::GridType internal_grid_type; Editing::SnapMode internal_snap_mode; Editing::MouseMode effective_mouse_mode () const; @@ -642,7 +635,6 @@ private: ArdourWidgets::VPane editor_summary_pane; Gtk::EventBox meter_base; - Gtk::HBox meter_box; Gtk::EventBox marker_base; Gtk::HBox marker_box; Gtk::VBox scrollers_rulers_markers_box; @@ -658,6 +650,7 @@ private: gint really_remove_marker (ARDOUR::Location* loc); void goto_nth_marker (int nth); void trigger_script (int nth); + void trigger_script_by_name (const std::string script_name); void toggle_marker_lines (); void set_marker_line_visibility (bool); @@ -813,7 +806,6 @@ private: size_t push_canvas_cursor (Gdk::Cursor*); void pop_canvas_cursor (); - Gdk::Cursor* which_grabber_cursor () const; Gdk::Cursor* which_track_cursor () const; Gdk::Cursor* which_mode_cursor () const; Gdk::Cursor* which_trim_cursor (bool left_side) const; @@ -923,10 +915,9 @@ private: bool ruler_label_button_release (GdkEventButton*); void store_ruler_visibility (); void restore_ruler_visibility (); + void show_rulers_for_grid (); - - - enum MinsecRulerScale { + enum MinsecRulerScale { minsec_show_msecs, minsec_show_seconds, minsec_show_minutes, @@ -965,10 +956,10 @@ private: bbt_show_16, bbt_show_4, bbt_show_1, - bbt_show_beats, - bbt_show_ticks, - bbt_show_ticks_detail, - bbt_show_ticks_super_detail + bbt_show_quarters, + bbt_show_eighths, + bbt_show_sixteenths, + bbt_show_thirtyseconds }; BBTRulerScale bbt_ruler_scale; @@ -1031,6 +1022,8 @@ private: friend class EditorCursor; + EditorCursor* snapped_cursor; + EditorCursor* playhead_cursor; samplepos_t playhead_cursor_sample () const; @@ -1063,7 +1056,9 @@ private: ARDOUR::samplepos_t find_next_region_boundary (ARDOUR::samplepos_t, int32_t dir, const TrackViewList&); std::vector region_boundary_cache; + void mark_region_boundary_cache_dirty () { _region_boundary_cache_dirty = true; } void build_region_boundary_cache (); + bool _region_boundary_cache_dirty; Gtk::HBox toplevel_hpacker; @@ -1240,6 +1235,8 @@ private: void toggle_mute (); void toggle_region_lock_style (); + void play_solo_selection (bool restart); + enum LayerOperation { Raise, RaiseToTop, @@ -1518,19 +1515,16 @@ private: void set_loop_start_from_edit_point (); void set_loop_end_from_edit_point (); - void keyboard_selection_begin ( Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE ); + void keyboard_selection_begin (Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE); void keyboard_selection_finish (bool add, Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE); bool have_pending_keyboard_selection; samplepos_t pending_keyboard_selection_start; void move_range_selection_start_or_end_to_region_boundary (bool, bool); - Editing::SnapType _snap_type; + Editing::GridType _grid_type; Editing::SnapMode _snap_mode; - /// Snap threshold in pixels - double snap_threshold; - bool ignore_gui_changes; DragManager* _drags; @@ -1666,7 +1660,6 @@ private: /* display control */ - bool _show_measures; /// true if the editor should follow the playhead, otherwise false bool _follow_playhead; /// true if we scroll the tracks rather than the playhead @@ -1674,17 +1667,17 @@ private: /// true if we are in fullscreen mode bool _maximised; - TempoLines* tempo_lines; + std::vector grid_marks; + GridLines* grid_lines; ArdourCanvas::Container* global_rect_group; ArdourCanvas::Container* time_line_group; - void hide_measures (); - void draw_measures (std::vector&); + void hide_grid_lines (); + void maybe_draw_grid_lines (); void new_tempo_section (); - void remove_tempo_marker (ArdourCanvas::Item*); void remove_meter_marker (ArdourCanvas::Item*); gint real_remove_tempo_marker (ARDOUR::TempoSection*); @@ -1710,6 +1703,7 @@ private: void toggle_marker_menu_lock (); void toggle_marker_menu_glue (); void marker_menu_hide (); + void marker_menu_set_origin (); void marker_menu_loop_range (); void marker_menu_select_all_selectables_using_range (); void marker_menu_select_using_range (); @@ -1758,7 +1752,8 @@ private: void tempo_map_changed (const PBD::PropertyChange&); void tempometric_position_changed (const PBD::PropertyChange&); - void redisplay_tempo (bool immediate_redraw); + + void redisplay_grid (bool immediate_redraw); uint32_t bbt_beat_subdivision; @@ -1818,22 +1813,28 @@ private: void set_edit_mode (ARDOUR::EditMode); void cycle_edit_mode (); - ArdourWidgets::ArdourDropdown snap_type_selector; - void build_snap_type_menu (); + ArdourWidgets::ArdourDropdown grid_type_selector; + void build_grid_type_menu (); + + ArdourWidgets::ArdourButton snap_mode_button; + bool snap_mode_button_clicked (GdkEventButton *); - ArdourWidgets::ArdourDropdown snap_mode_selector; - void build_snap_mode_menu (); Gtk::HBox snap_box; - std::vector snap_type_strings; + Gtk::HBox ebox_hpacker; + Gtk::VBox ebox_vpacker; + + Gtk::HBox _box; + + std::vector grid_type_strings; std::vector snap_mode_strings; - void snap_type_selection_done (Editing::SnapType); + void grid_type_selection_done (Editing::GridType); void snap_mode_selection_done (Editing::SnapMode); void snap_mode_chosen (Editing::SnapMode); - void snap_type_chosen (Editing::SnapType); + void grid_type_chosen (Editing::GridType); - Glib::RefPtr snap_type_action (Editing::SnapType); + Glib::RefPtr grid_type_action (Editing::GridType); Glib::RefPtr snap_mode_action (Editing::SnapMode); //zoom focus meu stuff @@ -1866,6 +1867,7 @@ private: SelectionMemento* _selection_memento; void time_selection_changed (); + void track_selection_changed (); void update_time_selection_display (); void presentation_info_changed (PBD::PropertyChange const &); void region_selection_changed (); @@ -1883,6 +1885,7 @@ private: void marker_selection_changed (); bool _track_selection_change_without_scroll; + bool _editor_track_selection_change_without_scroll; void cancel_selection (); void cancel_time_selection (); @@ -2183,14 +2186,33 @@ private: void select_next_stripable (bool routes_only = true); void select_prev_stripable (bool routes_only = true); + ARDOUR::MusicSample snap_to_minsec (ARDOUR::MusicSample start, + ARDOUR::RoundMode direction, + ARDOUR::SnapPref gpref); + + ARDOUR::MusicSample snap_to_cd_frames (ARDOUR::MusicSample start, + ARDOUR::RoundMode direction, + ARDOUR::SnapPref gpref); + + ARDOUR::MusicSample snap_to_bbt (ARDOUR::MusicSample start, + ARDOUR::RoundMode direction, + ARDOUR::SnapPref gpref); + + ARDOUR::MusicSample snap_to_timecode (ARDOUR::MusicSample start, + ARDOUR::RoundMode direction, + ARDOUR::SnapPref gpref); + + ARDOUR::MusicSample snap_to_grid (ARDOUR::MusicSample start, + ARDOUR::RoundMode direction, + ARDOUR::SnapPref gpref); + void snap_to_internal (ARDOUR::MusicSample& first, ARDOUR::RoundMode direction = ARDOUR::RoundNearest, - bool for_mark = false, - bool ensure_snap = false); + ARDOUR::SnapPref gpref = ARDOUR::SnapToAny_Visual, + bool ensure_snap = false); - void timecode_snap_to_internal (ARDOUR::MusicSample& first, - ARDOUR::RoundMode direction = ARDOUR::RoundNearest, - bool for_mark = false); + samplepos_t snap_to_marker (samplepos_t presnap, + ARDOUR::RoundMode direction = ARDOUR::RoundNearest); RhythmFerret* rhythm_ferret;