diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 5bf0015eea..8cd5081a49 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -594,6 +594,22 @@ ARDOUR_UI::install_dependent_actions () sigc::bind (sigc::mem_fun(*editor, &PublicEditor::jump_forward_to_mark_flagged), Location::Flags (0), Location::Flags (0), Location::IsMark)); ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (common_actions, "jump-backward-to-range", _("Jump to Previous Range"), + sigc::bind (sigc::mem_fun(*editor, &PublicEditor::jump_backward_to_mark_flagged), Location::Flags (Location::IsRangeMarker | Location::IsSessionRange), Location::Flags (0), Location::Flags (0))); + ActionManager::session_sensitive_actions.push_back (act); + + act = ActionManager::register_action (common_actions, "jump-forward-to-range", _("Jump to Next Range"), + sigc::bind (sigc::mem_fun(*editor, &PublicEditor::jump_forward_to_mark_flagged), Location::Flags(Location::IsRangeMarker | Location::IsSessionRange), Location::Flags (0), Location::Flags (0))); + ActionManager::session_sensitive_actions.push_back (act); + + act = ActionManager::register_action (common_actions, "jump-backward-to-section-mark", _("Jump to Previous Arrangment Mark"), + sigc::bind (sigc::mem_fun(*editor, &PublicEditor::jump_backward_to_mark_flagged), Location::Flags (0), Location::Flags (0), Location::Flags (Location::IsMark | Location::IsSection))); + ActionManager::session_sensitive_actions.push_back (act); + + act = ActionManager::register_action (common_actions, "jump-forward-to-section-mark", _("Jump to Next Arrangment Mark"), + sigc::bind (sigc::mem_fun(*editor, &PublicEditor::jump_forward_to_mark_flagged), Location::Flags (0), Location::Flags (0), Location::Flags(Location::IsMark | Location::IsSection))); + ActionManager::session_sensitive_actions.push_back (act); + for (int i = 1; i <= 9; ++i) { string const a = string_compose(X_("goto-mark-%1"), i); string const n = string_compose(_("Locate to Mark %1"), i); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 395277172a..1a4730ad44 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -275,10 +275,17 @@ Editor::Editor () , range_marker_bar (0) , section_marker_bar (0) , ruler_separator (0) - , _ruler_btn_section_add ("+") + , _ruler_btn_tempo_add ("+") + , _ruler_btn_meter_add ("+") + , _ruler_btn_range_prev ("<") + , _ruler_btn_range_next (">") + , _ruler_btn_range_add ("+") , _ruler_btn_loc_prev ("<") , _ruler_btn_loc_next (">") , _ruler_btn_loc_add ("+") + , _ruler_btn_section_prev ("<") + , _ruler_btn_section_next (">") + , _ruler_btn_section_add ("+") , videotl_label (_("Video Timeline")) , videotl_group (0) , _region_boundary_cache_dirty (true) @@ -422,18 +429,25 @@ Editor::Editor () rtbl = setup_ruler_new (_ruler_box_bbt, _("Bars:Beats")); rtbl = setup_ruler_new (_ruler_box_tempo, _("Tempo")); + setup_ruler_add (rtbl, _ruler_btn_tempo_add); rtbl = setup_ruler_new (_ruler_box_meter, _("Time Signature")); + setup_ruler_add (rtbl, _ruler_btn_meter_add); rtbl = setup_ruler_new (_ruler_box_range, _("Range Markers")); + setup_ruler_add (rtbl, _ruler_btn_range_prev, 0); + setup_ruler_add (rtbl, _ruler_btn_range_add, 1); + setup_ruler_add (rtbl, _ruler_btn_range_next, 2); rtbl = setup_ruler_new (_ruler_box_marker, _("Location Markers")); setup_ruler_add (rtbl, _ruler_btn_loc_prev, 0); - setup_ruler_add (rtbl, _ruler_btn_loc_next, 1); - setup_ruler_add (rtbl, _ruler_btn_loc_add, 2); + setup_ruler_add (rtbl, _ruler_btn_loc_add, 1); + setup_ruler_add (rtbl, _ruler_btn_loc_next, 2); rtbl = setup_ruler_new (_ruler_box_section, _("Arrangement Markers")); - setup_ruler_add (rtbl, _ruler_btn_section_add); + setup_ruler_add (rtbl, _ruler_btn_section_prev, 0); + setup_ruler_add (rtbl, _ruler_btn_section_add, 1); + setup_ruler_add (rtbl, _ruler_btn_section_next, 2); rtbl = setup_ruler_new (_ruler_box_videotl, &videotl_label); videotl_label.set_size_request (-1, 4 * timebar_height); @@ -751,13 +765,14 @@ Editor::setup_ruler_new (Gtk::HBox& box, Gtk::Label* rlbl) { rlbl->set_name ("EditorRulerLabel"); rlbl->set_size_request (-1, (int)timebar_height); + rlbl->set_alignment (1.0, 0); rlbl->show (); Gtk::Table* rtbl = manage (new Gtk::Table); - rtbl->attach (*rlbl, 0, 1, 0, 1, SHRINK, SHRINK, 2, 0); + rtbl->attach (*rlbl, 0, 1, 0, 1, EXPAND|FILL, SHRINK, 2, 0); rtbl->show (); - box.pack_end (*rtbl, false, false); + box.pack_start (*rtbl, true, true); box.hide(); box.set_no_show_all(); return rtbl; @@ -768,8 +783,10 @@ Editor::setup_ruler_add (Gtk::Table* rtbl, ArdourWidgets::ArdourButton& b, int p { b.set_name ("editor ruler button"); b.set_size_request (-1, (int)timebar_height -2); + b.set_tweaks(ArdourButton::Tweaks(ArdourButton::ForceBoxy | ArdourButton::ForceFlat)); + b.set_elements (ArdourButton::Element(ArdourButton::Text)); b.show (); - rtbl->attach (b, pos + 1, pos + 2, 0, 1, SHRINK, SHRINK, 2, 1); + rtbl->attach (b, pos + 1, pos + 2, 0, 1, SHRINK, SHRINK, 0, 1); } bool diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 5575ea82a8..2a6d7b867a 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -935,10 +935,17 @@ private: Gtk::HBox _ruler_box_section; Gtk::HBox _ruler_box_videotl; - ArdourWidgets::ArdourButton _ruler_btn_section_add; + ArdourWidgets::ArdourButton _ruler_btn_tempo_add; + ArdourWidgets::ArdourButton _ruler_btn_meter_add; + ArdourWidgets::ArdourButton _ruler_btn_range_prev; + ArdourWidgets::ArdourButton _ruler_btn_range_next; + ArdourWidgets::ArdourButton _ruler_btn_range_add; ArdourWidgets::ArdourButton _ruler_btn_loc_prev; ArdourWidgets::ArdourButton _ruler_btn_loc_next; ArdourWidgets::ArdourButton _ruler_btn_loc_add; + ArdourWidgets::ArdourButton _ruler_btn_section_prev; + ArdourWidgets::ArdourButton _ruler_btn_section_next; + ArdourWidgets::ArdourButton _ruler_btn_section_add; /* videtimline related actions */ Gtk::Label videotl_label; @@ -1411,6 +1418,9 @@ private: void set_loop_range (Temporal::timepos_t const & start, Temporal::timepos_t const & end, std::string cmd); void set_punch_range (Temporal::timepos_t const & start, Temporal::timepos_t const & end, std::string cmd); + void add_tempo_from_playhead_cursor (); + void add_meter_from_playhead_cursor (); + void toggle_location_at_playhead_cursor (); void add_location_from_playhead_cursor (); bool do_remove_location_at_playhead_cursor (); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index d64c9352b8..c6ae68c3a1 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -403,6 +403,12 @@ Editor::register_actions () act = reg_sens (editor_actions, "add-range-marker-from-selection", _("Add Range Marker from Selection"), sigc::mem_fun(*this, &Editor::add_location_from_selection)); ActionManager::session_sensitive_actions.push_back (act); + act = reg_sens (editor_actions, "add-tempo-from-playhead", _("Add Tempo Marker at Playhead"), sigc::mem_fun(*this, &Editor::add_tempo_from_playhead_cursor)); + ActionManager::session_sensitive_actions.push_back (act); + + act = reg_sens (editor_actions, "add-meter-from-playhead", _("Add Time Signature at Playhead"), sigc::mem_fun(*this, &Editor::add_meter_from_playhead_cursor)); + ActionManager::session_sensitive_actions.push_back (act); + act = reg_sens (editor_actions, "editor-consolidate-with-processing", _("Consolidate Range (with processing)"), sigc::bind (sigc::mem_fun(*this, &Editor::bounce_range_selection), ReplaceRange, true)); ActionManager::time_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "editor-consolidate", _("Consolidate Range"), sigc::bind (sigc::mem_fun(*this, &Editor::bounce_range_selection), ReplaceRange, false)); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 49d9edbc3c..4cb2a7d3de 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2150,6 +2150,17 @@ Editor::add_section_from_playhead () add_location_mark_with_flag (timepos_t (_session->audible_sample()), Location::Flags(Location::IsMark | Location::IsSection), 0); } +void +Editor::add_tempo_from_playhead_cursor () +{ + mouse_add_new_tempo_event (timepos_t (_session->audible_sample())); +} + +void +Editor::add_meter_from_playhead_cursor () +{ + mouse_add_new_meter_event (timepos_t (_session->audible_sample())); +} /** Add a single range marker around all selected regions */ void diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 9935dd6028..27c73cd014 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -197,12 +197,20 @@ Editor::initialize_rulers () void Editor::initialize_ruler_actions () { - _ruler_btn_loc_prev.set_related_action (ActionManager::get_action (X_("Common"), X_("jump-backward-to-mark"))); - _ruler_btn_loc_next.set_related_action (ActionManager::get_action (X_("Common"), X_("jump-forward-to-mark"))); + _ruler_btn_loc_prev.set_related_action (ActionManager::get_action (X_("Common"), X_("jump-backward-to-location-mark"))); + _ruler_btn_loc_next.set_related_action (ActionManager::get_action (X_("Common"), X_("jump-forward-to-location-mark"))); _ruler_btn_loc_add.set_related_action (ActionManager::get_action (X_("Common"), X_("add-location-from-playhead"))); + _ruler_btn_section_prev.set_related_action (ActionManager::get_action (X_("Common"), X_("jump-backward-to-section-mark"))); + _ruler_btn_section_next.set_related_action (ActionManager::get_action (X_("Common"), X_("jump-forward-to-section-mark"))); _ruler_btn_section_add.set_related_action (ActionManager::get_action (X_("Common"), X_("add-section-from-playhead"))); + _ruler_btn_range_add.set_related_action (ActionManager::get_action (X_("Editor"), X_("add-range-marker-from-selection"))); + _ruler_btn_range_prev.set_related_action (ActionManager::get_action (X_("Common"), X_("jump-backward-to-range"))); + _ruler_btn_range_next.set_related_action (ActionManager::get_action (X_("Common"), X_("jump-forward-to-range"))); + + _ruler_btn_tempo_add.set_related_action (ActionManager::get_action (X_("Editor"), X_("add-tempo-from-playhead"))); + _ruler_btn_meter_add.set_related_action (ActionManager::get_action (X_("Editor"), X_("add-meter-from-playhead"))); } bool