start marker implemented, along with GotoZero command for old behaviour; R binding...
[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         /* the real actions */
77
78         act = ActionManager::register_action (main_actions, X_("New"), _("New"),  bind (mem_fun(*this, &ARDOUR_UI::new_session), false, string ()));
79
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);
84
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);
87
88         
89         /* <CMT Additions> */
90
91         PathScanner scanner;
92         vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
93
94         if (results) {
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);
98                 }
99                 delete results;
100         }
101
102         /* </CMT Additions> */
103
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);
106
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);
109
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);
112
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);
116
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);
120
121         act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
122         ActionManager::session_sensitive_actions.push_back (act);
123
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);
128         
129         /* JACK actions for controlling ... JACK */
130
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"));
134         
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);
137
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);
140         
141         RadioAction::Group jack_latency_group;
142         
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);
161         
162         /* these actions are intended to be shared across all windows */
163         
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)));
168
169         /* windows visibility actions */
170
171         ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("Maximise Editor Space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
172
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));
187         
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);
196
197         Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
198
199         /* do-nothing action for the "transport" menu bar item */
200
201         ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
202
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.
205         */
206         
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);
213
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);
226
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);
257
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.
261         */
262
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);
281
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);
284
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);
351
352         Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
353         
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));
356
357         Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
358
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);
369
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);
372
373         RadioAction::Group connect_outputs_group;
374
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);
381
382         RadioAction::Group monitoring_group;
383
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);
390
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);
395
396         ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
397         
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);
406
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);
409
410         RadioAction::Group solo_group;
411
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);
415
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);
420
421
422 #ifdef NEW_ACTIONS
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);
427         
428 #endif  
429         
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);
436 }
437
438 void
439 ARDOUR_UI::build_menu_bar ()
440 {
441         menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
442         menu_bar->set_name ("MainMenuBar");
443
444         /*
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.
448          */
449         Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;  
450         
451         wall_clock_box.add (wall_clock_label);
452         wall_clock_box.set_name ("WallClock");
453         wall_clock_label.set_name ("WallClock");
454
455         disk_space_box.add (disk_space_label);
456         disk_space_box.set_name ("WallClock");
457         disk_space_label.set_name ("WallClock");
458
459         cpu_load_box.add (cpu_load_label);
460         cpu_load_box.set_name ("CPULoad");
461         cpu_load_label.set_name ("CPULoad");
462
463         buffer_load_box.add (buffer_load_label);
464         buffer_load_box.set_name ("BufferLoad");
465         buffer_load_label.set_name ("BufferLoad");
466
467 //      disk_rate_box.add (disk_rate_label);
468 //      disk_rate_box.set_name ("DiskRate");
469 //      disk_rate_label.set_name ("DiskRate");
470
471         sample_rate_box.add (sample_rate_label);
472         sample_rate_box.set_name ("SampleRate");
473         sample_rate_label.set_name ("SampleRate");
474
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);
482
483         menu_bar_base.set_name ("MainMenuBar");
484         menu_bar_base.add (menu_hbox);
485 }