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>
36 #include <ardour/control_protocol_manager.h>
38 #include <control_protocol/control_protocol.h>
42 using namespace ARDOUR;
44 using namespace Gtkmm2ext;
47 ARDOUR_UI::create_editor ()
51 editor = new Editor (*engine);
54 catch (failed_constructor& err) {
58 editor->Realized.connect (mem_fun (*this, &ARDOUR_UI::editor_realized));
64 ARDOUR_UI::install_actions ()
66 Glib::RefPtr<ActionGroup> main_actions = ActionGroup::create (X_("Main"));
67 Glib::RefPtr<Action> act;
69 /* menus + submenus that need action items */
71 ActionManager::register_action (main_actions, X_("Session"), _("Session"));
72 ActionManager::register_action (main_actions, X_("Export"), _("Export"));
73 ActionManager::register_action (main_actions, X_("Cleanup"), _("Cleanup"));
74 ActionManager::register_action (main_actions, X_("Sync"), _("Sync"));
75 ActionManager::register_action (main_actions, X_("Options"), _("Options"));
76 ActionManager::register_action (main_actions, X_("TransportOptions"), _("Options"));
77 ActionManager::register_action (main_actions, X_("Help"), _("Help"));
78 ActionManager::register_action (main_actions, X_("KeyMouse Actions"), _("KeyMouse Actions"));
79 ActionManager::register_action (main_actions, X_("AudioFileFormat"), _("Audio File Format"));
80 ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("Header"));
81 ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Data"));
82 ActionManager::register_action (main_actions, X_("ControlSurfaces"), _("Control Surfaces"));
84 /* the real actions */
86 act = ActionManager::register_action (main_actions, X_("New"), _("New"), bind (mem_fun(*this, &ARDOUR_UI::new_session), false, string ()));
88 ActionManager::register_action (main_actions, X_("Open"), _("Open"), mem_fun(*this, &ARDOUR_UI::open_session));
89 ActionManager::register_action (main_actions, X_("Recent"), _("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session));
90 act = ActionManager::register_action (main_actions, X_("Close"), _("Close"), mem_fun(*this, &ARDOUR_UI::close_session));
91 ActionManager::session_sensitive_actions.push_back (act);
93 act = ActionManager::register_action (main_actions, X_("AddTrackBus"), _("Add Track/Bus"), mem_fun(*this, &ARDOUR_UI::add_route));
94 ActionManager::session_sensitive_actions.push_back (act);
100 vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
103 if (!results->empty()) {
104 act = ActionManager::register_action (main_actions, X_("aniConnect"), _("Connect"), (mem_fun (*editor, &PublicEditor::connect_to_image_compositor)));
105 ActionManager::session_sensitive_actions.push_back (act);
110 /* </CMT Additions> */
112 act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot"), mem_fun(*this, &ARDOUR_UI::snapshot_session));
113 ActionManager::session_sensitive_actions.push_back (act);
115 act = ActionManager::register_action (main_actions, X_("SaveTemplate"), _("Save Template..."), mem_fun(*this, &ARDOUR_UI::save_template));
116 ActionManager::session_sensitive_actions.push_back (act);
118 act = ActionManager::register_action (main_actions, X_("ExportSession"), _("Export session to audiofile..."), mem_fun (*editor, &PublicEditor::export_session));
119 ActionManager::session_sensitive_actions.push_back (act);
121 act = ActionManager::register_action (main_actions, X_("ExportSelection"), _("Export selection to audiofile..."), mem_fun (*editor, &PublicEditor::export_selection));
122 ActionManager::session_sensitive_actions.push_back (act);
123 ActionManager::time_selection_sensitive_actions.push_back (act);
125 act = ActionManager::register_action (main_actions, X_("ExportRangeMarkers"), _("Export range markers to audiofile..."), mem_fun (*editor, &PublicEditor::export_range_markers));
126 ActionManager::session_sensitive_actions.push_back (act);
127 ActionManager::range_sensitive_actions.push_back (act);
129 act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
130 ActionManager::session_sensitive_actions.push_back (act);
132 act = ActionManager::register_action (main_actions, X_("CleanupUnused"), _("Cleanup unused sources"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup));
133 ActionManager::session_sensitive_actions.push_back (act);
134 act = ActionManager::register_action (main_actions, X_("FlushWastebasket"), _("Flush wastebasket"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash));
135 ActionManager::session_sensitive_actions.push_back (act);
137 /* JACK actions for controlling ... JACK */
139 Glib::RefPtr<ActionGroup> jack_actions = ActionGroup::create (X_("JACK"));
140 ActionManager::register_action (jack_actions, X_("JACK"), _("JACK"));
141 ActionManager::register_action (jack_actions, X_("Latency"), _("Latency"));
143 act = ActionManager::register_action (jack_actions, X_("JACKReconnect"), _("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack));
144 ActionManager::jack_opposite_sensitive_actions.push_back (act);
146 act = ActionManager::register_action (jack_actions, X_("JACKDisconnect"), _("Disconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::disconnect_from_jack));
147 ActionManager::jack_sensitive_actions.push_back (act);
149 RadioAction::Group jack_latency_group;
151 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));
152 ActionManager::jack_sensitive_actions.push_back (act);
153 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));
154 ActionManager::jack_sensitive_actions.push_back (act);
155 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));
156 ActionManager::jack_sensitive_actions.push_back (act);
157 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));
158 ActionManager::jack_sensitive_actions.push_back (act);
159 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));
160 ActionManager::jack_sensitive_actions.push_back (act);
161 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));
162 ActionManager::jack_sensitive_actions.push_back (act);
163 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));
164 ActionManager::jack_sensitive_actions.push_back (act);
165 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));
166 ActionManager::jack_sensitive_actions.push_back (act);
167 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));
168 ActionManager::jack_sensitive_actions.push_back (act);
170 /* these actions are intended to be shared across all windows */
172 common_actions = ActionGroup::create (X_("Common"));
173 ActionManager::register_action (main_actions, X_("Windows"), _("Windows"));
174 ActionManager::register_action (common_actions, X_("Start-Prefix"), _("start prefix"), mem_fun(*this, &ARDOUR_UI::start_keyboard_prefix));
175 ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (mem_fun(*this, &ARDOUR_UI::finish)));
177 /* windows visibility actions */
179 ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
181 ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
182 ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
183 ActionManager::register_toggle_action (common_actions, X_("ToggleSoundFileBrowser"), _("Sound File Browser"), mem_fun(*this, &ARDOUR_UI::toggle_sound_file_browser));
184 ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Options Editor"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
185 act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
186 ActionManager::session_sensitive_actions.push_back (act);
187 act = ActionManager::register_toggle_action (common_actions, X_("ToggleConnections"), _("Connections"), mem_fun(*this, &ARDOUR_UI::toggle_connection_editor));
188 ActionManager::session_sensitive_actions.push_back (act);
189 act = ActionManager::register_toggle_action (common_actions, X_("ToggleLocations"), _("Locations"), mem_fun(*this, &ARDOUR_UI::toggle_location_window));
190 ActionManager::session_sensitive_actions.push_back (act);
191 act = ActionManager::register_toggle_action (common_actions, X_("ToggleBigClock"), _("Big Clock"), mem_fun(*this, &ARDOUR_UI::toggle_big_clock_window));
192 ActionManager::session_sensitive_actions.push_back (act);
193 ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_splash));
194 act = ActionManager::register_toggle_action (common_actions, X_("ToggleColorManager"), _("Colors"), mem_fun(*this, &ARDOUR_UI::toggle_color_manager));
196 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));
197 ActionManager::session_sensitive_actions.push_back (act);
198 act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1));
199 ActionManager::session_sensitive_actions.push_back (act);
200 act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
201 ActionManager::session_sensitive_actions.push_back (act);
202 act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("Remove Last Capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
203 ActionManager::session_sensitive_actions.push_back (act);
205 Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
207 /* do-nothing action for the "transport" menu bar item */
209 ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
211 /* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
212 menus and via button proxies.
215 act = ActionManager::register_action (transport_actions, X_("Stop"), _("Stop"), mem_fun(*this, &ARDOUR_UI::transport_stop));
216 ActionManager::session_sensitive_actions.push_back (act);
217 ActionManager::transport_sensitive_actions.push_back (act);
218 act = ActionManager::register_action (transport_actions, X_("Roll"), _("Roll"), mem_fun(*this, &ARDOUR_UI::transport_roll));
219 ActionManager::session_sensitive_actions.push_back (act);
220 ActionManager::transport_sensitive_actions.push_back (act);
222 ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("Start/Stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false));
223 ActionManager::session_sensitive_actions.push_back (act);
224 ActionManager::transport_sensitive_actions.push_back (act);
225 ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("Stop + Forget Capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true));
226 ActionManager::session_sensitive_actions.push_back (act);
227 ActionManager::transport_sensitive_actions.push_back (act);
228 act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
229 ActionManager::session_sensitive_actions.push_back (act);
230 ActionManager::transport_sensitive_actions.push_back (act);
231 act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selection"), mem_fun(*this, &ARDOUR_UI::transport_play_selection));
232 ActionManager::session_sensitive_actions.push_back (act);
233 ActionManager::transport_sensitive_actions.push_back (act);
235 act = ActionManager::register_action (transport_actions, X_("Record"), _("Enable Record"), mem_fun(*this, &ARDOUR_UI::transport_record));
236 ActionManager::session_sensitive_actions.push_back (act);
237 ActionManager::transport_sensitive_actions.push_back (act);
238 act = ActionManager::register_action (transport_actions, X_("Rewind"), _("Rewind"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 0));
239 ActionManager::session_sensitive_actions.push_back (act);
240 ActionManager::transport_sensitive_actions.push_back (act);
241 act = ActionManager::register_action (transport_actions, X_("RewindSlow"), _("Rewind (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), -1));
242 ActionManager::session_sensitive_actions.push_back (act);
243 ActionManager::transport_sensitive_actions.push_back (act);
244 act = ActionManager::register_action (transport_actions, X_("RewindFast"), _("Rewind (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 1));
245 ActionManager::session_sensitive_actions.push_back (act);
246 ActionManager::transport_sensitive_actions.push_back (act);
247 act = ActionManager::register_action (transport_actions, X_("Forward"), _("Forward"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 0));
248 ActionManager::session_sensitive_actions.push_back (act);
249 ActionManager::transport_sensitive_actions.push_back (act);
250 act = ActionManager::register_action (transport_actions, X_("ForwardSlow"), _("Forward (Slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), -1));
251 ActionManager::session_sensitive_actions.push_back (act);
252 ActionManager::transport_sensitive_actions.push_back (act);
253 act = ActionManager::register_action (transport_actions, X_("ForwardFast"), _("Forward (Fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 1));
254 ActionManager::session_sensitive_actions.push_back (act);
255 ActionManager::transport_sensitive_actions.push_back (act);
256 act = ActionManager::register_action (transport_actions, X_("GotoZero"), _("Goto Zero"), mem_fun(*this, &ARDOUR_UI::transport_goto_zero));
257 ActionManager::session_sensitive_actions.push_back (act);
258 ActionManager::transport_sensitive_actions.push_back (act);
259 act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("Goto Start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
260 ActionManager::session_sensitive_actions.push_back (act);
261 ActionManager::transport_sensitive_actions.push_back (act);
262 act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("Goto End"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
263 ActionManager::session_sensitive_actions.push_back (act);
264 ActionManager::transport_sensitive_actions.push_back (act);
266 /* XXX the newline in the displayed names of these action is really wrong, but its because we want the button
267 that proxies for these action to be more compact. It would be nice to find a way to override the action
268 name appearance on the buttons.
271 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("Punch\nin"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
272 ActionManager::session_sensitive_actions.push_back (act);
273 ActionManager::transport_sensitive_actions.push_back (act);
274 act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("Punch\nout"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
275 ActionManager::session_sensitive_actions.push_back (act);
276 ActionManager::transport_sensitive_actions.push_back (act);
277 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleClick"), _("Click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
278 ActionManager::session_sensitive_actions.push_back (act);
279 ActionManager::transport_sensitive_actions.push_back (act);
280 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoInput"), _("Auto\ninput"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
281 ActionManager::session_sensitive_actions.push_back (act);
282 ActionManager::transport_sensitive_actions.push_back (act);
283 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoPlay"), _("Auto\nplay"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
284 ActionManager::session_sensitive_actions.push_back (act);
285 ActionManager::transport_sensitive_actions.push_back (act);
286 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoReturn"), _("Auto\nreturn"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
287 ActionManager::session_sensitive_actions.push_back (act);
288 ActionManager::transport_sensitive_actions.push_back (act);
290 act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("Time\nmaster"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
291 ActionManager::session_sensitive_actions.push_back (act);
293 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("Toggle Record Enable Track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 0U));
294 ActionManager::session_sensitive_actions.push_back (act);
295 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("Toggle Record Enable Track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 1U));
296 ActionManager::session_sensitive_actions.push_back (act);
297 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("Toggle Record Enable Track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 2U));
298 ActionManager::session_sensitive_actions.push_back (act);
299 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("Toggle Record Enable Track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 3U));
300 ActionManager::session_sensitive_actions.push_back (act);
301 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("Toggle Record Enable Track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 4U));
302 ActionManager::session_sensitive_actions.push_back (act);
303 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("Toggle Record Enable Track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 5U));
304 ActionManager::session_sensitive_actions.push_back (act);
305 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("Toggle Record Enable Track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 6U));
306 ActionManager::session_sensitive_actions.push_back (act);
307 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("Toggle Record Enable Track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 7U));
308 ActionManager::session_sensitive_actions.push_back (act);
309 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("Toggle Record Enable Track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 8U));
310 ActionManager::session_sensitive_actions.push_back (act);
311 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("Toggle Record Enable Track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
312 ActionManager::session_sensitive_actions.push_back (act);
313 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("Toggle Record Enable Track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
314 ActionManager::session_sensitive_actions.push_back (act);
315 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("Toggle Record Enable Track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
316 ActionManager::session_sensitive_actions.push_back (act);
317 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("Toggle Record Enable Track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
318 ActionManager::session_sensitive_actions.push_back (act);
319 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("Toggle Record Enable Track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
320 ActionManager::session_sensitive_actions.push_back (act);
321 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("Toggle Record Enable Track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
322 ActionManager::session_sensitive_actions.push_back (act);
323 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("Toggle Record Enable Track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
324 ActionManager::session_sensitive_actions.push_back (act);
325 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("Toggle Record Enable Track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
326 ActionManager::session_sensitive_actions.push_back (act);
327 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("Toggle Record Enable Track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
328 ActionManager::session_sensitive_actions.push_back (act);
329 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("Toggle Record Enable Track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
330 ActionManager::session_sensitive_actions.push_back (act);
331 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("Toggle Record Enable Track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
332 ActionManager::session_sensitive_actions.push_back (act);
333 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("Toggle Record Enable Track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
334 ActionManager::session_sensitive_actions.push_back (act);
335 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("Toggle Record Enable Track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
336 ActionManager::session_sensitive_actions.push_back (act);
337 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("Toggle Record Enable Track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
338 ActionManager::session_sensitive_actions.push_back (act);
339 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("Toggle Record Enable Track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
340 ActionManager::session_sensitive_actions.push_back (act);
341 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("Toggle Record Enable Track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
342 ActionManager::session_sensitive_actions.push_back (act);
343 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("Toggle Record Enable Track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
344 ActionManager::session_sensitive_actions.push_back (act);
345 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("Toggle Record Enable Track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
346 ActionManager::session_sensitive_actions.push_back (act);
347 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("Toggle Record Enable Track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
348 ActionManager::session_sensitive_actions.push_back (act);
349 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("Toggle Record Enable Track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
350 ActionManager::session_sensitive_actions.push_back (act);
351 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("Toggle Record Enable Track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
352 ActionManager::session_sensitive_actions.push_back (act);
353 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("Toggle Record Enable Track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
354 ActionManager::session_sensitive_actions.push_back (act);
355 act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("Toggle Record Enable Track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
356 ActionManager::session_sensitive_actions.push_back (act);
358 Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
360 shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Percentage));
361 shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Semitones));
363 Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
365 act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), 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_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
368 ActionManager::session_sensitive_actions.push_back (act);
369 act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
370 ActionManager::session_sensitive_actions.push_back (act);
371 act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
372 ActionManager::session_sensitive_actions.push_back (act);
373 act = ActionManager::register_toggle_action (option_actions, X_("UseMIDIcontrol"), _("Use MIDI control"), mem_fun (*this, &ARDOUR_UI::toggle_use_midi_control));
374 ActionManager::session_sensitive_actions.push_back (act);
376 act = ActionManager::register_toggle_action (option_actions, X_("AutoConnectNewTrackInputsToHardware"), _("Connect new track inputs to hardware"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackInputsToHardware));
377 ActionManager::session_sensitive_actions.push_back (act);
379 RadioAction::Group file_header_group;
381 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));
382 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));
383 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));
384 // 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));
385 // 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));
386 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));
388 RadioAction::Group file_data_group;
390 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));
391 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));
393 RadioAction::Group connect_outputs_group;
395 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));
396 ActionManager::session_sensitive_actions.push_back (act);
397 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));
398 ActionManager::session_sensitive_actions.push_back (act);
399 act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("ManuallyConnectNewTrackOutputs"), _("Manually connect new track outputs"), mem_fun (*this, &ARDOUR_UI::toggle_ManuallyConnectNewTrackOutputs));
400 ActionManager::session_sensitive_actions.push_back (act);
402 RadioAction::Group monitoring_group;
404 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("Hardware monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseHardwareMonitoring));
405 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Software monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseSoftwareMonitoring));
406 act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("External monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseExternalMonitoring));
408 /* Configuration object options (i.e. not session specific) */
410 ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
411 ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
412 ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
413 ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
414 ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
415 ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
417 /* session options */
419 act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
420 ActionManager::session_sensitive_actions.push_back (act);
422 act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
423 ActionManager::session_sensitive_actions.push_back (act);
425 RadioAction::Group solo_group;
427 act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloInPlace"), _("Solo in-place"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
428 ActionManager::session_sensitive_actions.push_back (act);
429 act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloViaBus"), _("Solo via bus"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
430 ActionManager::session_sensitive_actions.push_back (act);
432 act = ActionManager::register_action (option_actions, X_("AutomaticallyCreateCrossfades"), _("Automatically create crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_AutomaticallyCreateCrossfades));
433 ActionManager::session_sensitive_actions.push_back (act);
434 act = ActionManager::register_action (option_actions, X_("UnmuteNewFullCrossfades"), _("Unmute new full crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_UnmuteNewFullCrossfades));
435 ActionManager::session_sensitive_actions.push_back (act);
437 ActionManager::add_action_group (shuttle_actions);
438 ActionManager::add_action_group (option_actions);
439 ActionManager::add_action_group (jack_actions);
440 ActionManager::add_action_group (transport_actions);
441 ActionManager::add_action_group (main_actions);
442 ActionManager::add_action_group (common_actions);
444 /* initialize state of non-session dependent options */
446 setup_config_options ();
450 ARDOUR_UI::toggle_control_protocol (ControlProtocolInfo* cpi)
453 /* this happens when we build the menu bar when control protocol support
454 has been used in the past for some given protocol - the item needs
455 to be made active, but there is no session yet.
460 if (cpi->protocol == 0) {
461 ControlProtocolManager::instance().instantiate (*cpi);
463 ControlProtocolManager::instance().teardown (*cpi);
468 ARDOUR_UI::build_control_surface_menu ()
470 list<ControlProtocolInfo*>::iterator i;
472 /* !!! this has to match the top level entry from ardour.menus */
474 string ui = "<menubar name='Main' action='MainMenu'>\n<menu name='Options' action='Options'>\n<menu action='ControlSurfaces'><separator/>\n";
476 for (i = ControlProtocolManager::instance().control_protocol_info.begin(); i != ControlProtocolManager::instance().control_protocol_info.end(); ++i) {
478 if (!(*i)->mandatory) {
480 string action_name = "Toggle";
481 action_name += legalize_for_path ((*i)->name);
482 action_name += "Surface";
484 string action_label = (*i)->name;
486 Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), action_label.c_str(),
487 (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol), *i)));
489 Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
491 if ((*i)->protocol || (*i)->requested) {
495 ui += "<menuitem action='";
501 ui += "</menu>\n</menu>\n</menubar>\n";
503 ActionManager::ui_manager->add_ui_from_string (ui);
507 ARDOUR_UI::build_menu_bar ()
509 build_control_surface_menu ();
511 menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
512 menu_bar->set_name ("MainMenuBar");
515 * This is needed because this property does not get installed
516 * until the Menu GObject class is registered, which happens
517 * when the first menu instance is created.
519 Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;
521 wall_clock_box.add (wall_clock_label);
522 wall_clock_box.set_name ("WallClock");
523 wall_clock_label.set_name ("WallClock");
525 disk_space_box.add (disk_space_label);
526 disk_space_box.set_name ("WallClock");
527 disk_space_label.set_name ("WallClock");
529 cpu_load_box.add (cpu_load_label);
530 cpu_load_box.set_name ("CPULoad");
531 cpu_load_label.set_name ("CPULoad");
533 buffer_load_box.add (buffer_load_label);
534 buffer_load_box.set_name ("BufferLoad");
535 buffer_load_label.set_name ("BufferLoad");
537 sample_rate_box.add (sample_rate_label);
538 sample_rate_box.set_name ("SampleRate");
539 sample_rate_label.set_name ("SampleRate");
541 menu_hbox.pack_start (*menu_bar, true, true);
542 menu_hbox.pack_end (wall_clock_box, false, false, 10);
543 menu_hbox.pack_end (disk_space_box, false, false, 10);
544 menu_hbox.pack_end (cpu_load_box, false, false, 10);
545 menu_hbox.pack_end (buffer_load_box, false, false, 10);
546 menu_hbox.pack_end (sample_rate_box, false, false, 10);
548 menu_bar_base.set_name ("MainMenuBar");
549 menu_bar_base.add (menu_hbox);