Use Tab button to pick mixer sidebar plugin display mode

This commit is contained in:
Robin Gareus 2025-01-29 16:17:12 +01:00
parent 8e444ba45d
commit 77d78fdef2
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
2 changed files with 54 additions and 37 deletions

View file

@ -121,14 +121,6 @@ using namespace std;
using PBD::atoi;
using PBD::Unwinder;
static const gchar *_plugin_list_mode_strings[] = {
N_("Favorite Plugins"),
N_("Recent Plugins"),
N_("Top-10 Plugins"),
N_("Search All Plugins"),
0
};
Mixer_UI* Mixer_UI::_instance = 0;
Mixer_UI*
@ -159,13 +151,12 @@ Mixer_UI::Mixer_UI ()
, ignore_plugin_reorder (false)
, _in_group_rebuild_or_clear (false)
, _route_deletion_in_progress (false)
, plugin_list_mode (PLM_Favorite)
, _maximised (false)
, _strip_selection_change_without_scroll (false)
, _selection (*this, *this)
{
plugin_list_mode_strings = I18N (_plugin_list_mode_strings);
load_bindings ();
register_actions ();
Glib::RefPtr<ToggleAction> fb_act = ActionManager::get_toggle_action ("Mixer", "ToggleFoldbackStrip");
@ -288,13 +279,6 @@ Mixer_UI::Mixer_UI ()
favorite_plugins_model->signal_row_has_child_toggled().connect (sigc::mem_fun (*this, &Mixer_UI::sync_treeview_favorite_ui_state));
favorite_plugins_model->signal_row_deleted().connect (sigc::mem_fun (*this, &Mixer_UI::favorite_plugins_deleted));
favorite_plugins_mode_combo.AddMenuElem (Menu_Helpers::MenuElem (_("Favorite Plugins"), sigc::bind(sigc::mem_fun(*this, &Mixer_UI::set_plugin_list_mode), PLM_Favorite)));
favorite_plugins_mode_combo.AddMenuElem (Menu_Helpers::MenuElem (_("Recent Plugins"), sigc::bind(sigc::mem_fun(*this, &Mixer_UI::set_plugin_list_mode), PLM_Recent)));
favorite_plugins_mode_combo.AddMenuElem (Menu_Helpers::MenuElem (_("Top-10 Plugins"), sigc::bind(sigc::mem_fun(*this, &Mixer_UI::set_plugin_list_mode), PLM_TopHits)));
favorite_plugins_mode_combo.AddMenuElem (Menu_Helpers::MenuElem (_("Search All Plugins"), sigc::bind(sigc::mem_fun(*this, &Mixer_UI::set_plugin_list_mode), PLM_SearchAll)));
favorite_plugins_mode_combo.set_size_request(-1, 24);
set_plugin_list_mode(PLM_Favorite);
plugin_search_entry.signal_changed().connect (sigc::mem_fun (*this, &Mixer_UI::plugin_search_entry_changed));
plugin_search_clear_button.signal_clicked.connect (sigc::mem_fun (*this, &Mixer_UI::plugin_search_clear_button_clicked));
@ -308,7 +292,6 @@ Mixer_UI::Mixer_UI ()
favorite_plugins_frame.set_shadow_type (Gtk::SHADOW_IN);
favorite_plugins_frame.add (favorite_plugins_vbox);
favorite_plugins_vbox.pack_start (favorite_plugins_mode_combo, false, false);
favorite_plugins_vbox.pack_start (favorite_plugins_scroller, true, true);
favorite_plugins_vbox.pack_start (favorite_plugins_search_hbox, false, false);
@ -351,12 +334,8 @@ Mixer_UI::Mixer_UI ()
}
_mixer_scene_vbox.pack_start(_mixer_scene_table, false, false);
_sidebar_notebook.signal_switch_page().connect ([this](GtkNotebookPage*, guint page) {
std::string label (_sidebar_notebook.get_tab_label_text (*_sidebar_notebook.get_nth_page (page)));
_sidebar_pager1.set_active (label);
_sidebar_pager2.set_active (label);
//instant_save ();
});
_sidebar_notebook.signal_switch_page().connect ([this](GtkNotebookPage*, guint page) { update_sidebar_pagers (page); });
_sidebar_pager1.set_name ("tab button");
_sidebar_pager2.set_name ("tab button");
@ -377,11 +356,22 @@ Mixer_UI::Mixer_UI ()
_sidebar_notebook.set_scrollable (true);
_sidebar_notebook.popup_disable ();
add_sidebar_page (_("Plugins"), _("Favorite/Top Plugins"), favorite_plugins_frame);
_sidebar_notebook.append_page (favorite_plugins_frame, _("Plugins"));
_sidebar_pager1.add_item (_("Favorite"), _("Favorite Plugins"), [this]() {_sidebar_notebook.set_current_page (0); set_plugin_list_mode (PLM_Favorite); update_sidebar_pagers (0); });
_sidebar_pager1.add_item (_("Recent"), _("Recently Used Plugins"), [this]() {_sidebar_notebook.set_current_page (0); set_plugin_list_mode (PLM_Recent); update_sidebar_pagers (0); });
_sidebar_pager1.add_item (_("Top-10"), _("Top-10 Plugins"), [this]() {_sidebar_notebook.set_current_page (0); set_plugin_list_mode (PLM_TopHits); update_sidebar_pagers (0); });
_sidebar_pager1.add_item (_("Search"), _("Serach All Plugins"), [this]() {_sidebar_notebook.set_current_page (0); set_plugin_list_mode (PLM_SearchAll); update_sidebar_pagers (0); });
_sidebar_pager2.add_item (_("Favorite"), _("Favorite Plugins"), [this]() {_sidebar_notebook.set_current_page (0); set_plugin_list_mode (PLM_Favorite); update_sidebar_pagers (0); });
_sidebar_pager2.add_item (_("Recent"), _("Recently Used Plugins"), [this]() {_sidebar_notebook.set_current_page (0); set_plugin_list_mode (PLM_Recent); update_sidebar_pagers (0); });
_sidebar_pager2.add_item (_("Top-10"), _("Top-10 Plugins"), [this]() {_sidebar_notebook.set_current_page (0); set_plugin_list_mode (PLM_TopHits); update_sidebar_pagers (0); });
_sidebar_pager2.add_item (_("Search"), _("Serach All Plugins"), [this]() {_sidebar_notebook.set_current_page (0); set_plugin_list_mode (PLM_SearchAll); update_sidebar_pagers (0); });
add_sidebar_page (_("Tracks"), _("Track & Bus Visibility"), track_display_frame);
add_sidebar_page (_("Groups"), _("Track & Bus Groups"), group_display_frame);
_sidebar_pager2.set_index (1);
_sidebar_pager2.set_index (4);
vca_label_bar.set_size_request (-1, 16 + 1); /* must match height in GroupTabs::set_size_request() + 1 border px*/
vca_vpacker.pack_start (vca_label_bar, false, false);
@ -2660,15 +2650,22 @@ Mixer_UI::set_state (const XMLNode& node, int version)
_sidebar_pager2.set_index (index);
}
if (node.get_property (X_("mixer-sidebar-btn2"), index)) {
_sidebar_pager2.set_index (index);
}
if (node.get_property (X_("mixer-plugin-list"), index) && index <= PLM_SearchAll) {
plugin_list_mode = (PluginListMode)index;
}
set_plugin_list_mode(plugin_list_mode);
int32_t sidebar_page;
if (node.get_property (X_("mixer-sidebar-page"), sidebar_page)) {
_sidebar_notebook.set_current_page (sidebar_page);
} else {
sidebar_page = _sidebar_notebook.get_current_page ();
}
std::string label (_sidebar_notebook.get_tab_label_text (*_sidebar_notebook.get_nth_page (sidebar_page)));
_sidebar_pager1.set_active (label);
_sidebar_pager2.set_active (label);
update_sidebar_pagers (sidebar_page);
float fract;
if (!node.get_property ("mixer-inner-pane-pos", fract) || fract > 1.0) {
@ -2718,6 +2715,7 @@ Mixer_UI::get_state () const
node->set_property (X_("mixer-sidebar-page"), _sidebar_notebook.get_current_page ());
node->set_property (X_("mixer-sidebar-btn1"), _sidebar_pager1.index ());
node->set_property (X_("mixer-sidebar-btn2"), _sidebar_pager2.index ());
node->set_property (X_("mixer-plugin-list"), (int)plugin_list_mode);
node->set_property (X_("mixer-inner-pane-pos"), inner_pane.get_divider());
node->set_property ("narrow-strips", (_strip_width == Narrow));
@ -3186,15 +3184,36 @@ Mixer_UI::save_favorite_ui_state (const TreeModel::iterator& iter, const TreeMod
favorite_ui_state[(*ppp->_pip).unique_id] = favorite_plugins_display.row_expanded (favorite_plugins_model->get_path(iter));
}
void
Mixer_UI::update_sidebar_pagers (guint page)
{
std::string label;
if (page == 0) {
switch (plugin_list_mode) {
case PLM_Favorite:
label = "Favorite Plugins";
break;
case PLM_Recent:
label = "Recent Plugins";
break;
case PLM_TopHits:
label = "Top-10 Plugins";
break;
case PLM_SearchAll:
label = "Search All Plugins";
break;
}
} else {
label = _sidebar_notebook.get_tab_label_text (*_sidebar_notebook.get_nth_page (page));
}
_sidebar_pager1.set_active (label);
_sidebar_pager2.set_active (label);
}
void
Mixer_UI::set_plugin_list_mode (PluginListMode plm)
{
plugin_list_mode = plm;
string str = plugin_list_mode_strings[(int)plm];
if (str != favorite_plugins_mode_combo.get_text ()) {
favorite_plugins_mode_combo.set_text (str);
}
if (plugin_list_mode == PLM_Favorite || plugin_list_mode == PLM_SearchAll) {
PBD::Unwinder<bool> uw (ignore_plugin_refill, true);
@ -3645,7 +3664,6 @@ Mixer_UI::plugin_drag_motion (const Glib::RefPtr<Gdk::DragContext>& ctx, int x,
}
} else if (target == "x-ardour/plugin.preset") {
ctx->drag_status (Gdk::ACTION_COPY, time);
//favorite_plugins_mode_combo.set_text (_("Favorite Plugins"));
return true;
}

View file

@ -199,7 +199,6 @@ private:
Gtk::Frame favorite_plugins_frame;
Gtk::VBox favorite_plugins_vbox;
Gtk::HBox favorite_plugins_search_hbox;
ArdourWidgets::ArdourDropdown favorite_plugins_mode_combo;
Gtk::Entry plugin_search_entry;
ArdourWidgets::ArdourButton plugin_search_clear_button;
ArdourWidgets::HPane inner_pane;
@ -456,7 +455,7 @@ private:
};
enum PluginListMode plugin_list_mode;
void set_plugin_list_mode (PluginListMode plm);
std::vector<std::string> plugin_list_mode_strings;
void update_sidebar_pagers (guint);
void refiller (ARDOUR::PluginInfoList& result, const ARDOUR::PluginInfoList& plugs);
void refill_favorite_plugins ();