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 /* the real actions */
78 act = ActionManager::register_action (main_actions, X_("New"), _("New"), bind (mem_fun(*this, &ARDOUR_UI::new_session), false, string ()));
80 ActionManager::register_action (main_actions, X_("Open"), _("Open"), mem_fun(*this, &ARDOUR_UI::open_session));
81 ActionManager::register_action (main_actions, X_("Recent"), _("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session));
82 act = ActionManager::register_action (main_actions, X_("Close"), _("Close"), mem_fun(*this, &ARDOUR_UI::close_session));
83 ActionManager::session_sensitive_actions.push_back (act);
85 act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus"), mem_fun(*this, &ARDOUR_UI::add_route));
86 ActionManager::session_sensitive_actions.push_back (act);
92 vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
95 if (!results->empty()) {
96 act = ActionManager::register_action (main_actions, X_("aniConnect"), _("Connect"), (mem_fun (*editor, &PublicEditor::connect_to_image_compositor)));
97 ActionManager::session_sensitive_actions.push_back (act);
102 /* </CMT Additions> */
104 act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot"), mem_fun(*this, &ARDOUR_UI::snapshot_session));
105 ActionManager::session_sensitive_actions.push_back (act);
107 act = ActionManager::register_action (main_actions, X_("SaveTemplate"), _("Save Template..."), mem_fun(*this, &ARDOUR_UI::save_template));
108 ActionManager::session_sensitive_actions.push_back (act);
110 act = ActionManager::register_action (main_actions, X_("ExportSession"), _("Export session to audiofile..."), mem_fun (*editor, &PublicEditor::export_session));
111 ActionManager::session_sensitive_actions.push_back (act);
113 act = ActionManager::register_action (main_actions, X_("ExportSelection"), _("Export selection to audiofile..."), mem_fun (*editor, &PublicEditor::export_selection));
114 ActionManager::session_sensitive_actions.push_back (act);
115 ActionManager::time_selection_sensitive_actions.push_back (act);
117 act = ActionManager::register_action (main_actions, X_("ExportRangeMarkers"), _("Export range markers to audiofile..."), mem_fun (*editor, &PublicEditor::export_range_markers));
118 ActionManager::session_sensitive_actions.push_back (act);
119 ActionManager::range_sensitive_actions.push_back (act);
121 act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
122 ActionManager::session_sensitive_actions.push_back (act);
124 act = ActionManager::register_action (main_actions, X_("CleanupUnused"), _("Cleanup unused sources"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup));
125 ActionManager::session_sensitive_actions.push_back (act);
126 act = ActionManager::register_action (main_actions, X_("FlushWastebasket"), _("Flush wastebasket"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash));
127 ActionManager::session_sensitive_actions.push_back (act);
129 /* JACK actions for controlling ... JACK */
131 Glib::RefPtr<ActionGroup> jack_actions = ActionGroup::create (X_("JACK"));
132 ActionManager::register_action (jack_actions, X_("JACK"), _("JACK"));
133 ActionManager::register_action (jack_actions, X_("Latency"), _("Latency"));
135 act = ActionManager::register_action (jack_actions, X_("JACKReconnect"), _("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack));
136 ActionManager::jack_opposite_sensitive_actions.push_back (act);
138 act = ActionManager::register_action (jack_actions, X_("JACKDisconnect"), _("Disconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::disconnect_from_jack));
139 ActionManager::jack_sensitive_actions.push_back (act);
141 RadioAction::Group jack_latency_group;
143 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));
144 ActionManager::jack_sensitive_actions.push_back (act);
145 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));
146 ActionManager::jack_sensitive_actions.push_back (act);
147 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));
148 ActionManager::jack_sensitive_actions.push_back (act);
149 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));
150 ActionManager::jack_sensitive_actions.push_back (act);
151 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));
152 ActionManager::jack_sensitive_actions.push_back (act);
153 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));
154 ActionManager::jack_sensitive_actions.push_back (act);
155 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));
156 ActionManager::jack_sensitive_actions.push_back (act);
157 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));
158 ActionManager::jack_sensitive_actions.push_back (act);
159 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));
160 ActionManager::jack_sensitive_actions.push_back (act);
162 /* these actions are intended to be shared across all windows */
164 common_actions = ActionGroup::create (X_("Common"));
165 ActionManager::register_action (main_actions, X_("Windows"), _("Windows"));
166 ActionManager::register_action (common_actions, X_("Start-Prefix"), _("start prefix"), mem_fun(*this, &ARDOUR_UI::start_keyboard_prefix));
167 ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (mem_fun(*this, &ARDOUR_UI::finish)));
169 /* windows visibility actions */
171 ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
173 ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
174 ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
175 ActionManager::register_toggle_action (common_actions, X_("ToggleSoundFileBrowser"), _("Sound File Browser"), mem_fun(*this, &ARDOUR_UI::toggle_sound_file_browser));
176 ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Options Editor"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
177 act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
178 ActionManager::session_sensitive_actions.push_back (act);
179 act = ActionManager::register_toggle_action (common_actions, X_("ToggleConnections"), _("Connections"), mem_fun(*this, &ARDOUR_UI::toggle_connection_editor));
180 ActionManager::session_sensitive_actions.push_back (act);
181 act = ActionManager::register_toggle_action (common_actions, X_("ToggleLocations"), _("Locations"), mem_fun(*this, &ARDOUR_UI::toggle_location_window));
182 ActionManager::session_sensitive_actions.push_back (act);
183 act = ActionManager::register_toggle_action (common_actions, X_("ToggleBigClock"), _("Big Clock"), mem_fun(*this, &ARDOUR_UI::toggle_big_clock_window));
184 ActionManager::session_sensitive_actions.push_back (act);
185 ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_splash));
186 act = ActionManager::register_toggle_action (common_actions, X_("ToggleColorManager"), _("Colors"), mem_fun(*this, &ARDOUR_UI::toggle_color_manager));
188 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));
189 ActionManager::session_sensitive_actions.push_back (act);
190 act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1));
191 ActionManager::session_sensitive_actions.push_back (act);
192 act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
193 ActionManager::session_sensitive_actions.push_back (act);
194 act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("Remove Last Capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
195 ActionManager::session_sensitive_actions.push_back (act);
197 Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
199 /* do-nothing action for the "transport" menu bar item */
201 ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
203 /* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
204 menus and via button proxies.
207 act = ActionManager::register_action (transport_actions, X_("Stop"), _("Stop"), mem_fun(*this, &ARDOUR_UI::transport_stop));
208 ActionManager::session_sensitive_actions.push_back (act);
209 ActionManager::transport_sensitive_actions.push_back (act);
210 act = ActionManager::register_action (transport_actions, X_("Roll"), _("Roll"), mem_fun(*this, &ARDOUR_UI::transport_roll));
211 ActionManager::session_sensitive_actions.push_back (act);
212 ActionManager::transport_sensitive_actions.push_back (act);
214 ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false));
215 ActionManager::session_sensitive_actions.push_back (act);
216 ActionManager::transport_sensitive_actions.push_back (act);
217 ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop + Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true));
218 ActionManager::session_sensitive_actions.push_back (act);
219 ActionManager::transport_sensitive_actions.push_back (act);
220 act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
221 ActionManager::session_sensitive_actions.push_back (act);
222 ActionManager::transport_sensitive_actions.push_back (act);
223 act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selection"), mem_fun(*this, &ARDOUR_UI::transport_play_selection));
224 ActionManager::session_sensitive_actions.push_back (act);
225 ActionManager::transport_sensitive_actions.push_back (act);
227 act = ActionManager::register_action (transport_actions, X_("Record"), _("Enable Record"), mem_fun(*this, &ARDOUR_UI::transport_record));
228 ActionManager::session_sensitive_actions.push_back (act);
229 ActionManager::transport_sensitive_actions.push_back (act);
230 act = ActionManager::register_action (transport_actions, X_("Rewind"), _("Rewind"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 0));
231 ActionManager::session_sensitive_actions.push_back (act);
232 ActionManager::transport_sensitive_actions.push_back (act);
233 act = ActionManager::register_action (transport_actions, X_("RewindSlow"), _("Rewind (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), -1));
234 ActionManager::session_sensitive_actions.push_back (act);
235 ActionManager::transport_sensitive_actions.push_back (act);
236 act = ActionManager::register_action (transport_actions, X_("RewindFast"), _("Rewind (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 1));
237 ActionManager::session_sensitive_actions.push_back (act);
238 ActionManager::transport_sensitive_actions.push_back (act);
239 act = ActionManager::register_action (transport_actions, X_("Forward"), _("Forward"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 0));
240 ActionManager::session_sensitive_actions.push_back (act);
241 ActionManager::transport_sensitive_actions.push_back (act);
242 act = ActionManager::register_action (transport_actions, X_("ForwardSlow"), _("Forward (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), -1));
243 ActionManager::session_sensitive_actions.push_back (act);
244 ActionManager::transport_sensitive_actions.push_back (act);
245 act = ActionManager::register_action (transport_actions, X_("ForwardFast"), _("Forward (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 1));
246 ActionManager::session_sensitive_actions.push_back (act);
247 ActionManager::transport_sensitive_actions.push_back (act);
248 act = ActionManager::register_action (transport_actions, X_("GotoZero"), _("Goto Zero"), mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
249 ActionManager::session_sensitive_actions.push_back (act);
250 ActionManager::transport_sensitive_actions.push_back (act);
251 act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Goto Start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
252 ActionManager::session_sensitive_actions.push_back (act);
253 ActionManager::transport_sensitive_actions.push_back (act);
254 act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Goto End"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
255 ActionManager::session_sensitive_actions.push_back (act);
256 ActionManager::transport_sensitive_actions.push_back (act);
258 /* XXX the newline in the displayed names of these action is really wrong, but its because we want the button
259 that proxies for these action to be more compact. It would be nice to find a way to override the action
260 name appearance on the buttons.
263 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch\nin"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
264 ActionManager::session_sensitive_actions.push_back (act);
265 ActionManager::transport_sensitive_actions.push_back (act);
266 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("Punch\nout"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
267 ActionManager::session_sensitive_actions.push_back (act);
268 ActionManager::transport_sensitive_actions.push_back (act);
269 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleClick"), _("Click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
270 ActionManager::session_sensitive_actions.push_back (act);
271 ActionManager::transport_sensitive_actions.push_back (act);
272 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoInput"), _("Auto\ninput"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
273 ActionManager::session_sensitive_actions.push_back (act);
274 ActionManager::transport_sensitive_actions.push_back (act);
275 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoPlay"), _("Auto\nplay"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
276 ActionManager::session_sensitive_actions.push_back (act);
277 ActionManager::transport_sensitive_actions.push_back (act);
278 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoReturn"), _("Auto\nreturn"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
279 ActionManager::session_sensitive_actions.push_back (act);
280 ActionManager::transport_sensitive_actions.push_back (act);
282 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("Time\nmaster"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
283 ActionManager::session_sensitive_actions.push_back (act);
285 act = ActionManager::register_action (common_actions, X_("SendAllMidiFeedback"), _("Send All Midi Feedback"), mem_fun(*this, &ARDOUR_UI::send_all_midi_feedback));
286 ActionManager::session_sensitive_actions.push_back (act);
287 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("Toggle Record Enable Track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 0U));
288 ActionManager::session_sensitive_actions.push_back (act);
289 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("Toggle Record Enable Track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 1U));
290 ActionManager::session_sensitive_actions.push_back (act);
291 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("Toggle Record Enable Track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 2U));
292 ActionManager::session_sensitive_actions.push_back (act);
293 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("Toggle Record Enable Track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 3U));
294 ActionManager::session_sensitive_actions.push_back (act);
295 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("Toggle Record Enable Track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 4U));
296 ActionManager::session_sensitive_actions.push_back (act);
297 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("Toggle Record Enable Track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 5U));
298 ActionManager::session_sensitive_actions.push_back (act);
299 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("Toggle Record Enable Track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 6U));
300 ActionManager::session_sensitive_actions.push_back (act);
301 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("Toggle Record Enable Track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 7U));
302 ActionManager::session_sensitive_actions.push_back (act);
303 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("Toggle Record Enable Track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 8U));
304 ActionManager::session_sensitive_actions.push_back (act);
305 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("Toggle Record Enable Track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
306 ActionManager::session_sensitive_actions.push_back (act);
307 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("Toggle Record Enable Track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
308 ActionManager::session_sensitive_actions.push_back (act);
309 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("Toggle Record Enable Track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
310 ActionManager::session_sensitive_actions.push_back (act);
311 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("Toggle Record Enable Track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
312 ActionManager::session_sensitive_actions.push_back (act);
313 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("Toggle Record Enable Track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
314 ActionManager::session_sensitive_actions.push_back (act);
315 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("Toggle Record Enable Track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
316 ActionManager::session_sensitive_actions.push_back (act);
317 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("Toggle Record Enable Track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
318 ActionManager::session_sensitive_actions.push_back (act);
319 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("Toggle Record Enable Track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
320 ActionManager::session_sensitive_actions.push_back (act);
321 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("Toggle Record Enable Track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
322 ActionManager::session_sensitive_actions.push_back (act);
323 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("Toggle Record Enable Track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
324 ActionManager::session_sensitive_actions.push_back (act);
325 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("Toggle Record Enable Track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
326 ActionManager::session_sensitive_actions.push_back (act);
327 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("Toggle Record Enable Track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
328 ActionManager::session_sensitive_actions.push_back (act);
329 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("Toggle Record Enable Track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
330 ActionManager::session_sensitive_actions.push_back (act);
331 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("Toggle Record Enable Track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
332 ActionManager::session_sensitive_actions.push_back (act);
333 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("Toggle Record Enable Track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
334 ActionManager::session_sensitive_actions.push_back (act);
335 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("Toggle Record Enable Track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
336 ActionManager::session_sensitive_actions.push_back (act);
337 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("Toggle Record Enable Track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
338 ActionManager::session_sensitive_actions.push_back (act);
339 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("Toggle Record Enable Track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
340 ActionManager::session_sensitive_actions.push_back (act);
341 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("Toggle Record Enable Track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
342 ActionManager::session_sensitive_actions.push_back (act);
343 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("Toggle Record Enable Track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
344 ActionManager::session_sensitive_actions.push_back (act);
345 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("Toggle Record Enable Track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
346 ActionManager::session_sensitive_actions.push_back (act);
347 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("Toggle Record Enable Track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
348 ActionManager::session_sensitive_actions.push_back (act);
349 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("Toggle Record Enable Track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
350 ActionManager::session_sensitive_actions.push_back (act);
352 Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
354 shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Percentage));
355 shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Semitones));
357 Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
359 act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
360 ActionManager::session_sensitive_actions.push_back (act);
361 act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
362 ActionManager::session_sensitive_actions.push_back (act);
363 act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
364 ActionManager::session_sensitive_actions.push_back (act);
365 act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
366 ActionManager::session_sensitive_actions.push_back (act);
367 act = ActionManager::register_toggle_action (option_actions, X_("UseMIDIcontrol"), _("Use MIDI control"), mem_fun (*this, &ARDOUR_UI::toggle_use_midi_control));
368 ActionManager::session_sensitive_actions.push_back (act);
370 act = ActionManager::register_toggle_action (option_actions, X_("AutoConnectNewTrackInputsToHardware"), _("Connect newtrack inputs to hardware"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackInputsToHardware));
371 ActionManager::session_sensitive_actions.push_back (act);
373 RadioAction::Group connect_outputs_group;
375 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));
376 ActionManager::session_sensitive_actions.push_back (act);
377 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));
378 ActionManager::session_sensitive_actions.push_back (act);
379 act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("ManuallyConnectNewTrackOutputs"), _("Manually connect new track outputs"), mem_fun (*this, &ARDOUR_UI::toggle_ManuallyConnectNewTrackOutputs));
380 ActionManager::session_sensitive_actions.push_back (act);
382 RadioAction::Group monitoring_group;
384 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("Hardware monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseHardwareMonitoring));
385 ActionManager::session_sensitive_actions.push_back (act);
386 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Software monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseSoftwareMonitoring));
387 ActionManager::session_sensitive_actions.push_back (act);
388 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("External monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseExternalMonitoring));
389 ActionManager::session_sensitive_actions.push_back (act);
391 act = ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
392 ActionManager::session_sensitive_actions.push_back (act);
393 act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
394 ActionManager::session_sensitive_actions.push_back (act);
396 ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
398 act = ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
399 ActionManager::session_sensitive_actions.push_back (act);
400 act = ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
401 ActionManager::session_sensitive_actions.push_back (act);
402 act = ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
403 ActionManager::session_sensitive_actions.push_back (act);
404 act = ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
405 ActionManager::session_sensitive_actions.push_back (act);
407 act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
408 ActionManager::session_sensitive_actions.push_back (act);
410 RadioAction::Group solo_group;
412 act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloInPlace"), _("Solo in-place"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
413 act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloViaBus"), _("Solo via bus"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
414 ActionManager::session_sensitive_actions.push_back (act);
416 act = ActionManager::register_action (option_actions, X_("AutomaticallyCreateCrossfades"), _("Automatically create crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_AutomaticallyCreateCrossfades));
417 ActionManager::session_sensitive_actions.push_back (act);
418 act = ActionManager::register_action (option_actions, X_("UnmuteNewFullCrossfades"), _("Unmute new full crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_UnmuteNewFullCrossfades));
419 ActionManager::session_sensitive_actions.push_back (act);
423 act = ActionManager::register_action (option_actions, X_("SetRegionLayerMode", _("SetRegionLayerMode"), mem_fun (*this, &ARDOUR_UI::toggle_SetRegionLayerMode)));
424 ActionManager::session_sensitive_actions.push_back (act);
425 act = ActionManager::register_action (option_actions, X_("SetCrossfadeModel", _("SetCrossfadeModel"), mem_fun (*this, &ARDOUR_UI::toggle_SetCrossfadeModel)));
426 ActionManager::session_sensitive_actions.push_back (act);
430 ActionManager::add_action_group (shuttle_actions);
431 ActionManager::add_action_group (option_actions);
432 ActionManager::add_action_group (jack_actions);
433 ActionManager::add_action_group (transport_actions);
434 ActionManager::add_action_group (main_actions);
435 ActionManager::add_action_group (common_actions);
439 ARDOUR_UI::build_menu_bar ()
441 menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
442 menu_bar->set_name ("MainMenuBar");
445 * This is needed because this property does not get installed
446 * until the Menu GObject class is registered, which happens
447 * when the first menu instance is created.
449 Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;
451 wall_clock_box.add (wall_clock_label);
452 wall_clock_box.set_name ("WallClock");
453 wall_clock_label.set_name ("WallClock");
455 disk_space_box.add (disk_space_label);
456 disk_space_box.set_name ("WallClock");
457 disk_space_label.set_name ("WallClock");
459 cpu_load_box.add (cpu_load_label);
460 cpu_load_box.set_name ("CPULoad");
461 cpu_load_label.set_name ("CPULoad");
463 buffer_load_box.add (buffer_load_label);
464 buffer_load_box.set_name ("BufferLoad");
465 buffer_load_label.set_name ("BufferLoad");
467 // disk_rate_box.add (disk_rate_label);
468 // disk_rate_box.set_name ("DiskRate");
469 // disk_rate_label.set_name ("DiskRate");
471 sample_rate_box.add (sample_rate_label);
472 sample_rate_box.set_name ("SampleRate");
473 sample_rate_label.set_name ("SampleRate");
475 menu_hbox.pack_start (*menu_bar, true, true);
476 menu_hbox.pack_end (wall_clock_box, false, false, 10);
477 menu_hbox.pack_end (disk_space_box, false, false, 10);
478 menu_hbox.pack_end (cpu_load_box, false, false, 10);
479 // menu_hbox.pack_end (disk_rate_box, false, false, 10);
480 menu_hbox.pack_end (buffer_load_box, false, false, 10);
481 menu_hbox.pack_end (sample_rate_box, false, false, 10);
483 menu_bar_base.set_name ("MainMenuBar");
484 menu_bar_base.add (menu_hbox);