summaryrefslogtreecommitdiff
path: root/gtk2_ardour/mixer_ui.cc
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2018-12-03 18:55:52 -0600
committerBen Loftis <ben@harrisonconsoles.com>2018-12-07 12:57:26 -0600
commit65bda27d4218d9d4ebf809d91e716c892e1f1d8b (patch)
tree7254c9cb111d64912c78ce62023986d2fe9668a7 /gtk2_ardour/mixer_ui.cc
parent19cb8cf13803b52f2e6956ed24d4e328e61bb1b2 (diff)
Tweaks to Mixer and Monitor keybindings:
Add Mixer-specific view keybindings for list, vca, mon. (thanks to: the_CLA) Move monitor keybindings (mute, dim, mono) to be globally-accessible. Implement new mixer-specific actions to show/hide monitor,vcas,mixbuses (the_CLA) Move monitor funcs (mute,dim,mono) to globally-accessible actions. Make a new Monitor group insted of using Transport group. Allow use-monitor-section to be controlled by both menu and session-options dialog.
Diffstat (limited to 'gtk2_ardour/mixer_ui.cc')
-rw-r--r--gtk2_ardour/mixer_ui.cc200
1 files changed, 174 insertions, 26 deletions
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 07193c3286..39ddb6b08e 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -112,7 +112,6 @@ Mixer_UI::Mixer_UI ()
, _in_group_rebuild_or_clear (false)
, _route_deletion_in_progress (false)
, _maximised (false)
- , _show_mixer_list (true)
, _strip_selection_change_without_scroll (false)
, _selection (*this, *this)
{
@@ -572,6 +571,8 @@ Mixer_UI::add_stripables (StripableList& slist)
if (mnode) {
_monitor_section->tearoff().set_state (*mnode);
}
+
+ set_monitor_action_sensitivity(true);
}
out_packer.pack_end (_monitor_section->tearoff(), false, false);
@@ -1526,24 +1527,28 @@ Mixer_UI::redisplay_track_list ()
/* update visibility of VCA assign buttons */
if (n_masters == 0) {
+ //show/hide the channelstrip VCA assign buttons on channelstrips:
UIConfiguration::instance().set_mixer_strip_visibility (VisibilityGroup::remove_element (UIConfiguration::instance().get_mixer_strip_visibility(), X_("VCA")));
- vca_vpacker.hide ();
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleVCAPane");
+
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleVCAPane");
if (act) {
act->set_sensitive (false);
}
+ //remove the VCA packer, but don't change our prior setting for show/hide:
+ vca_vpacker.hide ();
} else {
+ //show/hide the channelstrip VCA assign buttons on channelstrips:
UIConfiguration::instance().set_mixer_strip_visibility (VisibilityGroup::add_element (UIConfiguration::instance().get_mixer_strip_visibility(), X_("VCA")));
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleVCAPane");
- if (act) {
- act->set_sensitive (true);
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- showhide_vcas (tact->get_active());
- } else {
- vca_vpacker.show ();
- }
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleVCAPane");
+ assert (act);
+ act->set_sensitive (true);
+
+ //if we were showing VCAs before, show them now:
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact);
+ showhide_vcas ( tact->get_active () );
}
_group_tabs->set_dirty ();
@@ -1934,19 +1939,38 @@ Mixer_UI::route_group_property_changed (RouteGroup* group, const PropertyChange&
}
void
-Mixer_UI::show_mixer_list (bool yn)
+Mixer_UI::toggle_mixer_list ()
+{
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleMixerList");
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ showhide_mixer_list (tact->get_active());
+ }
+}
+
+void
+Mixer_UI::showhide_mixer_list (bool yn)
{
if (yn) {
list_vpacker.show ();
} else {
list_vpacker.hide ();
}
+}
- _show_mixer_list = yn;
+void
+Mixer_UI::toggle_monitor_section ()
+{
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleMonitorSection");
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ showhide_monitor_section (tact->get_active());
+ }
}
+
void
-Mixer_UI::show_monitor_section (bool yn)
+Mixer_UI::showhide_monitor_section (bool yn)
{
if (!monitor_section()) {
return;
@@ -1963,6 +1987,49 @@ Mixer_UI::show_monitor_section (bool yn)
}
void
+Mixer_UI::toggle_vcas ()
+{
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleVCAPane");
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ showhide_vcas (tact->get_active());
+ }
+}
+
+void
+Mixer_UI::showhide_vcas (bool yn)
+{
+ if (yn) {
+ vca_vpacker.show();
+ } else {
+ vca_vpacker.hide();
+ }
+}
+
+#ifdef MIXBUS
+void
+Mixer_UI::toggle_mixbuses ()
+{
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleMixbusPane");
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ showhide_mixbuses (tact->get_active());
+ }
+}
+
+void
+Mixer_UI::showhide_mixbuses (bool on)
+{
+ if (on) {
+ mb_vpacker.show();
+ } else {
+ mb_vpacker.hide();
+ }
+}
+#endif
+
+
+void
Mixer_UI::route_group_name_edit (const std::string& path, const std::string& new_text)
{
RouteGroup* group;
@@ -2169,9 +2236,10 @@ Mixer_UI::set_state (const XMLNode& node, int version)
}
if (node.get_property ("show-mixer-list", yn)) {
- Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleMixerList"));
+ Glib::RefPtr<Action> act = myactions.find_action (X_("Mixer"), X_("ToggleMixerList"));
assert (act);
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact);
/* do it twice to force the change */
tact->set_active (!yn);
@@ -2179,13 +2247,41 @@ Mixer_UI::set_state (const XMLNode& node, int version)
}
if (node.get_property ("monitor-section-visible", yn)) {
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleMonitorSection");
+ Glib::RefPtr<Action> act = myactions.find_action (X_("Mixer"), X_("ToggleMonitorSection"));
+ assert (act);
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact);
+
+ /* do it twice to force the change */
+ tact->set_active (!yn);
+ tact->set_active (yn);
+ }
+
+ if (node.get_property ("show-vca-pane", yn)) {
+ Glib::RefPtr<Action> act = myactions.find_action (X_("Mixer"), X_("ToggleVCAPane"));
+ assert (act);
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact);
+
+ /* do it twice to force the change */
+ tact->set_active (!yn);
+ tact->set_active (yn);
+ }
+
+#ifdef MIXBUS
+ if (node.get_property ("show-mixbus-pane", yn)) {
+ Glib::RefPtr<Action> act = myactions.find_action (X_("Mixer"), X_("ToggleMixbusPane"));
+ assert (act);
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact);
+
/* do it twice to force the change */
+ tact->set_active (!yn);
tact->set_active (yn);
- show_monitor_section (yn);
}
+#endif
+
//check for the user's plugin_order file
XMLNode plugin_order_new(X_("PO"));
if (PluginManager::instance().load_plugin_order_file(plugin_order_new)) {
@@ -2272,13 +2368,25 @@ Mixer_UI::get_state ()
node->set_property ("narrow-strips", (_strip_width == Narrow));
node->set_property ("show-mixer", _visible);
- node->set_property ("show-mixer-list", _show_mixer_list);
node->set_property ("maximised", _maximised);
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleMonitorSection");
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- assert (tact);
- node->set_property ("monitor-section-visible", tact->get_active ());
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleMixerList");
+ assert (act); Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact); node->set_property ("show-mixer-list", tact->get_active ());
+
+ act = myactions.find_action ("Mixer", "ToggleMonitorSection");
+ assert (act); tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact); node->set_property ("monitor-section-visible", tact->get_active ());
+
+ act = myactions.find_action ("Mixer", "ToggleVCAPane");
+ assert (act); tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact); node->set_property ("show-vca-pane", tact->get_active ());
+
+#ifdef MIXBUS
+ act = myactions.find_action ("Mixer", "ToggleMixbusPane");
+ assert (act); tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ assert (tact); node->set_property ("show-mixbus-pane", tact->get_active ());
+#endif
return *node;
}
@@ -2526,9 +2634,37 @@ Mixer_UI::set_axis_targets_for_operation ()
}
void
+Mixer_UI::set_monitor_action_sensitivity (bool yn)
+{
+ Glib::RefPtr<Action> act;
+ Glib::RefPtr<ToggleAction> tact;
+
+ act = ActionManager::get_action (X_("Monitor"), "UseMonitorSection");
+ assert (act); tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+ assert (tact); tact->set_active ( yn );
+
+ act = ActionManager::get_action (X_("Monitor"), "monitor-cut-all");
+ assert (act); tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+ assert (tact); tact->set_sensitive ( yn );
+
+ act = ActionManager::get_action (X_("Monitor"), "monitor-dim-all");
+ assert (act); tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+ assert (tact); tact->set_sensitive ( yn );
+
+ act = ActionManager::get_action (X_("Monitor"), "monitor-mono");
+ assert (act); tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+ assert (tact); tact->set_sensitive ( yn );
+}
+
+void
Mixer_UI::monitor_section_going_away ()
{
+ /* Set sensitivity based on existence of the monitor bus */
+
+ set_monitor_action_sensitivity(false);
+
if (_monitor_section) {
+
XMLNode* ui_node = Config->extra_xml(X_("UI"));
/* immediate state save.
*
@@ -2606,16 +2742,18 @@ Mixer_UI::restore_mixer_space ()
void
Mixer_UI::monitor_section_attached ()
{
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleMonitorSection");
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleMonitorSection");
+ assert (act); act->set_sensitive (true);
+
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- act->set_sensitive (true);
- show_monitor_section (tact->get_active ());
+ assert (tact);
+ showhide_monitor_section ( tact->get_active () );
}
void
Mixer_UI::monitor_section_detached ()
{
- Glib::RefPtr<Action> act = ActionManager::get_action ("Common", "ToggleMonitorSection");
+ Glib::RefPtr<Action> act = myactions.find_action ("Mixer", "ToggleMonitorSection");
act->set_sensitive (false);
}
@@ -3102,6 +3240,16 @@ Mixer_UI::register_actions ()
myactions.register_action (group, "toggle-midi-input-active", _("Toggle MIDI Input Active for Mixer-Selected Tracks/Busses"),
sigc::bind (sigc::mem_fun (*this, &Mixer_UI::toggle_midi_input_active), false));
+
+ myactions.register_toggle_action (group, X_("ToggleMixerList"), _("Mixer: Show Mixer List"), sigc::mem_fun (*this, &Mixer_UI::toggle_mixer_list));
+
+ myactions.register_toggle_action (group, X_("ToggleVCAPane"), _("Mixer: Show VCAs"), sigc::mem_fun (*this, &Mixer_UI::toggle_vcas));
+
+#ifdef MIXBUS
+ myactions.register_toggle_action (group, X_("ToggleMixbusPane"), _("Mixer: Show Mixbuses"), sigc::mem_fun (*this, &Mixer_UI::toggle_mixbus_pane));
+#endif
+
+ myactions.register_toggle_action (group, X_("ToggleMonitorSection"), _("Mixer: Show Monitor Section"), sigc::mem_fun (*this, &Mixer_UI::toggle_monitor_section));
}
void