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.
21 /* This file contains any ARDOUR_UI methods that require knowledge of
22 the editor, and exists so that no compilation dependency exists
23 between the main ARDOUR_UI modules and the PublicEditor class. This
24 is to cut down on the nasty compile times for both these classes.
27 #include <pbd/pathscanner.h>
29 #include "ardour_ui.h"
30 #include "public_editor.h"
31 #include "audio_clock.h"
35 #include <ardour/session.h>
39 using namespace ARDOUR;
41 using namespace Gtkmm2ext;
44 ARDOUR_UI::create_editor ()
48 editor = new Editor (*engine);
51 catch (failed_constructor& err) {
55 editor->Realized.connect (mem_fun (*this, &ARDOUR_UI::editor_realized));
61 ARDOUR_UI::install_actions ()
63 Glib::RefPtr<ActionGroup> main_actions = ActionGroup::create (X_("Main"));
64 Glib::RefPtr<Action> act;
66 /* menus + submenus that need action items */
68 ActionManager::register_action (main_actions, X_("Session"), _("Session"));
69 ActionManager::register_action (main_actions, X_("Export"), _("Export"));
70 ActionManager::register_action (main_actions, X_("Cleanup"), _("Cleanup"));
71 ActionManager::register_action (main_actions, X_("Sync"), _("Sync"));
72 ActionManager::register_action (main_actions, X_("Options"), _("Options"));
73 ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options"));
74 ActionManager::register_action (main_actions, X_("Help"), _("Help"));
75 ActionManager::register_action (main_actions, X_("KeyMouse Actions"), _("KeyMouse Actions"));
76 ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format"));
77 ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("Header"));
78 ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Data"));
80 /* the real actions */
82 act = ActionManager::register_action (main_actions, X_("New"), _("New"), bind (mem_fun(*this, &ARDOUR_UI::new_session), false, string ()));
84 ActionManager::register_action (main_actions, X_("Open"), _("Open"), mem_fun(*this, &ARDOUR_UI::open_session));
85 ActionManager::register_action (main_actions, X_("Recent"), _("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session));
86 act = ActionManager::register_action (main_actions, X_("Close"), _("Close"), mem_fun(*this, &ARDOUR_UI::close_session));
87 ActionManager::session_sensitive_actions.push_back (act);
89 act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus"), mem_fun(*this, &ARDOUR_UI::add_route));
90 ActionManager::session_sensitive_actions.push_back (act);
96 vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
99 if (!results->empty()) {
100 act = ActionManager::register_action (main_actions, X_("aniConnect"), _("Connect"), (mem_fun (*editor, &PublicEditor::connect_to_image_compositor)));
101 ActionManager::session_sensitive_actions.push_back (act);
106 /* </CMT Additions> */
108 act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot"), mem_fun(*this, &ARDOUR_UI::snapshot_session));
109 ActionManager::session_sensitive_actions.push_back (act);
111 act = ActionManager::register_action (main_actions, X_("SaveTemplate"), _("Save Template..."), mem_fun(*this, &ARDOUR_UI::save_template));
112 ActionManager::session_sensitive_actions.push_back (act);
114 act = ActionManager::register_action (main_actions, X_("ExportSession"), _("Export session to audiofile..."), mem_fun (*editor, &PublicEditor::export_session));
115 ActionManager::session_sensitive_actions.push_back (act);
117 act = ActionManager::register_action (main_actions, X_("ExportSelection"), _("Export selection to audiofile..."), mem_fun (*editor, &PublicEditor::export_selection));
118 ActionManager::session_sensitive_actions.push_back (act);
119 ActionManager::time_selection_sensitive_actions.push_back (act);
121 act = ActionManager::register_action (main_actions, X_("ExportRangeMarkers"), _("Export range markers to audiofile..."), mem_fun (*editor, &PublicEditor::export_range_markers));
122 ActionManager::session_sensitive_actions.push_back (act);
123 ActionManager::range_sensitive_actions.push_back (act);
125 act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
126 ActionManager::session_sensitive_actions.push_back (act);
128 act = ActionManager::register_action (main_actions, X_("CleanupUnused"), _("Cleanup unused sources"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup));
129 ActionManager::session_sensitive_actions.push_back (act);
130 act = ActionManager::register_action (main_actions, X_("FlushWastebasket"), _("Flush wastebasket"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash));
131 ActionManager::session_sensitive_actions.push_back (act);
133 /* JACK actions for controlling ... JACK */
135 Glib::RefPtr<ActionGroup> jack_actions = ActionGroup::create (X_("JACK"));
136 ActionManager::register_action (jack_actions, X_("JACK"), _("JACK"));
137 ActionManager::register_action (jack_actions, X_("Latency"), _("Latency"));
139 act = ActionManager::register_action (jack_actions, X_("JACKReconnect"), _("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack));
140 ActionManager::jack_opposite_sensitive_actions.push_back (act);
142 act = ActionManager::register_action (jack_actions, X_("JACKDisconnect"), _("Disconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::disconnect_from_jack));
143 ActionManager::jack_sensitive_actions.push_back (act);
145 RadioAction::Group jack_latency_group;
147 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency32"), X_("32"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 32));
148 ActionManager::jack_sensitive_actions.push_back (act);
149 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency64"), X_("64"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 64));
150 ActionManager::jack_sensitive_actions.push_back (act);
151 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency128"), X_("128"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 128));
152 ActionManager::jack_sensitive_actions.push_back (act);
153 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency256"), X_("256"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 256));
154 ActionManager::jack_sensitive_actions.push_back (act);
155 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency512"), X_("512"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 512));
156 ActionManager::jack_sensitive_actions.push_back (act);
157 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency1024"), X_("1024"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 1024));
158 ActionManager::jack_sensitive_actions.push_back (act);
159 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency2048"), X_("2048"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 2048));
160 ActionManager::jack_sensitive_actions.push_back (act);
161 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency4096"), X_("4096"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 4096));
162 ActionManager::jack_sensitive_actions.push_back (act);
163 act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency8192"), X_("8192"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 8192));
164 ActionManager::jack_sensitive_actions.push_back (act);
166 /* these actions are intended to be shared across all windows */
168 common_actions = ActionGroup::create (X_("Common"));
169 ActionManager::register_action (main_actions, X_("Windows"), _("Windows"));
170 ActionManager::register_action (common_actions, X_("Start-Prefix"), _("start prefix"), mem_fun(*this, &ARDOUR_UI::start_keyboard_prefix));
171 ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (mem_fun(*this, &ARDOUR_UI::finish)));
173 /* windows visibility actions */
175 ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
177 ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
178 ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
179 ActionManager::register_toggle_action (common_actions, X_("ToggleSoundFileBrowser"), _("Sound File Browser"), mem_fun(*this, &ARDOUR_UI::toggle_sound_file_browser));
180 ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Options Editor"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
181 act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
182 ActionManager::session_sensitive_actions.push_back (act);
183 act = ActionManager::register_toggle_action (common_actions, X_("ToggleConnections"), _("Connections"), mem_fun(*this, &ARDOUR_UI::toggle_connection_editor));
184 ActionManager::session_sensitive_actions.push_back (act);
185 act = ActionManager::register_toggle_action (common_actions, X_("ToggleLocations"), _("Locations"), mem_fun(*this, &ARDOUR_UI::toggle_location_window));
186 ActionManager::session_sensitive_actions.push_back (act);
187 act = ActionManager::register_toggle_action (common_actions, X_("ToggleBigClock"), _("Big Clock"), mem_fun(*this, &ARDOUR_UI::toggle_big_clock_window));
188 ActionManager::session_sensitive_actions.push_back (act);
189 ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_splash));
190 act = ActionManager::register_toggle_action (common_actions, X_("ToggleColorManager"), _("Colors"), mem_fun(*this, &ARDOUR_UI::toggle_color_manager));
192 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));
193 ActionManager::session_sensitive_actions.push_back (act);
194 act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1));
195 ActionManager::session_sensitive_actions.push_back (act);
196 act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
197 ActionManager::session_sensitive_actions.push_back (act);
198 act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("Remove Last Capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
199 ActionManager::session_sensitive_actions.push_back (act);
201 Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
203 /* do-nothing action for the "transport" menu bar item */
205 ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
207 /* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
208 menus and via button proxies.
211 act = ActionManager::register_action (transport_actions, X_("Stop"), _("Stop"), mem_fun(*this, &ARDOUR_UI::transport_stop));
212 ActionManager::session_sensitive_actions.push_back (act);
213 ActionManager::transport_sensitive_actions.push_back (act);
214 act = ActionManager::register_action (transport_actions, X_("Roll"), _("Roll"), mem_fun(*this, &ARDOUR_UI::transport_roll));
215 ActionManager::session_sensitive_actions.push_back (act);
216 ActionManager::transport_sensitive_actions.push_back (act);
218 ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false));
219 ActionManager::session_sensitive_actions.push_back (act);
220 ActionManager::transport_sensitive_actions.push_back (act);
221 ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop + Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true));
222 ActionManager::session_sensitive_actions.push_back (act);
223 ActionManager::transport_sensitive_actions.push_back (act);
224 act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
225 ActionManager::session_sensitive_actions.push_back (act);
226 ActionManager::transport_sensitive_actions.push_back (act);
227 act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selection"), mem_fun(*this, &ARDOUR_UI::transport_play_selection));
228 ActionManager::session_sensitive_actions.push_back (act);
229 ActionManager::transport_sensitive_actions.push_back (act);
231 act = ActionManager::register_action (transport_actions, X_("Record"), _("Enable Record"), mem_fun(*this, &ARDOUR_UI::transport_record));
232 ActionManager::session_sensitive_actions.push_back (act);
233 ActionManager::transport_sensitive_actions.push_back (act);
234 act = ActionManager::register_action (transport_actions, X_("Rewind"), _("Rewind"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 0));
235 ActionManager::session_sensitive_actions.push_back (act);
236 ActionManager::transport_sensitive_actions.push_back (act);
237 act = ActionManager::register_action (transport_actions, X_("RewindSlow"), _("Rewind (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), -1));
238 ActionManager::session_sensitive_actions.push_back (act);
239 ActionManager::transport_sensitive_actions.push_back (act);
240 act = ActionManager::register_action (transport_actions, X_("RewindFast"), _("Rewind (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 1));
241 ActionManager::session_sensitive_actions.push_back (act);
242 ActionManager::transport_sensitive_actions.push_back (act);
243 act = ActionManager::register_action (transport_actions, X_("Forward"), _("Forward"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 0));
244 ActionManager::session_sensitive_actions.push_back (act);
245 ActionManager::transport_sensitive_actions.push_back (act);
246 act = ActionManager::register_action (transport_actions, X_("ForwardSlow"), _("Forward (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), -1));
247 ActionManager::session_sensitive_actions.push_back (act);
248 ActionManager::transport_sensitive_actions.push_back (act);
249 act = ActionManager::register_action (transport_actions, X_("ForwardFast"), _("Forward (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 1));
250 ActionManager::session_sensitive_actions.push_back (act);
251 ActionManager::transport_sensitive_actions.push_back (act);
252 act = ActionManager::register_action (transport_actions, X_("GotoZero"), _("Goto Zero"), mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
253 ActionManager::session_sensitive_actions.push_back (act);
254 ActionManager::transport_sensitive_actions.push_back (act);
255 act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Goto Start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
256 ActionManager::session_sensitive_actions.push_back (act);
257 ActionManager::transport_sensitive_actions.push_back (act);
258 act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Goto End"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
259 ActionManager::session_sensitive_actions.push_back (act);
260 ActionManager::transport_sensitive_actions.push_back (act);
262 /* XXX the newline in the displayed names of these action is really wrong, but its because we want the button
263 that proxies for these action to be more compact. It would be nice to find a way to override the action
264 name appearance on the buttons.
267 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch\nin"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
268 ActionManager::session_sensitive_actions.push_back (act);
269 ActionManager::transport_sensitive_actions.push_back (act);
270 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("Punch\nout"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
271 ActionManager::session_sensitive_actions.push_back (act);
272 ActionManager::transport_sensitive_actions.push_back (act);
273 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleClick"), _("Click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
274 ActionManager::session_sensitive_actions.push_back (act);
275 ActionManager::transport_sensitive_actions.push_back (act);
276 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoInput"), _("Auto\ninput"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
277 ActionManager::session_sensitive_actions.push_back (act);
278 ActionManager::transport_sensitive_actions.push_back (act);
279 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoPlay"), _("Auto\nplay"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
280 ActionManager::session_sensitive_actions.push_back (act);
281 ActionManager::transport_sensitive_actions.push_back (act);
282 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoReturn"), _("Auto\nreturn"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
283 ActionManager::session_sensitive_actions.push_back (act);
284 ActionManager::transport_sensitive_actions.push_back (act);
286 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("Time\nmaster"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
287 ActionManager::session_sensitive_actions.push_back (act);
289 act = ActionManager::register_action (common_actions, X_("SendAllMidiFeedback"), _("Send All Midi Feedback"), mem_fun(*this, &ARDOUR_UI::send_all_midi_feedback));
290 ActionManager::session_sensitive_actions.push_back (act);
291 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("Toggle Record Enable Track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 0U));
292 ActionManager::session_sensitive_actions.push_back (act);
293 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("Toggle Record Enable Track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 1U));
294 ActionManager::session_sensitive_actions.push_back (act);
295 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("Toggle Record Enable Track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 2U));
296 ActionManager::session_sensitive_actions.push_back (act);
297 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("Toggle Record Enable Track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 3U));
298 ActionManager::session_sensitive_actions.push_back (act);
299 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("Toggle Record Enable Track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 4U));
300 ActionManager::session_sensitive_actions.push_back (act);
301 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("Toggle Record Enable Track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 5U));
302 ActionManager::session_sensitive_actions.push_back (act);
303 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("Toggle Record Enable Track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 6U));
304 ActionManager::session_sensitive_actions.push_back (act);
305 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("Toggle Record Enable Track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 7U));
306 ActionManager::session_sensitive_actions.push_back (act);
307 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("Toggle Record Enable Track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 8U));
308 ActionManager::session_sensitive_actions.push_back (act);
309 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("Toggle Record Enable Track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
310 ActionManager::session_sensitive_actions.push_back (act);
311 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("Toggle Record Enable Track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
312 ActionManager::session_sensitive_actions.push_back (act);
313 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("Toggle Record Enable Track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
314 ActionManager::session_sensitive_actions.push_back (act);
315 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("Toggle Record Enable Track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
316 ActionManager::session_sensitive_actions.push_back (act);
317 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("Toggle Record Enable Track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
318 ActionManager::session_sensitive_actions.push_back (act);
319 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("Toggle Record Enable Track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
320 ActionManager::session_sensitive_actions.push_back (act);
321 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("Toggle Record Enable Track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
322 ActionManager::session_sensitive_actions.push_back (act);
323 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("Toggle Record Enable Track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
324 ActionManager::session_sensitive_actions.push_back (act);
325 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("Toggle Record Enable Track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
326 ActionManager::session_sensitive_actions.push_back (act);
327 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("Toggle Record Enable Track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
328 ActionManager::session_sensitive_actions.push_back (act);
329 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("Toggle Record Enable Track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
330 ActionManager::session_sensitive_actions.push_back (act);
331 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("Toggle Record Enable Track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
332 ActionManager::session_sensitive_actions.push_back (act);
333 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("Toggle Record Enable Track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
334 ActionManager::session_sensitive_actions.push_back (act);
335 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("Toggle Record Enable Track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
336 ActionManager::session_sensitive_actions.push_back (act);
337 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("Toggle Record Enable Track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
338 ActionManager::session_sensitive_actions.push_back (act);
339 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("Toggle Record Enable Track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
340 ActionManager::session_sensitive_actions.push_back (act);
341 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("Toggle Record Enable Track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
342 ActionManager::session_sensitive_actions.push_back (act);
343 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("Toggle Record Enable Track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
344 ActionManager::session_sensitive_actions.push_back (act);
345 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("Toggle Record Enable Track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
346 ActionManager::session_sensitive_actions.push_back (act);
347 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("Toggle Record Enable Track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
348 ActionManager::session_sensitive_actions.push_back (act);
349 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("Toggle Record Enable Track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
350 ActionManager::session_sensitive_actions.push_back (act);
351 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("Toggle Record Enable Track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
352 ActionManager::session_sensitive_actions.push_back (act);
353 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("Toggle Record Enable Track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
354 ActionManager::session_sensitive_actions.push_back (act);
356 Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
358 shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Percentage));
359 shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Semitones));
361 Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
363 act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
364 ActionManager::session_sensitive_actions.push_back (act);
365 act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
366 ActionManager::session_sensitive_actions.push_back (act);
367 act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
368 ActionManager::session_sensitive_actions.push_back (act);
369 act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
370 ActionManager::session_sensitive_actions.push_back (act);
371 act = ActionManager::register_toggle_action (option_actions, X_("UseMIDIcontrol"), _("Use MIDI control"), mem_fun (*this, &ARDOUR_UI::toggle_use_midi_control));
372 ActionManager::session_sensitive_actions.push_back (act);
374 act = ActionManager::register_toggle_action (option_actions, X_("AutoConnectNewTrackInputsToHardware"), _("Connect newtrack inputs to hardware"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackInputsToHardware));
375 ActionManager::session_sensitive_actions.push_back (act);
377 RadioAction::Group file_header_group;
379 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));
380 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));
381 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));
382 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));
383 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));
385 RadioAction::Group file_data_group;
387 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));
388 act = ActionManager::register_radio_action (option_actions, file_data_group, X_("FileDataFormat24bit"), X_("24-bit signed integer"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_data_format), ARDOUR::FormatInt24));
390 RadioAction::Group connect_outputs_group;
392 act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("AutoConnectNewTrackOutputsToHardware"), _("Connect new track outputs to hardware"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackOutputsToHardware));
393 ActionManager::session_sensitive_actions.push_back (act);
394 act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("AutoConnectNewTrackOutputsToMaster"), _("Connect new track outputs to master"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackOutputsToMaster));
395 ActionManager::session_sensitive_actions.push_back (act);
396 act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("ManuallyConnectNewTrackOutputs"), _("Manually connect new track outputs"), mem_fun (*this, &ARDOUR_UI::toggle_ManuallyConnectNewTrackOutputs));
397 ActionManager::session_sensitive_actions.push_back (act);
399 RadioAction::Group monitoring_group;
401 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("Hardware monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseHardwareMonitoring));
402 ActionManager::session_sensitive_actions.push_back (act);
403 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Software monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseSoftwareMonitoring));
404 ActionManager::session_sensitive_actions.push_back (act);
405 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("External monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseExternalMonitoring));
406 ActionManager::session_sensitive_actions.push_back (act);
408 act = ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
409 ActionManager::session_sensitive_actions.push_back (act);
410 act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
411 ActionManager::session_sensitive_actions.push_back (act);
413 ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
415 act = ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
416 ActionManager::session_sensitive_actions.push_back (act);
417 act = ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
418 ActionManager::session_sensitive_actions.push_back (act);
419 act = ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
420 ActionManager::session_sensitive_actions.push_back (act);
421 act = ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
422 ActionManager::session_sensitive_actions.push_back (act);
424 act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
425 ActionManager::session_sensitive_actions.push_back (act);
427 RadioAction::Group solo_group;
429 act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloInPlace"), _("Solo in-place"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
430 act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloViaBus"), _("Solo via bus"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
431 ActionManager::session_sensitive_actions.push_back (act);
433 act = ActionManager::register_action (option_actions, X_("AutomaticallyCreateCrossfades"), _("Automatically create crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_AutomaticallyCreateCrossfades));
434 ActionManager::session_sensitive_actions.push_back (act);
435 act = ActionManager::register_action (option_actions, X_("UnmuteNewFullCrossfades"), _("Unmute new full crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_UnmuteNewFullCrossfades));
436 ActionManager::session_sensitive_actions.push_back (act);
440 act = ActionManager::register_action (option_actions, X_("SetRegionLayerMode", _("SetRegionLayerMode"), mem_fun (*this, &ARDOUR_UI::toggle_SetRegionLayerMode)));
441 ActionManager::session_sensitive_actions.push_back (act);
442 act = ActionManager::register_action (option_actions, X_("SetCrossfadeModel", _("SetCrossfadeModel"), mem_fun (*this, &ARDOUR_UI::toggle_SetCrossfadeModel)));
443 ActionManager::session_sensitive_actions.push_back (act);
447 ActionManager::add_action_group (shuttle_actions);
448 ActionManager::add_action_group (option_actions);
449 ActionManager::add_action_group (jack_actions);
450 ActionManager::add_action_group (transport_actions);
451 ActionManager::add_action_group (main_actions);
452 ActionManager::add_action_group (common_actions);
456 ARDOUR_UI::build_menu_bar ()
458 menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
459 menu_bar->set_name ("MainMenuBar");
462 * This is needed because this property does not get installed
463 * until the Menu GObject class is registered, which happens
464 * when the first menu instance is created.
466 Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;
468 wall_clock_box.add (wall_clock_label);
469 wall_clock_box.set_name ("WallClock");
470 wall_clock_label.set_name ("WallClock");
472 disk_space_box.add (disk_space_label);
473 disk_space_box.set_name ("WallClock");
474 disk_space_label.set_name ("WallClock");
476 cpu_load_box.add (cpu_load_label);
477 cpu_load_box.set_name ("CPULoad");
478 cpu_load_label.set_name ("CPULoad");
480 buffer_load_box.add (buffer_load_label);
481 buffer_load_box.set_name ("BufferLoad");
482 buffer_load_label.set_name ("BufferLoad");
484 // disk_rate_box.add (disk_rate_label);
485 // disk_rate_box.set_name ("DiskRate");
486 // disk_rate_label.set_name ("DiskRate");
488 sample_rate_box.add (sample_rate_label);
489 sample_rate_box.set_name ("SampleRate");
490 sample_rate_label.set_name ("SampleRate");
492 menu_hbox.pack_start (*menu_bar, true, true);
493 menu_hbox.pack_end (wall_clock_box, false, false, 10);
494 menu_hbox.pack_end (disk_space_box, false, false, 10);
495 menu_hbox.pack_end (cpu_load_box, false, false, 10);
496 // menu_hbox.pack_end (disk_rate_box, false, false, 10);
497 menu_hbox.pack_end (buffer_load_box, false, false, 10);
498 menu_hbox.pack_end (sample_rate_box, false, false, 10);
500 menu_bar_base.set_name ("MainMenuBar");
501 menu_bar_base.add (menu_hbox);