export range markers patch (revisited), change selection model, copy-drag tempo+meter...
[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_("GotoStart"), _("goto start"), mem_fun(*this, &ARDOUR_UI::transport_goto_start));
249         ActionManager::session_sensitive_actions.push_back (act);
250         ActionManager::transport_sensitive_actions.push_back (act);
251         act = ActionManager::register_action (transport_actions, X_("GotoEnd"), _("goto end"), mem_fun(*this, &ARDOUR_UI::transport_goto_end));
252         ActionManager::session_sensitive_actions.push_back (act);
253         ActionManager::transport_sensitive_actions.push_back (act);
254
255         /* XXX the newline in the displayed names of these action is really wrong, but its because we want the button
256            that proxies for these action to be more compact. It would be nice to find a way to override the action
257            name appearance on the buttons.
258         */
259
260         act = ActionManager::register_toggle_action (transport_actions, X_("TogglePunchIn"), _("punch\nin"), mem_fun(*this, &ARDOUR_UI::toggle_punch_in));
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_("TogglePunchOut"), _("punch\nout"), mem_fun(*this, &ARDOUR_UI::toggle_punch_out));
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_("ToggleClick"), _("click"), mem_fun(*this, &ARDOUR_UI::toggle_click));
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_("ToggleAutoInput"), _("auto\ninput"), mem_fun(*this, &ARDOUR_UI::toggle_auto_input));
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_("ToggleAutoPlay"), _("auto\nplay"), mem_fun(*this, &ARDOUR_UI::toggle_auto_play));
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_("ToggleAutoReturn"), _("auto\nreturn"), mem_fun(*this, &ARDOUR_UI::toggle_auto_return));
276         ActionManager::session_sensitive_actions.push_back (act);
277         ActionManager::transport_sensitive_actions.push_back (act);
278
279         act = ActionManager::register_toggle_action (transport_actions, X_("ToggleTimeMaster"), _("time\nmaster"), mem_fun(*this, &ARDOUR_UI::toggle_time_master));
280         ActionManager::session_sensitive_actions.push_back (act);
281
282         act = ActionManager::register_action (common_actions, X_("SendAllMidiFeedback"), _("send all midi feedback"), mem_fun(*this, &ARDOUR_UI::send_all_midi_feedback));
283         ActionManager::session_sensitive_actions.push_back (act);
284         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack1"), _("toggle record enable track1"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  0U));
285         ActionManager::session_sensitive_actions.push_back (act);
286         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack2"), _("toggle record enable track2"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  1U));
287         ActionManager::session_sensitive_actions.push_back (act);
288         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack3"), _("toggle record enable track3"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  2U));
289         ActionManager::session_sensitive_actions.push_back (act);
290         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack4"), _("toggle record enable track4"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  3U));
291         ActionManager::session_sensitive_actions.push_back (act);
292         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack5"), _("toggle record enable track5"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  4U));
293         ActionManager::session_sensitive_actions.push_back (act);
294         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack6"), _("toggle record enable track6"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  5U));
295         ActionManager::session_sensitive_actions.push_back (act);
296         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack7"), _("toggle record enable track7"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  6U));
297         ActionManager::session_sensitive_actions.push_back (act);
298         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack8"), _("toggle record enable track8"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  7U));
299         ActionManager::session_sensitive_actions.push_back (act);
300         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack9"), _("toggle record enable track9"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable),  8U));
301         ActionManager::session_sensitive_actions.push_back (act);
302         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack10"), _("toggle record enable track10"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 9U));
303         ActionManager::session_sensitive_actions.push_back (act);
304         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack11"), _("toggle record enable track11"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 10U));
305         ActionManager::session_sensitive_actions.push_back (act);
306         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack12"), _("toggle record enable track12"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 11U));
307         ActionManager::session_sensitive_actions.push_back (act);
308         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack13"), _("toggle record enable track13"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 12U));
309         ActionManager::session_sensitive_actions.push_back (act);
310         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack14"), _("toggle record enable track14"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 13U));
311         ActionManager::session_sensitive_actions.push_back (act);
312         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack15"), _("toggle record enable track15"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 14U));
313         ActionManager::session_sensitive_actions.push_back (act);
314         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack16"), _("toggle record enable track16"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 15U));
315         ActionManager::session_sensitive_actions.push_back (act);
316         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack17"), _("toggle record enable track17"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 16U));
317         ActionManager::session_sensitive_actions.push_back (act);
318         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack18"), _("toggle record enable track18"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 17U));
319         ActionManager::session_sensitive_actions.push_back (act);
320         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack19"), _("toggle record enable track19"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 18U));
321         ActionManager::session_sensitive_actions.push_back (act);
322         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack20"), _("toggle record enable track20"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 19U));
323         ActionManager::session_sensitive_actions.push_back (act);
324         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack21"), _("toggle record enable track21"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 20U));
325         ActionManager::session_sensitive_actions.push_back (act);
326         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack22"), _("toggle record enable track22"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 21U));
327         ActionManager::session_sensitive_actions.push_back (act);
328         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack23"), _("toggle record enable track23"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 22U));
329         ActionManager::session_sensitive_actions.push_back (act);
330         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack24"), _("toggle record enable track24"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 23U));
331         ActionManager::session_sensitive_actions.push_back (act);
332         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack25"), _("toggle record enable track25"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 24U));
333         ActionManager::session_sensitive_actions.push_back (act);
334         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack26"), _("toggle record enable track26"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 25U));
335         ActionManager::session_sensitive_actions.push_back (act);
336         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack27"), _("toggle record enable track27"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 26U));
337         ActionManager::session_sensitive_actions.push_back (act);
338         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack28"), _("toggle record enable track28"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 27U));
339         ActionManager::session_sensitive_actions.push_back (act);
340         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack29"), _("toggle record enable track29"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 28U));
341         ActionManager::session_sensitive_actions.push_back (act);
342         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack30"), _("toggle record enable track30"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 29U));
343         ActionManager::session_sensitive_actions.push_back (act);
344         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack31"), _("toggle record enable track31"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 30U));
345         ActionManager::session_sensitive_actions.push_back (act);
346         act = ActionManager::register_action (common_actions, X_("ToggleRecordEnableTrack32"), _("toggle record enable track32"), bind (mem_fun(*this, &ARDOUR_UI::toggle_record_enable), 31U));
347         ActionManager::session_sensitive_actions.push_back (act);
348
349         Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
350         
351         shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Percentage));
352         shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Semitones));
353
354         Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
355
356         act = ActionManager::register_toggle_action (option_actions, X_("SendMTC"), _("Send MTC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
357         ActionManager::session_sensitive_actions.push_back (act);
358         act = ActionManager::register_toggle_action (option_actions, X_("SendMMC"), _("Send MMC"), mem_fun (*this, &ARDOUR_UI::toggle_send_mtc));
359         ActionManager::session_sensitive_actions.push_back (act);
360         act = ActionManager::register_toggle_action (option_actions, X_("UseMMC"), _("Use MMC"), mem_fun (*this, &ARDOUR_UI::toggle_use_mmc));
361         ActionManager::session_sensitive_actions.push_back (act);
362         act = ActionManager::register_toggle_action (option_actions, X_("SendMIDIfeedback"), _("Send MIDI feedback"), mem_fun (*this, &ARDOUR_UI::toggle_send_midi_feedback));
363         ActionManager::session_sensitive_actions.push_back (act);
364         act = ActionManager::register_toggle_action (option_actions, X_("UseMIDIcontrol"), _("Use MIDI control"), mem_fun (*this, &ARDOUR_UI::toggle_use_midi_control));
365         ActionManager::session_sensitive_actions.push_back (act);
366
367         act = ActionManager::register_toggle_action (option_actions, X_("AutoConnectNewTrackInputsToHardware"), _("Connect newtrack inputs to hardware"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackInputsToHardware));
368         ActionManager::session_sensitive_actions.push_back (act);
369
370         RadioAction::Group connect_outputs_group;
371
372         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));
373         ActionManager::session_sensitive_actions.push_back (act);
374         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));
375         ActionManager::session_sensitive_actions.push_back (act);
376         act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("ManuallyConnectNewTrackOutputs"), _("Manually connect new track outputs"), mem_fun (*this, &ARDOUR_UI::toggle_ManuallyConnectNewTrackOutputs));
377         ActionManager::session_sensitive_actions.push_back (act);
378
379         RadioAction::Group monitoring_group;
380
381         act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("Hardware monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseHardwareMonitoring));
382         ActionManager::session_sensitive_actions.push_back (act);
383         act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Software monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseSoftwareMonitoring));
384         ActionManager::session_sensitive_actions.push_back (act);
385         act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("External monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseExternalMonitoring));
386         ActionManager::session_sensitive_actions.push_back (act);
387
388         act = ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
389         ActionManager::session_sensitive_actions.push_back (act);
390         act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
391         ActionManager::session_sensitive_actions.push_back (act);
392
393         ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
394         
395         act = ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
396         ActionManager::session_sensitive_actions.push_back (act);
397         act = ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
398         ActionManager::session_sensitive_actions.push_back (act);
399         act = ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
400         ActionManager::session_sensitive_actions.push_back (act);
401         act = ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
402         ActionManager::session_sensitive_actions.push_back (act);
403
404         act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
405         ActionManager::session_sensitive_actions.push_back (act);
406
407         RadioAction::Group solo_group;
408
409         act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloInPlace"), _("Solo in-place"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
410         act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloViaBus"), _("Solo via bus"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
411         ActionManager::session_sensitive_actions.push_back (act);
412
413         act = ActionManager::register_action (option_actions, X_("AutomaticallyCreateCrossfades"), _("Automatically create crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_AutomaticallyCreateCrossfades));
414         ActionManager::session_sensitive_actions.push_back (act);
415         act = ActionManager::register_action (option_actions, X_("UnmuteNewFullCrossfades"), _("Unmute new full crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_UnmuteNewFullCrossfades));
416         ActionManager::session_sensitive_actions.push_back (act);
417
418
419 #ifdef NEW_ACTIONS
420         act = ActionManager::register_action (option_actions, X_("SetRegionLayerMode", _("SetRegionLayerMode"), mem_fun (*this, &ARDOUR_UI::toggle_SetRegionLayerMode)));
421         ActionManager::session_sensitive_actions.push_back (act);
422         act = ActionManager::register_action (option_actions, X_("SetCrossfadeModel", _("SetCrossfadeModel"), mem_fun (*this, &ARDOUR_UI::toggle_SetCrossfadeModel)));
423         ActionManager::session_sensitive_actions.push_back (act);
424         
425 #endif  
426         
427         ActionManager::add_action_group (shuttle_actions);
428         ActionManager::add_action_group (option_actions);
429         ActionManager::add_action_group (jack_actions);
430         ActionManager::add_action_group (transport_actions);
431         ActionManager::add_action_group (main_actions);
432         ActionManager::add_action_group (common_actions);
433 }
434
435 void
436 ARDOUR_UI::build_menu_bar ()
437 {
438         menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
439         menu_bar->set_name ("MainMenuBar");
440
441         /*
442          * This is needed because this property does not get installed
443          * until the Menu GObject class is registered, which happens
444          * when the first menu instance is created.
445          */
446         Gtk::Settings::get_default()->property_gtk_can_change_accels() = true;  
447         
448         wall_clock_box.add (wall_clock_label);
449         wall_clock_box.set_name ("WallClock");
450         wall_clock_label.set_name ("WallClock");
451
452         disk_space_box.add (disk_space_label);
453         disk_space_box.set_name ("WallClock");
454         disk_space_label.set_name ("WallClock");
455
456         cpu_load_box.add (cpu_load_label);
457         cpu_load_box.set_name ("CPULoad");
458         cpu_load_label.set_name ("CPULoad");
459
460         buffer_load_box.add (buffer_load_label);
461         buffer_load_box.set_name ("BufferLoad");
462         buffer_load_label.set_name ("BufferLoad");
463
464 //      disk_rate_box.add (disk_rate_label);
465 //      disk_rate_box.set_name ("DiskRate");
466 //      disk_rate_label.set_name ("DiskRate");
467
468         sample_rate_box.add (sample_rate_label);
469         sample_rate_box.set_name ("SampleRate");
470         sample_rate_label.set_name ("SampleRate");
471
472         menu_hbox.pack_start (*menu_bar, true, true);
473         menu_hbox.pack_end (wall_clock_box, false, false, 10);
474         menu_hbox.pack_end (disk_space_box, false, false, 10);
475         menu_hbox.pack_end (cpu_load_box, false, false, 10);
476 //      menu_hbox.pack_end (disk_rate_box, false, false, 10);
477         menu_hbox.pack_end (buffer_load_box, false, false, 10);
478         menu_hbox.pack_end (sample_rate_box, false, false, 10);
479
480         menu_bar_base.set_name ("MainMenuBar");
481         menu_bar_base.add (menu_hbox);
482 }