2 Copyright (C) 20002-2004 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 /* This file contains any ARDOUR_UI methods that require knowledge of
21 the editor, and exists so that no compilation dependency exists
22 between the main ARDOUR_UI modules and the PublicEditor class. This
23 is to cut down on the nasty compile times for both these classes.
26 #include <pbd/pathscanner.h>
29 #include <glibmm/miscutils.h>
31 #include <gtkmm2ext/utils.h>
32 #include <gtkmm2ext/window_title.h>
35 #include "ardour_ui.h"
36 #include "public_editor.h"
37 #include "audio_clock.h"
38 #include "engine_dialog.h"
44 #include <gtkmm2ext/sync-menu.h>
47 #include <ardour/session.h>
48 #include <ardour/profile.h>
49 #include <ardour/audioengine.h>
50 #include <ardour/control_protocol_manager.h>
52 #include <control_protocol/control_protocol.h>
57 using namespace ARDOUR;
59 using namespace Gtkmm2ext;
65 ARDOUR_UI::create_editor ()
69 editor = new Editor ();
72 catch (failed_constructor& err) {
76 editor->Realized.connect (mem_fun (*this, &ARDOUR_UI::editor_realized));
77 editor->signal_window_state_event().connect (sigc::bind (mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), true));
83 ARDOUR_UI::install_actions ()
85 Glib::RefPtr<ActionGroup> main_actions = ActionGroup::create (X_("Main"));
86 Glib::RefPtr<Action> act;
88 /* menus + submenus that need action items */
90 ActionManager::register_action (main_actions, X_("Session"), _("Session"));
91 ActionManager::register_action (main_actions, X_("Files"), _("Import/Export"));
92 ActionManager::register_action (main_actions, X_("Cleanup"), _("Cleanup"));
93 ActionManager::register_action (main_actions, X_("Sync"), _("Sync"));
94 ActionManager::register_action (main_actions, X_("Options"), _("Options"));
95 ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options"));
96 ActionManager::register_action (main_actions, X_("Help"), _("Help"));
97 ActionManager::register_action (main_actions, X_("KeyMouseActions"), _("Misc. Shortcuts"));
98 ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format"));
99 ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("File Type"));
100 ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Sample Format"));
101 ActionManager::register_action (main_actions, X_("ControlSurfaces"), _("Control Surfaces"));
102 ActionManager::register_action (main_actions, X_("Metering"), _("Metering"));
103 ActionManager::register_action (main_actions, X_("MeteringFallOffRate"), _("Fall off rate"));
104 ActionManager::register_action (main_actions, X_("MeteringHoldTime"), _("Hold Time"));
105 ActionManager::register_action (main_actions, X_("Denormals"), _("Denormal Handling"));
107 /* the real actions */
109 act = ActionManager::register_action (main_actions, X_("New"), _("New"), hide_return (bind (mem_fun(*this, &ARDOUR_UI::get_session_parameters), true, true)));
111 ActionManager::register_action (main_actions, X_("Open"), _("Open"), mem_fun(*this, &ARDOUR_UI::open_session));
112 ActionManager::register_action (main_actions, X_("Recent"), _("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session));
113 act = ActionManager::register_action (main_actions, X_("Close"), _("Close"), mem_fun(*this, &ARDOUR_UI::close_session));
114 ActionManager::session_sensitive_actions.push_back (act);
116 act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus"),
117 bind (mem_fun(*this, &ARDOUR_UI::add_route), (Gtk::Window*) 0));
118 ActionManager::session_sensitive_actions.push_back (act);
121 /* <CMT Additions> */
124 vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
127 if (!results->empty()) {
128 act = ActionManager::register_action (main_actions, X_("aniConnect"), _("Connect"), (mem_fun (*editor, &PublicEditor::connect_to_image_compositor)));
129 ActionManager::session_sensitive_actions.push_back (act);
134 /* </CMT Additions> */
136 act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot"), mem_fun(*this, &ARDOUR_UI::snapshot_session));
137 ActionManager::session_sensitive_actions.push_back (act);
139 act = ActionManager::register_action (main_actions, X_("SaveTemplate"), _("Save Template..."), mem_fun(*this, &ARDOUR_UI::save_template));
140 ActionManager::session_sensitive_actions.push_back (act);
142 act = ActionManager::register_action (main_actions, X_("ExportSession"), _("Export session to audiofile..."), mem_fun (*editor, &PublicEditor::export_session));
143 ActionManager::session_sensitive_actions.push_back (act);
145 act = ActionManager::register_action (main_actions, X_("ExportSelection"), _("Export selection to audiofile..."), mem_fun (*editor, &PublicEditor::export_selection));
146 ActionManager::session_sensitive_actions.push_back (act);
147 ActionManager::time_selection_sensitive_actions.push_back (act);
149 act = ActionManager::register_action (main_actions, X_("ExportRangeMarkers"), _("Export range markers to audiofile..."), mem_fun (*editor, &PublicEditor::export_range_markers));
150 ActionManager::session_sensitive_actions.push_back (act);
151 ActionManager::range_sensitive_actions.push_back (act);
153 act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
154 ActionManager::session_sensitive_actions.push_back (act);
156 act = ActionManager::register_action (main_actions, X_("CleanupUnused"), _("Cleanup unused sources"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup));
157 ActionManager::session_sensitive_actions.push_back (act);
158 act = ActionManager::register_action (main_actions, X_("FlushWastebasket"), _("Flush wastebasket"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash));
159 ActionManager::session_sensitive_actions.push_back (act);
161 /* JACK actions for controlling ... JACK */
163 Glib::RefPtr<ActionGroup> jack_actions = ActionGroup::create (X_("JACK"));
164 ActionManager::register_action (jack_actions, X_("JACK"), _("JACK"));
165 ActionManager::register_action (jack_actions, X_("Latency"), _("Latency"));
167 act = ActionManager::register_action (jack_actions, X_("JACKReconnect"), _("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack));
168 ActionManager::jack_opposite_sensitive_actions.push_back (act);
170 act = ActionManager::register_action (jack_actions, X_("JACKDisconnect"), _("Disconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::disconnect_from_jack));
171 ActionManager::jack_sensitive_actions.push_back (act);
173 RadioAction::Group jack_latency_group;
175 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency32"), X_("32"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 32));
176 ActionManager::jack_sensitive_actions.push_back (act);
177 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency64"), X_("64"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 64));
178 ActionManager::jack_sensitive_actions.push_back (act);
179 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency128"), X_("128"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 128));
180 ActionManager::jack_sensitive_actions.push_back (act);
181 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency256"), X_("256"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 256));
182 ActionManager::jack_sensitive_actions.push_back (act);
183 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency512"), X_("512"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 512));
184 ActionManager::jack_sensitive_actions.push_back (act);
185 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency1024"), X_("1024"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 1024));
186 ActionManager::jack_sensitive_actions.push_back (act);
187 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency2048"), X_("2048"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 2048));
188 ActionManager::jack_sensitive_actions.push_back (act);
189 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency4096"), X_("4096"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 4096));
190 ActionManager::jack_sensitive_actions.push_back (act);
191 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency8192"), X_("8192"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 8192));
192 ActionManager::jack_sensitive_actions.push_back (act);
194 /* these actions are intended to be shared across all windows */
196 common_actions = ActionGroup::create (X_("Common"));
197 ActionManager::register_action (main_actions, X_("WindowMenu"), _("Window"));
198 ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (hide_return (mem_fun(*this, &ARDOUR_UI::finish))));
200 /* windows visibility actions */
202 ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
204 ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
205 ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
206 ActionManager::register_action (common_actions, X_("toggle-editor-mixer-on-top"), _("Toggle Editor Mixer on Top"), mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer_on_top));
207 ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Preferences"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
208 act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
209 ActionManager::session_sensitive_actions.push_back (act);
210 act = ActionManager::register_toggle_action (common_actions, X_("ToggleConnections"), _("Connections"), mem_fun(*this, &ARDOUR_UI::toggle_connection_editor));
211 ActionManager::session_sensitive_actions.push_back (act);
212 act = ActionManager::register_toggle_action (common_actions, X_("ToggleLocations"), _("Locations"), mem_fun(*this, &ARDOUR_UI::toggle_location_window));
213 ActionManager::session_sensitive_actions.push_back (act);
214 act = ActionManager::register_toggle_action (common_actions, X_("ToggleBigClock"), _("Big Clock"), mem_fun(*this, &ARDOUR_UI::toggle_big_clock_window));
215 ActionManager::session_sensitive_actions.push_back (act);
216 ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_about));
217 ActionManager::register_toggle_action (common_actions, X_("ToggleThemeManager"), _("Theme Manager"), mem_fun(*this, &ARDOUR_UI::toggle_theme_manager));
218 ActionManager::register_toggle_action (common_actions, X_("ToggleKeyEditor"), _("Keybindings"), mem_fun(*this, &ARDOUR_UI::toggle_key_editor));
220 act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal, 1));
221 ActionManager::session_sensitive_actions.push_back (act);
222 act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, 1));
223 ActionManager::session_sensitive_actions.push_back (act);
224 act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
225 ActionManager::session_sensitive_actions.push_back (act);
226 act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("Remove Last Capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
227 ActionManager::session_sensitive_actions.push_back (act);
229 Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
231 /* do-nothing action for the "transport" menu bar item */
233 ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
235 /* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
236 menus and via button proxies.
239 act = ActionManager::register_action (transport_actions, X_("Stop"), _("Stop"), mem_fun(*this, &ARDOUR_UI::transport_stop));
240 ActionManager::session_sensitive_actions.push_back (act);
241 ActionManager::transport_sensitive_actions.push_back (act);
242 act = ActionManager::register_action (transport_actions, X_("Roll"), _("Roll"), mem_fun(*this, &ARDOUR_UI::transport_roll));
243 ActionManager::session_sensitive_actions.push_back (act);
244 ActionManager::transport_sensitive_actions.push_back (act);
246 ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false));
247 ActionManager::session_sensitive_actions.push_back (act);
248 ActionManager::transport_sensitive_actions.push_back (act);
249 ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop + Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true));
250 ActionManager::session_sensitive_actions.push_back (act);
251 ActionManager::transport_sensitive_actions.push_back (act);
253 /* these two behave as follows:
255 - if transport speed != 1.0 or != -1.0, change speed to 1.0 or -1.0 (respectively)
256 - otherwise do nothing
259 ActionManager::register_action (transport_actions, X_("TransitionToRoll"), _("Transition To Roll"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), true));
260 ActionManager::session_sensitive_actions.push_back (act);
261 ActionManager::session_sensitive_actions.push_back (act);
263 ActionManager::register_action (transport_actions, X_("TransitionToReverse"), _("Transition To Reverse"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), false));
264 ActionManager::session_sensitive_actions.push_back (act);
265 ActionManager::session_sensitive_actions.push_back (act);
268 act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
269 ActionManager::session_sensitive_actions.push_back (act);
270 ActionManager::transport_sensitive_actions.push_back (act);
271 act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selection"), mem_fun(*this, &ARDOUR_UI::transport_play_selection));
272 ActionManager::session_sensitive_actions.push_back (act);
273 ActionManager::transport_sensitive_actions.push_back (act);
275 act = ActionManager::register_action (transport_actions, X_("Record"), _("Enable Record"), bind (mem_fun(*this, &ARDOUR_UI::transport_record), false));
276 ActionManager::session_sensitive_actions.push_back (act);
277 act = ActionManager::register_action (transport_actions, X_("record-roll"), _("Start Recording"), bind (mem_fun(*this, &ARDOUR_UI::transport_record), true));
278 ActionManager::session_sensitive_actions.push_back (act);
279 ActionManager::transport_sensitive_actions.push_back (act);
280 act = ActionManager::register_action (transport_actions, X_("Rewind"), _("Rewind"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 0));
281 ActionManager::session_sensitive_actions.push_back (act);
282 ActionManager::transport_sensitive_actions.push_back (act);
283 act = ActionManager::register_action (transport_actions, X_("RewindSlow"), _("Rewind (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), -1));
284 ActionManager::session_sensitive_actions.push_back (act);
285 ActionManager::transport_sensitive_actions.push_back (act);
286 act = ActionManager::register_action (transport_actions, X_("RewindFast"), _("Rewind (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 1));
287 ActionManager::session_sensitive_actions.push_back (act);
288 ActionManager::transport_sensitive_actions.push_back (act);
289 act = ActionManager::register_action (transport_actions, X_("Forward"), _("Forward"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 0));
290 ActionManager::session_sensitive_actions.push_back (act);
291 ActionManager::transport_sensitive_actions.push_back (act);
292 act = ActionManager::register_action (transport_actions, X_("ForwardSlow"), _("Forward (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), -1));
293 ActionManager::session_sensitive_actions.push_back (act);
294 ActionManager::transport_sensitive_actions.push_back (act);
295 act = ActionManager::register_action (transport_actions, X_("ForwardFast"), _("Forward (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 1));
296 ActionManager::session_sensitive_actions.push_back (act);
297 ActionManager::transport_sensitive_actions.push_back (act);
298 act = ActionManager::register_action (transport_actions, X_("GotoZero"), _("Goto Zero"), mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
299 ActionManager::session_sensitive_actions.push_back (act);
300 ActionManager::transport_sensitive_actions.push_back (act);
301 act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Goto Start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
302 ActionManager::session_sensitive_actions.push_back (act);
303 ActionManager::transport_sensitive_actions.push_back (act);
304 act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Goto End"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
305 ActionManager::session_sensitive_actions.push_back (act);
306 ActionManager::transport_sensitive_actions.push_back (act);
307 act = ActionManager::register_action (transport_actions, X_("GotoWallClock"), _("Goto Wall Clock"), mem_fun(*this, &ARDOUR_UI::transport_goto_wallclock));
308 ActionManager::session_sensitive_actions.push_back (act);
309 ActionManager::transport_sensitive_actions.push_back (act);
311 act = ActionManager::register_action (transport_actions, X_("focus-on-clock"), _("Focus On Clock"), mem_fun(primary_clock, &AudioClock::focus));
312 ActionManager::session_sensitive_actions.push_back (act);
313 ActionManager::transport_sensitive_actions.push_back (act);
315 act = ActionManager::register_action (transport_actions, X_("primary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::BBT));
316 ActionManager::session_sensitive_actions.push_back (act);
317 act = ActionManager::register_action (transport_actions, X_("primary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::MinSec));
318 ActionManager::session_sensitive_actions.push_back (act);
319 act = ActionManager::register_action (transport_actions, X_("primary-clock-samples"), _("Samples"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Frames));
320 ActionManager::session_sensitive_actions.push_back (act);
321 act = ActionManager::register_action (transport_actions, X_("primary-clock-off"), _("Off"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Off));
322 ActionManager::session_sensitive_actions.push_back (act);
324 act = ActionManager::register_action (transport_actions, X_("secondary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::BBT));
325 ActionManager::session_sensitive_actions.push_back (act);
326 act = ActionManager::register_action (transport_actions, X_("secondary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::MinSec));
327 ActionManager::session_sensitive_actions.push_back (act);
328 act = ActionManager::register_action (transport_actions, X_("secondary-clock-samples"), _("Samples"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Frames));
329 ActionManager::session_sensitive_actions.push_back (act);
330 act = ActionManager::register_action (transport_actions, X_("secondary-clock-off"), _("Off"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Off));
331 ActionManager::session_sensitive_actions.push_back (act);
333 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch In"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
334 ActionManager::session_sensitive_actions.push_back (act);
335 ActionManager::transport_sensitive_actions.push_back (act);
336 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("Punch Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
337 ActionManager::session_sensitive_actions.push_back (act);
338 ActionManager::transport_sensitive_actions.push_back (act);
339 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunch"), _("Punch In/Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch));
340 ActionManager::session_sensitive_actions.push_back (act);
341 ActionManager::transport_sensitive_actions.push_back (act);
342 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleClick"), _("Click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
343 ActionManager::session_sensitive_actions.push_back (act);
344 ActionManager::transport_sensitive_actions.push_back (act);
345 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoInput"), _("Auto Input"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
346 ActionManager::session_sensitive_actions.push_back (act);
347 ActionManager::transport_sensitive_actions.push_back (act);
348 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoPlay"), _("Auto Play"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
349 ActionManager::session_sensitive_actions.push_back (act);
350 ActionManager::transport_sensitive_actions.push_back (act);
351 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoReturn"), _("Auto Return"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
352 ActionManager::session_sensitive_actions.push_back (act);
353 ActionManager::transport_sensitive_actions.push_back (act);
355 ActionManager::register_toggle_action (transport_actions, X_("ToggleVideoSync"), _("Sync startup to video"), mem_fun(*this, &ARDOUR_UI::toggle_video_sync));
356 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("Time master"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
357 ActionManager::session_sensitive_actions.push_back (act);
359 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("Toggle Record Enable Track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 0U));
360 ActionManager::session_sensitive_actions.push_back (act);
361 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("Toggle Record Enable Track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 1U));
362 ActionManager::session_sensitive_actions.push_back (act);
363 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("Toggle Record Enable Track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 2U));
364 ActionManager::session_sensitive_actions.push_back (act);
365 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("Toggle Record Enable Track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 3U));
366 ActionManager::session_sensitive_actions.push_back (act);
367 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("Toggle Record Enable Track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 4U));
368 ActionManager::session_sensitive_actions.push_back (act);
369 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("Toggle Record Enable Track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 5U));
370 ActionManager::session_sensitive_actions.push_back (act);
371 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("Toggle Record Enable Track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 6U));
372 ActionManager::session_sensitive_actions.push_back (act);
373 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("Toggle Record Enable Track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 7U));
374 ActionManager::session_sensitive_actions.push_back (act);
375 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("Toggle Record Enable Track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 8U));
376 ActionManager::session_sensitive_actions.push_back (act);
377 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("Toggle Record Enable Track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
378 ActionManager::session_sensitive_actions.push_back (act);
379 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("Toggle Record Enable Track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
380 ActionManager::session_sensitive_actions.push_back (act);
381 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("Toggle Record Enable Track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
382 ActionManager::session_sensitive_actions.push_back (act);
383 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("Toggle Record Enable Track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
384 ActionManager::session_sensitive_actions.push_back (act);
385 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("Toggle Record Enable Track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
386 ActionManager::session_sensitive_actions.push_back (act);
387 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("Toggle Record Enable Track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
388 ActionManager::session_sensitive_actions.push_back (act);
389 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("Toggle Record Enable Track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
390 ActionManager::session_sensitive_actions.push_back (act);
391 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("Toggle Record Enable Track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
392 ActionManager::session_sensitive_actions.push_back (act);
393 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("Toggle Record Enable Track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
394 ActionManager::session_sensitive_actions.push_back (act);
395 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("Toggle Record Enable Track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
396 ActionManager::session_sensitive_actions.push_back (act);
397 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("Toggle Record Enable Track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
398 ActionManager::session_sensitive_actions.push_back (act);
399 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("Toggle Record Enable Track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
400 ActionManager::session_sensitive_actions.push_back (act);
401 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("Toggle Record Enable Track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
402 ActionManager::session_sensitive_actions.push_back (act);
403 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("Toggle Record Enable Track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
404 ActionManager::session_sensitive_actions.push_back (act);
405 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("Toggle Record Enable Track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
406 ActionManager::session_sensitive_actions.push_back (act);
407 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("Toggle Record Enable Track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
408 ActionManager::session_sensitive_actions.push_back (act);
409 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("Toggle Record Enable Track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
410 ActionManager::session_sensitive_actions.push_back (act);
411 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("Toggle Record Enable Track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
412 ActionManager::session_sensitive_actions.push_back (act);
413 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("Toggle Record Enable Track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
414 ActionManager::session_sensitive_actions.push_back (act);
415 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("Toggle Record Enable Track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
416 ActionManager::session_sensitive_actions.push_back (act);
417 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("Toggle Record Enable Track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
418 ActionManager::session_sensitive_actions.push_back (act);
419 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("Toggle Record Enable Track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
420 ActionManager::session_sensitive_actions.push_back (act);
421 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("Toggle Record Enable Track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
422 ActionManager::session_sensitive_actions.push_back (act);
424 Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
426 shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Percentage)));
427 shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Semitones)));
429 Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
431 act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
432 ActionManager::session_sensitive_actions.push_back (act);
433 act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mmc));
434 ActionManager::session_sensitive_actions.push_back (act);
435 act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
436 ActionManager::session_sensitive_actions.push_back (act);
437 act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
438 ActionManager::session_sensitive_actions.push_back (act);
440 act = ActionManager::register_toggle_action (option_actions, X_("UseOSC"), _("Use OSC"), mem_fun (*this, &ARDOUR_UI::toggle_use_osc));
442 act->set_sensitive (false);
444 act = ActionManager::register_toggle_action (option_actions, X_("ToggleTapeMachineMode"), _("Tape Machine mode"), mem_fun (*this, &ARDOUR_UI::toggle_TapeMachineMode));
445 ActionManager::session_sensitive_actions.push_back (act);
447 ActionManager::register_toggle_action (option_actions, X_("SyncEditorAndMixerTrackOrder"), _("Sync Editor and Mixer track order"), mem_fun (*this, &ARDOUR_UI::toggle_sync_order_keys));
448 ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
449 ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
450 ActionManager::register_toggle_action (option_actions, X_("PeriodicSafetyBackups"), _("Make periodic safety backups"), mem_fun (*this, &ARDOUR_UI::toggle_PeriodicSafetyBackups));
451 ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
452 ActionManager::register_toggle_action (option_actions, X_("CreateXrunMarker"), _("Create marker at xrun location"), mem_fun (*this, &ARDOUR_UI::toggle_CreateXrunMarker));
453 ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
454 ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
455 ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
456 ActionManager::register_toggle_action (option_actions, X_("RegionEquivalentsOverlap"), _("Region equivalents overlap"), mem_fun (*this, &ARDOUR_UI::toggle_RegionEquivalentsOverlap));
457 ActionManager::register_toggle_action (option_actions, X_("PrimaryClockDeltaEditCursor"), _("Primary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor));
458 ActionManager::register_toggle_action (option_actions, X_("SecondaryClockDeltaEditCursor"), _("Secondary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor));
459 ActionManager::register_toggle_action (option_actions, X_("ShowTrackMeters"), _("Enable Editor Meters"), mem_fun (*this, &ARDOUR_UI::toggle_ShowTrackMeters));
460 ActionManager::register_toggle_action (option_actions, X_("OnlyCopyImportedFiles"), _("Always copy imported files"), mem_fun (*this, &ARDOUR_UI::toggle_only_copy_imported_files));
461 ActionManager::register_toggle_action (option_actions, X_("RubberbandingSnapsToGrid"), _("Rubberbanding Snaps to Grid"), mem_fun (*this, &ARDOUR_UI::toggle_rubberbanding_snaps_to_grid));
462 ActionManager::register_toggle_action (option_actions, X_("AutoAnalyseAudio"), _("Auto-analyse new audio"), mem_fun (*this, &ARDOUR_UI::toggle_auto_analyse_audio));
464 ActionManager::register_toggle_action (option_actions, X_("DefaultNarrowMS"), _("Use narrow mixer strips"), mem_fun (*this, &ARDOUR_UI::toggle_use_narrow_ms));
465 ActionManager::register_toggle_action (option_actions, X_("NameNewMarkers"), _("Name New Markers"), mem_fun (*this, &ARDOUR_UI::toggle_NameNewMarkers));
467 RadioAction::Group denormal_group;
469 ActionManager::register_toggle_action (option_actions, X_("DenormalProtection"), _("Use DC bias"), mem_fun (*this, &ARDOUR_UI::toggle_denormal_protection));
471 ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalNone"), _("No processor handling"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalNone));
473 // as of September 10th 2007, Valgrind cannot handle various FPU flag setting instructions
476 if (getenv ("ARDOUR_RUNNING_UNDER_VALGRIND")) {
478 /* we still need these actions to exist, but make them all insensitive */
480 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZ"), _("Use FlushToZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZ));
481 act->set_sensitive (false);
482 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalDAZ"), _("Use DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalDAZ));
483 act->set_sensitive (false);
484 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZDAZ"), _("Use FlushToZero & DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZDAZ));
485 act->set_sensitive (false);
491 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZ"), _("Use FlushToZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZ));
492 if (!fpu.has_flush_to_zero()) {
493 act->set_sensitive (false);
496 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalDAZ"), _("Use DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalDAZ));
497 if (!fpu.has_denormals_are_zero()) {
498 act->set_sensitive (false);
501 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZDAZ"), _("Use FlushToZero & DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZDAZ));
502 if (!fpu.has_flush_to_zero() || !fpu.has_denormals_are_zero()) {
503 act->set_sensitive (false);
507 act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
508 ActionManager::session_sensitive_actions.push_back (act);
509 act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
510 ActionManager::session_sensitive_actions.push_back (act);
511 act = ActionManager::register_toggle_action (option_actions, X_("ShowSoloMutes"), _("Show solo muting"), mem_fun (*this, &ARDOUR_UI::toggle_ShowSoloMutes));
512 ActionManager::session_sensitive_actions.push_back (act);
514 /* !!! REMEMBER THAT RADIO ACTIONS HAVE TO BE HANDLED WITH MORE FINESSE THAN SIMPLE TOGGLES !!! */
516 RadioAction::Group meter_falloff_group;
517 RadioAction::Group meter_hold_group;
519 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffOff));
520 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlowest"), _("Slowest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlowest));
521 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlow"), _("Slow"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlow));
522 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffMedium));
523 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFast"), _("Fast"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFast));
524 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFaster"), _("Faster"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFaster));
525 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFastest"), _("Fastest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFastest));
527 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldOff));
528 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldShort"), _("Short"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldShort));
529 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldMedium));
530 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldLong"), _("Long"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldLong));
532 RadioAction::Group file_header_group;
534 act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatBWF"), X_("Broadcast WAVE"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::BWF));
535 act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatWAVE"), X_("WAVE"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::WAVE));
536 act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatWAVE64"), X_("WAVE-64"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::WAVE64));
537 // act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatiXML"), X_("iXML"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::iXML));
538 // act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatRF64"), X_("RF64"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::RF64));
539 act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatCAF"), X_("CAF"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::CAF));
541 RadioAction::Group file_data_group;
544 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));
545 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));
546 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));
548 RadioAction::Group monitoring_group;
550 /* it would be nice not to even show this item, but that messes up the
551 menus which are not dynamically modified at runtime. so we make it
552 sensitive only if it makes sense.
555 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
556 if (!engine->can_request_hardware_monitoring()) {
557 act->set_sensitive (false);
559 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
560 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));
562 RadioAction::Group solo_group;
564 act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloInPlace"), _("Solo in-place"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_solo_model), InverseMute)));
565 ActionManager::session_sensitive_actions.push_back (act);
566 act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloViaBus"), _("Solo via bus"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_solo_model), SoloBus)));
567 ActionManager::session_sensitive_actions.push_back (act);
569 RadioAction::Group input_auto_connect_group;
571 act = ActionManager::register_radio_action (option_actions, input_auto_connect_group, X_("InputAutoConnectPhysical"), _("Auto-connect inputs to physical inputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_input_auto_connect), AutoConnectPhysical)));
572 ActionManager::session_sensitive_actions.push_back (act);
573 act = ActionManager::register_radio_action (option_actions, input_auto_connect_group, X_("InputAutoConnectManual"), _("Manually connect inputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_input_auto_connect), (AutoConnectOption) 0)));
574 ActionManager::session_sensitive_actions.push_back (act);
576 RadioAction::Group output_auto_connect_group;
578 act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectPhysical"), _("Auto-connect outputs to physical outs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), AutoConnectPhysical)));
579 ActionManager::session_sensitive_actions.push_back (act);
580 act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectMaster"), _("Auto-connect outputs to master bus"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), AutoConnectMaster)));
581 ActionManager::session_sensitive_actions.push_back (act);
582 act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectManual"), _("Manually connect outputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), (AutoConnectOption) 0)));
583 ActionManager::session_sensitive_actions.push_back (act);
585 RadioAction::Group remote_group;
587 act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteUserDefined"), _("Remote ID assigned by User"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), UserOrdered)));
588 ActionManager::session_sensitive_actions.push_back (act);
589 act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteMixerDefined"), _("Remote ID follows order of Mixer"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), MixerOrdered)));
590 ActionManager::session_sensitive_actions.push_back (act);
591 act = ActionManager::register_radio_action (option_actions, remote_group, X_("RemoteEditorDefined"), _("Remote ID follows order of Editor"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_remote_model), EditorOrdered)));
592 ActionManager::session_sensitive_actions.push_back (act);
594 act = ActionManager::register_toggle_action (option_actions, X_("AutoRebinding"), _("Auto Rebind Controls"), mem_fun (*(this->mixer), &Mixer_UI::toggle_auto_rebinding));
595 ActionManager::session_sensitive_actions.push_back (act);
598 ActionManager::add_action_group (shuttle_actions);
599 ActionManager::add_action_group (option_actions);
600 ActionManager::add_action_group (jack_actions);
601 ActionManager::add_action_group (transport_actions);
602 ActionManager::add_action_group (main_actions);
603 ActionManager::add_action_group (common_actions);
607 ARDOUR_UI::toggle_control_protocol (ControlProtocolInfo* cpi)
610 /* this happens when we build the menu bar when control protocol support
611 has been used in the past for some given protocol - the item needs
612 to be made active, but there is no session yet.
617 if (cpi->protocol == 0) {
618 ControlProtocolManager::instance().instantiate (*cpi);
620 ControlProtocolManager::instance().teardown (*cpi);
625 ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const char* group, string action)
628 /* this happens when we build the menu bar when control protocol support
629 has been used in the past for some given protocol - the item needs
630 to be made active, but there is no session yet.
636 Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action.c_str());
639 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
642 bool x = tact->get_active();
644 if (x != cpi->protocol->get_feedback()) {
645 cpi->protocol->set_feedback (x);
653 ARDOUR_UI::set_jack_buffer_size (nframes_t nframes)
655 Glib::RefPtr<Action> action;
656 const char* action_name = 0;
660 action_name = X_("JACKLatency32");
663 action_name = X_("JACKLatency64");
666 action_name = X_("JACKLatency128");
669 action_name = X_("JACKLatency512");
672 action_name = X_("JACKLatency1024");
675 action_name = X_("JACKLatency2048");
678 action_name = X_("JACKLatency4096");
681 action_name = X_("JACKLatency8192");
684 /* XXX can we do anything useful ? */
690 action = ActionManager::get_action (X_("JACK"), action_name);
693 Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
695 if (ract && ract->get_active()) {
696 engine->request_buffer_size (nframes);
697 update_sample_rate (0);
704 ARDOUR_UI::build_control_surface_menu ()
706 list<ControlProtocolInfo*>::iterator i;
709 /* !!! this has to match the top level entry from ardour.menus */
711 string ui = "<menubar name='Main' action='MainMenu'>\n<menu name='Options' action='Options'>\n<menu action='ControlSurfaces'><separator/>\n";
713 for (i = ControlProtocolManager::instance().control_protocol_info.begin(); i != ControlProtocolManager::instance().control_protocol_info.end(); ++i) {
715 if (!(*i)->mandatory) {
717 string action_name = "Toggle";
718 action_name += legalize_for_path ((*i)->name);
719 action_name += "Surface";
721 string action_label = (*i)->name;
723 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), action_label.c_str(),
724 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol), *i)));
726 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
728 with_feedback = false;
730 if ((*i)->protocol || (*i)->requested) {
734 ui += "<menuitem action='";
738 if ((*i)->supports_feedback) {
740 string submenu_name = action_name;
742 submenu_name += "SubMenu";
744 ActionManager::register_action (editor->editor_actions, submenu_name.c_str(), _("Controls"));
746 action_name += "Feedback";
748 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), _("Feedback"),
749 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol_feedback),
754 ui += "<menu action='";
756 ui += "'>\n<menuitem action='";
758 ui += "'/>\n</menu>\n";
760 if ((*i)->protocol) {
761 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
762 tact->set_active ((*i)->protocol->get_feedback ());
768 ui += "</menu>\n</menu>\n</menubar>\n";
770 ActionManager::ui_manager->add_ui_from_string (ui);
774 ARDOUR_UI::build_menu_bar ()
776 if (!Profile->get_sae()) {
777 build_control_surface_menu ();
780 menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
781 menu_bar->set_name ("MainMenuBar");
784 * This is needed because this property does not get installed
785 * until the Menu GObject class is registered, which happens
786 * when the first menu instance is created.
788 // XXX bug in gtkmm causes this to popup an error message
789 // Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;
790 // so use this instead ...
791 gtk_settings_set_long_property (gtk_settings_get_default(), "gtk-can-change-accels", 1, "Ardour:designers");
793 wall_clock_box.add (wall_clock_label);
794 wall_clock_box.set_name ("WallClock");
795 wall_clock_label.set_name ("WallClock");
797 disk_space_box.add (disk_space_label);
798 disk_space_box.set_name ("WallClock");
799 disk_space_label.set_name ("WallClock");
801 cpu_load_box.add (cpu_load_label);
802 cpu_load_box.set_name ("CPULoad");
803 cpu_load_label.set_name ("CPULoad");
805 buffer_load_box.add (buffer_load_label);
806 buffer_load_box.set_name ("BufferLoad");
807 buffer_load_label.set_name ("BufferLoad");
809 sample_rate_box.add (sample_rate_label);
810 sample_rate_box.set_name ("SampleRate");
811 sample_rate_label.set_name ("SampleRate");
814 menu_hbox.pack_start (*menu_bar, true, true);
816 use_menubar_as_top_menubar ();
818 if (!Profile->get_small_screen()) {
820 // OSX provides its own wallclock, thank you very much
821 menu_hbox.pack_end (wall_clock_box, false, false, 2);
823 menu_hbox.pack_end (disk_space_box, false, false, 4);
825 menu_hbox.pack_end (cpu_load_box, false, false, 4);
826 menu_hbox.pack_end (buffer_load_box, false, false, 4);
827 menu_hbox.pack_end (sample_rate_box, false, false, 4);
829 menu_bar_base.set_name ("MainMenuBar");
830 menu_bar_base.add (menu_hbox);
834 ARDOUR_UI::use_menubar_as_top_menubar ()
837 ige_mac_menu_set_menu_bar ((GtkMenuShell*) menu_bar->gobj());
838 // ige_mac_menu_set_quit_menu_item (some_item->gobj());
843 ARDOUR_UI::setup_clock ()
845 ARDOUR_UI::Clock.connect (bind (mem_fun (big_clock, &AudioClock::set), false));
847 big_clock_window = new Window (WINDOW_TOPLEVEL);
849 big_clock_window->set_keep_above (true);
850 big_clock_window->set_border_width (0);
851 big_clock_window->add (big_clock);
853 WindowTitle title(Glib::get_application_name());
855 big_clock_window->set_title (title.get_string());
856 big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
857 big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window, (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
858 big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
860 manage_window (*big_clock_window);
864 ARDOUR_UI::float_big_clock (Gtk::Window* parent)
866 if (big_clock_window) {
868 big_clock_window->set_transient_for (*parent);
870 gtk_window_set_transient_for (big_clock_window->gobj(), (GtkWindow*) 0);