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