2 Copyright (C) 20002-2004 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 /* This file contains any ARDOUR_UI methods that require knowledge of
21 the editor, and exists so that no compilation dependency exists
22 between the main ARDOUR_UI modules and the PublicEditor class. This
23 is to cut down on the nasty compile times for both these classes.
26 #include <pbd/pathscanner.h>
29 #include <glibmm/miscutils.h>
31 #include <gtkmm2ext/utils.h>
32 #include <gtkmm2ext/window_title.h>
35 #include "ardour_ui.h"
36 #include "public_editor.h"
37 #include "audio_clock.h"
38 #include "engine_dialog.h"
44 #include <gtkmm2ext/sync-menu.h>
47 #include <ardour/session.h>
48 #include <ardour/profile.h>
49 #include <ardour/audioengine.h>
50 #include <ardour/control_protocol_manager.h>
52 #include <control_protocol/control_protocol.h>
57 using namespace ARDOUR;
59 using namespace Gtkmm2ext;
65 ARDOUR_UI::create_editor ()
69 editor = new Editor ();
72 catch (failed_constructor& err) {
76 editor->Realized.connect (mem_fun (*this, &ARDOUR_UI::editor_realized));
77 editor->signal_window_state_event().connect (sigc::bind (mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), true));
83 ARDOUR_UI::install_actions ()
85 Glib::RefPtr<ActionGroup> main_actions = ActionGroup::create (X_("Main"));
86 Glib::RefPtr<Action> act;
88 /* menus + submenus that need action items */
90 ActionManager::register_action (main_actions, X_("Session"), _("Session"));
91 ActionManager::register_action (main_actions, X_("Files"), _("Import/Export"));
92 ActionManager::register_action (main_actions, X_("Cleanup"), _("Cleanup"));
93 ActionManager::register_action (main_actions, X_("Sync"), _("Sync"));
94 ActionManager::register_action (main_actions, X_("Options"), _("Options"));
95 ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options"));
96 ActionManager::register_action (main_actions, X_("Help"), _("Help"));
97 ActionManager::register_action (main_actions, X_("KeyMouseActions"), _("Misc. Shortcuts"));
98 ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format"));
99 ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("File Type"));
100 ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Sample Format"));
101 ActionManager::register_action (main_actions, X_("ControlSurfaces"), _("Control Surfaces"));
102 ActionManager::register_action (main_actions, X_("Metering"), _("Metering"));
103 ActionManager::register_action (main_actions, X_("MeteringFallOffRate"), _("Fall off rate"));
104 ActionManager::register_action (main_actions, X_("MeteringHoldTime"), _("Hold Time"));
105 ActionManager::register_action (main_actions, X_("Denormals"), _("Denormal Handling"));
107 /* the real actions */
109 act = ActionManager::register_action (main_actions, X_("New"), _("New"), hide_return (bind (mem_fun(*this, &ARDOUR_UI::get_session_parameters), true, true)));
111 ActionManager::register_action (main_actions, X_("Open"), _("Open"), mem_fun(*this, &ARDOUR_UI::open_session));
112 ActionManager::register_action (main_actions, X_("Recent"), _("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session));
113 act = ActionManager::register_action (main_actions, X_("Close"), _("Close"), mem_fun(*this, &ARDOUR_UI::close_session));
114 ActionManager::session_sensitive_actions.push_back (act);
116 act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus"),
117 bind (mem_fun(*this, &ARDOUR_UI::add_route), (Gtk::Window*) 0));
118 ActionManager::session_sensitive_actions.push_back (act);
121 /* <CMT Additions> */
124 vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
127 if (!results->empty()) {
128 act = ActionManager::register_action (main_actions, X_("aniConnect"), _("Connect"), (mem_fun (*editor, &PublicEditor::connect_to_image_compositor)));
129 ActionManager::session_sensitive_actions.push_back (act);
134 /* </CMT Additions> */
136 act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot"), mem_fun(*this, &ARDOUR_UI::snapshot_session));
137 ActionManager::session_sensitive_actions.push_back (act);
139 act = ActionManager::register_action (main_actions, X_("SaveTemplate"), _("Save Template..."), mem_fun(*this, &ARDOUR_UI::save_template));
140 ActionManager::session_sensitive_actions.push_back (act);
142 act = ActionManager::register_action (main_actions, X_("ExportSession"), _("Export session to audiofile..."), mem_fun (*editor, &PublicEditor::export_session));
143 ActionManager::session_sensitive_actions.push_back (act);
145 act = ActionManager::register_action (main_actions, X_("ExportSelection"), _("Export selection to audiofile..."), mem_fun (*editor, &PublicEditor::export_selection));
146 ActionManager::session_sensitive_actions.push_back (act);
147 ActionManager::time_selection_sensitive_actions.push_back (act);
149 act = ActionManager::register_action (main_actions, X_("ExportRangeMarkers"), _("Export range markers to audiofile..."), mem_fun (*editor, &PublicEditor::export_range_markers));
150 ActionManager::session_sensitive_actions.push_back (act);
151 ActionManager::range_sensitive_actions.push_back (act);
153 act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
154 ActionManager::session_sensitive_actions.push_back (act);
156 act = ActionManager::register_action (main_actions, X_("CleanupUnused"), _("Cleanup unused sources"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup));
157 ActionManager::session_sensitive_actions.push_back (act);
158 act = ActionManager::register_action (main_actions, X_("FlushWastebasket"), _("Flush wastebasket"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash));
159 ActionManager::session_sensitive_actions.push_back (act);
161 /* JACK actions for controlling ... JACK */
163 Glib::RefPtr<ActionGroup> jack_actions = ActionGroup::create (X_("JACK"));
164 ActionManager::register_action (jack_actions, X_("JACK"), _("JACK"));
165 ActionManager::register_action (jack_actions, X_("Latency"), _("Latency"));
167 act = ActionManager::register_action (jack_actions, X_("JACKReconnect"), _("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack));
168 ActionManager::jack_opposite_sensitive_actions.push_back (act);
170 act = ActionManager::register_action (jack_actions, X_("JACKDisconnect"), _("Disconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::disconnect_from_jack));
171 ActionManager::jack_sensitive_actions.push_back (act);
173 RadioAction::Group jack_latency_group;
175 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency32"), X_("32"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 32));
176 ActionManager::jack_sensitive_actions.push_back (act);
177 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency64"), X_("64"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 64));
178 ActionManager::jack_sensitive_actions.push_back (act);
179 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency128"), X_("128"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 128));
180 ActionManager::jack_sensitive_actions.push_back (act);
181 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency256"), X_("256"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 256));
182 ActionManager::jack_sensitive_actions.push_back (act);
183 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency512"), X_("512"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 512));
184 ActionManager::jack_sensitive_actions.push_back (act);
185 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency1024"), X_("1024"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 1024));
186 ActionManager::jack_sensitive_actions.push_back (act);
187 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency2048"), X_("2048"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 2048));
188 ActionManager::jack_sensitive_actions.push_back (act);
189 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency4096"), X_("4096"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 4096));
190 ActionManager::jack_sensitive_actions.push_back (act);
191 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency8192"), X_("8192"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 8192));
192 ActionManager::jack_sensitive_actions.push_back (act);
194 /* these actions are intended to be shared across all windows */
196 common_actions = ActionGroup::create (X_("Common"));
197 ActionManager::register_action (main_actions, X_("WindowMenu"), _("Window"));
198 ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (mem_fun(*this, &ARDOUR_UI::finish)));
200 /* windows visibility actions */
202 ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
204 ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
205 ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
206 ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Preferences"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
207 act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
208 ActionManager::session_sensitive_actions.push_back (act);
209 act = ActionManager::register_toggle_action (common_actions, X_("ToggleConnections"), _("Connections"), mem_fun(*this, &ARDOUR_UI::toggle_connection_editor));
210 ActionManager::session_sensitive_actions.push_back (act);
211 act = ActionManager::register_toggle_action (common_actions, X_("ToggleLocations"), _("Locations"), mem_fun(*this, &ARDOUR_UI::toggle_location_window));
212 ActionManager::session_sensitive_actions.push_back (act);
213 act = ActionManager::register_toggle_action (common_actions, X_("ToggleBigClock"), _("Big Clock"), mem_fun(*this, &ARDOUR_UI::toggle_big_clock_window));
214 ActionManager::session_sensitive_actions.push_back (act);
215 ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_about));
216 ActionManager::register_toggle_action (common_actions, X_("ToggleThemeManager"), _("Theme Manager"), mem_fun(*this, &ARDOUR_UI::toggle_theme_manager));
217 ActionManager::register_toggle_action (common_actions, X_("ToggleKeyEditor"), _("Keybindings"), mem_fun(*this, &ARDOUR_UI::toggle_key_editor));
219 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));
220 ActionManager::session_sensitive_actions.push_back (act);
221 act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, 1));
222 ActionManager::session_sensitive_actions.push_back (act);
223 act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
224 ActionManager::session_sensitive_actions.push_back (act);
225 act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("Remove Last Capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
226 ActionManager::session_sensitive_actions.push_back (act);
228 Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
230 /* do-nothing action for the "transport" menu bar item */
232 ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
234 /* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
235 menus and via button proxies.
238 act = ActionManager::register_action (transport_actions, X_("Stop"), _("Stop"), mem_fun(*this, &ARDOUR_UI::transport_stop));
239 ActionManager::session_sensitive_actions.push_back (act);
240 ActionManager::transport_sensitive_actions.push_back (act);
241 act = ActionManager::register_action (transport_actions, X_("Roll"), _("Roll"), mem_fun(*this, &ARDOUR_UI::transport_roll));
242 ActionManager::session_sensitive_actions.push_back (act);
243 ActionManager::transport_sensitive_actions.push_back (act);
245 ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false));
246 ActionManager::session_sensitive_actions.push_back (act);
247 ActionManager::transport_sensitive_actions.push_back (act);
248 ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop + Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true));
249 ActionManager::session_sensitive_actions.push_back (act);
250 ActionManager::transport_sensitive_actions.push_back (act);
252 /* these two behave as follows:
254 - if transport speed != 1.0 or != -1.0, change speed to 1.0 or -1.0 (respectively)
255 - otherwise do nothing
258 ActionManager::register_action (transport_actions, X_("TransitionToRoll"), _("Transition To Roll"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), true));
259 ActionManager::session_sensitive_actions.push_back (act);
260 ActionManager::session_sensitive_actions.push_back (act);
262 ActionManager::register_action (transport_actions, X_("TransitionToReverse"), _("Transition To Reverse"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), false));
263 ActionManager::session_sensitive_actions.push_back (act);
264 ActionManager::session_sensitive_actions.push_back (act);
267 act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
268 ActionManager::session_sensitive_actions.push_back (act);
269 ActionManager::transport_sensitive_actions.push_back (act);
270 act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selection"), mem_fun(*this, &ARDOUR_UI::transport_play_selection));
271 ActionManager::session_sensitive_actions.push_back (act);
272 ActionManager::transport_sensitive_actions.push_back (act);
274 act = ActionManager::register_action (transport_actions, X_("Record"), _("Enable Record"), bind (mem_fun(*this, &ARDOUR_UI::transport_record), false));
275 ActionManager::session_sensitive_actions.push_back (act);
276 act = ActionManager::register_action (transport_actions, X_("record-roll"), _("Start Recording"), bind (mem_fun(*this, &ARDOUR_UI::transport_record), true));
277 ActionManager::session_sensitive_actions.push_back (act);
278 ActionManager::transport_sensitive_actions.push_back (act);
279 act = ActionManager::register_action (transport_actions, X_("Rewind"), _("Rewind"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 0));
280 ActionManager::session_sensitive_actions.push_back (act);
281 ActionManager::transport_sensitive_actions.push_back (act);
282 act = ActionManager::register_action (transport_actions, X_("RewindSlow"), _("Rewind (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), -1));
283 ActionManager::session_sensitive_actions.push_back (act);
284 ActionManager::transport_sensitive_actions.push_back (act);
285 act = ActionManager::register_action (transport_actions, X_("RewindFast"), _("Rewind (Fast)"), 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_("Forward"), _("Forward"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 0));
289 ActionManager::session_sensitive_actions.push_back (act);
290 ActionManager::transport_sensitive_actions.push_back (act);
291 act = ActionManager::register_action (transport_actions, X_("ForwardSlow"), _("Forward (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), -1));
292 ActionManager::session_sensitive_actions.push_back (act);
293 ActionManager::transport_sensitive_actions.push_back (act);
294 act = ActionManager::register_action (transport_actions, X_("ForwardFast"), _("Forward (Fast)"), 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_("GotoZero"), _("Goto Zero"), mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
298 ActionManager::session_sensitive_actions.push_back (act);
299 ActionManager::transport_sensitive_actions.push_back (act);
300 act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Goto Start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
301 ActionManager::session_sensitive_actions.push_back (act);
302 ActionManager::transport_sensitive_actions.push_back (act);
303 act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Goto End"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
304 ActionManager::session_sensitive_actions.push_back (act);
305 ActionManager::transport_sensitive_actions.push_back (act);
306 act = ActionManager::register_action (transport_actions, X_("GotoWallClock"), _("Goto Wall Clock"), mem_fun(*this, &ARDOUR_UI::transport_goto_wallclock));
307 ActionManager::session_sensitive_actions.push_back (act);
308 ActionManager::transport_sensitive_actions.push_back (act);
310 act = ActionManager::register_action (transport_actions, X_("focus-on-clock"), _("Focus On Clock"), mem_fun(primary_clock, &AudioClock::focus));
311 ActionManager::session_sensitive_actions.push_back (act);
312 ActionManager::transport_sensitive_actions.push_back (act);
314 act = ActionManager::register_action (transport_actions, X_("primary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::BBT));
315 ActionManager::session_sensitive_actions.push_back (act);
316 act = ActionManager::register_action (transport_actions, X_("primary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::MinSec));
317 ActionManager::session_sensitive_actions.push_back (act);
318 act = ActionManager::register_action (transport_actions, X_("primary-clock-samples"), _("Samples"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Frames));
319 ActionManager::session_sensitive_actions.push_back (act);
320 act = ActionManager::register_action (transport_actions, X_("primary-clock-off"), _("Off"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Off));
321 ActionManager::session_sensitive_actions.push_back (act);
323 act = ActionManager::register_action (transport_actions, X_("secondary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::BBT));
324 ActionManager::session_sensitive_actions.push_back (act);
325 act = ActionManager::register_action (transport_actions, X_("secondary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::MinSec));
326 ActionManager::session_sensitive_actions.push_back (act);
327 act = ActionManager::register_action (transport_actions, X_("secondary-clock-samples"), _("Samples"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Frames));
328 ActionManager::session_sensitive_actions.push_back (act);
329 act = ActionManager::register_action (transport_actions, X_("secondary-clock-off"), _("Off"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Off));
330 ActionManager::session_sensitive_actions.push_back (act);
332 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch In"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
333 ActionManager::session_sensitive_actions.push_back (act);
334 ActionManager::transport_sensitive_actions.push_back (act);
335 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("Punch Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
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_("TogglePunch"), _("Punch In/Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch));
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_("ToggleClick"), _("Click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
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_("ToggleAutoInput"), _("Auto Input"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
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_("ToggleAutoPlay"), _("Auto Play"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
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_("ToggleAutoReturn"), _("Auto Return"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
351 ActionManager::session_sensitive_actions.push_back (act);
352 ActionManager::transport_sensitive_actions.push_back (act);
354 ActionManager::register_toggle_action (transport_actions, X_("ToggleVideoSync"), _("Sync startup to video"), mem_fun(*this, &ARDOUR_UI::toggle_video_sync));
355 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("Time master"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
356 ActionManager::session_sensitive_actions.push_back (act);
358 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("Toggle Record Enable Track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 0U));
359 ActionManager::session_sensitive_actions.push_back (act);
360 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("Toggle Record Enable Track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 1U));
361 ActionManager::session_sensitive_actions.push_back (act);
362 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("Toggle Record Enable Track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 2U));
363 ActionManager::session_sensitive_actions.push_back (act);
364 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("Toggle Record Enable Track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 3U));
365 ActionManager::session_sensitive_actions.push_back (act);
366 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("Toggle Record Enable Track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 4U));
367 ActionManager::session_sensitive_actions.push_back (act);
368 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("Toggle Record Enable Track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 5U));
369 ActionManager::session_sensitive_actions.push_back (act);
370 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("Toggle Record Enable Track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 6U));
371 ActionManager::session_sensitive_actions.push_back (act);
372 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("Toggle Record Enable Track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 7U));
373 ActionManager::session_sensitive_actions.push_back (act);
374 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("Toggle Record Enable Track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 8U));
375 ActionManager::session_sensitive_actions.push_back (act);
376 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("Toggle Record Enable Track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
377 ActionManager::session_sensitive_actions.push_back (act);
378 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("Toggle Record Enable Track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
379 ActionManager::session_sensitive_actions.push_back (act);
380 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("Toggle Record Enable Track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
381 ActionManager::session_sensitive_actions.push_back (act);
382 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("Toggle Record Enable Track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
383 ActionManager::session_sensitive_actions.push_back (act);
384 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("Toggle Record Enable Track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
385 ActionManager::session_sensitive_actions.push_back (act);
386 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("Toggle Record Enable Track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
387 ActionManager::session_sensitive_actions.push_back (act);
388 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("Toggle Record Enable Track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
389 ActionManager::session_sensitive_actions.push_back (act);
390 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("Toggle Record Enable Track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
391 ActionManager::session_sensitive_actions.push_back (act);
392 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("Toggle Record Enable Track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
393 ActionManager::session_sensitive_actions.push_back (act);
394 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("Toggle Record Enable Track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
395 ActionManager::session_sensitive_actions.push_back (act);
396 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("Toggle Record Enable Track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
397 ActionManager::session_sensitive_actions.push_back (act);
398 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("Toggle Record Enable Track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
399 ActionManager::session_sensitive_actions.push_back (act);
400 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("Toggle Record Enable Track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
401 ActionManager::session_sensitive_actions.push_back (act);
402 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("Toggle Record Enable Track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
403 ActionManager::session_sensitive_actions.push_back (act);
404 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("Toggle Record Enable Track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
405 ActionManager::session_sensitive_actions.push_back (act);
406 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("Toggle Record Enable Track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
407 ActionManager::session_sensitive_actions.push_back (act);
408 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("Toggle Record Enable Track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
409 ActionManager::session_sensitive_actions.push_back (act);
410 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("Toggle Record Enable Track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
411 ActionManager::session_sensitive_actions.push_back (act);
412 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("Toggle Record Enable Track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
413 ActionManager::session_sensitive_actions.push_back (act);
414 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("Toggle Record Enable Track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
415 ActionManager::session_sensitive_actions.push_back (act);
416 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("Toggle Record Enable Track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
417 ActionManager::session_sensitive_actions.push_back (act);
418 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("Toggle Record Enable Track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
419 ActionManager::session_sensitive_actions.push_back (act);
420 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("Toggle Record Enable Track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
421 ActionManager::session_sensitive_actions.push_back (act);
423 Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
425 shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Percentage)));
426 shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Semitones)));
428 Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
430 act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
431 ActionManager::session_sensitive_actions.push_back (act);
432 act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mmc));
433 ActionManager::session_sensitive_actions.push_back (act);
434 act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
435 ActionManager::session_sensitive_actions.push_back (act);
436 act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
437 ActionManager::session_sensitive_actions.push_back (act);
439 act = ActionManager::register_toggle_action (option_actions, X_("UseOSC"), _("Use OSC"), mem_fun (*this, &ARDOUR_UI::toggle_use_osc));
441 act->set_sensitive (false);
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_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
449 ActionManager::register_toggle_action (option_actions, X_("PeriodicSafetyBackups"), _("Make periodic safety backups"), mem_fun (*this, &ARDOUR_UI::toggle_PeriodicSafetyBackups));
450 ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
451 ActionManager::register_toggle_action (option_actions, X_("CreateXrunMarker"), _("Create marker at xrun location"), mem_fun (*this, &ARDOUR_UI::toggle_CreateXrunMarker));
452 ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
453 ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
454 ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
455 ActionManager::register_toggle_action (option_actions, X_("RegionEquivalentsOverlap"), _("Region equivalents overlap"), mem_fun (*this, &ARDOUR_UI::toggle_RegionEquivalentsOverlap));
456 ActionManager::register_toggle_action (option_actions, X_("PrimaryClockDeltaEditCursor"), _("Primary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor));
457 ActionManager::register_toggle_action (option_actions, X_("SecondaryClockDeltaEditCursor"), _("Secondary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor));
458 ActionManager::register_toggle_action (option_actions, X_("ShowTrackMeters"), _("Enable Editor Meters"), mem_fun (*this, &ARDOUR_UI::toggle_ShowTrackMeters));
459 ActionManager::register_toggle_action (option_actions, X_("OnlyCopyImportedFiles"), _("Always copy imported files"), mem_fun (*this, &ARDOUR_UI::toggle_only_copy_imported_files));
460 ActionManager::register_toggle_action (option_actions, X_("RubberbandingSnapsToGrid"), _("Rubberbanding Snaps to Grid"), mem_fun (*this, &ARDOUR_UI::toggle_rubberbanding_snaps_to_grid));
461 ActionManager::register_toggle_action (option_actions, X_("AutoAnalyseAudio"), _("Auto-analyse new audio"), mem_fun (*this, &ARDOUR_UI::toggle_auto_analyse_audio));
463 ActionManager::register_toggle_action (option_actions, X_("DefaultNarrowMS"), _("Use narrow mixer strips"), mem_fun (*this, &ARDOUR_UI::toggle_use_narrow_ms));
464 ActionManager::register_toggle_action (option_actions, X_("NameNewMarkers"), _("Name New Markers"), mem_fun (*this, &ARDOUR_UI::toggle_NameNewMarkers));
466 RadioAction::Group denormal_group;
468 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);
508 act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
509 ActionManager::session_sensitive_actions.push_back (act);
510 act = ActionManager::register_toggle_action (option_actions, X_("ShowSoloMutes"), _("Show solo muting"), mem_fun (*this, &ARDOUR_UI::toggle_ShowSoloMutes));
511 ActionManager::session_sensitive_actions.push_back (act);
513 /* !!! REMEMBER THAT RADIO ACTIONS HAVE TO BE HANDLED WITH MORE FINESSE THAN SIMPLE TOGGLES !!! */
515 RadioAction::Group meter_falloff_group;
516 RadioAction::Group meter_hold_group;
518 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffOff));
519 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlowest"), _("Slowest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlowest));
520 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlow"), _("Slow"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlow));
521 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffMedium));
522 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFast"), _("Fast"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFast));
523 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFaster"), _("Faster"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFaster));
524 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFastest"), _("Fastest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFastest));
526 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldOff));
527 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldShort"), _("Short"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldShort));
528 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldMedium));
529 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldLong"), _("Long"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldLong));
531 RadioAction::Group file_header_group;
533 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));
534 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));
535 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));
536 // 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));
537 // 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));
538 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));
540 RadioAction::Group file_data_group;
543 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));
544 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));
545 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));
547 RadioAction::Group monitoring_group;
549 /* it would be nice not to even show this item, but that messes up the
550 menus which are not dynamically modified at runtime. so we make it
551 sensitive only if it makes sense.
554 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
555 if (engine->can_request_hardware_monitoring()) {
556 act->set_sensitive (false);
558 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
559 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));
561 RadioAction::Group solo_group;
563 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)));
564 ActionManager::session_sensitive_actions.push_back (act);
565 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)));
566 ActionManager::session_sensitive_actions.push_back (act);
568 RadioAction::Group input_auto_connect_group;
570 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)));
571 ActionManager::session_sensitive_actions.push_back (act);
572 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)));
573 ActionManager::session_sensitive_actions.push_back (act);
575 RadioAction::Group output_auto_connect_group;
577 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)));
578 ActionManager::session_sensitive_actions.push_back (act);
579 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)));
580 ActionManager::session_sensitive_actions.push_back (act);
581 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)));
582 ActionManager::session_sensitive_actions.push_back (act);
584 RadioAction::Group remote_group;
586 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)));
587 ActionManager::session_sensitive_actions.push_back (act);
588 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)));
589 ActionManager::session_sensitive_actions.push_back (act);
590 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)));
591 ActionManager::session_sensitive_actions.push_back (act);
593 act = ActionManager::register_toggle_action (option_actions, X_("AutoRebinding"), _("Auto Rebind Controls"), mem_fun (*(this->mixer), &Mixer_UI::toggle_auto_rebinding));
594 ActionManager::session_sensitive_actions.push_back (act);
597 ActionManager::add_action_group (shuttle_actions);
598 ActionManager::add_action_group (option_actions);
599 ActionManager::add_action_group (jack_actions);
600 ActionManager::add_action_group (transport_actions);
601 ActionManager::add_action_group (main_actions);
602 ActionManager::add_action_group (common_actions);
606 ARDOUR_UI::toggle_control_protocol (ControlProtocolInfo* cpi)
609 /* this happens when we build the menu bar when control protocol support
610 has been used in the past for some given protocol - the item needs
611 to be made active, but there is no session yet.
616 if (cpi->protocol == 0) {
617 ControlProtocolManager::instance().instantiate (*cpi);
619 ControlProtocolManager::instance().teardown (*cpi);
624 ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const char* group, string action)
627 /* this happens when we build the menu bar when control protocol support
628 has been used in the past for some given protocol - the item needs
629 to be made active, but there is no session yet.
635 Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action.c_str());
638 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
641 bool x = tact->get_active();
643 if (x != cpi->protocol->get_feedback()) {
644 cpi->protocol->set_feedback (x);
652 ARDOUR_UI::set_jack_buffer_size (nframes_t nframes)
654 Glib::RefPtr<Action> action;
655 const char* action_name = 0;
659 action_name = X_("JACKLatency32");
662 action_name = X_("JACKLatency64");
665 action_name = X_("JACKLatency128");
668 action_name = X_("JACKLatency512");
671 action_name = X_("JACKLatency1024");
674 action_name = X_("JACKLatency2048");
677 action_name = X_("JACKLatency4096");
680 action_name = X_("JACKLatency8192");
683 /* XXX can we do anything useful ? */
689 action = ActionManager::get_action (X_("JACK"), action_name);
692 Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
694 if (ract && ract->get_active()) {
695 engine->request_buffer_size (nframes);
696 update_sample_rate (0);
703 ARDOUR_UI::build_control_surface_menu ()
705 list<ControlProtocolInfo*>::iterator i;
708 /* !!! this has to match the top level entry from ardour.menus */
710 string ui = "<menubar name='Main' action='MainMenu'>\n<menu name='Options' action='Options'>\n<menu action='ControlSurfaces'><separator/>\n";
712 for (i = ControlProtocolManager::instance().control_protocol_info.begin(); i != ControlProtocolManager::instance().control_protocol_info.end(); ++i) {
714 if (!(*i)->mandatory) {
716 string action_name = "Toggle";
717 action_name += legalize_for_path ((*i)->name);
718 action_name += "Surface";
720 string action_label = (*i)->name;
722 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), action_label.c_str(),
723 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol), *i)));
725 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
727 with_feedback = false;
729 if ((*i)->protocol || (*i)->requested) {
733 ui += "<menuitem action='";
737 if ((*i)->supports_feedback) {
739 string submenu_name = action_name;
741 submenu_name += "SubMenu";
743 ActionManager::register_action (editor->editor_actions, submenu_name.c_str(), _("Controls"));
745 action_name += "Feedback";
747 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), _("Feedback"),
748 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol_feedback),
753 ui += "<menu action='";
755 ui += "'>\n<menuitem action='";
757 ui += "'/>\n</menu>\n";
759 if ((*i)->protocol) {
760 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
761 tact->set_active ((*i)->protocol->get_feedback ());
767 ui += "</menu>\n</menu>\n</menubar>\n";
769 ActionManager::ui_manager->add_ui_from_string (ui);
773 ARDOUR_UI::build_menu_bar ()
775 if (!Profile->get_sae()) {
776 build_control_surface_menu ();
779 menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
780 menu_bar->set_name ("MainMenuBar");
783 * This is needed because this property does not get installed
784 * until the Menu GObject class is registered, which happens
785 * when the first menu instance is created.
787 // XXX bug in gtkmm causes this to popup an error message
788 // Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;
789 // so use this instead ...
790 gtk_settings_set_long_property (gtk_settings_get_default(), "gtk-can-change-accels", 1, "Ardour:designers");
792 wall_clock_box.add (wall_clock_label);
793 wall_clock_box.set_name ("WallClock");
794 wall_clock_label.set_name ("WallClock");
796 disk_space_box.add (disk_space_label);
797 disk_space_box.set_name ("WallClock");
798 disk_space_label.set_name ("WallClock");
800 cpu_load_box.add (cpu_load_label);
801 cpu_load_box.set_name ("CPULoad");
802 cpu_load_label.set_name ("CPULoad");
804 buffer_load_box.add (buffer_load_label);
805 buffer_load_box.set_name ("BufferLoad");
806 buffer_load_label.set_name ("BufferLoad");
808 sample_rate_box.add (sample_rate_label);
809 sample_rate_box.set_name ("SampleRate");
810 sample_rate_label.set_name ("SampleRate");
813 menu_hbox.pack_start (*menu_bar, true, true);
815 use_menubar_as_top_menubar ();
817 if (!Profile->get_small_screen()) {
819 // OSX provides its own wallclock, thank you very much
820 menu_hbox.pack_end (wall_clock_box, false, false, 2);
822 menu_hbox.pack_end (disk_space_box, false, false, 4);
824 menu_hbox.pack_end (cpu_load_box, false, false, 4);
825 menu_hbox.pack_end (buffer_load_box, false, false, 4);
826 menu_hbox.pack_end (sample_rate_box, false, false, 4);
828 menu_bar_base.set_name ("MainMenuBar");
829 menu_bar_base.add (menu_hbox);
833 ARDOUR_UI::use_menubar_as_top_menubar ()
836 ige_mac_menu_set_menu_bar ((GtkMenuShell*) menu_bar->gobj());
837 // ige_mac_menu_set_quit_menu_item (some_item->gobj());
842 ARDOUR_UI::setup_clock ()
844 ARDOUR_UI::Clock.connect (bind (mem_fun (big_clock, &AudioClock::set), false));
846 big_clock_window = new Window (WINDOW_TOPLEVEL);
848 big_clock_window->set_keep_above (true);
849 big_clock_window->set_border_width (0);
850 big_clock_window->add (big_clock);
852 WindowTitle title(Glib::get_application_name());
854 big_clock_window->set_title (title.get_string());
855 big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
856 big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window, (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
857 big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
859 manage_window (*big_clock_window);
863 ARDOUR_UI::float_big_clock (Gtk::Window* parent)
865 if (big_clock_window) {
867 big_clock_window->set_transient_for (*parent);
869 gtk_window_set_transient_for (big_clock_window->gobj(), (GtkWindow*) 0);