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/file_utils.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_("Plugins"), _("Plugins"));
103 ActionManager::register_action (main_actions, X_("Metering"), _("Metering"));
104 ActionManager::register_action (main_actions, X_("MeteringFallOffRate"), _("Fall Off Rate"));
105 ActionManager::register_action (main_actions, X_("MeteringHoldTime"), _("Hold Time"));
106 ActionManager::register_action (main_actions, X_("Denormals"), _("Denormal Handling"));
108 /* the real actions */
110 act = ActionManager::register_action (main_actions, X_("New"), _("New..."), hide_return (bind (mem_fun(*this, &ARDOUR_UI::get_session_parameters), true, true, true)));
112 ActionManager::register_action (main_actions, X_("Open"), _("Open..."), mem_fun(*this, &ARDOUR_UI::open_session));
113 ActionManager::register_action (main_actions, X_("Recent"), _("Recent..."), mem_fun(*this, &ARDOUR_UI::open_recent_session));
114 act = ActionManager::register_action (main_actions, X_("Close"), _("Close"), mem_fun(*this, &ARDOUR_UI::close_session));
115 ActionManager::session_sensitive_actions.push_back (act);
117 act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus..."),
118 bind (mem_fun(*this, &ARDOUR_UI::add_route), (Gtk::Window*) 0));
119 ActionManager::session_sensitive_actions.push_back (act);
124 sys::path anicomp_file_path;
126 if (PBD::find_file_in_search_path (Glib::getenv("PATH"), "AniComp", anicomp_file_path)) {
127 act = ActionManager::register_action (main_actions, X_("aniConnect"), _("Connect"), (mem_fun (*editor, &PublicEditor::connect_to_image_compositor)));
128 ActionManager::session_sensitive_actions.push_back (act);
133 act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot..."), mem_fun(*this, &ARDOUR_UI::snapshot_session));
134 ActionManager::session_sensitive_actions.push_back (act);
136 act = ActionManager::register_action (main_actions, X_("SaveTemplate"), _("Save Template..."), mem_fun(*this, &ARDOUR_UI::save_template));
137 ActionManager::session_sensitive_actions.push_back (act);
139 act = ActionManager::register_action (main_actions, X_("Metadata"), _("Metadata"));
140 ActionManager::session_sensitive_actions.push_back (act);
142 act = ActionManager::register_action (main_actions, X_("EditMetadata"), _("Edit Metadata"), mem_fun(*this, &ARDOUR_UI::edit_metadata));
143 ActionManager::session_sensitive_actions.push_back (act);
145 act = ActionManager::register_action (main_actions, X_("ImportMetadata"), _("Import Metadata"), mem_fun(*this, &ARDOUR_UI::import_metadata));
146 ActionManager::session_sensitive_actions.push_back (act);
148 act = ActionManager::register_action (main_actions, X_("ExportAudio"), _("Export To Audio File(s)..."), mem_fun (*editor, &PublicEditor::export_audio));
149 ActionManager::session_sensitive_actions.push_back (act);
151 act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
152 ActionManager::session_sensitive_actions.push_back (act);
154 act = ActionManager::register_action (main_actions, X_("CleanupUnused"), _("Cleanup Unused Sources"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup));
155 ActionManager::session_sensitive_actions.push_back (act);
156 act = ActionManager::register_action (main_actions, X_("FlushWastebasket"), _("Flush Wastebasket"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash));
157 ActionManager::session_sensitive_actions.push_back (act);
159 /* JACK actions for controlling ... JACK */
161 Glib::RefPtr<ActionGroup> jack_actions = ActionGroup::create (X_("JACK"));
162 ActionManager::register_action (jack_actions, X_("JACK"), _("JACK"));
163 ActionManager::register_action (jack_actions, X_("Latency"), _("Latency"));
165 act = ActionManager::register_action (jack_actions, X_("JACKReconnect"), _("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack));
166 ActionManager::jack_opposite_sensitive_actions.push_back (act);
168 act = ActionManager::register_action (jack_actions, X_("JACKDisconnect"), _("Disconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::disconnect_from_jack));
169 ActionManager::jack_sensitive_actions.push_back (act);
171 RadioAction::Group jack_latency_group;
173 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));
174 ActionManager::jack_sensitive_actions.push_back (act);
175 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));
176 ActionManager::jack_sensitive_actions.push_back (act);
177 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));
178 ActionManager::jack_sensitive_actions.push_back (act);
179 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));
180 ActionManager::jack_sensitive_actions.push_back (act);
181 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));
182 ActionManager::jack_sensitive_actions.push_back (act);
183 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));
184 ActionManager::jack_sensitive_actions.push_back (act);
185 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));
186 ActionManager::jack_sensitive_actions.push_back (act);
187 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));
188 ActionManager::jack_sensitive_actions.push_back (act);
189 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));
190 ActionManager::jack_sensitive_actions.push_back (act);
192 /* these actions are intended to be shared across all windows */
194 common_actions = ActionGroup::create (X_("Common"));
195 ActionManager::register_action (main_actions, X_("WindowMenu"), _("Window"));
196 ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (hide_return (mem_fun(*this, &ARDOUR_UI::finish))));
198 /* windows visibility actions */
200 ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
202 ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
203 ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
204 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));
205 ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Preferences"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
206 act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
207 ActionManager::session_sensitive_actions.push_back (act);
208 ActionManager::session_sensitive_actions.push_back (act);
209 act = ActionManager::register_toggle_action (common_actions, X_("ToggleLocations"), _("Locations"), mem_fun(*this, &ARDOUR_UI::toggle_location_window));
210 ActionManager::session_sensitive_actions.push_back (act);
211 act = ActionManager::register_toggle_action (common_actions, X_("ToggleBigClock"), _("Big Clock"), mem_fun(*this, &ARDOUR_UI::toggle_big_clock_window));
212 ActionManager::session_sensitive_actions.push_back (act);
213 ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_about));
214 ActionManager::register_toggle_action (common_actions, X_("ToggleThemeManager"), _("Theme Manager"), mem_fun(*this, &ARDOUR_UI::toggle_theme_manager));
215 ActionManager::register_toggle_action (common_actions, X_("ToggleKeyEditor"), _("Keybindings"), mem_fun(*this, &ARDOUR_UI::toggle_key_editor));
216 ActionManager::register_toggle_action (common_actions, X_("ToggleBundleManager"), _("Bundle Manager"), mem_fun(*this, &ARDOUR_UI::toggle_bundle_manager));
218 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));
219 ActionManager::session_sensitive_actions.push_back (act);
220 act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, 1));
221 ActionManager::session_sensitive_actions.push_back (act);
222 act = ActionManager::register_action (common_actions, X_("AddMIDITrack"), _("Add MIDI Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_midi_track), 1));
223 ActionManager::session_sensitive_actions.push_back (act);
224 //act = ActionManager::register_action (common_actions, X_("AddMidiBus"), _("Add Midi Bus"), mem_fun(*this, &ARDOUR_UI::session_add_midi_bus));
225 //ActionManager::session_sensitive_actions.push_back (act);
226 act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
227 ActionManager::session_sensitive_actions.push_back (act);
228 act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("Remove Last Capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
229 ActionManager::session_sensitive_actions.push_back (act);
231 Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
233 /* do-nothing action for the "transport" menu bar item */
235 ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
237 /* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
238 menus and via button proxies.
241 act = ActionManager::register_action (transport_actions, X_("Stop"), _("Stop"), mem_fun(*this, &ARDOUR_UI::transport_stop));
242 ActionManager::session_sensitive_actions.push_back (act);
243 ActionManager::transport_sensitive_actions.push_back (act);
244 act = ActionManager::register_action (transport_actions, X_("Roll"), _("Roll"), mem_fun(*this, &ARDOUR_UI::transport_roll));
245 ActionManager::session_sensitive_actions.push_back (act);
246 ActionManager::transport_sensitive_actions.push_back (act);
248 ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false));
249 ActionManager::session_sensitive_actions.push_back (act);
250 ActionManager::transport_sensitive_actions.push_back (act);
251 ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop and Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true));
252 ActionManager::session_sensitive_actions.push_back (act);
253 ActionManager::transport_sensitive_actions.push_back (act);
255 /* these two behave as follows:
257 - if transport speed != 1.0 or != -1.0, change speed to 1.0 or -1.0 (respectively)
258 - otherwise do nothing
261 ActionManager::register_action (transport_actions, X_("TransitionToRoll"), _("Transition To Roll"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), true));
262 ActionManager::session_sensitive_actions.push_back (act);
263 ActionManager::session_sensitive_actions.push_back (act);
265 ActionManager::register_action (transport_actions, X_("TransitionToReverse"), _("Transition To Reverse"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), false));
266 ActionManager::session_sensitive_actions.push_back (act);
267 ActionManager::session_sensitive_actions.push_back (act);
270 act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
271 ActionManager::session_sensitive_actions.push_back (act);
272 ActionManager::transport_sensitive_actions.push_back (act);
273 act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selection"), mem_fun(*this, &ARDOUR_UI::transport_play_selection));
274 ActionManager::session_sensitive_actions.push_back (act);
275 ActionManager::transport_sensitive_actions.push_back (act);
277 act = ActionManager::register_action (transport_actions, X_("Record"), _("Enable Record"), bind (mem_fun(*this, &ARDOUR_UI::transport_record), false));
278 ActionManager::session_sensitive_actions.push_back (act);
279 act = ActionManager::register_action (transport_actions, X_("record-roll"), _("Start Recording"), bind (mem_fun(*this, &ARDOUR_UI::transport_record), true));
280 ActionManager::session_sensitive_actions.push_back (act);
281 ActionManager::transport_sensitive_actions.push_back (act);
282 act = ActionManager::register_action (transport_actions, X_("Rewind"), _("Rewind"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 0));
283 ActionManager::session_sensitive_actions.push_back (act);
284 ActionManager::transport_sensitive_actions.push_back (act);
285 act = ActionManager::register_action (transport_actions, X_("RewindSlow"), _("Rewind (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), -1));
286 ActionManager::session_sensitive_actions.push_back (act);
287 ActionManager::transport_sensitive_actions.push_back (act);
288 act = ActionManager::register_action (transport_actions, X_("RewindFast"), _("Rewind (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 1));
289 ActionManager::session_sensitive_actions.push_back (act);
290 ActionManager::transport_sensitive_actions.push_back (act);
291 act = ActionManager::register_action (transport_actions, X_("Forward"), _("Forward"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 0));
292 ActionManager::session_sensitive_actions.push_back (act);
293 ActionManager::transport_sensitive_actions.push_back (act);
294 act = ActionManager::register_action (transport_actions, X_("ForwardSlow"), _("Forward (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), -1));
295 ActionManager::session_sensitive_actions.push_back (act);
296 ActionManager::transport_sensitive_actions.push_back (act);
297 act = ActionManager::register_action (transport_actions, X_("ForwardFast"), _("Forward (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 1));
298 ActionManager::session_sensitive_actions.push_back (act);
299 ActionManager::transport_sensitive_actions.push_back (act);
300 act = ActionManager::register_action (transport_actions, X_("GotoZero"), _("Goto Zero"), mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
301 ActionManager::session_sensitive_actions.push_back (act);
302 ActionManager::transport_sensitive_actions.push_back (act);
303 act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Goto Start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
304 ActionManager::session_sensitive_actions.push_back (act);
305 ActionManager::transport_sensitive_actions.push_back (act);
306 act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Goto End"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
307 ActionManager::session_sensitive_actions.push_back (act);
308 ActionManager::transport_sensitive_actions.push_back (act);
309 act = ActionManager::register_action (transport_actions, X_("GotoWallClock"), _("Goto Wall Clock"), mem_fun(*this, &ARDOUR_UI::transport_goto_wallclock));
310 ActionManager::session_sensitive_actions.push_back (act);
311 ActionManager::transport_sensitive_actions.push_back (act);
313 act = ActionManager::register_action (transport_actions, X_("focus-on-clock"), _("Focus On Clock"), mem_fun(primary_clock, &AudioClock::focus));
314 ActionManager::session_sensitive_actions.push_back (act);
315 ActionManager::transport_sensitive_actions.push_back (act);
317 act = ActionManager::register_action (transport_actions, X_("primary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::BBT));
318 ActionManager::session_sensitive_actions.push_back (act);
319 act = ActionManager::register_action (transport_actions, X_("primary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::MinSec));
320 ActionManager::session_sensitive_actions.push_back (act);
321 act = ActionManager::register_action (transport_actions, X_("primary-clock-samples"), _("Samples"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Frames));
322 ActionManager::session_sensitive_actions.push_back (act);
323 act = ActionManager::register_action (transport_actions, X_("primary-clock-off"), _("Off"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Off));
324 ActionManager::session_sensitive_actions.push_back (act);
326 act = ActionManager::register_action (transport_actions, X_("secondary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::BBT));
327 ActionManager::session_sensitive_actions.push_back (act);
328 act = ActionManager::register_action (transport_actions, X_("secondary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::MinSec));
329 ActionManager::session_sensitive_actions.push_back (act);
330 act = ActionManager::register_action (transport_actions, X_("secondary-clock-samples"), _("Samples"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Frames));
331 ActionManager::session_sensitive_actions.push_back (act);
332 act = ActionManager::register_action (transport_actions, X_("secondary-clock-off"), _("Off"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Off));
333 ActionManager::session_sensitive_actions.push_back (act);
335 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch In"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
336 ActionManager::session_sensitive_actions.push_back (act);
337 ActionManager::transport_sensitive_actions.push_back (act);
338 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("Punch Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
339 ActionManager::session_sensitive_actions.push_back (act);
340 ActionManager::transport_sensitive_actions.push_back (act);
341 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunch"), _("Punch In/Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch));
342 ActionManager::session_sensitive_actions.push_back (act);
343 ActionManager::transport_sensitive_actions.push_back (act);
344 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleClick"), _("Click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
345 ActionManager::session_sensitive_actions.push_back (act);
346 ActionManager::transport_sensitive_actions.push_back (act);
347 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoInput"), _("Auto Input"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
348 ActionManager::session_sensitive_actions.push_back (act);
349 ActionManager::transport_sensitive_actions.push_back (act);
350 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoPlay"), _("Auto Play"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
351 ActionManager::session_sensitive_actions.push_back (act);
352 ActionManager::transport_sensitive_actions.push_back (act);
353 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoReturn"), _("Auto Return"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
354 ActionManager::session_sensitive_actions.push_back (act);
355 ActionManager::transport_sensitive_actions.push_back (act);
357 ActionManager::register_toggle_action (transport_actions, X_("ToggleVideoSync"), _("Sync startup to video"), mem_fun(*this, &ARDOUR_UI::toggle_video_sync));
358 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("Time Master"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
359 ActionManager::session_sensitive_actions.push_back (act);
361 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("Toggle Record Enable Track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 0U));
362 ActionManager::session_sensitive_actions.push_back (act);
363 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("Toggle Record Enable Track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 1U));
364 ActionManager::session_sensitive_actions.push_back (act);
365 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("Toggle Record Enable Track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 2U));
366 ActionManager::session_sensitive_actions.push_back (act);
367 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("Toggle Record Enable Track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 3U));
368 ActionManager::session_sensitive_actions.push_back (act);
369 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("Toggle Record Enable Track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 4U));
370 ActionManager::session_sensitive_actions.push_back (act);
371 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("Toggle Record Enable Track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 5U));
372 ActionManager::session_sensitive_actions.push_back (act);
373 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("Toggle Record Enable Track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 6U));
374 ActionManager::session_sensitive_actions.push_back (act);
375 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("Toggle Record Enable Track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 7U));
376 ActionManager::session_sensitive_actions.push_back (act);
377 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("Toggle Record Enable Track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 8U));
378 ActionManager::session_sensitive_actions.push_back (act);
379 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("Toggle Record Enable Track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
380 ActionManager::session_sensitive_actions.push_back (act);
381 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("Toggle Record Enable Track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
382 ActionManager::session_sensitive_actions.push_back (act);
383 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("Toggle Record Enable Track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
384 ActionManager::session_sensitive_actions.push_back (act);
385 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("Toggle Record Enable Track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
386 ActionManager::session_sensitive_actions.push_back (act);
387 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("Toggle Record Enable Track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
388 ActionManager::session_sensitive_actions.push_back (act);
389 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("Toggle Record Enable Track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
390 ActionManager::session_sensitive_actions.push_back (act);
391 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("Toggle Record Enable Track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
392 ActionManager::session_sensitive_actions.push_back (act);
393 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("Toggle Record Enable Track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
394 ActionManager::session_sensitive_actions.push_back (act);
395 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("Toggle Record Enable Track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
396 ActionManager::session_sensitive_actions.push_back (act);
397 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("Toggle Record Enable Track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
398 ActionManager::session_sensitive_actions.push_back (act);
399 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("Toggle Record Enable Track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
400 ActionManager::session_sensitive_actions.push_back (act);
401 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("Toggle Record Enable Track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
402 ActionManager::session_sensitive_actions.push_back (act);
403 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("Toggle Record Enable Track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
404 ActionManager::session_sensitive_actions.push_back (act);
405 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("Toggle Record Enable Track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
406 ActionManager::session_sensitive_actions.push_back (act);
407 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("Toggle Record Enable Track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
408 ActionManager::session_sensitive_actions.push_back (act);
409 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("Toggle Record Enable Track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
410 ActionManager::session_sensitive_actions.push_back (act);
411 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("Toggle Record Enable Track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
412 ActionManager::session_sensitive_actions.push_back (act);
413 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("Toggle Record Enable Track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
414 ActionManager::session_sensitive_actions.push_back (act);
415 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("Toggle Record Enable Track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
416 ActionManager::session_sensitive_actions.push_back (act);
417 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("Toggle Record Enable Track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
418 ActionManager::session_sensitive_actions.push_back (act);
419 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("Toggle Record Enable Track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
420 ActionManager::session_sensitive_actions.push_back (act);
421 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("Toggle Record Enable Track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
422 ActionManager::session_sensitive_actions.push_back (act);
423 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("Toggle Record Enable Track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
424 ActionManager::session_sensitive_actions.push_back (act);
426 Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
428 shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Percentage)));
429 shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Semitones)));
431 Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
433 act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
434 ActionManager::session_sensitive_actions.push_back (act);
435 act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mmc));
436 ActionManager::session_sensitive_actions.push_back (act);
437 act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
438 ActionManager::session_sensitive_actions.push_back (act);
439 act = ActionManager::register_toggle_action (option_actions, X_("SendMidiClock"), _("Send MIDI Clock"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_clock));
440 ActionManager::session_sensitive_actions.push_back (act);
441 act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI Feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
442 ActionManager::session_sensitive_actions.push_back (act);
443 act = ActionManager::register_toggle_action (option_actions, X_("ToggleTapeMachineMode"), _("Tape Machine Mode"), mem_fun (*this, &ARDOUR_UI::toggle_TapeMachineMode));
444 ActionManager::session_sensitive_actions.push_back (act);
446 ActionManager::register_toggle_action (option_actions, X_("SyncEditorAndMixerTrackOrder"), _("Sync Editor and Mixer Track Order"), mem_fun (*this, &ARDOUR_UI::toggle_sync_order_keys));
447 ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop Plugins with Transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
448 ActionManager::register_toggle_action (option_actions, X_("NewPluginsActive"), _("New Plugins are Active"), mem_fun (*this, &ARDOUR_UI::toggle_new_plugins_active));
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));
470 ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalNone"), _("No processor handling"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalNone));
472 // as of September 10th 2007, Valgrind cannot handle various FPU flag setting instructions
475 if (getenv ("ARDOUR_RUNNING_UNDER_VALGRIND")) {
477 /* we still need these actions to exist, but make them all insensitive */
479 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZ"), _("Use FlushToZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZ));
480 act->set_sensitive (false);
481 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalDAZ"), _("Use DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalDAZ));
482 act->set_sensitive (false);
483 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZDAZ"), _("Use FlushToZero & DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZDAZ));
484 act->set_sensitive (false);
490 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZ"), _("Use FlushToZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZ));
491 if (!fpu.has_flush_to_zero()) {
492 act->set_sensitive (false);
495 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalDAZ"), _("Use DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalDAZ));
496 if (!fpu.has_denormals_are_zero()) {
497 act->set_sensitive (false);
500 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZDAZ"), _("Use FlushToZero & DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZDAZ));
501 if (!fpu.has_flush_to_zero() || !fpu.has_denormals_are_zero()) {
502 act->set_sensitive (false);
506 act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not Run Plugins While Recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
507 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);
513 act = ActionManager::register_toggle_action (option_actions, X_("SoloMuteOverride"), _("Override Muting"), mem_fun (*this, &ARDOUR_UI::toggle_SoloMuteOverride));
514 ActionManager::session_sensitive_actions.push_back (act);
516 /* act = ActionManager::register_action (option_actions, X_("DisableAllPlugins"), _("Disable All Plugins"), mem_fun (*this, &ARDOUR_UI::disable_all_plugins));
517 ActionManager::session_sensitive_actions.push_back (act);
518 act = ActionManager::register_action (option_actions, X_("ABAllPlugins"), _("A/B All Plugins"), mem_fun (*this, &ARDOUR_UI::ab_all_plugins));
519 ActionManager::session_sensitive_actions.push_back (act); */
521 /* !!! REMEMBER THAT RADIO ACTIONS HAVE TO BE HANDLED WITH MORE FINESSE THAN SIMPLE TOGGLES !!! */
523 RadioAction::Group meter_falloff_group;
524 RadioAction::Group meter_hold_group;
526 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffOff));
527 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlowest"), _("Slowest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlowest));
528 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlow"), _("Slow"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlow));
529 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffMedium));
530 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFast"), _("Fast"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFast));
531 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFaster"), _("Faster"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFaster));
532 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFastest"), _("Fastest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFastest));
534 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldOff));
535 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldShort"), _("Short"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldShort));
536 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldMedium));
537 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldLong"), _("Long"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldLong));
539 RadioAction::Group file_header_group;
541 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));
542 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));
543 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));
544 // 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));
545 // 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));
546 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));
548 RadioAction::Group file_data_group;
551 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));
552 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));
553 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));
555 RadioAction::Group monitoring_group;
557 /* it would be nice not to even show this item, but that messes up the
558 menus which are not dynamically modified at runtime. so we make it
559 sensitive only if it makes sense.
562 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK Does Monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
563 if (!engine->can_request_hardware_monitoring()) {
564 act->set_sensitive (false);
566 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour Does Monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
567 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));
569 RadioAction::Group solo_group;
571 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)));
572 ActionManager::session_sensitive_actions.push_back (act);
573 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)));
574 ActionManager::session_sensitive_actions.push_back (act);
576 RadioAction::Group input_auto_connect_group;
578 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)));
579 ActionManager::session_sensitive_actions.push_back (act);
580 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)));
581 ActionManager::session_sensitive_actions.push_back (act);
583 RadioAction::Group output_auto_connect_group;
585 act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectPhysical"), _("Auto-connect Outputs to Physical Outputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), AutoConnectPhysical)));
586 ActionManager::session_sensitive_actions.push_back (act);
587 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)));
588 ActionManager::session_sensitive_actions.push_back (act);
589 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)));
590 ActionManager::session_sensitive_actions.push_back (act);
592 RadioAction::Group remote_group;
594 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)));
595 ActionManager::session_sensitive_actions.push_back (act);
596 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)));
597 ActionManager::session_sensitive_actions.push_back (act);
598 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)));
599 ActionManager::session_sensitive_actions.push_back (act);
601 act = ActionManager::register_toggle_action (option_actions, X_("AutoRebinding"), _("Auto Rebind Controls"), mem_fun (*(this->mixer), &Mixer_UI::toggle_auto_rebinding));
602 ActionManager::session_sensitive_actions.push_back (act);
605 ActionManager::add_action_group (shuttle_actions);
606 ActionManager::add_action_group (option_actions);
607 ActionManager::add_action_group (jack_actions);
608 ActionManager::add_action_group (transport_actions);
609 ActionManager::add_action_group (main_actions);
610 ActionManager::add_action_group (common_actions);
614 ARDOUR_UI::toggle_control_protocol (ControlProtocolInfo* cpi)
617 /* this happens when we build the menu bar when control protocol support
618 has been used in the past for some given protocol - the item needs
619 to be made active, but there is no session yet.
624 if (cpi->protocol == 0) {
625 ControlProtocolManager::instance().instantiate (*cpi);
627 ControlProtocolManager::instance().teardown (*cpi);
632 ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const char* group, string action)
635 /* this happens when we build the menu bar when control protocol support
636 has been used in the past for some given protocol - the item needs
637 to be made active, but there is no session yet.
643 Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action.c_str());
646 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
649 bool x = tact->get_active();
651 if (x != cpi->protocol->get_feedback()) {
652 cpi->protocol->set_feedback (x);
660 ARDOUR_UI::set_jack_buffer_size (nframes_t nframes)
662 Glib::RefPtr<Action> action;
663 const char* action_name = 0;
667 action_name = X_("JACKLatency32");
670 action_name = X_("JACKLatency64");
673 action_name = X_("JACKLatency128");
676 action_name = X_("JACKLatency512");
679 action_name = X_("JACKLatency1024");
682 action_name = X_("JACKLatency2048");
685 action_name = X_("JACKLatency4096");
688 action_name = X_("JACKLatency8192");
691 /* XXX can we do anything useful ? */
697 action = ActionManager::get_action (X_("JACK"), action_name);
700 Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
702 if (ract && ract->get_active()) {
703 engine->request_buffer_size (nframes);
704 update_sample_rate (0);
711 ARDOUR_UI::build_control_surface_menu ()
713 list<ControlProtocolInfo*>::iterator i;
716 /* !!! this has to match the top level entry from ardour.menus */
718 string ui = "<menubar name='Main' action='MainMenu'>\n<menu name='Options' action='Options'>\n<menu action='ControlSurfaces'><separator/>\n";
720 for (i = ControlProtocolManager::instance().control_protocol_info.begin(); i != ControlProtocolManager::instance().control_protocol_info.end(); ++i) {
722 if (!(*i)->mandatory) {
724 string action_name = "Toggle";
725 action_name += legalize_for_path ((*i)->name);
726 action_name += "Surface";
728 string action_label = (*i)->name;
730 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), action_label.c_str(),
731 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol), *i)));
733 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
735 with_feedback = false;
737 if ((*i)->protocol || (*i)->requested) {
741 ui += "<menuitem action='";
745 if ((*i)->supports_feedback) {
747 string submenu_name = action_name;
749 submenu_name += "SubMenu";
751 ActionManager::register_action (editor->editor_actions, submenu_name.c_str(), _("Controls"));
753 action_name += "Feedback";
755 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), _("Feedback"),
756 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol_feedback),
761 ui += "<menu action='";
763 ui += "'>\n<menuitem action='";
765 ui += "'/>\n</menu>\n";
767 if ((*i)->protocol) {
768 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
769 tact->set_active ((*i)->protocol->get_feedback ());
775 ui += "</menu>\n</menu>\n</menubar>\n";
777 ActionManager::ui_manager->add_ui_from_string (ui);
781 ARDOUR_UI::build_menu_bar ()
783 if (!Profile->get_sae()) {
784 build_control_surface_menu ();
787 menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
788 menu_bar->set_name ("MainMenuBar");
791 * This is needed because this property does not get installed
792 * until the Menu GObject class is registered, which happens
793 * when the first menu instance is created.
795 // XXX bug in gtkmm causes this to popup an error message
796 // Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;
797 // so use this instead ...
798 gtk_settings_set_long_property (gtk_settings_get_default(), "gtk-can-change-accels", 1, "Ardour:designers");
800 wall_clock_box.add (wall_clock_label);
801 wall_clock_box.set_name ("WallClock");
802 wall_clock_label.set_name ("WallClock");
804 disk_space_box.add (disk_space_label);
805 disk_space_box.set_name ("WallClock");
806 disk_space_label.set_name ("WallClock");
808 cpu_load_box.add (cpu_load_label);
809 cpu_load_box.set_name ("CPULoad");
810 cpu_load_label.set_name ("CPULoad");
812 buffer_load_box.add (buffer_load_label);
813 buffer_load_box.set_name ("BufferLoad");
814 buffer_load_label.set_name ("BufferLoad");
816 sample_rate_box.add (sample_rate_label);
817 sample_rate_box.set_name ("SampleRate");
818 sample_rate_label.set_name ("SampleRate");
821 menu_hbox.pack_start (*menu_bar, true, true);
823 use_menubar_as_top_menubar ();
826 if (!Profile->get_small_screen()) {
828 // OSX provides its own wallclock, thank you very much
829 menu_hbox.pack_end (wall_clock_box, false, false, 2);
831 menu_hbox.pack_end (disk_space_box, false, false, 4);
834 menu_hbox.pack_end (cpu_load_box, false, false, 4);
835 menu_hbox.pack_end (buffer_load_box, false, false, 4);
836 menu_hbox.pack_end (sample_rate_box, false, false, 4);
838 menu_bar_base.set_name ("MainMenuBar");
839 menu_bar_base.add (menu_hbox);
843 ARDOUR_UI::use_menubar_as_top_menubar ()
846 ige_mac_menu_set_menu_bar ((GtkMenuShell*) menu_bar->gobj());
847 // ige_mac_menu_set_quit_menu_item (some_item->gobj());
853 ARDOUR_UI::setup_clock ()
855 ARDOUR_UI::Clock.connect (bind (mem_fun (big_clock, &AudioClock::set), false));
857 big_clock_window = new Window (WINDOW_TOPLEVEL);
859 big_clock_window->set_keep_above (true);
860 big_clock_window->set_border_width (0);
861 big_clock_window->add (big_clock);
863 WindowTitle title(Glib::get_application_name());
865 big_clock_window->set_title (title.get_string());
866 big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
867 big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window, (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
868 big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
870 manage_window (*big_clock_window);
874 ARDOUR_UI::float_big_clock (Gtk::Window* parent)
876 if (big_clock_window) {
878 big_clock_window->set_transient_for (*parent);
880 gtk_window_set_transient_for (big_clock_window->gobj(), (GtkWindow*) 0);