restore many keybindings from ardour 0.99
[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_("ExportRange"), _("Export range to audiofile..."),  mem_fun (*editor, &PublicEditor::export_selection));
114         ActionManager::session_sensitive_actions.push_back (act);
115
116         act = ActionManager::register_action (main_actions, X_("Export"), _("Export"));
117         ActionManager::session_sensitive_actions.push_back (act);
118
119         act = ActionManager::register_action (main_actions, X_("CleanupUnused"), _("Cleanup unused sources"),  mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup));
120         ActionManager::session_sensitive_actions.push_back (act);
121         act = ActionManager::register_action (main_actions, X_("FlushWastebasket"), _("Flush wastebasket"),  mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash));
122         ActionManager::session_sensitive_actions.push_back (act);
123         
124         /* JACK actions for controlling ... JACK */
125
126         Glib::RefPtr<ActionGroup> jack_actions = ActionGroup::create (X_("JACK"));
127         ActionManager::register_action (jack_actions, X_("JACK"), _("JACK"));
128         ActionManager::register_action (jack_actions, X_("Latency"), _("Latency"));
129         
130         act = ActionManager::register_action (jack_actions, X_("JACKReconnect"), _("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack));
131         ActionManager::jack_opposite_sensitive_actions.push_back (act);
132
133         act = ActionManager::register_action (jack_actions, X_("JACKDisconnect"), _("Disconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::disconnect_from_jack));
134         ActionManager::jack_sensitive_actions.push_back (act);
135         
136         RadioAction::Group jack_latency_group;
137         
138         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));
139         ActionManager::jack_sensitive_actions.push_back (act);
140         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));
141         ActionManager::jack_sensitive_actions.push_back (act);
142         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));
143         ActionManager::jack_sensitive_actions.push_back (act);
144         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));
145         ActionManager::jack_sensitive_actions.push_back (act);
146         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));
147         ActionManager::jack_sensitive_actions.push_back (act);
148         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));
149         ActionManager::jack_sensitive_actions.push_back (act);
150         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));
151         ActionManager::jack_sensitive_actions.push_back (act);
152         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));
153         ActionManager::jack_sensitive_actions.push_back (act);
154         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));
155         ActionManager::jack_sensitive_actions.push_back (act);
156         
157         /* these actions are intended to be shared across all windows */
158         
159         common_actions = ActionGroup::create (X_("Common"));
160         ActionManager::register_action (main_actions, X_("Windows"), _("Windows"));
161         ActionManager::register_action (common_actions, X_("Start-Prefix"), _("start prefix"), mem_fun(*this, &ARDOUR_UI::start_keyboard_prefix));
162         ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (mem_fun(*this, &ARDOUR_UI::finish)));
163
164         /* windows visibility actions */
165
166         ActionManager::register_toggle_action (common_actions, X_("ToggleMaximalEditor"), _("maximise editor space"), mem_fun (*this, &ARDOUR_UI::toggle_editing_space));
167
168         ActionManager::register_action (common_actions, X_("goto-editor"), _("show editor"),  mem_fun(*this, &ARDOUR_UI::goto_editor_window));
169         ActionManager::register_action (common_actions, X_("goto-mixer"), _("show mixer"),  mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
170         ActionManager::register_toggle_action (common_actions, X_("ToggleSoundFileBrowser"), _("Sound File Browser"), mem_fun(*this, &ARDOUR_UI::toggle_sound_file_browser));
171         ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Options Editor"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
172         act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
173         ActionManager::session_sensitive_actions.push_back (act);
174         act = ActionManager::register_toggle_action (common_actions, X_("ToggleConnections"), _("Connections"), mem_fun(*this, &ARDOUR_UI::toggle_connection_editor));
175         ActionManager::session_sensitive_actions.push_back (act);
176         act = ActionManager::register_toggle_action (common_actions, X_("ToggleLocations"), _("Locations"), mem_fun(*this, &ARDOUR_UI::toggle_location_window));
177         ActionManager::session_sensitive_actions.push_back (act);
178         act = ActionManager::register_toggle_action (common_actions, X_("ToggleBigClock"), _("Big Clock"), mem_fun(*this, &ARDOUR_UI::toggle_big_clock_window));
179         ActionManager::session_sensitive_actions.push_back (act);
180         ActionManager::register_action (common_actions, X_("About"), _("About"),  mem_fun(*this, &ARDOUR_UI::show_splash));
181         
182         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));
183         ActionManager::session_sensitive_actions.push_back (act);
184         act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("add audio bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1));
185         ActionManager::session_sensitive_actions.push_back (act);
186         act = ActionManager::register_action (common_actions, X_("Save"), _("Save"),  bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
187         ActionManager::session_sensitive_actions.push_back (act);
188         act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("remove last capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
189         ActionManager::session_sensitive_actions.push_back (act);
190
191         Glib::RefPtr<ActionGroup> transport_actions = ActionGroup::create (X_("Transport"));
192
193         /* do-nothing action for the "transport" menu bar item */
194
195         ActionManager::register_action (transport_actions, X_("Transport"), _("Transport"));
196
197         /* these two are not used by key bindings, instead use ToggleRoll for that. these two do show up in
198            menus and via button proxies.
199         */
200         
201         act = ActionManager::register_action (transport_actions, X_("Stop"), _("stop"), mem_fun(*this, &ARDOUR_UI::transport_stop));
202         ActionManager::session_sensitive_actions.push_back (act);
203         ActionManager::transport_sensitive_actions.push_back (act);
204         act = ActionManager::register_action (transport_actions, X_("Roll"), _("roll"), mem_fun(*this, &ARDOUR_UI::transport_roll));
205         ActionManager::session_sensitive_actions.push_back (act);
206         ActionManager::transport_sensitive_actions.push_back (act);
207
208         ActionManager::register_action (transport_actions, X_("ToggleRoll"), _("start/stop"), bind (mem_fun (*editor, &PublicEditor::toggle_playback), false));
209         ActionManager::session_sensitive_actions.push_back (act);
210         ActionManager::transport_sensitive_actions.push_back (act);
211         ActionManager::register_action (transport_actions, X_("ToggleRollForgetCapture"), _("stop + forget capture"), bind (mem_fun(*editor, &PublicEditor::toggle_playback), true));
212         ActionManager::session_sensitive_actions.push_back (act);
213         ActionManager::transport_sensitive_actions.push_back (act);
214         act = ActionManager::register_action (transport_actions, X_("Loop"), _("play loop range"), mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
215         ActionManager::session_sensitive_actions.push_back (act);
216         ActionManager::transport_sensitive_actions.push_back (act);
217         act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("play selection"), mem_fun(*this, &ARDOUR_UI::transport_play_selection));
218         ActionManager::session_sensitive_actions.push_back (act);
219         ActionManager::transport_sensitive_actions.push_back (act);
220
221         act = ActionManager::register_action (transport_actions, X_("Record"), _("enable record"), mem_fun(*this, &ARDOUR_UI::transport_record));
222         ActionManager::session_sensitive_actions.push_back (act);
223         ActionManager::transport_sensitive_actions.push_back (act);
224         act = ActionManager::register_action (transport_actions, X_("Rewind"), _("rewind"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 0));
225         ActionManager::session_sensitive_actions.push_back (act);
226         ActionManager::transport_sensitive_actions.push_back (act);
227         act = ActionManager::register_action (transport_actions, X_("RewindSlow"), _("rewind (slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), -1));
228         ActionManager::session_sensitive_actions.push_back (act);
229         ActionManager::transport_sensitive_actions.push_back (act);
230         act = ActionManager::register_action (transport_actions, X_("RewindFast"), _("rewind (fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_rewind), 1));
231         ActionManager::session_sensitive_actions.push_back (act);
232         ActionManager::transport_sensitive_actions.push_back (act);
233         act = ActionManager::register_action (transport_actions, X_("Forward"), _("forward"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 0));
234         ActionManager::session_sensitive_actions.push_back (act);
235         ActionManager::transport_sensitive_actions.push_back (act);
236         act = ActionManager::register_action (transport_actions, X_("ForwardSlow"), _("forward (slow)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), -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_("ForwardFast"), _("forward (fast)"), bind (mem_fun(*this, &ARDOUR_UI::transport_forward), 1));
240         ActionManager::session_sensitive_actions.push_back (act);
241         ActionManager::transport_sensitive_actions.push_back (act);
242         act = ActionManager::register_action (transport_actions, X_("GotoStart"), _("goto start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
243         ActionManager::session_sensitive_actions.push_back (act);
244         ActionManager::transport_sensitive_actions.push_back (act);
245         act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("goto end"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
246         ActionManager::session_sensitive_actions.push_back (act);
247         ActionManager::transport_sensitive_actions.push_back (act);
248
249         /* XXX the newline in the displayed names of these action is really wrong, but its because we want the button
250            that proxies for these action to be more compact. It would be nice to find a way to override the action
251            name appearance on the buttons.
252         */
253
254         act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("punch\nin"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
255         ActionManager::session_sensitive_actions.push_back (act);
256         ActionManager::transport_sensitive_actions.push_back (act);
257         act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchOut"), _("punch\nout"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
258         ActionManager::session_sensitive_actions.push_back (act);
259         ActionManager::transport_sensitive_actions.push_back (act);
260         act = ActionManager::register_toggle_action (transport_actions, X_("ToggleClick"), _("click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
261         ActionManager::session_sensitive_actions.push_back (act);
262         ActionManager::transport_sensitive_actions.push_back (act);
263         act = ActionManager::register_toggle_action (transport_actions, X_("ToggleAutoInput"), _("auto\ninput"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
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_("ToggleAutoPlay"), _("auto\nplay"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
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_("ToggleAutoReturn"), _("auto\nreturn"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
270         ActionManager::session_sensitive_actions.push_back (act);
271         ActionManager::transport_sensitive_actions.push_back (act);
272
273         act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("time\nmaster"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
274         ActionManager::session_sensitive_actions.push_back (act);
275
276         act = ActionManager::register_action (common_actions, X_("SendAllMidiFeedback"), _("send all midi feedback"), mem_fun(*this, &ARDOUR_UI::send_all_midi_feedback));
277         ActionManager::session_sensitive_actions.push_back (act);
278         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("toggle record enable track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  0U));
279         ActionManager::session_sensitive_actions.push_back (act);
280         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("toggle record enable track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  1U));
281         ActionManager::session_sensitive_actions.push_back (act);
282         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("toggle record enable track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  2U));
283         ActionManager::session_sensitive_actions.push_back (act);
284         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("toggle record enable track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  3U));
285         ActionManager::session_sensitive_actions.push_back (act);
286         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("toggle record enable track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  4U));
287         ActionManager::session_sensitive_actions.push_back (act);
288         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("toggle record enable track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  5U));
289         ActionManager::session_sensitive_actions.push_back (act);
290         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("toggle record enable track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  6U));
291         ActionManager::session_sensitive_actions.push_back (act);
292         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("toggle record enable track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  7U));
293         ActionManager::session_sensitive_actions.push_back (act);
294         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("toggle record enable track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  8U));
295         ActionManager::session_sensitive_actions.push_back (act);
296         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("toggle record enable track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
297         ActionManager::session_sensitive_actions.push_back (act);
298         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("toggle record enable track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
299         ActionManager::session_sensitive_actions.push_back (act);
300         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("toggle record enable track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
301         ActionManager::session_sensitive_actions.push_back (act);
302         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("toggle record enable track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
303         ActionManager::session_sensitive_actions.push_back (act);
304         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("toggle record enable track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
305         ActionManager::session_sensitive_actions.push_back (act);
306         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("toggle record enable track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
307         ActionManager::session_sensitive_actions.push_back (act);
308         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("toggle record enable track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
309         ActionManager::session_sensitive_actions.push_back (act);
310         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("toggle record enable track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
311         ActionManager::session_sensitive_actions.push_back (act);
312         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("toggle record enable track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
313         ActionManager::session_sensitive_actions.push_back (act);
314         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("toggle record enable track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
315         ActionManager::session_sensitive_actions.push_back (act);
316         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("toggle record enable track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
317         ActionManager::session_sensitive_actions.push_back (act);
318         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("toggle record enable track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
319         ActionManager::session_sensitive_actions.push_back (act);
320         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("toggle record enable track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
321         ActionManager::session_sensitive_actions.push_back (act);
322         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("toggle record enable track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
323         ActionManager::session_sensitive_actions.push_back (act);
324         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("toggle record enable track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
325         ActionManager::session_sensitive_actions.push_back (act);
326         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("toggle record enable track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
327         ActionManager::session_sensitive_actions.push_back (act);
328         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("toggle record enable track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
329         ActionManager::session_sensitive_actions.push_back (act);
330         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("toggle record enable track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
331         ActionManager::session_sensitive_actions.push_back (act);
332         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("toggle record enable track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
333         ActionManager::session_sensitive_actions.push_back (act);
334         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("toggle record enable track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
335         ActionManager::session_sensitive_actions.push_back (act);
336         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("toggle record enable track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
337         ActionManager::session_sensitive_actions.push_back (act);
338         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("toggle record enable track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
339         ActionManager::session_sensitive_actions.push_back (act);
340         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("toggle record enable track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
341         ActionManager::session_sensitive_actions.push_back (act);
342
343         Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
344         
345         shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Percentage));
346         shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Semitones));
347
348         Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
349
350         act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
351         ActionManager::session_sensitive_actions.push_back (act);
352         act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
353         ActionManager::session_sensitive_actions.push_back (act);
354         act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
355         ActionManager::session_sensitive_actions.push_back (act);
356         act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
357         ActionManager::session_sensitive_actions.push_back (act);
358         act = ActionManager::register_toggle_action (option_actions, X_("UseMIDIcontrol"), _("Use MIDI control"), mem_fun (*this, &ARDOUR_UI::toggle_use_midi_control));
359         ActionManager::session_sensitive_actions.push_back (act);
360
361         act = ActionManager::register_toggle_action (option_actions, X_("AutoConnectNewTrackInputsToHardware"), _("Connect newtrack inputs to hardware"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackInputsToHardware));
362         ActionManager::session_sensitive_actions.push_back (act);
363
364         RadioAction::Group connect_outputs_group;
365
366         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));
367         ActionManager::session_sensitive_actions.push_back (act);
368         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));
369         ActionManager::session_sensitive_actions.push_back (act);
370         act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("ManuallyConnectNewTrackOutputs"), _("Manually connect new track outputs"), mem_fun (*this, &ARDOUR_UI::toggle_ManuallyConnectNewTrackOutputs));
371         ActionManager::session_sensitive_actions.push_back (act);
372
373         RadioAction::Group monitoring_group;
374
375         act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("Hardware monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseHardwareMonitoring));
376         ActionManager::session_sensitive_actions.push_back (act);
377         act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Software monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseSoftwareMonitoring));
378         ActionManager::session_sensitive_actions.push_back (act);
379         act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("External monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseExternalMonitoring));
380         ActionManager::session_sensitive_actions.push_back (act);
381
382         act = ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
383         ActionManager::session_sensitive_actions.push_back (act);
384         act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
385         ActionManager::session_sensitive_actions.push_back (act);
386
387         ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
388         
389         act = ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
390         ActionManager::session_sensitive_actions.push_back (act);
391         act = ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
392         ActionManager::session_sensitive_actions.push_back (act);
393         act = ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
394         ActionManager::session_sensitive_actions.push_back (act);
395         act = ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
396         ActionManager::session_sensitive_actions.push_back (act);
397
398         act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
399         ActionManager::session_sensitive_actions.push_back (act);
400
401         RadioAction::Group solo_group;
402
403         act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloInPlace"), _("Solo in-place"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
404         act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloViaBus"), _("Solo via bus"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
405         ActionManager::session_sensitive_actions.push_back (act);
406
407         act = ActionManager::register_action (option_actions, X_("AutomaticallyCreateCrossfades"), _("Automatically create crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_AutomaticallyCreateCrossfades));
408         ActionManager::session_sensitive_actions.push_back (act);
409         act = ActionManager::register_action (option_actions, X_("UnmuteNewFullCrossfades"), _("Unmute new full crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_UnmuteNewFullCrossfades));
410         ActionManager::session_sensitive_actions.push_back (act);
411
412
413 #ifdef NEW_ACTIONS
414         act = ActionManager::register_action (option_actions, X_("SetRegionLayerMode", _("SetRegionLayerMode"), mem_fun (*this, &ARDOUR_UI::toggle_SetRegionLayerMode)));
415         ActionManager::session_sensitive_actions.push_back (act);
416         act = ActionManager::register_action (option_actions, X_("SetCrossfadeModel", _("SetCrossfadeModel"), mem_fun (*this, &ARDOUR_UI::toggle_SetCrossfadeModel)));
417         ActionManager::session_sensitive_actions.push_back (act);
418         
419 #endif  
420         
421         ActionManager::add_action_group (shuttle_actions);
422         ActionManager::add_action_group (option_actions);
423         ActionManager::add_action_group (jack_actions);
424         ActionManager::add_action_group (transport_actions);
425         ActionManager::add_action_group (main_actions);
426         ActionManager::add_action_group (common_actions);
427 }
428
429 void
430 ARDOUR_UI::build_menu_bar ()
431 {
432         menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
433         menu_bar->set_name ("MainMenuBar");
434
435         /*
436          * This is needed because this property does not get installed
437          * until the Menu GObject class is registered, which happens
438          * when the first menu instance is created.
439          */
440         Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;  
441         
442         wall_clock_box.add (wall_clock_label);
443         wall_clock_box.set_name ("WallClock");
444         wall_clock_label.set_name ("WallClock");
445
446         disk_space_box.add (disk_space_label);
447         disk_space_box.set_name ("WallClock");
448         disk_space_label.set_name ("WallClock");
449
450         cpu_load_box.add (cpu_load_label);
451         cpu_load_box.set_name ("CPULoad");
452         cpu_load_label.set_name ("CPULoad");
453
454         buffer_load_box.add (buffer_load_label);
455         buffer_load_box.set_name ("BufferLoad");
456         buffer_load_label.set_name ("BufferLoad");
457
458 //      disk_rate_box.add (disk_rate_label);
459 //      disk_rate_box.set_name ("DiskRate");
460 //      disk_rate_label.set_name ("DiskRate");
461
462         sample_rate_box.add (sample_rate_label);
463         sample_rate_box.set_name ("SampleRate");
464         sample_rate_label.set_name ("SampleRate");
465
466         menu_hbox.pack_start (*menu_bar, true, true);
467         menu_hbox.pack_end (wall_clock_box, false, false, 10);
468         menu_hbox.pack_end (disk_space_box, false, false, 10);
469         menu_hbox.pack_end (cpu_load_box, false, false, 10);
470 //      menu_hbox.pack_end (disk_rate_box, false, false, 10);
471         menu_hbox.pack_end (buffer_load_box, false, false, 10);
472         menu_hbox.pack_end (sample_rate_box, false, false, 10);
473
474         menu_bar_base.set_name ("MainMenuBar");
475         menu_bar_base.add (menu_hbox);
476 }
477