a) fix problems with multichannel tape tracks
[ardour.git] / gtk2_ardour / ardour_ui_ed.cc
1 /*
2     Copyright (C) 20002-2004 Paul Davis 
3
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.
8
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.
13
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.
17
18     $Id$
19 */
20
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.
25 */
26
27 #include <pbd/pathscanner.h>
28
29 #include "ardour_ui.h"
30 #include "public_editor.h"
31 #include "audio_clock.h"
32 #include "editor.h"
33 #include "actions.h"
34
35 #include <ardour/session.h>
36
37 #include "i18n.h"
38
39 using namespace ARDOUR;
40 using namespace Gtk;
41 using namespace Gtkmm2ext;
42
43 int
44 ARDOUR_UI::create_editor ()
45
46 {
47         try {
48                 editor = new Editor (*engine);
49         }
50
51         catch (failed_constructor& err) {
52                 return -1;
53         }
54
55         editor->Realized.connect (mem_fun (*this, &ARDOUR_UI::editor_realized));
56
57         return 0;
58 }
59
60 void
61 ARDOUR_UI::install_actions ()
62 {
63         Glib::RefPtr<ActionGroup> main_actions = ActionGroup::create (X_("Main"));
64         Glib::RefPtr<Action> act;
65
66         /* menus + submenus that need action items */
67
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"));
79
80         /* the real actions */
81
82         act = ActionManager::register_action (main_actions, X_("New"), _("New"),  bind (mem_fun(*this, &ARDOUR_UI::new_session), false, string ()));
83
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);
88
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);
91
92         
93         /* <CMT Additions> */
94
95         PathScanner scanner;
96         vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
97
98         if (results) {
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);
102                 }
103                 delete results;
104         }
105
106         /* </CMT Additions> */
107
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);
110
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);
113
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);
116
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);
120
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);
124
125         act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
126         ActionManager::session_sensitive_actions.push_back (act);
127
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);
132         
133         /* JACK actions for controlling ... JACK */
134
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"));
138         
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);
141
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);
144         
145         RadioAction::Group jack_latency_group;
146         
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);
165         
166         /* these actions are intended to be shared across all windows */
167         
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)));
172
173         /* windows visibility actions */
174
175         ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
176
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));
191         
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);
200
201         Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
202
203         /* do-nothing action for the "transport" menu bar item */
204
205         ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
206
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.
209         */
210         
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);
217
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);
230
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);
261
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.
265         */
266
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);
285
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);
288
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);
355
356         Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
357         
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));
360
361         Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
362
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);
373
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);
376
377         RadioAction::Group file_header_group;
378
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));
384
385         RadioAction::Group file_data_group;
386
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));
389
390         RadioAction::Group connect_outputs_group;
391
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);
398
399         RadioAction::Group monitoring_group;
400
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);
407
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);
412
413         ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
414         
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);
423
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);
426
427         RadioAction::Group solo_group;
428
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);
432
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);
437
438
439 #ifdef NEW_ACTIONS
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);
444         
445 #endif  
446         
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);
453 }
454
455 void
456 ARDOUR_UI::build_menu_bar ()
457 {
458         menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
459         menu_bar->set_name ("MainMenuBar");
460
461         /*
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.
465          */
466         Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;  
467         
468         wall_clock_box.add (wall_clock_label);
469         wall_clock_box.set_name ("WallClock");
470         wall_clock_label.set_name ("WallClock");
471
472         disk_space_box.add (disk_space_label);
473         disk_space_box.set_name ("WallClock");
474         disk_space_label.set_name ("WallClock");
475
476         cpu_load_box.add (cpu_load_label);
477         cpu_load_box.set_name ("CPULoad");
478         cpu_load_label.set_name ("CPULoad");
479
480         buffer_load_box.add (buffer_load_label);
481         buffer_load_box.set_name ("BufferLoad");
482         buffer_load_label.set_name ("BufferLoad");
483
484 //      disk_rate_box.add (disk_rate_label);
485 //      disk_rate_box.set_name ("DiskRate");
486 //      disk_rate_label.set_name ("DiskRate");
487
488         sample_rate_box.add (sample_rate_label);
489         sample_rate_box.set_name ("SampleRate");
490         sample_rate_label.set_name ("SampleRate");
491
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);
499
500         menu_bar_base.set_name ("MainMenuBar");
501         menu_bar_base.add (menu_hbox);
502 }