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