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)));
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 audiofile(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"), (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_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Preferences"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
205 act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
206 ActionManager::session_sensitive_actions.push_back (act);
207 act = ActionManager::register_toggle_action (common_actions, X_("ToggleConnections"), _("Connections"), mem_fun(*this, &ARDOUR_UI::toggle_connection_editor));
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 + 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_("UseMIDIClock"), _("Use MIDI Clock"), mem_fun (*this, &ARDOUR_UI::toggle_use_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);
444 act = ActionManager::register_toggle_action (option_actions, X_("UseOSC"), _("Use OSC"), mem_fun (*this, &ARDOUR_UI::toggle_use_osc));
446 act->set_sensitive (false);
448 act = ActionManager::register_toggle_action (option_actions, X_("ToggleTapeMachineMode"), _("Tape Machine mode"), mem_fun (*this, &ARDOUR_UI::toggle_TapeMachineMode));
449 ActionManager::session_sensitive_actions.push_back (act);
451 ActionManager::register_toggle_action (option_actions, X_("SyncEditorAndMixerTrackOrder"), _("Sync Editor and Mixer track order"), mem_fun (*this, &ARDOUR_UI::toggle_sync_order_keys));
452 ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
453 ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
454 ActionManager::register_toggle_action (option_actions, X_("PeriodicSafetyBackups"), _("Make periodic safety backups"), mem_fun (*this, &ARDOUR_UI::toggle_PeriodicSafetyBackups));
455 ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
456 ActionManager::register_toggle_action (option_actions, X_("CreateXrunMarker"), _("Create marker at xrun location"), mem_fun (*this, &ARDOUR_UI::toggle_CreateXrunMarker));
457 ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
458 ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
459 ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
460 ActionManager::register_toggle_action (option_actions, X_("RegionEquivalentsOverlap"), _("Region equivalents overlap"), mem_fun (*this, &ARDOUR_UI::toggle_RegionEquivalentsOverlap));
461 ActionManager::register_toggle_action (option_actions, X_("PrimaryClockDeltaEditCursor"), _("Primary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor));
462 ActionManager::register_toggle_action (option_actions, X_("SecondaryClockDeltaEditCursor"), _("Secondary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor));
463 ActionManager::register_toggle_action (option_actions, X_("ShowTrackMeters"), _("Enable Editor Meters"), mem_fun (*this, &ARDOUR_UI::toggle_ShowTrackMeters));
464 ActionManager::register_toggle_action (option_actions, X_("OnlyCopyImportedFiles"), _("Always copy imported files"), mem_fun (*this, &ARDOUR_UI::toggle_only_copy_imported_files));
465 ActionManager::register_toggle_action (option_actions, X_("RubberbandingSnapsToGrid"), _("Rubberbanding Snaps to Grid"), mem_fun (*this, &ARDOUR_UI::toggle_rubberbanding_snaps_to_grid));
466 ActionManager::register_toggle_action (option_actions, X_("AutoAnalyseAudio"), _("Auto-analyse new audio"), mem_fun (*this, &ARDOUR_UI::toggle_auto_analyse_audio));
468 ActionManager::register_toggle_action (option_actions, X_("DefaultNarrowMS"), _("Use narrow mixer strips"), mem_fun (*this, &ARDOUR_UI::toggle_use_narrow_ms));
469 ActionManager::register_toggle_action (option_actions, X_("NameNewMarkers"), _("Name New Markers"), mem_fun (*this, &ARDOUR_UI::toggle_NameNewMarkers));
471 RadioAction::Group denormal_group;
473 ActionManager::register_toggle_action (option_actions, X_("DenormalProtection"), _("Use DC bias"), mem_fun (*this, &ARDOUR_UI::toggle_denormal_protection));
474 ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalNone"), _("No processor handling"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalNone));
476 // as of September 10th 2007, Valgrind cannot handle various FPU flag setting instructions
479 if (getenv ("ARDOUR_RUNNING_UNDER_VALGRIND")) {
481 /* we still need these actions to exist, but make them all insensitive */
483 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZ"), _("Use FlushToZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZ));
484 act->set_sensitive (false);
485 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalDAZ"), _("Use DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalDAZ));
486 act->set_sensitive (false);
487 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZDAZ"), _("Use FlushToZero & DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZDAZ));
488 act->set_sensitive (false);
494 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZ"), _("Use FlushToZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZ));
495 if (!fpu.has_flush_to_zero()) {
496 act->set_sensitive (false);
499 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalDAZ"), _("Use DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalDAZ));
500 if (!fpu.has_denormals_are_zero()) {
501 act->set_sensitive (false);
504 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZDAZ"), _("Use FlushToZero & DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZDAZ));
505 if (!fpu.has_flush_to_zero() || !fpu.has_denormals_are_zero()) {
506 act->set_sensitive (false);
510 act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
511 ActionManager::session_sensitive_actions.push_back (act);
513 act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
514 ActionManager::session_sensitive_actions.push_back (act);
515 act = ActionManager::register_toggle_action (option_actions, X_("ShowSoloMutes"), _("Show solo muting"), mem_fun (*this, &ARDOUR_UI::toggle_ShowSoloMutes));
516 ActionManager::session_sensitive_actions.push_back (act);
518 /* act = ActionManager::register_action (option_actions, X_("DisableAllPlugins"), _("Disable All Plugins"), mem_fun (*this, &ARDOUR_UI::disable_all_plugins));
519 ActionManager::session_sensitive_actions.push_back (act);
520 act = ActionManager::register_action (option_actions, X_("ABAllPlugins"), _("A/B All Plugins"), mem_fun (*this, &ARDOUR_UI::ab_all_plugins));
521 ActionManager::session_sensitive_actions.push_back (act); */
523 /* !!! REMEMBER THAT RADIO ACTIONS HAVE TO BE HANDLED WITH MORE FINESSE THAN SIMPLE TOGGLES !!! */
525 RadioAction::Group meter_falloff_group;
526 RadioAction::Group meter_hold_group;
528 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffOff));
529 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlowest"), _("Slowest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlowest));
530 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlow"), _("Slow"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlow));
531 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffMedium));
532 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFast"), _("Fast"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFast));
533 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFaster"), _("Faster"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFaster));
534 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFastest"), _("Fastest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFastest));
536 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldOff));
537 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldShort"), _("Short"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldShort));
538 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldMedium));
539 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldLong"), _("Long"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldLong));
541 RadioAction::Group file_header_group;
543 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));
544 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));
545 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));
546 // 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));
547 // 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));
548 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));
550 RadioAction::Group file_data_group;
553 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));
554 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));
555 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));
557 RadioAction::Group monitoring_group;
559 /* it would be nice not to even show this item, but that messes up the
560 menus which are not dynamically modified at runtime. so we make it
561 sensitive only if it makes sense.
564 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
565 if (engine->can_request_hardware_monitoring()) {
566 act->set_sensitive (false);
568 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
569 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));
571 RadioAction::Group solo_group;
573 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)));
574 ActionManager::session_sensitive_actions.push_back (act);
575 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)));
576 ActionManager::session_sensitive_actions.push_back (act);
578 RadioAction::Group input_auto_connect_group;
580 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)));
581 ActionManager::session_sensitive_actions.push_back (act);
582 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)));
583 ActionManager::session_sensitive_actions.push_back (act);
585 RadioAction::Group output_auto_connect_group;
587 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)));
588 ActionManager::session_sensitive_actions.push_back (act);
589 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)));
590 ActionManager::session_sensitive_actions.push_back (act);
591 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)));
592 ActionManager::session_sensitive_actions.push_back (act);
594 RadioAction::Group remote_group;
596 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)));
597 ActionManager::session_sensitive_actions.push_back (act);
598 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)));
599 ActionManager::session_sensitive_actions.push_back (act);
600 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)));
601 ActionManager::session_sensitive_actions.push_back (act);
603 act = ActionManager::register_toggle_action (option_actions, X_("AutoRebinding"), _("Auto Rebind Controls"), mem_fun (*(this->mixer), &Mixer_UI::toggle_auto_rebinding));
604 ActionManager::session_sensitive_actions.push_back (act);
607 ActionManager::add_action_group (shuttle_actions);
608 ActionManager::add_action_group (option_actions);
609 ActionManager::add_action_group (jack_actions);
610 ActionManager::add_action_group (transport_actions);
611 ActionManager::add_action_group (main_actions);
612 ActionManager::add_action_group (common_actions);
616 ARDOUR_UI::toggle_control_protocol (ControlProtocolInfo* cpi)
619 /* this happens when we build the menu bar when control protocol support
620 has been used in the past for some given protocol - the item needs
621 to be made active, but there is no session yet.
626 if (cpi->protocol == 0) {
627 ControlProtocolManager::instance().instantiate (*cpi);
629 ControlProtocolManager::instance().teardown (*cpi);
634 ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const char* group, string action)
637 /* this happens when we build the menu bar when control protocol support
638 has been used in the past for some given protocol - the item needs
639 to be made active, but there is no session yet.
645 Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action.c_str());
648 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
651 bool x = tact->get_active();
653 if (x != cpi->protocol->get_feedback()) {
654 cpi->protocol->set_feedback (x);
662 ARDOUR_UI::set_jack_buffer_size (nframes_t nframes)
664 Glib::RefPtr<Action> action;
665 const char* action_name = 0;
669 action_name = X_("JACKLatency32");
672 action_name = X_("JACKLatency64");
675 action_name = X_("JACKLatency128");
678 action_name = X_("JACKLatency512");
681 action_name = X_("JACKLatency1024");
684 action_name = X_("JACKLatency2048");
687 action_name = X_("JACKLatency4096");
690 action_name = X_("JACKLatency8192");
693 /* XXX can we do anything useful ? */
699 action = ActionManager::get_action (X_("JACK"), action_name);
702 Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
704 if (ract && ract->get_active()) {
705 engine->request_buffer_size (nframes);
706 update_sample_rate (0);
713 ARDOUR_UI::build_control_surface_menu ()
715 list<ControlProtocolInfo*>::iterator i;
718 /* !!! this has to match the top level entry from ardour.menus */
720 string ui = "<menubar name='Main' action='MainMenu'>\n<menu name='Options' action='Options'>\n<menu action='ControlSurfaces'><separator/>\n";
722 for (i = ControlProtocolManager::instance().control_protocol_info.begin(); i != ControlProtocolManager::instance().control_protocol_info.end(); ++i) {
724 if (!(*i)->mandatory) {
726 string action_name = "Toggle";
727 action_name += legalize_for_path ((*i)->name);
728 action_name += "Surface";
730 string action_label = (*i)->name;
732 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), action_label.c_str(),
733 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol), *i)));
735 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
737 with_feedback = false;
739 if ((*i)->protocol || (*i)->requested) {
743 ui += "<menuitem action='";
747 if ((*i)->supports_feedback) {
749 string submenu_name = action_name;
751 submenu_name += "SubMenu";
753 ActionManager::register_action (editor->editor_actions, submenu_name.c_str(), _("Controls"));
755 action_name += "Feedback";
757 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), _("Feedback"),
758 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol_feedback),
763 ui += "<menu action='";
765 ui += "'>\n<menuitem action='";
767 ui += "'/>\n</menu>\n";
769 if ((*i)->protocol) {
770 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
771 tact->set_active ((*i)->protocol->get_feedback ());
777 ui += "</menu>\n</menu>\n</menubar>\n";
779 ActionManager::ui_manager->add_ui_from_string (ui);
783 ARDOUR_UI::build_menu_bar ()
785 if (!Profile->get_sae()) {
786 build_control_surface_menu ();
789 menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
790 menu_bar->set_name ("MainMenuBar");
793 * This is needed because this property does not get installed
794 * until the Menu GObject class is registered, which happens
795 * when the first menu instance is created.
797 // XXX bug in gtkmm causes this to popup an error message
798 // Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;
799 // so use this instead ...
800 gtk_settings_set_long_property (gtk_settings_get_default(), "gtk-can-change-accels", 1, "Ardour:designers");
802 wall_clock_box.add (wall_clock_label);
803 wall_clock_box.set_name ("WallClock");
804 wall_clock_label.set_name ("WallClock");
806 disk_space_box.add (disk_space_label);
807 disk_space_box.set_name ("WallClock");
808 disk_space_label.set_name ("WallClock");
810 cpu_load_box.add (cpu_load_label);
811 cpu_load_box.set_name ("CPULoad");
812 cpu_load_label.set_name ("CPULoad");
814 buffer_load_box.add (buffer_load_label);
815 buffer_load_box.set_name ("BufferLoad");
816 buffer_load_label.set_name ("BufferLoad");
818 sample_rate_box.add (sample_rate_label);
819 sample_rate_box.set_name ("SampleRate");
820 sample_rate_label.set_name ("SampleRate");
823 menu_hbox.pack_start (*menu_bar, true, true);
825 use_menubar_as_top_menubar ();
828 if (!Profile->get_small_screen()) {
830 // OSX provides its own wallclock, thank you very much
831 menu_hbox.pack_end (wall_clock_box, false, false, 2);
833 menu_hbox.pack_end (disk_space_box, false, false, 4);
836 menu_hbox.pack_end (cpu_load_box, false, false, 4);
837 menu_hbox.pack_end (buffer_load_box, false, false, 4);
838 menu_hbox.pack_end (sample_rate_box, false, false, 4);
840 menu_bar_base.set_name ("MainMenuBar");
841 menu_bar_base.add (menu_hbox);
845 ARDOUR_UI::use_menubar_as_top_menubar ()
848 ige_mac_menu_set_menu_bar ((GtkMenuShell*) menu_bar->gobj());
849 // ige_mac_menu_set_quit_menu_item (some_item->gobj());
855 ARDOUR_UI::setup_clock ()
857 ARDOUR_UI::Clock.connect (bind (mem_fun (big_clock, &AudioClock::set), false));
859 big_clock_window = new Window (WINDOW_TOPLEVEL);
861 big_clock_window->set_keep_above (true);
862 big_clock_window->set_border_width (0);
863 big_clock_window->add (big_clock);
865 WindowTitle title(Glib::get_application_name());
867 big_clock_window->set_title (title.get_string());
868 big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
869 big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window, (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
870 big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
872 manage_window (*big_clock_window);
876 ARDOUR_UI::float_big_clock (Gtk::Window* parent)
878 if (big_clock_window) {
880 big_clock_window->set_transient_for (*parent);
882 gtk_window_set_transient_for (big_clock_window->gobj(), (GtkWindow*) 0);