diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index bc744da5b5..f4185e61dc 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -548,12 +548,8 @@ - - - - @@ -802,11 +798,7 @@ - - - - @@ -871,6 +863,22 @@ + + + + + + + + + + + + + + + + diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index fcf6878166..63d65add05 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -246,7 +246,8 @@ ARDOUR_UI::toggle_punch_out () void ARDOUR_UI::show_loop_punch_ruler_and_disallow_hide () { - Glib::RefPtr tact = ActionManager::get_toggle_action (X_("Rulers"), "toggle-loop-punch-ruler"); +/* XXX FIX ME */ + Glib::RefPtr tact; // = ActionManager::get_toggle_action (X_("Rulers"), "toggle-loop-punch-ruler"); tact->set_sensitive (false); @@ -259,9 +260,10 @@ ARDOUR_UI::show_loop_punch_ruler_and_disallow_hide () void ARDOUR_UI::reenable_hide_loop_punch_ruler_if_appropriate () { +/* XXX FIX ME */ if (!_session->config.get_punch_in() && !_session->config.get_punch_out()) { /* if punch in/out are now both off, reallow hiding of the loop/punch ruler */ - Glib::RefPtr act = ActionManager::get_action (X_("Rulers"), "toggle-loop-punch-ruler"); + Glib::RefPtr act; // = ActionManager::get_action (X_("Rulers"), "toggle-loop-punch-ruler"); if (act) { act->set_sensitive (true); } diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 00a4856928..d8e968b2cb 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -289,8 +289,6 @@ Editor::Editor () , meter_group (0) , marker_group (0) , range_marker_group (0) - , transport_marker_group (0) - , cd_marker_group (0) , section_marker_group (0) , _time_markers_group (0) , _selection_marker_group (0) @@ -326,10 +324,7 @@ Editor::Editor () , meter_bar (0) , marker_bar (0) , range_marker_bar (0) - , transport_marker_bar (0) - , cd_marker_bar (0) , section_marker_bar (0) - , cue_marker_bar (0) , ruler_separator (0) , minsec_label (_("Mins:Secs")) , bbt_label (_("Bars:Beats")) @@ -339,11 +334,8 @@ Editor::Editor () , meter_label (_("Time Signature")) , mark_label (_("Location Markers")) , range_mark_label (_("Range Markers")) - , transport_mark_label (_("Loop/Punch Ranges")) - , cd_mark_label (_("CD Markers")) , section_mark_label (_("Arrangement")) , cue_mark_label (_("Cue Markers")) - , scene_mark_label (_("Scenes")) , videotl_label (_("Video Timeline")) , videotl_group (0) , _region_boundary_cache_dirty (true) @@ -412,11 +404,7 @@ Editor::Editor () , _section_box (0) , _playhead_cursor (0) , _snapped_cursor (0) - , cd_marker_bar_drag_rect (0) - , cue_marker_bar_drag_rect (0) , range_bar_drag_rect (0) - , transport_bar_drag_rect (0) - , transport_bar_range_rect (0) , transport_bar_preroll_rect (0) , transport_bar_postroll_rect (0) , transport_loop_range_rect (0) @@ -475,6 +463,8 @@ Editor::Editor () , _main_menu_disabler (0) , domain_bounce_info (nullptr) , track_drag (nullptr) + , _visible_marker_types (all_marker_types) + , _visible_range_types (all_range_types) { /* we are a singleton */ @@ -557,13 +547,6 @@ Editor::Editor () mark_label.hide(); mark_label.set_no_show_all(); - cd_mark_label.set_name ("EditorRulerLabel"); - cd_mark_label.set_size_request (-1, (int)timebar_height); - cd_mark_label.set_alignment (1.0, 0.5); - cd_mark_label.set_padding (5,0); - cd_mark_label.hide(); - cd_mark_label.set_no_show_all(); - section_mark_label.set_name ("EditorRulerLabel"); section_mark_label.set_size_request (-1, (int)timebar_height); section_mark_label.set_alignment (1.0, 0.5); @@ -571,20 +554,6 @@ Editor::Editor () section_mark_label.hide(); section_mark_label.set_no_show_all(); - cue_mark_label.set_name ("EditorRulerLabel"); - cue_mark_label.set_size_request (-1, (int)timebar_height); - cue_mark_label.set_alignment (1.0, 0.5); - cue_mark_label.set_padding (5,0); - cue_mark_label.hide(); - cue_mark_label.set_no_show_all(); - - scene_mark_label.set_name ("EditorRulerLabel"); - scene_mark_label.set_size_request (-1, (int)timebar_height); - scene_mark_label.set_alignment (1.0, 0.5); - scene_mark_label.set_padding (5,0); - scene_mark_label.hide(); - scene_mark_label.set_no_show_all(); - videotl_bar_height = 4; videotl_label.set_name ("EditorRulerLabel"); videotl_label.set_size_request (-1, (int)timebar_height * videotl_bar_height); @@ -600,13 +569,6 @@ Editor::Editor () range_mark_label.hide(); range_mark_label.set_no_show_all(); - transport_mark_label.set_name ("EditorRulerLabel"); - transport_mark_label.set_size_request (-1, (int)timebar_height); - transport_mark_label.set_alignment (1.0, 0.5); - transport_mark_label.set_padding (5,0); - transport_mark_label.hide(); - transport_mark_label.set_no_show_all(); - initialize_canvas (); CairoWidget::set_focus_handler (sigc::mem_fun (ARDOUR_UI::instance(), &ARDOUR_UI::reset_focus)); @@ -2297,7 +2259,6 @@ Editor::show_rulers_for_grid () ruler_samples_action->set_active(false); } } else if (_grid_type == GridTypeCDFrame) { - ruler_cd_marker_action->set_active(true); ruler_minsec_action->set_active(true); if (UIConfiguration::instance().get_rulers_follow_grid()) { @@ -4051,6 +4012,7 @@ void Editor::grid_type_selection_done (GridType gridtype) { RefPtr ract = grid_type_action (gridtype); + if (ract && ract->get_active()) { /*radio-action is already set*/ set_grid_to(gridtype); /*so we must set internal state here*/ } else { diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index cb3cda62ad..92f55f2716 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -935,11 +935,7 @@ private: ArdourCanvas::Container* meter_group; ArdourCanvas::Container* marker_group; ArdourCanvas::Container* range_marker_group; - ArdourCanvas::Container* transport_marker_group; - ArdourCanvas::Container* cd_marker_group; ArdourCanvas::Container* section_marker_group; - ArdourCanvas::Container* cue_marker_group; - ArdourCanvas::Container* scene_marker_group; /* parent for groups which themselves contain time markers */ ArdourCanvas::Container* _time_markers_group; @@ -988,14 +984,22 @@ private: Glib::RefPtr ruler_meter_action; Glib::RefPtr ruler_tempo_action; Glib::RefPtr ruler_range_action; - Glib::RefPtr ruler_loop_punch_action; - Glib::RefPtr ruler_cd_marker_action; Glib::RefPtr ruler_section_action; Glib::RefPtr ruler_marker_action; - Glib::RefPtr ruler_cue_marker_action; - Glib::RefPtr ruler_scene_marker_action; bool no_ruler_shown_update; + Glib::RefPtr all_marker_action; + Glib::RefPtr cd_marker_action; + Glib::RefPtr scene_marker_action; + Glib::RefPtr cue_marker_action; + Glib::RefPtr location_marker_action; + + Glib::RefPtr all_range_action; + Glib::RefPtr punch_range_action; + Glib::RefPtr loop_range_action; + Glib::RefPtr session_range_action; + Glib::RefPtr other_range_action; + Gtk::Widget* ruler_grabbed_widget; RulerDialog* ruler_dialog; @@ -1081,11 +1085,7 @@ private: ArdourCanvas::Rectangle* meter_bar; ArdourCanvas::Rectangle* marker_bar; ArdourCanvas::Rectangle* range_marker_bar; - ArdourCanvas::Rectangle* transport_marker_bar; - ArdourCanvas::Rectangle* cd_marker_bar; ArdourCanvas::Rectangle* section_marker_bar; - ArdourCanvas::Rectangle* cue_marker_bar; - ArdourCanvas::Rectangle* scene_marker_bar; ArdourCanvas::Line* ruler_separator; void toggle_cue_behavior (); @@ -1098,11 +1098,8 @@ private: Gtk::Label meter_label; Gtk::Label mark_label; Gtk::Label range_mark_label; - Gtk::Label transport_mark_label; - Gtk::Label cd_mark_label; Gtk::Label section_mark_label; Gtk::Label cue_mark_label; - Gtk::Label scene_mark_label; /* videtimline related actions */ Gtk::Label videotl_label; @@ -1799,6 +1796,29 @@ private: Editing::EditPoint edit_point() const { return _edit_point; } + enum MarkerBarType { + CueMarks = 0x1, + SceneMarks = 0x2, + CDMarks = 0x4, + LocationMarks = 0x8 + }; + + enum RangeBarType { + PunchRange = 0x1, + LoopRange = 0x2, + SessionRange = 0x4, + OtherRange = 0x8 + }; + + static const MarkerBarType all_marker_types = MarkerBarType (CueMarks|SceneMarks|CDMarks|LocationMarks); + static const RangeBarType all_range_types = RangeBarType (PunchRange|LoopRange|SessionRange|OtherRange); + + MarkerBarType visible_marker_types () const; + RangeBarType visible_range_types () const; + + void set_visible_marker_types (MarkerBarType); + void set_visible_range_types (RangeBarType); + protected: void _commit_tempo_map_edit (Temporal::TempoMap::WritableSharedPtr&, bool with_update = false); @@ -2137,11 +2157,7 @@ private: /* transport range select process */ - ArdourCanvas::Rectangle* cd_marker_bar_drag_rect; - ArdourCanvas::Rectangle* cue_marker_bar_drag_rect; ArdourCanvas::Rectangle* range_bar_drag_rect; - ArdourCanvas::Rectangle* transport_bar_drag_rect; - ArdourCanvas::Rectangle* transport_bar_range_rect; ArdourCanvas::Rectangle* transport_bar_preroll_rect; ArdourCanvas::Rectangle* transport_bar_postroll_rect; ArdourCanvas::Rectangle* transport_loop_range_rect; @@ -2632,6 +2648,14 @@ private: }; TrackDrag* track_drag; + MarkerBarType _visible_marker_types; + RangeBarType _visible_range_types; + void update_mark_and_range_visibility (); + void show_marker_type (MarkerBarType); + void show_range_type (RangeBarType); + PBD::Signal0 VisibleMarkersChanged; + PBD::Signal0 VisibleRangesChanged; + friend class RegionMoveDrag; friend class TrimDrag; friend class MappingTwistDrag; diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 6365b85c6b..4017362eda 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -693,12 +693,23 @@ Editor::register_actions () ruler_meter_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Time Signature"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); ruler_tempo_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); ruler_range_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-range-ruler"), _("Range Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); - ruler_loop_punch_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch Ranges"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); - ruler_cd_marker_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-cd-marker-ruler"), _("CD Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); ruler_section_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-arrangement-ruler"), _("Arrangement"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); ruler_marker_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-marker-ruler"), _("Location Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); - ruler_scene_marker_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-scene-marker-ruler"), _("Scene Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); - ruler_cue_marker_action = Glib::RefPtr::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-cue-marker-ruler"), _("Cue Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility))); + + RadioAction::Group marker_choice_group; + RadioAction::Group range_choice_group; + + all_marker_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, marker_choice_group, X_("show-all-markers"), _("All Markers"), sigc::bind (sigc::mem_fun(*this, &Editor::show_marker_type), all_marker_types))); + cd_marker_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, marker_choice_group, X_("show-cd-markers"), _("CD Markers"), sigc::bind (sigc::mem_fun(*this, &Editor::show_marker_type), CDMarks))); + scene_marker_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, marker_choice_group, X_("show-cue-markers"), _("Cue Markers"), sigc::bind (sigc::mem_fun(*this, &Editor::show_marker_type), SceneMarks))); + cue_marker_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, marker_choice_group, X_("show-scene-markers"), _("Scene Markers"), sigc::bind (sigc::mem_fun(*this, &Editor::show_marker_type), CueMarks))); + location_marker_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, marker_choice_group, X_("show-location-markers"), _("Location Markers"), sigc::bind (sigc::mem_fun(*this, &Editor::show_marker_type), LocationMarks))); + + all_range_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, range_choice_group, X_("show-all-ranges"), _("All Ranges"), sigc::bind (sigc::mem_fun(*this, &Editor::show_range_type), all_range_types))); + session_range_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, range_choice_group, X_("show-session-range"), _("Session Range"), sigc::bind (sigc::mem_fun(*this, &Editor::show_range_type), SessionRange))); + punch_range_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, range_choice_group, X_("show-punch-range"), _("Punch Range"), sigc::bind (sigc::mem_fun(*this, &Editor::show_range_type), PunchRange))); + loop_range_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, range_choice_group, X_("show-loop-range"), _("Loop Range"), sigc::bind (sigc::mem_fun(*this, &Editor::show_range_type), LoopRange))); + other_range_action = Glib::RefPtr::cast_static (ActionManager::register_radio_action (ruler_actions, range_choice_group, X_("show-other-ranges"), _("Other Ranges"), sigc::bind (sigc::mem_fun(*this, &Editor::show_range_type), OtherRange))); ActionManager::register_action (editor_menu_actions, X_("VideoMonitorMenu"), _("Video Monitor")); @@ -724,11 +735,7 @@ Editor::register_actions () ruler_meter_action->set_active (true); ruler_tempo_action->set_active (true); ruler_range_action->set_active (true); - ruler_loop_punch_action->set_active (true); - ruler_cd_marker_action->set_active (true); ruler_marker_action->set_active (true); - ruler_cue_marker_action->set_active (true); - ruler_scene_marker_action->set_active (false); ruler_video_action->set_active (false); xjadeo_proc_action->set_active (false); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index b4e357196a..87fc775cd6 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -154,17 +154,13 @@ Editor::initialize_canvas () * ::update_ruler_visibility() */ - cd_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0)); - CANVAS_DEBUG_NAME (cd_marker_group, "cd marker group"); /* the video ruler is temporarily placed a the same location as the - cd_marker_group, but is moved later. + previous marker group, but is moved later. */ videotl_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple(0.0, 0.0)); CANVAS_DEBUG_NAME (videotl_group, "videotl group"); marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, timebar_height + 1.0)); CANVAS_DEBUG_NAME (marker_group, "marker group"); - transport_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 2.0) + 1.0)); - CANVAS_DEBUG_NAME (transport_marker_group, "transport marker group"); range_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 3.0) + 1.0)); CANVAS_DEBUG_NAME (range_marker_group, "range marker group"); tempo_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 4.0) + 1.0)); @@ -173,8 +169,6 @@ Editor::initialize_canvas () CANVAS_DEBUG_NAME (section_marker_group, "Arranger marker group"); meter_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0)); CANVAS_DEBUG_NAME (meter_group, "meter group"); - scene_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0)); - CANVAS_DEBUG_NAME (scene_marker_group, "scene marker_group"); float timebar_thickness = timebar_height; //was 4 float timebar_top = (timebar_height - timebar_thickness)/2; @@ -193,25 +187,12 @@ Editor::initialize_canvas () range_marker_bar = new ArdourCanvas::Rectangle (range_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm)); CANVAS_DEBUG_NAME (range_marker_bar, "Range Marker Bar"); - transport_marker_bar = new ArdourCanvas::Rectangle (transport_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm)); - CANVAS_DEBUG_NAME (transport_marker_bar, "transport Marker Bar"); - marker_bar = new ArdourCanvas::Rectangle (marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm)); CANVAS_DEBUG_NAME (marker_bar, "Marker Bar"); - cd_marker_bar = new ArdourCanvas::Rectangle (cd_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm)); - CANVAS_DEBUG_NAME (cd_marker_bar, "CD Marker Bar"); - section_marker_bar = new ArdourCanvas::Rectangle (section_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm)); CANVAS_DEBUG_NAME (section_marker_bar, "Arranger Marker Bar"); - cue_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0)); - cue_marker_bar = new ArdourCanvas::Rectangle (cue_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm)); - CANVAS_DEBUG_NAME (cue_marker_bar, "Cue Marker Bar"); - - scene_marker_bar = new ArdourCanvas::Rectangle (scene_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm)); - CANVAS_DEBUG_NAME (cue_marker_bar, "Scene Marker Bar"); - ruler_separator = new ArdourCanvas::Line(_time_markers_group); CANVAS_DEBUG_NAME (ruler_separator, "separator between ruler and main canvas"); ruler_separator->set (ArdourCanvas::Duple(0.0, 0.0), ArdourCanvas::Duple(ArdourCanvas::COORD_MAX, 0.0)); @@ -221,26 +202,11 @@ Editor::initialize_canvas () ARDOUR_UI::instance()->video_timeline = new VideoTimeLine(this, videotl_group, (timebar_height * videotl_bar_height)); - cd_marker_bar_drag_rect = new ArdourCanvas::Rectangle (cd_marker_group, ArdourCanvas::Rect (0.0, 0.0, 100, timebar_height)); - CANVAS_DEBUG_NAME (cd_marker_bar_drag_rect, "cd marker drag"); - cd_marker_bar_drag_rect->set_outline (false); - cd_marker_bar_drag_rect->hide (); - - cue_marker_bar_drag_rect = new ArdourCanvas::Rectangle (cue_marker_group, ArdourCanvas::Rect (0.0, 0.0, 100, timebar_height)); - CANVAS_DEBUG_NAME (cd_marker_bar_drag_rect, "cd marker drag"); - cue_marker_bar_drag_rect->set_outline (false); - cue_marker_bar_drag_rect->hide (); - range_bar_drag_rect = new ArdourCanvas::Rectangle (range_marker_group, ArdourCanvas::Rect (0.0, 0.0, 100, timebar_height)); CANVAS_DEBUG_NAME (range_bar_drag_rect, "range drag"); range_bar_drag_rect->set_outline (false); range_bar_drag_rect->hide (); - transport_bar_drag_rect = new ArdourCanvas::Rectangle (transport_marker_group, ArdourCanvas::Rect (0.0, 0.0, 100, timebar_height)); - CANVAS_DEBUG_NAME (transport_bar_drag_rect, "transport drag"); - transport_bar_drag_rect->set_outline (false); - transport_bar_drag_rect->hide (); - transport_punchin_line = new ArdourCanvas::Line (hv_scroll_group); transport_punchin_line->set_x0 (0); transport_punchin_line->set_y0 (0); @@ -258,13 +224,9 @@ Editor::initialize_canvas () tempo_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), tempo_bar, TempoBarItem, "tempo bar")); meter_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), meter_bar, MeterBarItem, "meter bar")); marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), marker_bar, MarkerBarItem, "marker bar")); - cd_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), cd_marker_bar, CdMarkerBarItem, "cd marker bar")); section_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), section_marker_bar, SectionMarkerBarItem, "arrangement marker bar")); - cue_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), cue_marker_bar, CueMarkerBarItem, "cd marker bar")); - scene_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), scene_marker_bar, SceneMarkerBarItem, "scene marker bar")); videotl_group->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_videotl_bar_event), videotl_group)); range_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), range_marker_bar, RangeMarkerBarItem, "range marker bar")); - transport_marker_bar->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_ruler_bar_event), transport_marker_bar, TransportMarkerBarItem, "transport marker bar")); _playhead_cursor = new EditorCursor (*this, &Editor::canvas_playhead_cursor_event, X_("playhead")); _playhead_cursor->set_sensitive (UIConfiguration::instance().get_sensitize_playhead()); @@ -1091,33 +1053,15 @@ Editor::color_handler() marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("marker bar", "marker bar")); marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator")); - cd_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("cd marker bar", "marker bar")); - cd_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator")); - section_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("arrangement marker bar", "marker bar")); section_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator")); - scene_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("arrangement marker bar", "marker bar")); - scene_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator")); - - cue_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("cd marker bar", "marker bar")); - cue_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator")); - range_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("range marker bar", "marker bar")); range_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator")); - transport_marker_bar->set_fill_color (UIConfiguration::instance().color_mod ("transport marker bar", "marker bar")); - transport_marker_bar->set_outline_color (UIConfiguration::instance().color ("marker bar separator")); - - cd_marker_bar_drag_rect->set_fill_color (UIConfiguration::instance().color ("range drag bar rect")); - cd_marker_bar_drag_rect->set_outline_color (UIConfiguration::instance().color ("range drag bar rect")); - range_bar_drag_rect->set_fill_color (UIConfiguration::instance().color ("range drag bar rect")); range_bar_drag_rect->set_outline_color (UIConfiguration::instance().color ("range drag bar rect")); - transport_bar_drag_rect->set_fill_color (UIConfiguration::instance().color ("transport drag rect")); - transport_bar_drag_rect->set_outline_color (UIConfiguration::instance().color ("transport drag rect")); - transport_loop_range_rect->set_fill_color (UIConfiguration::instance().color_mod ("transport loop rect", "loop rectangle")); transport_loop_range_rect->set_outline_color (UIConfiguration::instance().color ("transport loop rect")); diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 1c780cbe41..37a2c6f90e 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -5957,16 +5957,10 @@ RangeMarkerBarDrag::motion (GdkEvent* event, bool first_move) switch (_operation) { case CreateSkipMarker: - crect = _editor->range_bar_drag_rect; - break; case CreateRangeMarker: - crect = _editor->range_bar_drag_rect; - break; case CreateTransportMarker: - crect = _editor->transport_bar_drag_rect; - break; case CreateCDMarker: - crect = _editor->cd_marker_bar_drag_rect; + crect = _editor->range_bar_drag_rect; break; default: error << string_compose (_("programming_error: %1"), "Error: unknown range marker op passed to Editor::drag_range_markerbar_op ()") << endmsg; @@ -6042,9 +6036,9 @@ RangeMarkerBarDrag::finished (GdkEvent* event, bool movement_occurred) _editor->session ()->locations ()->next_available_name (rangename, _("CD")); _editor->begin_reversible_command (_("new CD marker")); flags = Location::Flags (Location::IsRangeMarker | Location::IsCDMarker); - _editor->cd_marker_bar_drag_rect->hide (); + _editor->range_bar_drag_rect->hide (); } else { - _editor->begin_reversible_command (_("new skip marker")); + _editor->begin_reversible_command (_("new range marker")); _editor->session ()->locations ()->next_available_name (rangename, _("unnamed")); flags = Location::IsRangeMarker; _editor->range_bar_drag_rect->hide (); diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index e2858a3fbc..f14da5c0da 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -131,6 +131,8 @@ Editor::add_new_location_internal (Location* location) { LocationMarkers *lam = new LocationMarkers; std::string color; + MarkerBarType mark_type = MarkerBarType (0); + RangeBarType range_type = RangeBarType (0); /* make a note here of which group this marker ends up in */ ArdourCanvas::Container* group = 0; @@ -154,21 +156,25 @@ Editor::add_new_location_internal (Location* location) if (location->is_mark()) { if (location->is_cd_marker()) { - lam->start = new ArdourMarker (*this, *cd_marker_group, color, location->name(), marker_type (location), location->start()); - group = cd_marker_group; - } else if (location->is_cue_marker()) { - lam->start = new ArdourMarker (*this, *cue_marker_group, color, location->name(), marker_type (location), location->start()); - lam->start->set_cue_index(location->cue_id()); - group = cue_marker_group; - } else if (location->is_section()) { - lam->start = new ArdourMarker (*this, *section_marker_group, color, location->name(), marker_type (location), location->start()); - group = section_marker_group; - } else if (location->is_scene()) { - lam->start = new ArdourMarker (*this, *scene_marker_group, color, location->name(), marker_type (location), location->start()); - group = scene_marker_group; - } else { - lam->start = new ArdourMarker (*this, *marker_group, color, location->name(), marker_type (location), location->start()); group = marker_group; + mark_type = CDMarks; + lam->start = new ArdourMarker (*this, *group, color, location->name(), marker_type (location), location->start()); + } else if (location->is_cue_marker()) { + group = marker_group; + mark_type = CueMarks; + lam->start = new ArdourMarker (*this, *group, color, location->name(), marker_type (location), location->start()); + lam->start->set_cue_index(location->cue_id()); + } else if (location->is_section()) { + group = section_marker_group; + lam->start = new ArdourMarker (*this, *group, color, location->name(), marker_type (location), location->start()); + } else if (location->is_scene()) { + mark_type = CueMarks; + group = marker_group; + lam->start = new ArdourMarker (*this, *group, color, location->name(), marker_type (location), location->start()); + } else { + group = marker_group; + mark_type = LocationMarks; + lam->start = new ArdourMarker (*this, *group, color, location->name(), marker_type (location), location->start()); } lam->end = 0; @@ -176,43 +182,39 @@ Editor::add_new_location_internal (Location* location) } else if (location->is_auto_loop()) { // transport marker - lam->start = new ArdourMarker (*this, *transport_marker_group, color, + group = range_marker_group; + range_type = LoopRange; + lam->start = new ArdourMarker (*this, *group, color, location->name(), marker_type (location), location->start()); - lam->end = new ArdourMarker (*this, *transport_marker_group, color, + lam->end = new ArdourMarker (*this, *group, color, location->name(), marker_type (location, false), location->end()); - group = transport_marker_group; } else if (location->is_auto_punch()) { // transport marker - lam->start = new ArdourMarker (*this, *transport_marker_group, color, + group = range_marker_group; + range_type = PunchRange; + lam->start = new ArdourMarker (*this, *group, color, location->name(), marker_type (location), location->start()); - lam->end = new ArdourMarker (*this, *transport_marker_group, color, + lam->end = new ArdourMarker (*this, *group, color, location->name(), marker_type (location, false), location->end()); - group = transport_marker_group; } else if (location->is_session_range()) { // session range - lam->start = new ArdourMarker (*this, *marker_group, color, _("start"), marker_type (location), location->start()); - lam->end = new ArdourMarker (*this, *marker_group, color, _("end"), marker_type (location, false), location->end()); - group = marker_group; + group = range_marker_group; + range_type = SessionRange; + lam->start = new ArdourMarker (*this, *group, color, _("start"), marker_type (location), location->start()); + lam->end = new ArdourMarker (*this, *group, color, _("end"), marker_type (location, false), location->end()); } else { // range marker - if (location->is_cd_marker()) { - lam->start = new ArdourMarker (*this, *cd_marker_group, color, - location->name(), marker_type (location), location->start()); - lam->end = new ArdourMarker (*this, *cd_marker_group, color, - location->name(), marker_type (location, false), location->end()); - group = cd_marker_group; - } else { - lam->start = new ArdourMarker (*this, *range_marker_group, color, - location->name(), marker_type (location), location->start()); - lam->end = new ArdourMarker (*this, *range_marker_group, color, - location->name(), marker_type (location, false), location->end()); - group = range_marker_group; - } + group = range_marker_group; + range_type = OtherRange; + lam->start = new ArdourMarker (*this, *group, color, + location->name(), marker_type (location), location->start()); + lam->end = new ArdourMarker (*this, *group, color, + location->name(), marker_type (location, false), location->end()); } #if 0 @@ -224,7 +226,21 @@ Editor::add_new_location_internal (Location* location) if (location->is_hidden ()) { lam->hide(); } else { - lam->show (); + if (mark_type) { + if (!(_visible_marker_types & mark_type)) { + lam->hide (); + } else { + lam->show (); + } + } else if (range_type) { + if (!(_visible_range_types & range_type)) { + lam->hide (); + } else { + lam->show (); + } + } else { + lam->show (); + } } location->NameChanged.connect (*this, invalidator (*this), boost::bind (&Editor::location_changed, this, location), gui_context()); @@ -544,13 +560,13 @@ Editor::reparent_location_markers (LocationMarkers* lam, ArdourCanvas::Item* new void Editor::ensure_marker_updated (LocationMarkers* lam, Location* location) { if (location->is_cd_marker()) { - reparent_location_markers (lam, cd_marker_group); + reparent_location_markers (lam, marker_group); } else if (location->is_scene()) { - reparent_location_markers (lam, scene_marker_group); + reparent_location_markers (lam, marker_group); } else if (location->is_section()) { reparent_location_markers (lam, section_marker_group); } else if (location->is_cue_marker()) { - reparent_location_markers (lam, cue_marker_group); + reparent_location_markers (lam, marker_group); } else if (location->is_mark() || location->matches (Location::Flags(0))) { reparent_location_markers (lam, marker_group); } @@ -1920,8 +1936,6 @@ void Editor::new_transport_marker_menu_popdown () { // hide rects - transport_bar_drag_rect->hide(); - _drags->abort (); } @@ -2117,3 +2131,152 @@ Editor::toggle_cue_behavior () _session->config.set_cue_behavior (ARDOUR::CueBehavior (cb | ARDOUR::FollowCues)); } } + +void +Editor::set_visible_marker_types (MarkerBarType mbt) +{ + _visible_marker_types = mbt; + update_mark_and_range_visibility (); + VisibleMarkersChanged (); +} + +void +Editor::set_visible_range_types (RangeBarType rbt) +{ + _visible_range_types = rbt; + update_mark_and_range_visibility (); + VisibleRangesChanged (); +} + +Editor::MarkerBarType +Editor::visible_marker_types () const +{ + return _visible_marker_types; +} + + +Editor::RangeBarType +Editor::visible_range_types () const +{ + return _visible_range_types; +} + +void +Editor::update_mark_and_range_visibility () +{ + for (auto & l : location_markers) { + + Location* location = l.first; + LocationMarkers* lam = l.second; + + MarkerBarType mark_type = MarkerBarType (0); + RangeBarType range_type = RangeBarType (0); + + if (location->is_mark()) { + + if (location->is_cd_marker()) { + mark_type = CDMarks; + } else if (location->is_cue_marker()) { + mark_type = CueMarks; + } else if (location->is_section()) { + + } else if (location->is_scene()) { + mark_type = CueMarks; + } else { + mark_type = LocationMarks; + } + + } else if (location->is_auto_loop()) { + range_type = LoopRange; + } else if (location->is_auto_punch()) { + range_type = PunchRange; + } else if (location->is_session_range()) { + range_type = SessionRange; + + } else { + range_type = OtherRange; + } + + if (location->is_hidden ()) { + lam->hide(); + } else { + if (mark_type) { + if (!(_visible_marker_types & mark_type)) { + lam->hide (); + } else { + lam->show (); + } + } else if (range_type) { + if (!(_visible_range_types & range_type)) { + lam->hide (); + } else { + lam->show (); + } + } else { + lam->show (); + } + } + } +} + +void +Editor::show_marker_type (MarkerBarType mbt) +{ + Glib::RefPtr action; + switch (mbt) { + case CDMarks: + action = cd_marker_action; + break; + case CueMarks: + action = cue_marker_action; + break; + case SceneMarks: + action = scene_marker_action; + break; + case LocationMarks: + action = location_marker_action; + break; + default: + action = all_marker_action; + break; + } + + if (action->get_active()) { + /* Only change things for the currently active action, since + this will be called for both the deactivated action, and the + newly activated one. + */ + set_visible_marker_types (mbt); + } +} + +void +Editor::show_range_type (RangeBarType rbt) +{ + Glib::RefPtr action; + switch (rbt) { + case OtherRange: + action = other_range_action; + break; + case PunchRange: + action = punch_range_action; + break; + case LoopRange: + action = loop_range_action; + break; + case SessionRange: + action = session_range_action; + break; + default: + action = all_range_action; + break; + } + + if (action->get_active()) { + /* Only change things for the currently active action, since + this will be called for both the deactivated action, and the + newly activated one. + */ + set_visible_range_types (rbt); + } +} diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 79f85fb691..fb087d182b 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -176,11 +176,7 @@ Editor::initialize_rulers () lab_children.push_back (Element(tempo_label, PACK_SHRINK, PACK_START)); lab_children.push_back (Element(meter_label, PACK_SHRINK, PACK_START)); lab_children.push_back (Element(range_mark_label, PACK_SHRINK, PACK_START)); - lab_children.push_back (Element(transport_mark_label, PACK_SHRINK, PACK_START)); - lab_children.push_back (Element(cd_mark_label, PACK_SHRINK, PACK_START)); lab_children.push_back (Element(mark_label, PACK_SHRINK, PACK_START)); - lab_children.push_back (Element(cue_mark_label, PACK_SHRINK, PACK_START)); - lab_children.push_back (Element(scene_mark_label, PACK_SHRINK, PACK_START)); lab_children.push_back (Element(section_mark_label, PACK_SHRINK, PACK_START)); lab_children.push_back (Element(videotl_label, PACK_SHRINK, PACK_START)); @@ -223,6 +219,39 @@ Editor::popup_ruler_menu (timepos_t const & where, ItemType t) editor_ruler_menu->set_name ("ArdourContextMenu"); ruler_items.clear(); +#define MAKE_ACTION_ITEM(menu,item,action_group,action_name) \ + (item) = new (Gtk::CheckMenuItem); \ + gtk_activatable_set_related_action (GTK_ACTIVATABLE((item)->gobj()), ActionManager::get_action (action_group, action_name)->gobj()); \ + (item)->set_draw_as_radio (); \ + (menu)->append (*(item)); + + Gtk::Menu* ms_menu = new (Gtk::Menu); + Gtk::CheckMenuItem* ms_item; + + MAKE_ACTION_ITEM (ms_menu, ms_item, X_("Rulers"), X_("show-all-markers")); + MAKE_ACTION_ITEM (ms_menu, ms_item, X_("Rulers"), X_("show-cue-markers")); + MAKE_ACTION_ITEM (ms_menu, ms_item, X_("Rulers"), X_("show-cd-markers")); + MAKE_ACTION_ITEM (ms_menu, ms_item, X_("Rulers"), X_("show-scene-markers")); + MAKE_ACTION_ITEM (ms_menu, ms_item, X_("Rulers"), X_("show-location-markers")); + + ruler_items.push_back (MenuElem (_("Locations"))); + Gtk::MenuItem& marker_show_menu = ruler_items.back(); + marker_show_menu.set_submenu (*ms_menu); + + Gtk::Menu* rs_menu = new (Gtk::Menu); + Gtk::CheckMenuItem* rs_item; + MAKE_ACTION_ITEM (rs_menu, rs_item, X_("Rulers"), X_("show-all-ranges")); + MAKE_ACTION_ITEM (rs_menu, rs_item, X_("Rulers"), X_("show-punch-range")); + MAKE_ACTION_ITEM (rs_menu, rs_item, X_("Rulers"), X_("show-loop-range")); + MAKE_ACTION_ITEM (rs_menu, rs_item, X_("Rulers"), X_("show-session-range")); + MAKE_ACTION_ITEM (rs_menu, rs_item, X_("Rulers"), X_("show-location-markers")); + + ruler_items.push_back (MenuElem (_("Ranges"))); + Gtk::MenuItem& range_show_menu = ruler_items.back(); + range_show_menu.set_submenu (*rs_menu); + +#undef MAKE_ACTION_ITEM + switch (t) { case MarkerBarItem: ruler_items.push_back (MenuElem (_("New Location Marker"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_add_new_marker), where, Location::Flags (0), 0))); @@ -346,11 +375,8 @@ Editor::store_ruler_visibility () node->set_property (X_("meter"), ruler_meter_action->get_active()); node->set_property (X_("tempo"), ruler_tempo_action->get_active()); node->set_property (X_("rangemarker"), ruler_range_action->get_active()); - node->set_property (X_("transportmarker"), ruler_loop_punch_action->get_active()); - node->set_property (X_("cdmarker"), ruler_cd_marker_action->get_active()); - node->set_property (X_("arrangement"), ruler_section_action->get_active()); node->set_property (X_("marker"), ruler_marker_action->get_active()); - node->set_property (X_("cuemarker"), ruler_cue_marker_action->get_active()); + node->set_property (X_("arrangement"), ruler_section_action->get_active()); node->set_property (X_("videotl"), ruler_video_action->get_active()); _session->add_extra_xml (*node); @@ -389,48 +415,12 @@ Editor::restore_ruler_visibility () if (node->get_property ("rangemarker", yn)) { ruler_range_action->set_active (yn); } - if (node->get_property ("transportmarker", yn)) { - ruler_loop_punch_action->set_active (yn); - } - - if (node->get_property ("cdmarker", yn)) { - ruler_cd_marker_action->set_active (yn); - } else { - // this _session doesn't yet know about the cdmarker ruler - // as a benefit to the user who doesn't know the feature exists, show the ruler if - // any cd marks exist - ruler_cd_marker_action->set_active (false); - const Locations::LocationList & locs = _session->locations()->list(); - for (Locations::LocationList::const_iterator i = locs.begin(); i != locs.end(); ++i) { - if ((*i)->is_cd_marker()) { - ruler_cd_marker_action->set_active (true); - break; - } - } - } - if (node->get_property ("arrangement", yn)) { ruler_section_action->set_active (yn); } else { ruler_section_action->set_active (true); } - if (node->get_property ("cuemarker", yn)) { - ruler_cue_marker_action->set_active (yn); - } else { - // this _session doesn't yet know about the cue marker ruler - // as a benefit to the user who doesn't know the feature exists, show the ruler if - // any cue marks exist - ruler_cue_marker_action->set_active (false); - const Locations::LocationList & locs = _session->locations()->list(); - for (Locations::LocationList::const_iterator i = locs.begin(); i != locs.end(); ++i) { - if ((*i)->is_cue_marker()) { - ruler_cue_marker_action->set_active (true); - break; - } - } - } - if (node->get_property ("videotl", yn)) { ruler_video_action->set_active (yn); } @@ -445,10 +435,7 @@ Editor::restore_ruler_visibility () ruler_meter_action->set_active (td == Temporal::BeatTime); ruler_tempo_action->set_active (td == Temporal::BeatTime); ruler_range_action->set_active (true); - ruler_loop_punch_action->set_active (td == Temporal::BeatTime); - ruler_cd_marker_action->set_active (td == Temporal::AudioTime); ruler_marker_action->set_active (true); - ruler_cue_marker_action->set_active (td == Temporal::BeatTime); ruler_section_action->set_active (td == Temporal::BeatTime); } @@ -602,46 +589,6 @@ Editor::update_ruler_visibility () range_mark_label.hide(); } - if (ruler_loop_punch_action->get_active()) { - old_unit_pos = transport_marker_group->position().y; - if (tbpos != old_unit_pos) { - transport_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos)); - } - transport_marker_group->show(); - transport_mark_label.show(); - - transport_marker_bar->set_outline(false); - - tbpos += timebar_height; - tbgpos += timebar_height; - visible_timebars++; - } else { - transport_marker_group->hide(); - transport_mark_label.hide(); - } - - if (ruler_cd_marker_action->get_active()) { - old_unit_pos = cd_marker_group->position().y; - if (tbpos != old_unit_pos) { - cd_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos)); - } - cd_marker_group->show(); - cd_mark_label.show(); - - cd_marker_bar->set_outline(false); - - tbpos += timebar_height; - tbgpos += timebar_height; - visible_timebars++; - // make sure all cd markers show up in their respective places - update_marker_display(); - } else { - cd_marker_group->hide(); - cd_mark_label.hide(); - // make sure all cd markers show up in their respective places - update_marker_display(); - } - if (ruler_marker_action->get_active()) { old_unit_pos = marker_group->position().y; if (tbpos != old_unit_pos) { @@ -660,43 +607,6 @@ Editor::update_ruler_visibility () mark_label.hide(); } - if (ruler_cue_marker_action->get_active()) { - old_unit_pos = cue_marker_group->position().y; - if (tbpos != old_unit_pos) { - cue_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos)); - } - cue_marker_group->show(); - cue_mark_label.show(); - - cue_marker_bar->set_outline(false); - - tbpos += timebar_height; - tbgpos += timebar_height; - visible_timebars++; - } else { - cue_marker_group->hide(); - cue_mark_label.hide(); - } - - if (ruler_scene_marker_action->get_active()) { - old_unit_pos = scene_marker_group->position().y; - if (tbpos != old_unit_pos) { - scene_marker_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos)); - } - scene_marker_group->show(); - scene_mark_label.show(); - - scene_marker_bar->set_outline(false); - - tbpos += timebar_height; - tbgpos += timebar_height; - visible_timebars++; - update_marker_display(); - } else { - scene_marker_group->hide (); - scene_mark_label.hide (); - } - if (!Profile->get_livetrax() && ruler_section_action->get_active()) { old_unit_pos = section_marker_group->position().y; if (tbpos != old_unit_pos) { @@ -1264,7 +1174,7 @@ Editor::metric_get_bbt (std::vector& marks, int64_t l #if 0 // DEBUG GRID for (auto const& g : grid) { - std::cout << "Grid " << g.time() << " Beats: " << g.beats() << " BBT: " << g.bbt() << " sample: " << g.sample(_session->nominal_sample_rate ()) << "\n"; + std::cout << "Grid " << g.time() << " Beats: " << g.beats() << " BBT: " << g.bbt() << " sample: " << g.sample(_session->nominal_sample_rate ()) << "\n"; } #endif