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>
34 #include "ardour_ui.h"
35 #include "public_editor.h"
36 #include "audio_clock.h"
37 #include "engine_dialog.h"
43 #include <gtkmm2ext/sync-menu.h>
46 #include <ardour/session.h>
47 #include <ardour/profile.h>
48 #include <ardour/audioengine.h>
49 #include <ardour/control_protocol_manager.h>
51 #include <control_protocol/control_protocol.h>
56 using namespace ARDOUR;
58 using namespace Gtkmm2ext;
64 ARDOUR_UI::create_editor ()
68 editor = new Editor ();
71 catch (failed_constructor& err) {
75 editor->Realized.connect (mem_fun (*this, &ARDOUR_UI::editor_realized));
81 ARDOUR_UI::install_actions ()
83 Glib::RefPtr<ActionGroup> main_actions = ActionGroup::create (X_("Main"));
84 Glib::RefPtr<Action> act;
86 /* menus + submenus that need action items */
88 ActionManager::register_action (main_actions, X_("Session"), _("Session"));
89 ActionManager::register_action (main_actions, X_("Files"), _("Import/Export"));
90 ActionManager::register_action (main_actions, X_("Cleanup"), _("Cleanup"));
91 ActionManager::register_action (main_actions, X_("Sync"), _("Sync"));
92 ActionManager::register_action (main_actions, X_("Options"), _("Options"));
93 ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options"));
94 ActionManager::register_action (main_actions, X_("Help"), _("Help"));
95 ActionManager::register_action (main_actions, X_("KeyMouseActions"), _("Misc. Shortcuts"));
96 ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format"));
97 ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("File Type"));
98 ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Sample Format"));
99 ActionManager::register_action (main_actions, X_("ControlSurfaces"), _("Control Surfaces"));
100 ActionManager::register_action (main_actions, X_("Metering"), _("Metering"));
101 ActionManager::register_action (main_actions, X_("MeteringFallOffRate"), _("Fall off rate"));
102 ActionManager::register_action (main_actions, X_("MeteringHoldTime"), _("Hold Time"));
103 ActionManager::register_action (main_actions, X_("Denormals"), _("Denormal Handling"));
105 /* the real actions */
107 act = ActionManager::register_action (main_actions, X_("New"), _("New"), hide_return (bind (mem_fun(*this, &ARDOUR_UI::get_session_parameters), true, true)));
109 ActionManager::register_action (main_actions, X_("Open"), _("Open"), mem_fun(*this, &ARDOUR_UI::open_session));
110 ActionManager::register_action (main_actions, X_("Recent"), _("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session));
111 act = ActionManager::register_action (main_actions, X_("Close"), _("Close"), mem_fun(*this, &ARDOUR_UI::close_session));
112 ActionManager::session_sensitive_actions.push_back (act);
114 act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus"),
115 bind (mem_fun(*this, &ARDOUR_UI::add_route), (Gtk::Window*) 0));
116 ActionManager::session_sensitive_actions.push_back (act);
119 /* <CMT Additions> */
122 vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
125 if (!results->empty()) {
126 act = ActionManager::register_action (main_actions, X_("aniConnect"), _("Connect"), (mem_fun (*editor, &PublicEditor::connect_to_image_compositor)));
127 ActionManager::session_sensitive_actions.push_back (act);
132 /* </CMT Additions> */
134 act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot"), mem_fun(*this, &ARDOUR_UI::snapshot_session));
135 ActionManager::session_sensitive_actions.push_back (act);
137 act = ActionManager::register_action (main_actions, X_("SaveTemplate"), _("Save Template..."), mem_fun(*this, &ARDOUR_UI::save_template));
138 ActionManager::session_sensitive_actions.push_back (act);
140 act = ActionManager::register_action (main_actions, X_("ExportSession"), _("Export session to audiofile..."), mem_fun (*editor, &PublicEditor::export_session));
141 ActionManager::session_sensitive_actions.push_back (act);
143 act = ActionManager::register_action (main_actions, X_("ExportSelection"), _("Export selection to audiofile..."), mem_fun (*editor, &PublicEditor::export_selection));
144 ActionManager::session_sensitive_actions.push_back (act);
145 ActionManager::time_selection_sensitive_actions.push_back (act);
147 act = ActionManager::register_action (main_actions, X_("ExportRangeMarkers"), _("Export range markers to audiofile..."), mem_fun (*editor, &PublicEditor::export_range_markers));
148 ActionManager::session_sensitive_actions.push_back (act);
149 ActionManager::range_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));
217 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));
218 ActionManager::session_sensitive_actions.push_back (act);
219 act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, 1));
220 ActionManager::session_sensitive_actions.push_back (act);
221 act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
222 ActionManager::session_sensitive_actions.push_back (act);
223 act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("Remove Last Capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
224 ActionManager::session_sensitive_actions.push_back (act);
226 Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
228 /* do-nothing action for the "transport" menu bar item */
230 ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
232 /* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
233 menus and via button proxies.
236 act = ActionManager::register_action (transport_actions, X_("Stop"), _("Stop"), mem_fun(*this, &ARDOUR_UI::transport_stop));
237 ActionManager::session_sensitive_actions.push_back (act);
238 ActionManager::transport_sensitive_actions.push_back (act);
239 act = ActionManager::register_action (transport_actions, X_("Roll"), _("Roll"), mem_fun(*this, &ARDOUR_UI::transport_roll));
240 ActionManager::session_sensitive_actions.push_back (act);
241 ActionManager::transport_sensitive_actions.push_back (act);
243 ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false));
244 ActionManager::session_sensitive_actions.push_back (act);
245 ActionManager::transport_sensitive_actions.push_back (act);
246 ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop + Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true));
247 ActionManager::session_sensitive_actions.push_back (act);
248 ActionManager::transport_sensitive_actions.push_back (act);
250 /* these two behave as follows:
252 - if transport speed != 1.0 or != -1.0, change speed to 1.0 or -1.0 (respectively)
253 - otherwise do nothing
256 ActionManager::register_action (transport_actions, X_("TransitionToRoll"), _("Transition To Roll"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), true));
257 ActionManager::session_sensitive_actions.push_back (act);
258 ActionManager::session_sensitive_actions.push_back (act);
260 ActionManager::register_action (transport_actions, X_("TransitionToReverse"), _("Transition To Reverse"), bind (mem_fun (*editor, &PublicEditor::transition_to_rolling), false));
261 ActionManager::session_sensitive_actions.push_back (act);
262 ActionManager::session_sensitive_actions.push_back (act);
265 act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
266 ActionManager::session_sensitive_actions.push_back (act);
267 ActionManager::transport_sensitive_actions.push_back (act);
268 act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selection"), mem_fun(*this, &ARDOUR_UI::transport_play_selection));
269 ActionManager::session_sensitive_actions.push_back (act);
270 ActionManager::transport_sensitive_actions.push_back (act);
272 act = ActionManager::register_action (transport_actions, X_("Record"), _("Enable Record"), bind (mem_fun(*this, &ARDOUR_UI::transport_record), false));
273 ActionManager::session_sensitive_actions.push_back (act);
274 act = ActionManager::register_action (transport_actions, X_("record-roll"), _("Start Recording"), bind (mem_fun(*this, &ARDOUR_UI::transport_record), true));
275 ActionManager::session_sensitive_actions.push_back (act);
276 ActionManager::transport_sensitive_actions.push_back (act);
277 act = ActionManager::register_action (transport_actions, X_("Rewind"), _("Rewind"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 0));
278 ActionManager::session_sensitive_actions.push_back (act);
279 ActionManager::transport_sensitive_actions.push_back (act);
280 act = ActionManager::register_action (transport_actions, X_("RewindSlow"), _("Rewind (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), -1));
281 ActionManager::session_sensitive_actions.push_back (act);
282 ActionManager::transport_sensitive_actions.push_back (act);
283 act = ActionManager::register_action (transport_actions, X_("RewindFast"), _("Rewind (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 1));
284 ActionManager::session_sensitive_actions.push_back (act);
285 ActionManager::transport_sensitive_actions.push_back (act);
286 act = ActionManager::register_action (transport_actions, X_("Forward"), _("Forward"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 0));
287 ActionManager::session_sensitive_actions.push_back (act);
288 ActionManager::transport_sensitive_actions.push_back (act);
289 act = ActionManager::register_action (transport_actions, X_("ForwardSlow"), _("Forward (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), -1));
290 ActionManager::session_sensitive_actions.push_back (act);
291 ActionManager::transport_sensitive_actions.push_back (act);
292 act = ActionManager::register_action (transport_actions, X_("ForwardFast"), _("Forward (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 1));
293 ActionManager::session_sensitive_actions.push_back (act);
294 ActionManager::transport_sensitive_actions.push_back (act);
295 act = ActionManager::register_action (transport_actions, X_("GotoZero"), _("Goto Zero"), mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
296 ActionManager::session_sensitive_actions.push_back (act);
297 ActionManager::transport_sensitive_actions.push_back (act);
298 act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Goto Start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
299 ActionManager::session_sensitive_actions.push_back (act);
300 ActionManager::transport_sensitive_actions.push_back (act);
301 act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Goto End"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
302 ActionManager::session_sensitive_actions.push_back (act);
303 ActionManager::transport_sensitive_actions.push_back (act);
305 act = ActionManager::register_action (transport_actions, X_("focus-on-clock"), _("Focus On Clock"), mem_fun(primary_clock, &AudioClock::focus));
306 ActionManager::session_sensitive_actions.push_back (act);
307 ActionManager::transport_sensitive_actions.push_back (act);
309 act = ActionManager::register_action (transport_actions, X_("primary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::BBT));
310 ActionManager::session_sensitive_actions.push_back (act);
311 act = ActionManager::register_action (transport_actions, X_("primary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::MinSec));
312 ActionManager::session_sensitive_actions.push_back (act);
313 act = ActionManager::register_action (transport_actions, X_("primary-clock-samples"), _("Samples"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Frames));
314 ActionManager::session_sensitive_actions.push_back (act);
315 act = ActionManager::register_action (transport_actions, X_("primary-clock-off"), _("Off"), bind (mem_fun(primary_clock, &AudioClock::set_mode), AudioClock::Off));
316 ActionManager::session_sensitive_actions.push_back (act);
318 act = ActionManager::register_action (transport_actions, X_("secondary-clock-bbt"), _("Bars & Beats"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::BBT));
319 ActionManager::session_sensitive_actions.push_back (act);
320 act = ActionManager::register_action (transport_actions, X_("secondary-clock-minsec"), _("Minutes & Seconds"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::MinSec));
321 ActionManager::session_sensitive_actions.push_back (act);
322 act = ActionManager::register_action (transport_actions, X_("secondary-clock-samples"), _("Samples"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Frames));
323 ActionManager::session_sensitive_actions.push_back (act);
324 act = ActionManager::register_action (transport_actions, X_("secondary-clock-off"), _("Off"), bind (mem_fun(secondary_clock, &AudioClock::set_mode), AudioClock::Off));
325 ActionManager::session_sensitive_actions.push_back (act);
327 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch In"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
328 ActionManager::session_sensitive_actions.push_back (act);
329 ActionManager::transport_sensitive_actions.push_back (act);
330 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("Punch Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
331 ActionManager::session_sensitive_actions.push_back (act);
332 ActionManager::transport_sensitive_actions.push_back (act);
333 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunch"), _("Punch In/Out"), mem_fun(*this, &ARDOUR_UI::toggle_punch));
334 ActionManager::session_sensitive_actions.push_back (act);
335 ActionManager::transport_sensitive_actions.push_back (act);
336 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleClick"), _("Click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
337 ActionManager::session_sensitive_actions.push_back (act);
338 ActionManager::transport_sensitive_actions.push_back (act);
339 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoInput"), _("Auto Input"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
340 ActionManager::session_sensitive_actions.push_back (act);
341 ActionManager::transport_sensitive_actions.push_back (act);
342 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoPlay"), _("Auto Play"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
343 ActionManager::session_sensitive_actions.push_back (act);
344 ActionManager::transport_sensitive_actions.push_back (act);
345 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoReturn"), _("Auto Return"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
346 ActionManager::session_sensitive_actions.push_back (act);
347 ActionManager::transport_sensitive_actions.push_back (act);
349 ActionManager::register_toggle_action (transport_actions, X_("ToggleVideoSync"), _("Sync startup to video"), mem_fun(*this, &ARDOUR_UI::toggle_video_sync));
350 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("Time master"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
351 ActionManager::session_sensitive_actions.push_back (act);
353 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("Toggle Record Enable Track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 0U));
354 ActionManager::session_sensitive_actions.push_back (act);
355 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("Toggle Record Enable Track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 1U));
356 ActionManager::session_sensitive_actions.push_back (act);
357 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("Toggle Record Enable Track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 2U));
358 ActionManager::session_sensitive_actions.push_back (act);
359 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("Toggle Record Enable Track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 3U));
360 ActionManager::session_sensitive_actions.push_back (act);
361 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("Toggle Record Enable Track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 4U));
362 ActionManager::session_sensitive_actions.push_back (act);
363 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("Toggle Record Enable Track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 5U));
364 ActionManager::session_sensitive_actions.push_back (act);
365 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("Toggle Record Enable Track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 6U));
366 ActionManager::session_sensitive_actions.push_back (act);
367 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("Toggle Record Enable Track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 7U));
368 ActionManager::session_sensitive_actions.push_back (act);
369 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("Toggle Record Enable Track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 8U));
370 ActionManager::session_sensitive_actions.push_back (act);
371 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("Toggle Record Enable Track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
372 ActionManager::session_sensitive_actions.push_back (act);
373 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("Toggle Record Enable Track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
374 ActionManager::session_sensitive_actions.push_back (act);
375 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("Toggle Record Enable Track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
376 ActionManager::session_sensitive_actions.push_back (act);
377 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("Toggle Record Enable Track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
378 ActionManager::session_sensitive_actions.push_back (act);
379 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("Toggle Record Enable Track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
380 ActionManager::session_sensitive_actions.push_back (act);
381 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("Toggle Record Enable Track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
382 ActionManager::session_sensitive_actions.push_back (act);
383 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("Toggle Record Enable Track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
384 ActionManager::session_sensitive_actions.push_back (act);
385 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("Toggle Record Enable Track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
386 ActionManager::session_sensitive_actions.push_back (act);
387 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("Toggle Record Enable Track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
388 ActionManager::session_sensitive_actions.push_back (act);
389 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("Toggle Record Enable Track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
390 ActionManager::session_sensitive_actions.push_back (act);
391 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("Toggle Record Enable Track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
392 ActionManager::session_sensitive_actions.push_back (act);
393 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("Toggle Record Enable Track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
394 ActionManager::session_sensitive_actions.push_back (act);
395 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("Toggle Record Enable Track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
396 ActionManager::session_sensitive_actions.push_back (act);
397 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("Toggle Record Enable Track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
398 ActionManager::session_sensitive_actions.push_back (act);
399 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("Toggle Record Enable Track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
400 ActionManager::session_sensitive_actions.push_back (act);
401 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("Toggle Record Enable Track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
402 ActionManager::session_sensitive_actions.push_back (act);
403 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("Toggle Record Enable Track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
404 ActionManager::session_sensitive_actions.push_back (act);
405 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("Toggle Record Enable Track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
406 ActionManager::session_sensitive_actions.push_back (act);
407 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("Toggle Record Enable Track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
408 ActionManager::session_sensitive_actions.push_back (act);
409 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("Toggle Record Enable Track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
410 ActionManager::session_sensitive_actions.push_back (act);
411 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("Toggle Record Enable Track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
412 ActionManager::session_sensitive_actions.push_back (act);
413 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("Toggle Record Enable Track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
414 ActionManager::session_sensitive_actions.push_back (act);
415 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("Toggle Record Enable Track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
416 ActionManager::session_sensitive_actions.push_back (act);
418 Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
420 shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Percentage)));
421 shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Semitones)));
423 Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
425 act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
426 ActionManager::session_sensitive_actions.push_back (act);
427 act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mmc));
428 ActionManager::session_sensitive_actions.push_back (act);
429 act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
430 ActionManager::session_sensitive_actions.push_back (act);
431 act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
432 ActionManager::session_sensitive_actions.push_back (act);
434 act = ActionManager::register_toggle_action (option_actions, X_("UseOSC"), _("Use OSC"), mem_fun (*this, &ARDOUR_UI::toggle_use_osc));
436 act->set_sensitive (false);
438 act = ActionManager::register_toggle_action (option_actions, X_("ToggleTapeMachineMode"), _("Tape Machine mode"), mem_fun (*this, &ARDOUR_UI::toggle_TapeMachineMode));
439 ActionManager::session_sensitive_actions.push_back (act);
441 ActionManager::register_toggle_action (option_actions, X_("SyncEditorAndMixerTrackOrder"), _("Sync Editor and Mixer track order"), mem_fun (*this, &ARDOUR_UI::toggle_sync_order_keys));
442 ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
443 ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
444 ActionManager::register_toggle_action (option_actions, X_("PeriodicSafetyBackups"), _("Make periodic safety backups"), mem_fun (*this, &ARDOUR_UI::toggle_PeriodicSafetyBackups));
445 ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
446 ActionManager::register_toggle_action (option_actions, X_("CreateXrunMarker"), _("Create marker at xrun location"), mem_fun (*this, &ARDOUR_UI::toggle_CreateXrunMarker));
447 ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
448 ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
449 ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
450 ActionManager::register_toggle_action (option_actions, X_("RegionEquivalentsOverlap"), _("Region equivalents overlap"), mem_fun (*this, &ARDOUR_UI::toggle_RegionEquivalentsOverlap));
451 ActionManager::register_toggle_action (option_actions, X_("PrimaryClockDeltaEditCursor"), _("Primary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor));
452 ActionManager::register_toggle_action (option_actions, X_("SecondaryClockDeltaEditCursor"), _("Secondary Clock delta to edit point"), mem_fun (*this, &ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor));
453 ActionManager::register_toggle_action (option_actions, X_("ShowTrackMeters"), _("Enable Editor Meters"), mem_fun (*this, &ARDOUR_UI::toggle_ShowTrackMeters));
454 ActionManager::register_toggle_action (option_actions, X_("OnlyCopyImportedFiles"), _("Always copy imported files"), mem_fun (*this, &ARDOUR_UI::toggle_only_copy_imported_files));
455 ActionManager::register_toggle_action (option_actions, X_("RubberbandingSnapsToGrid"), _("Rubberbanding Snaps to Grid"), mem_fun (*this, &ARDOUR_UI::toggle_rubberbanding_snaps_to_grid));
456 ActionManager::register_toggle_action (option_actions, X_("AutoAnalyseAudio"), _("Auto-analyse new audio"), mem_fun (*this, &ARDOUR_UI::toggle_auto_analyse_audio));
458 ActionManager::register_toggle_action (option_actions, X_("DefaultNarrowMS"), _("Use narrow mixer strips"), mem_fun (*this, &ARDOUR_UI::toggle_use_narrow_ms));
459 ActionManager::register_toggle_action (option_actions, X_("NameNewMarkers"), _("Name New Markers"), mem_fun (*this, &ARDOUR_UI::toggle_NameNewMarkers));
461 RadioAction::Group denormal_group;
463 ActionManager::register_toggle_action (option_actions, X_("DenormalProtection"), _("Use DC bias"), mem_fun (*this, &ARDOUR_UI::toggle_denormal_protection));
465 ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalNone"), _("No processor handling"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalNone));
467 // as of September 10th 2007, Valgrind cannot handle various FPU flag setting instructions
470 if (getenv ("ARDOUR_RUNNING_UNDER_VALGRIND")) {
472 /* we still need these actions to exist, but make them all insensitive */
474 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZ"), _("Use FlushToZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZ));
475 act->set_sensitive (false);
476 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalDAZ"), _("Use DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalDAZ));
477 act->set_sensitive (false);
478 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZDAZ"), _("Use FlushToZero & DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZDAZ));
479 act->set_sensitive (false);
485 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZ"), _("Use FlushToZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZ));
486 if (!fpu.has_flush_to_zero()) {
487 act->set_sensitive (false);
490 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalDAZ"), _("Use DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalDAZ));
491 if (!fpu.has_denormals_are_zero()) {
492 act->set_sensitive (false);
495 act = ActionManager::register_radio_action (option_actions, denormal_group, X_("DenormalFTZDAZ"), _("Use FlushToZero & DenormalsAreZero"), bind (mem_fun (*this, &ARDOUR_UI::set_denormal_model), DenormalFTZDAZ));
496 if (!fpu.has_flush_to_zero() || !fpu.has_denormals_are_zero()) {
497 act->set_sensitive (false);
501 act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
502 ActionManager::session_sensitive_actions.push_back (act);
503 act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
504 ActionManager::session_sensitive_actions.push_back (act);
505 act = ActionManager::register_toggle_action (option_actions, X_("ShowSoloMutes"), _("Show solo muting"), mem_fun (*this, &ARDOUR_UI::toggle_ShowSoloMutes));
506 ActionManager::session_sensitive_actions.push_back (act);
508 /* !!! REMEMBER THAT RADIO ACTIONS HAVE TO BE HANDLED WITH MORE FINESSE THAN SIMPLE TOGGLES !!! */
510 RadioAction::Group meter_falloff_group;
511 RadioAction::Group meter_hold_group;
513 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffOff));
514 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlowest"), _("Slowest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlowest));
515 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlow"), _("Slow"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlow));
516 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffMedium));
517 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFast"), _("Fast"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFast));
518 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFaster"), _("Faster"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFaster));
519 ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFastest"), _("Fastest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFastest));
521 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldOff));
522 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldShort"), _("Short"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldShort));
523 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldMedium));
524 ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldLong"), _("Long"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldLong));
526 RadioAction::Group file_header_group;
528 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));
529 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));
530 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));
531 // 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));
532 // 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));
533 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));
535 RadioAction::Group file_data_group;
538 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));
539 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));
540 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));
542 RadioAction::Group monitoring_group;
544 /* it would be nice not to even show this item, but that messes up the
545 menus which are not dynamically modified at runtime. so we make it
546 sensitive only if it makes sense.
549 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
550 if (engine->can_request_hardware_monitoring()) {
551 act->set_sensitive (false);
553 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
554 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));
556 RadioAction::Group solo_group;
558 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)));
559 ActionManager::session_sensitive_actions.push_back (act);
560 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)));
561 ActionManager::session_sensitive_actions.push_back (act);
563 RadioAction::Group input_auto_connect_group;
565 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)));
566 ActionManager::session_sensitive_actions.push_back (act);
567 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)));
568 ActionManager::session_sensitive_actions.push_back (act);
570 RadioAction::Group output_auto_connect_group;
572 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)));
573 ActionManager::session_sensitive_actions.push_back (act);
574 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)));
575 ActionManager::session_sensitive_actions.push_back (act);
576 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)));
577 ActionManager::session_sensitive_actions.push_back (act);
579 RadioAction::Group remote_group;
581 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)));
582 ActionManager::session_sensitive_actions.push_back (act);
583 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)));
584 ActionManager::session_sensitive_actions.push_back (act);
585 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)));
586 ActionManager::session_sensitive_actions.push_back (act);
588 act = ActionManager::register_toggle_action (option_actions, X_("AutoRebinding"), _("Auto Rebind Controls"), mem_fun (*(this->mixer), &Mixer_UI::toggle_auto_rebinding));
589 ActionManager::session_sensitive_actions.push_back (act);
592 ActionManager::add_action_group (shuttle_actions);
593 ActionManager::add_action_group (option_actions);
594 ActionManager::add_action_group (jack_actions);
595 ActionManager::add_action_group (transport_actions);
596 ActionManager::add_action_group (main_actions);
597 ActionManager::add_action_group (common_actions);
601 ARDOUR_UI::toggle_control_protocol (ControlProtocolInfo* cpi)
604 /* this happens when we build the menu bar when control protocol support
605 has been used in the past for some given protocol - the item needs
606 to be made active, but there is no session yet.
611 if (cpi->protocol == 0) {
612 ControlProtocolManager::instance().instantiate (*cpi);
614 ControlProtocolManager::instance().teardown (*cpi);
619 ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const char* group, string action)
622 /* this happens when we build the menu bar when control protocol support
623 has been used in the past for some given protocol - the item needs
624 to be made active, but there is no session yet.
630 Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action.c_str());
633 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
636 bool x = tact->get_active();
638 if (x != cpi->protocol->get_feedback()) {
639 cpi->protocol->set_feedback (x);
647 ARDOUR_UI::set_jack_buffer_size (nframes_t nframes)
649 Glib::RefPtr<Action> action;
650 const char* action_name = 0;
654 action_name = X_("JACKLatency32");
657 action_name = X_("JACKLatency64");
660 action_name = X_("JACKLatency128");
663 action_name = X_("JACKLatency512");
666 action_name = X_("JACKLatency1024");
669 action_name = X_("JACKLatency2048");
672 action_name = X_("JACKLatency4096");
675 action_name = X_("JACKLatency8192");
678 /* XXX can we do anything useful ? */
684 action = ActionManager::get_action (X_("JACK"), action_name);
687 Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
689 if (ract && ract->get_active()) {
690 engine->request_buffer_size (nframes);
691 update_sample_rate (0);
698 ARDOUR_UI::build_control_surface_menu ()
700 list<ControlProtocolInfo*>::iterator i;
703 /* !!! this has to match the top level entry from ardour.menus */
705 string ui = "<menubar name='Main' action='MainMenu'>\n<menu name='Options' action='Options'>\n<menu action='ControlSurfaces'><separator/>\n";
707 for (i = ControlProtocolManager::instance().control_protocol_info.begin(); i != ControlProtocolManager::instance().control_protocol_info.end(); ++i) {
709 if (!(*i)->mandatory) {
711 string action_name = "Toggle";
712 action_name += legalize_for_path ((*i)->name);
713 action_name += "Surface";
715 string action_label = (*i)->name;
717 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), action_label.c_str(),
718 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol), *i)));
720 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
722 with_feedback = false;
724 if ((*i)->protocol || (*i)->requested) {
728 ui += "<menuitem action='";
732 if ((*i)->supports_feedback) {
734 string submenu_name = action_name;
736 submenu_name += "SubMenu";
738 ActionManager::register_action (editor->editor_actions, submenu_name.c_str(), _("Controls"));
740 action_name += "Feedback";
742 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), _("Feedback"),
743 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol_feedback),
748 ui += "<menu action='";
750 ui += "'>\n<menuitem action='";
752 ui += "'/>\n</menu>\n";
754 if ((*i)->protocol) {
755 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
756 tact->set_active ((*i)->protocol->get_feedback ());
762 ui += "</menu>\n</menu>\n</menubar>\n";
764 ActionManager::ui_manager->add_ui_from_string (ui);
768 ARDOUR_UI::build_menu_bar ()
770 if (!Profile->get_sae()) {
771 build_control_surface_menu ();
774 menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
775 menu_bar->set_name ("MainMenuBar");
778 * This is needed because this property does not get installed
779 * until the Menu GObject class is registered, which happens
780 * when the first menu instance is created.
782 // XXX bug in gtkmm causes this to popup an error message
783 // Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;
784 // so use this instead ...
785 gtk_settings_set_long_property (gtk_settings_get_default(), "gtk-can-change-accels", 1, "Ardour:designers");
787 wall_clock_box.add (wall_clock_label);
788 wall_clock_box.set_name ("WallClock");
789 wall_clock_label.set_name ("WallClock");
791 disk_space_box.add (disk_space_label);
792 disk_space_box.set_name ("WallClock");
793 disk_space_label.set_name ("WallClock");
795 cpu_load_box.add (cpu_load_label);
796 cpu_load_box.set_name ("CPULoad");
797 cpu_load_label.set_name ("CPULoad");
799 buffer_load_box.add (buffer_load_label);
800 buffer_load_box.set_name ("BufferLoad");
801 buffer_load_label.set_name ("BufferLoad");
803 sample_rate_box.add (sample_rate_label);
804 sample_rate_box.set_name ("SampleRate");
805 sample_rate_label.set_name ("SampleRate");
808 menu_hbox.pack_start (*menu_bar, true, true);
810 use_menubar_as_top_menubar ();
812 if (!Profile->get_small_screen()) {
814 // OSX provides its own wallclock, thank you very much
815 menu_hbox.pack_end (wall_clock_box, false, false, 2);
817 menu_hbox.pack_end (disk_space_box, false, false, 4);
819 menu_hbox.pack_end (cpu_load_box, false, false, 4);
820 menu_hbox.pack_end (buffer_load_box, false, false, 4);
821 menu_hbox.pack_end (sample_rate_box, false, false, 4);
823 menu_bar_base.set_name ("MainMenuBar");
824 menu_bar_base.add (menu_hbox);
828 ARDOUR_UI::use_menubar_as_top_menubar ()
831 ige_mac_menu_set_menu_bar ((GtkMenuShell*) menu_bar->gobj());
832 // ige_mac_menu_set_quit_menu_item (some_item->gobj());
837 ARDOUR_UI::setup_clock ()
839 ARDOUR_UI::Clock.connect (bind (mem_fun (big_clock, &AudioClock::set), false));
841 big_clock_window = new Window (WINDOW_TOPLEVEL);
843 big_clock_window->set_keep_above (true);
844 big_clock_window->set_border_width (0);
845 big_clock_window->add (big_clock);
847 WindowTitle title(Glib::get_application_name());
849 big_clock_window->set_title (title.get_string());
850 big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
851 big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window, (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
852 big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
854 manage_window (*big_clock_window);