diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-04-03 19:53:58 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-04-03 19:53:58 +0000 |
commit | c557bf28a78d296045f9ba8432944d25f50d25ec (patch) | |
tree | 17e4558be2d5dd10458124369f105d85248b087e | |
parent | a30fb19cb326fe13d72cab11543ca0bcd3084f7d (diff) |
rename menu items for monitoring options, and make the one based on JACK insensitive if there are no JACK ports capable of being monitored in that way
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3209 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/ardour.menus | 4 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 15 | ||||
-rw-r--r-- | libs/ardour/ardour/audioengine.h | 2 | ||||
-rw-r--r-- | libs/ardour/audioengine.cc | 26 |
4 files changed, 38 insertions, 9 deletions
diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus index a6f42d9281..3efcf9ce8e 100644 --- a/gtk2_ardour/ardour.menus +++ b/gtk2_ardour/ardour.menus @@ -442,9 +442,9 @@ <menuitem action='AutoRebinding'/> </menu> <menu action='Monitoring'> - <menuitem action='UseHardwareMonitoring'/> - <menuitem action='UseSoftwareMonitoring'/> <menuitem action='UseExternalMonitoring'/> + <menuitem action='UseSoftwareMonitoring'/> + <menuitem action='UseHardwareMonitoring'/> <separator/> <menuitem action='ToggleTapeMachineMode'/> </menu> diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index cfdabc5b3a..c5e8b14a7a 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -533,15 +533,24 @@ ARDOUR_UI::install_actions () RadioAction::Group file_data_group; + act = ActionManager::register_radio_action (option_actions, file_data_group, X_("FileDataFormatFloat"), X_("32-bit floating point"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_data_format), ARDOUR::FormatFloat)); act = ActionManager::register_radio_action (option_actions, file_data_group, X_("FileDataFormat24bit"), X_("24-bit integer"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_data_format), ARDOUR::FormatInt24)); act = ActionManager::register_radio_action (option_actions, file_data_group, X_("FileDataFormat16bit"), X_("16-bit integer"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_data_format), ARDOUR::FormatInt16)); RadioAction::Group monitoring_group; - act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("Hardware monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring)); - act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Software monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring)); - act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("External monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), ExternalMonitoring)); + /* it would be nice not to even show this item, but that messes up the + menus which are not dynamically modified at runtime. so we make it + sensitive only if it makes sense. + */ + + act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring)); + if (engine->can_request_hardware_monitoring()) { + act->set_sensitive (false); + } + act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring)); + act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("Audio Hardware does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), ExternalMonitoring)); RadioAction::Group solo_group; diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index 3329a036e4..31c892a2b7 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -127,6 +127,8 @@ class AudioEngine : public sigc::trackable const char ** get_ports (const std::string& port_name_pattern, const std::string& type_name_pattern, uint32_t flags); + bool can_request_hardware_monitoring (); + uint32_t n_physical_audio_outputs () const; uint32_t n_physical_audio_inputs () const; diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index d057a31cea..9521dfe730 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -813,6 +813,25 @@ AudioEngine::halted (void *arg) } } +bool +AudioEngine::can_request_hardware_monitoring () +{ + const char ** ports; + + if (!_jack) { + return 0; + } + + if ((ports = jack_get_ports (_jack, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortCanMonitor)) == 0) { + return false; + } + + free (ports); + + return true; +} + + uint32_t AudioEngine::n_physical_audio_outputs () const { @@ -827,10 +846,9 @@ AudioEngine::n_physical_audio_outputs () const return 0; } - if (ports) { - for (i = 0; ports[i]; ++i); - free (ports); - } + for (i = 0; ports[i]; ++i); + free (ports); + return i; } |