diff --git a/gtk2_ardour/ardour.keys.in b/gtk2_ardour/ardour.keys.in index 57d288ec44..019183507e 100644 --- a/gtk2_ardour/ardour.keys.in +++ b/gtk2_ardour/ardour.keys.in @@ -57,6 +57,8 @@ just align the first region and moves other selected regions to maintain relativ %gmode Global Global Transport Modes +%gmon Global Global Monitor Operations + %movp Global Global Playhead Operations A left click in the rulers positions the playhead unless Ardour is recording. You can use {\tt KP$\_$n} to move the playhead to the n-th marker. @@ -150,6 +152,7 @@ This mode provides many different operations on both regions and control points, @gmark|Common/jump-backward-to-mark|q|to previous mark @sess|Common/Quit|<@PRIMARY@>q|quit @gmark|Common/jump-forward-to-mark|w|to next mark +@mmode|MouseMode/set-mouse-mode-content|e|content mode @select|Editor/select-all-before-edit-cursor|<@PRIMARY@>e|select all before EP @rop|Region/export-region|<@PRIMARY@><@SECONDARY@>e|export selected region(s) @sess|Main/ExportAudio|<@SECONDARY@>e|export session @@ -167,8 +170,6 @@ This mode provides many different operations on both regions and control points, @sess|Common/addExistingAudioFiles|<@PRIMARY@>i|import audio files @gselect|Common/invert-selection|<@TERTIARY@>i|invert selection @edtrk|Editor/toggle-midi-input-active|<@SECONDARY@>i|toggle sel. track MIDI input -@mmode|MouseMode/set-mouse-mode-object|g|object mode -@mmode|MouseMode/set-mouse-mode-content|e|content mode @sess|Main/Open|<@PRIMARY@>o|open an existing session @sess|Main/Recent|<@PRIMARY@><@TERTIARY@>o|open a recent session @wvis|Window/toggle-session-options-editor|<@SECONDARY@>o|toggle preferences dialog @@ -198,6 +199,7 @@ This mode provides many different operations on both regions and control points, @rop|Region/show-rhythm-ferret|<@SECONDARY@>f|show rhythm ferret window @wvis|Common/ToggleMaximalEditor|<@PRIMARY@><@SECONDARY@>f|maximise editor space @wvis|Common/ToggleMaximalMixer|<@PRIMARY@><@TERTIARY@>f|maximise mixer space +@mmode|MouseMode/set-mouse-mode-object|g|object mode @edit|Region/play-selected-regions|h|play selected region(s) @eep|Region/trim-front|j|trim front @eep|Region/trim-back|k|trim back @@ -229,6 +231,10 @@ This mode provides many different operations on both regions and control points, @wvis|Window/toggle-midi-connection-manager|<@SECONDARY@><@TERTIARY@>m|toggle global midi patchbay @wvis|Window/show-mixer|<@SECONDARY@>m|show mixer window +@gmon|Transport/monitor-cut-all|<@PRIMARY@>m|monitor cut all +@gmon|Transport/monitor-mono|<@PRIMARY@><@SECONDARY@>m|monitor mono +@gmon|Transport/monitor-dim-all|<@PRIMARY@><@TERTIARY@>m|monitor dim + ;; arrow keys, navigation etc. @vis|Editor/step-tracks-up|Up|scroll up (step) diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 9df853d142..ddc6ce1147 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -34,6 +34,14 @@ + + + + + + + + @@ -76,11 +84,6 @@ #endif - - - - - @@ -88,6 +91,10 @@ + + + + diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 6dd659420c..b4253318c8 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -92,6 +92,7 @@ #include "ardour/filename_extensions.h" #include "ardour/filesystem_paths.h" #include "ardour/ltc_file_reader.h" +#include "ardour/monitor_control.h" #include "ardour/midi_track.h" #include "ardour/port.h" #include "ardour/plugin_manager.h" @@ -5985,3 +5986,45 @@ ARDOUR_UI::reset_focus (Gtk::Widget* w) gtk_window_set_focus (GTK_WINDOW(top->gobj()), 0); } + +void +ARDOUR_UI::monitor_dim_all () +{ + boost::shared_ptr mon = _session->monitor_out (); + if (!mon) { + return; + } + boost::shared_ptr _monitor = mon->monitor_control (); + + Glib::RefPtr act = global_actions.find_action (X_("Transport"), "monitor-dim-all"); + assert (act); Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + assert (tact); _monitor->set_dim_all (tact->get_active()); +} + +void +ARDOUR_UI::monitor_cut_all () +{ + boost::shared_ptr mon = _session->monitor_out (); + if (!mon) { + return; + } + boost::shared_ptr _monitor = mon->monitor_control (); + + Glib::RefPtr act = global_actions.find_action (X_("Transport"), "monitor-cut-all"); + assert (act); Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + assert (tact); _monitor->set_cut_all (tact->get_active()); +} + +void +ARDOUR_UI::monitor_mono () +{ + boost::shared_ptr mon = _session->monitor_out (); + if (!mon) { + return; + } + boost::shared_ptr _monitor = mon->monitor_control (); + + Glib::RefPtr act = global_actions.find_action (X_("Transport"), "monitor-mono"); + assert (act); Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + assert (tact);_monitor->set_mono (tact->get_active()); +} diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 5063553677..dd31e2bbd4 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -365,6 +365,11 @@ public: protected: friend class PublicEditor; + void toggle_use_monitor_section (); + void monitor_dim_all (); + void monitor_cut_all (); + void monitor_mono (); + void toggle_auto_play (); void toggle_auto_input (); void toggle_punch (); diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 431f094ca7..55cb0850ca 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -817,3 +817,17 @@ ARDOUR_UI::update_title () } } + +void +ARDOUR_UI::toggle_use_monitor_section () +{ + bool yn = !(_session->monitor_out() != 0); + + if (yn) { + _session->add_monitor_section (); + } else { + _session->remove_monitor_section (); + } + + Config->set_use_monitor_bus (yn); +} diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 786f405ef2..a2a5e7b6e6 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -624,6 +624,20 @@ ARDOUR_UI::install_actions () ActionManager::session_sensitive_actions.push_back (act); ActionManager::transport_sensitive_actions.push_back (act); + /* Monitor actions (accessible globally) */ + /* ...will get sensitized if a mon-section is added */ + + act = global_actions.register_action (main_actions, X_("MonitorMenu"), _("Monitor Section")); + ActionManager::session_sensitive_actions.push_back (act); + + act = global_actions.register_toggle_action (transport_actions, X_("UseMonitorSection"), _("Use Monitor Section"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_use_monitor_section)); + ActionManager::session_sensitive_actions.push_back (act); + act = global_actions.register_toggle_action (transport_actions, "monitor-mono", _("Monitor Section: Mono"), sigc::mem_fun (*this, &ARDOUR_UI::monitor_mono)); + act->set_sensitive(false); + act = global_actions.register_toggle_action (transport_actions, "monitor-cut-all", _("Monitor Section: Mute"), sigc::mem_fun (*this, &ARDOUR_UI::monitor_cut_all)); + act->set_sensitive(false); + act = global_actions.register_toggle_action (transport_actions, "monitor-dim-all", _("Monitor Section: Dim"), sigc::mem_fun (*this, &ARDOUR_UI::monitor_dim_all)); + act->set_sensitive(false); act = global_actions.register_toggle_action (transport_actions, X_("ToggleVideoSync"), _("Sync Startup to Video"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_video_sync)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 52021dba42..706edf29e8 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -2634,7 +2634,25 @@ Mixer_UI::set_axis_targets_for_operation () void Mixer_UI::monitor_section_going_away () { + /* Set sensitivity based on existence of the monitor bus */ + + Glib::RefPtr act; + Glib::RefPtr tact; + + act = ActionManager::get_action (X_("Transport"), "monitor-cut-all"); + assert (act); tact = Glib::RefPtr::cast_dynamic (act); + assert (tact); tact->set_sensitive ( false ); + + act = ActionManager::get_action (X_("Transport"), "monitor-dim-all"); + assert (act); tact = Glib::RefPtr::cast_dynamic (act); + assert (tact); tact->set_sensitive ( false ); + + act = ActionManager::get_action (X_("Transport"), "monitor-mono"); + assert (act); tact = Glib::RefPtr::cast_dynamic (act); + assert (tact); tact->set_sensitive ( false ); + if (_monitor_section) { + XMLNode* ui_node = Config->extra_xml(X_("UI")); /* immediate state save. * @@ -2712,8 +2730,21 @@ Mixer_UI::restore_mixer_space () void Mixer_UI::monitor_section_attached () { - Glib::RefPtr act = myactions.find_action ("Mixer", "ToggleMonitorSection"); - act->set_sensitive (true); + /* Set sensitivity based on existence of the monitor bus */ + + Glib::RefPtr act; + + act = ActionManager::get_action (X_("Transport"), "monitor-cut-all"); + assert (act); act->set_sensitive ( true ); + + act = ActionManager::get_action (X_("Transport"), "monitor-dim-all"); + assert (act); act->set_sensitive ( true ); + + act = ActionManager::get_action (X_("Transport"), "monitor-mono"); + assert (act); act->set_sensitive ( true ); + + act = myactions.find_action ("Mixer", "ToggleMonitorSection"); + assert (act); act->set_sensitive (true); Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); assert (tact); diff --git a/gtk2_ardour/monitor.bindings b/gtk2_ardour/monitor.bindings index d7cafffb46..d0133937d6 100644 --- a/gtk2_ardour/monitor.bindings +++ b/gtk2_ardour/monitor.bindings @@ -1,8 +1,5 @@ - - - diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc index e52b48c7c7..589bee555d 100644 --- a/gtk2_ardour/monitor_section.cc +++ b/gtk2_ardour/monitor_section.cc @@ -260,7 +260,7 @@ MonitorSection::MonitorSection (Session* s) cut_all_button.set_size_request (-1, PX_SCALE(30)); cut_all_button.show (); - act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all")); + act = ActionManager::get_action (X_("Transport"), X_("monitor-cut-all")); if (act) { cut_all_button.set_related_action (act); } @@ -269,7 +269,7 @@ MonitorSection::MonitorSection (Session* s) dim_all_button.set_text (_("Dim")); dim_all_button.set_name ("monitor section dim"); dim_all_button.set_size_request (-1, PX_SCALE(25)); - act = ActionManager::get_action (X_("Monitor"), X_("monitor-dim-all")); + act = ActionManager::get_action (X_("Transport"), X_("monitor-dim-all")); if (act) { dim_all_button.set_related_action (act); } @@ -278,7 +278,7 @@ MonitorSection::MonitorSection (Session* s) mono_button.set_text (_("Mono")); mono_button.set_name ("monitor section mono"); mono_button.set_size_request (-1, PX_SCALE(25)); - act = ActionManager::get_action (X_("Monitor"), X_("monitor-mono")); + act = ActionManager::get_action (X_("Transport"), X_("monitor-mono")); if (act) { mono_button.set_related_action (act); } @@ -812,7 +812,7 @@ MonitorSection::dim_all () return; } - Glib::RefPtr act = ActionManager::get_action (X_("Monitor"), "monitor-dim-all"); + Glib::RefPtr act = ActionManager::get_action (X_("Transport"), "monitor-dim-all"); if (act) { Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); _monitor->set_dim_all (tact->get_active()); @@ -827,7 +827,7 @@ MonitorSection::cut_all () return; } - Glib::RefPtr act = ActionManager::get_action (X_("Monitor"), "monitor-cut-all"); + Glib::RefPtr act = ActionManager::get_action (X_("Transport"), "monitor-cut-all"); if (act) { Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); _monitor->set_cut_all (tact->get_active()); @@ -841,7 +841,7 @@ MonitorSection::mono () return; } - Glib::RefPtr act = ActionManager::get_action (X_("Monitor"), "monitor-mono"); + Glib::RefPtr act = ActionManager::get_action (X_("Transport"), "monitor-mono"); if (act) { Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); _monitor->set_mono (tact->get_active()); @@ -927,15 +927,6 @@ MonitorSection::register_actions () monitor_actions = myactions.create_action_group (X_("Monitor")); - myactions.register_toggle_action (monitor_actions, "monitor-mono", _("Switch monitor to mono"), - sigc::bind (sigc::ptr_fun (MonitorSection::action_proxy0), MonitorMono)); - - myactions.register_toggle_action (monitor_actions, "monitor-cut-all", _("Cut monitor"), - sigc::bind (sigc::ptr_fun (MonitorSection::action_proxy0), MonitorCutAll)); - - myactions.register_toggle_action (monitor_actions, "monitor-dim-all", _("Dim monitor"), - sigc::bind (sigc::ptr_fun (MonitorSection::action_proxy0), MonitorDimAll)); - act = myactions.register_toggle_action (monitor_actions, "toggle-exclusive-solo", _("Toggle exclusive solo mode"), sigc::bind (sigc::ptr_fun (MonitorSection::action_proxy0), ToggleExclusiveSolo)); @@ -1103,29 +1094,30 @@ MonitorSection::map_state () return; } - Glib::RefPtr act; - update_solo_model (); - act = ActionManager::get_action (X_("Monitor"), "monitor-cut-all"); + Glib::RefPtr act; + Glib::RefPtr tact; + + act = ActionManager::get_action (X_("Transport"), "monitor-cut-all"); if (act) { - Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + tact = Glib::RefPtr::cast_dynamic (act); if (tact) { tact->set_active (_monitor->cut_all()); } } - act = ActionManager::get_action (X_("Monitor"), "monitor-dim-all"); + act = ActionManager::get_action (X_("Transport"), "monitor-dim-all"); if (act) { - Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + tact = Glib::RefPtr::cast_dynamic (act); if (tact) { tact->set_active (_monitor->dim_all()); } } - act = ActionManager::get_action (X_("Monitor"), "monitor-mono"); + act = ActionManager::get_action (X_("Transport"), "monitor-mono"); if (act) { - Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + tact = Glib::RefPtr::cast_dynamic (act); if (tact) { tact->set_active (_monitor->mono()); }