From d25d583dadf13c41eaeb25a03c5563fb1c38e6c9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 25 Feb 2016 15:08:06 -0500 Subject: [PATCH] add previous-tab and next-tab actions and bind to PRIMARY-page-up/down by default --- gtk2_ardour/ardour.keys.in | 2 + gtk2_ardour/ardour_ui.h | 3 ++ gtk2_ardour/ardour_ui_dialogs.cc | 82 ++++++++++++++++++++++++++++++++ gtk2_ardour/ardour_ui_ed.cc | 3 ++ 4 files changed, 90 insertions(+) diff --git a/gtk2_ardour/ardour.keys.in b/gtk2_ardour/ardour.keys.in index 54f539925e..6d30317b68 100644 --- a/gtk2_ardour/ardour.keys.in +++ b/gtk2_ardour/ardour.keys.in @@ -260,6 +260,8 @@ This mode provides many different operations on both regions and control points, @trans|Transport/Forward|<@TERTIARY@>Right|fast forward @markers|Editor/selected-marker-to-next-region-boundary|<@PRIMARY@><@TERTIARY@>Right|move to next region edge +@wvis|Common/next-tab|<@PRIMARY@>Page_Down|next tab +@wvis|Common/previous-tab|<@PRIMARY@>Page_Up|previous tab @vis|Editor/scroll-tracks-down|Page_Down|scroll down (page) @vis|Editor/scroll-tracks-up|Page_Up|scroll up (page) @trans|Transport/GotoStart|Home|to start marker diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 88006a0820..08a2bf9a72 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -853,6 +853,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void load_bindings (); bool tabbable_visibility_button_press (GdkEventButton* ev, std::string const& tabbable_name); + + void step_up_through_tabs (); + void step_down_through_tabs (); }; #endif /* __ardour_gui_h__ */ diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 2e2361a379..64037e843e 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -373,6 +373,88 @@ ARDOUR_UI::toggle_editor_and_mixer () } } +void +ARDOUR_UI::step_up_through_tabs () +{ + std::vector candidates; + + /* this list must match the order of visibility buttons */ + + if (!editor->window_visible()) { + candidates.push_back (editor); + } + + if (!mixer->window_visible()) { + candidates.push_back (mixer); + } + + if (!rc_option_editor->window_visible()) { + candidates.push_back (rc_option_editor); + } + + if (candidates.size() < 2) { + /* nothing to be done with zero or one visible in tabs */ + return; + } + + std::vector::iterator prev = candidates.end(); + std::vector::iterator i; + Gtk::Widget* w = _tabs.get_nth_page (_tabs.get_current_page ()); + + for (i = candidates.begin(); i != candidates.end(); ++i) { + if (w == &(*i)->contents()) { + if (prev != candidates.end()) { + _tabs.set_current_page (_tabs.page_num ((*prev)->contents())); + } else { + _tabs.set_current_page (_tabs.page_num (candidates.back()->contents())); + } + return; + } + prev = i; + } +} + +void +ARDOUR_UI::step_down_through_tabs () +{ + std::vector candidates; + + /* this list must match the order of visibility buttons */ + + if (!editor->window_visible()) { + candidates.push_back (editor); + } + + if (!mixer->window_visible()) { + candidates.push_back (mixer); + } + + if (!rc_option_editor->window_visible()) { + candidates.push_back (rc_option_editor); + } + + if (candidates.size() < 2) { + /* nothing to be done with zero or one visible in tabs */ + return; + } + + std::vector::reverse_iterator next = candidates.rend(); + std::vector::reverse_iterator i; + Gtk::Widget* w = _tabs.get_nth_page (_tabs.get_current_page ()); + + for (i = candidates.rbegin(); i != candidates.rend(); ++i) { + if (w == &(*i)->contents()) { + if (next != candidates.rend()) { + _tabs.set_current_page (_tabs.page_num ((*next)->contents())); + } else { + _tabs.set_current_page (_tabs.page_num (candidates.front()->contents())); + } + break; + } + next = i; + } +} + void ARDOUR_UI::key_change_tabbable_visibility (Tabbable* t) { diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 72da94ef47..1d9689e608 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -281,6 +281,9 @@ ARDOUR_UI::install_actions () global_actions.register_action (common_actions, X_("key-change-mixer-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::key_change_tabbable_visibility), mixer)); global_actions.register_action (common_actions, X_("key-change-preferences-visibility"), _("Change"), sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::key_change_tabbable_visibility), rc_option_editor)); + global_actions.register_action (common_actions, X_("previous-tab"), _("Previous Tab"), sigc::mem_fun (*this, &ARDOUR_UI::step_up_through_tabs)); + global_actions.register_action (common_actions, X_("next-tab"), _("Next Tab"), sigc::mem_fun (*this, &ARDOUR_UI::step_down_through_tabs)); + global_actions.register_action (common_actions, X_("toggle-editor-and-mixer"), _("Toggle Editor & Mixer"), sigc::mem_fun (*this, &ARDOUR_UI::toggle_editor_and_mixer)); /* windows visibility actions */ -- 2.30.2