ardour
editor_actions.cc
Go to the documentation of this file.
1 /*
2  Copyright (C) 2000-2007 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 */
19 
20 #include <gio/gio.h>
21 #include <gtk/gtkiconfactory.h>
22 
23 #include "pbd/file_utils.h"
24 
25 #include "gtkmm2ext/tearoff.h"
26 #include "gtkmm2ext/utils.h"
27 
29 #include "ardour/profile.h"
30 #include "ardour/session.h"
31 #include "ardour/types.h"
32 
33 #include "canvas/canvas.h"
34 #include "canvas/pixbuf.h"
35 
36 #include "actions.h"
37 #include "ardour_ui.h"
38 #include "editing.h"
39 #include "editor.h"
40 #include "gui_thread.h"
41 #include "time_axis_view.h"
42 #include "utils.h"
43 #include "i18n.h"
44 #include "audio_time_axis.h"
45 #include "editor_group_tabs.h"
46 #include "editor_routes.h"
47 #include "editor_regions.h"
48 
49 using namespace Gtk;
50 using namespace Glib;
51 using namespace std;
52 using namespace ARDOUR;
53 using namespace ARDOUR_UI_UTILS;
54 using namespace PBD;
55 using namespace Editing;
56 
57 /* Convenience functions to slightly reduce verbosity below */
58 
59 static RefPtr<Action>
60 reg_sens (RefPtr<ActionGroup> group, char const * name, char const * label, sigc::slot<void> slot)
61 {
62  RefPtr<Action> act = ActionManager::register_action (group, name, label, slot);
64  return act;
65 }
66 
67 static void
68 toggle_reg_sens (RefPtr<ActionGroup> group, char const * name, char const * label, sigc::slot<void> slot)
69 {
70  RefPtr<Action> act = ActionManager::register_toggle_action (group, name, label, slot);
72 }
73 
74 static void
75 radio_reg_sens (RefPtr<ActionGroup> action_group, RadioAction::Group& radio_group, char const * name, char const * label, sigc::slot<void> slot)
76 {
77  RefPtr<Action> act = ActionManager::register_radio_action (action_group, radio_group, name, label, slot);
79 }
80 
81 void
83 {
84  RefPtr<Action> act;
85 
86  editor_actions = ActionGroup::create (X_("Editor"));
87  editor_menu_actions = ActionGroup::create (X_("EditorMenu"));
88 
89  /* non-operative menu items for menu bar */
90 
91  ActionManager::register_action (editor_menu_actions, X_("AlignMenu"), _("Align"));
92  ActionManager::register_action (editor_menu_actions, X_("Autoconnect"), _("Autoconnect"));
93  ActionManager::register_action (editor_menu_actions, X_("Crossfades"), _("Crossfades"));
94  ActionManager::register_action (editor_menu_actions, X_("Edit"), _("Edit"));
95  ActionManager::register_action (editor_menu_actions, X_("EditCursorMovementOptions"), _("Move Selected Marker"));
96  ActionManager::register_action (editor_menu_actions, X_("EditSelectRangeOptions"), _("Select Range Operations"));
97  ActionManager::register_action (editor_menu_actions, X_("EditSelectRegionOptions"), _("Select Regions"));
98  ActionManager::register_action (editor_menu_actions, X_("EditPointMenu"), _("Edit Point"));
99  ActionManager::register_action (editor_menu_actions, X_("FadeMenu"), _("Fade"));
100  ActionManager::register_action (editor_menu_actions, X_("LatchMenu"), _("Latch"));
101  ActionManager::register_action (editor_menu_actions, X_("RegionMenu"), _("Region"));
102  ActionManager::register_action (editor_menu_actions, X_("RegionMenuLayering"), _("Layering"));
103  ActionManager::register_action (editor_menu_actions, X_("RegionMenuPosition"), _("Position"));
104  ActionManager::register_action (editor_menu_actions, X_("RegionMenuEdit"), _("Edit"));
105  ActionManager::register_action (editor_menu_actions, X_("RegionMenuTrim"), _("Trim"));
106  ActionManager::register_action (editor_menu_actions, X_("RegionMenuGain"), _("Gain"));
107  ActionManager::register_action (editor_menu_actions, X_("RegionMenuRanges"), _("Ranges"));
108  ActionManager::register_action (editor_menu_actions, X_("RegionMenuFades"), _("Fades"));
109  ActionManager::register_action (editor_menu_actions, X_("RegionMenuMIDI"), _("MIDI"));
110  ActionManager::register_action (editor_menu_actions, X_("RegionMenuDuplicate"), _("Duplicate"));
111  ActionManager::register_action (editor_menu_actions, X_("Link"), _("Link"));
112  ActionManager::register_action (editor_menu_actions, X_("ZoomFocusMenu"), _("Zoom Focus"));
113  ActionManager::register_action (editor_menu_actions, X_("LocateToMarker"), _("Locate to Markers"));
114  ActionManager::register_action (editor_menu_actions, X_("MarkerMenu"), _("Markers"));
115  ActionManager::register_action (editor_menu_actions, X_("MeterFalloff"), _("Meter falloff"));
116  ActionManager::register_action (editor_menu_actions, X_("MeterHold"), _("Meter hold"));
117  ActionManager::register_action (editor_menu_actions, X_("MIDI"), _("MIDI Options"));
118  ActionManager::register_action (editor_menu_actions, X_("MiscOptions"), _("Misc Options"));
119  ActionManager::register_action (editor_menu_actions, X_("Monitoring"), _("Monitoring"));
120  ActionManager::register_action (editor_menu_actions, X_("MoveActiveMarkMenu"), _("Active Mark"));
121  ActionManager::register_action (editor_menu_actions, X_("MovePlayHeadMenu"), _("Playhead"));
122  ActionManager::register_action (editor_menu_actions, X_("PlayMenu"), _("Play"));
123  ActionManager::register_action (editor_menu_actions, X_("PrimaryClockMenu"), _("Primary Clock"));
124  ActionManager::register_action (editor_menu_actions, X_("Pullup"), _("Pullup / Pulldown"));
125  ActionManager::register_action (editor_menu_actions, X_("RegionEditOps"), _("Region operations"));
126  ActionManager::register_action (editor_menu_actions, X_("RegionGainMenu"), _("Gain"));
127  ActionManager::register_action (editor_menu_actions, X_("RulerMenu"), _("Rulers"));
128  ActionManager::register_action (editor_menu_actions, X_("SavedViewMenu"), _("Views"));
129  ActionManager::register_action (editor_menu_actions, X_("ScrollMenu"), _("Scroll"));
130  ActionManager::register_action (editor_menu_actions, X_("SecondaryClockMenu"), _("Secondary Clock"));
131  ActionManager::register_action (editor_menu_actions, X_("Select"), _("Select"));
132  ActionManager::register_action (editor_menu_actions, X_("SelectMenu"), _("Select"));
133  ActionManager::register_action (editor_menu_actions, X_("SeparateMenu"), _("Separate"));
134  ActionManager::register_action (editor_menu_actions, X_("SetLoopMenu"), _("Loop"));
135  ActionManager::register_action (editor_menu_actions, X_("SetPunchMenu"), _("Punch"));
136  ActionManager::register_action (editor_menu_actions, X_("Solo"), _("Solo"));
137  ActionManager::register_action (editor_menu_actions, X_("Subframes"), _("Subframes"));
138  ActionManager::register_action (editor_menu_actions, X_("SyncMenu"), _("Sync"));
139  ActionManager::register_action (editor_menu_actions, X_("TempoMenu"), _("Tempo"));
140  ActionManager::register_action (editor_menu_actions, X_("Timecode"), _("Timecode fps"));
141  ActionManager::register_action (editor_menu_actions, X_("TrackHeightMenu"), _("Height"));
142  ActionManager::register_action (editor_menu_actions, X_("TrackMenu"), _("Track"));
143  ActionManager::register_action (editor_menu_actions, X_("Tools"), _("Tools"));
144  ActionManager::register_action (editor_menu_actions, X_("View"), _("View"));
145  ActionManager::register_action (editor_menu_actions, X_("ZoomFocus"), _("Zoom Focus"));
146  ActionManager::register_action (editor_menu_actions, X_("ZoomMenu"), _("Zoom"));
147 
148  register_region_actions ();
149 
150  /* add named actions for the editor */
151 
152  ActionManager::register_action (editor_actions, "escape", _("Break drag or deselect all"), sigc::mem_fun (*this, &Editor::escape));
153 
154  /* We don't bother registering "unlock" because it would be insensitive
155  when required. Editor::unlock() must be invoked directly.
156  */
157  ActionManager::register_action (editor_actions, "lock", S_("Session|Lock"), sigc::mem_fun (*this, &Editor::lock));
158 
159  toggle_reg_sens (editor_actions, "show-editor-mixer", _("Show Editor Mixer"), sigc::mem_fun (*this, &Editor::editor_mixer_button_toggled));
160  toggle_reg_sens (editor_actions, "show-editor-list", _("Show Editor List"), sigc::mem_fun (*this, &Editor::editor_list_button_toggled));
161 
162  reg_sens (editor_actions, "playhead-to-next-region-boundary", _("Playhead to Next Region Boundary"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_next_region_boundary), true ));
163  reg_sens (editor_actions, "playhead-to-next-region-boundary-noselection", _("Playhead to Next Region Boundary (No Track Selection)"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_next_region_boundary), false ));
164  reg_sens (editor_actions, "playhead-to-previous-region-boundary", _("Playhead to Previous Region Boundary"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_previous_region_boundary), true));
165  reg_sens (editor_actions, "playhead-to-previous-region-boundary-noselection", _("Playhead to Previous Region Boundary (No Track Selection)"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_previous_region_boundary), false));
166 
167  reg_sens (editor_actions, "playhead-to-next-region-start", _("Playhead to Next Region Start"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_next_region_point), playhead_cursor, RegionPoint (Start)));
168  reg_sens (editor_actions, "playhead-to-next-region-end", _("Playhead to Next Region End"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_next_region_point), playhead_cursor, RegionPoint (End)));
169  reg_sens (editor_actions, "playhead-to-next-region-sync", _("Playhead to Next Region Sync"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_next_region_point), playhead_cursor, RegionPoint (SyncPoint)));
170 
171  reg_sens (editor_actions, "playhead-to-previous-region-start", _("Playhead to Previous Region Start"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_previous_region_point), playhead_cursor, RegionPoint (Start)));
172  reg_sens (editor_actions, "playhead-to-previous-region-end", _("Playhead to Previous Region End"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_previous_region_point), playhead_cursor, RegionPoint (End)));
173  reg_sens (editor_actions, "playhead-to-previous-region-sync", _("Playhead to Previous Region Sync"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_previous_region_point), playhead_cursor, RegionPoint (SyncPoint)));
174 
175  reg_sens (editor_actions, "selected-marker-to-next-region-boundary", _("To Next Region Boundary"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_next_region_boundary), true));
176  reg_sens (editor_actions, "selected-marker-to-next-region-boundary-noselection", _("To Next Region Boundary (No Track Selection)"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_next_region_boundary), false));
177  reg_sens (editor_actions, "selected-marker-to-previous-region-boundary", _("To Previous Region Boundary"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_previous_region_boundary), true));
178  reg_sens (editor_actions, "selected-marker-to-previous-region-boundary-noselection", _("To Previous Region Boundary (No Track Selection)"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_previous_region_boundary), false));
179 
180  reg_sens (editor_actions, "edit-cursor-to-next-region-start", _("To Next Region Start"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_next_region_point), RegionPoint (Start)));
181  reg_sens (editor_actions, "edit-cursor-to-next-region-end", _("To Next Region End"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_next_region_point), RegionPoint (End)));
182  reg_sens (editor_actions, "edit-cursor-to-next-region-sync", _("To Next Region Sync"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_next_region_point), RegionPoint (SyncPoint)));
183 
184  reg_sens (editor_actions, "edit-cursor-to-previous-region-start", _("To Previous Region Start"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_previous_region_point), RegionPoint (Start)));
185  reg_sens (editor_actions, "edit-cursor-to-previous-region-end", _("To Previous Region End"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_previous_region_point), RegionPoint (End)));
186  reg_sens (editor_actions, "edit-cursor-to-previous-region-sync", _("To Previous Region Sync"), sigc::bind (sigc::mem_fun(*this, &Editor::selected_marker_to_previous_region_point), RegionPoint (SyncPoint)));
187 
188  reg_sens (editor_actions, "edit-cursor-to-range-start", _("To Range Start"), sigc::mem_fun(*this, &Editor::selected_marker_to_selection_start));
189  reg_sens (editor_actions, "edit-cursor-to-range-end", _("To Range End"), sigc::mem_fun(*this, &Editor::selected_marker_to_selection_end));
190 
191  reg_sens (editor_actions, "playhead-to-range-start", _("Playhead to Range Start"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_selection_start), playhead_cursor));
192  reg_sens (editor_actions, "playhead-to-range-end", _("Playhead to Range End"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_to_selection_end), playhead_cursor));
193 
194  reg_sens (editor_actions, "select-all-objects", _("Select All Objects"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_objects), Selection::Set));
195  reg_sens (editor_actions, "select-all-tracks", _("Select All Tracks"), sigc::mem_fun(*this, &Editor::select_all_tracks));
196  reg_sens (editor_actions, "deselect-all", _("Deselect All"), sigc::mem_fun(*this, &Editor::deselect_all));
197  reg_sens (editor_actions, "invert-selection", _("Invert Selection"), sigc::mem_fun(*this, &Editor::invert_selection));
198 
199  reg_sens (editor_actions, "select-loop-range", _("Set Range in Loop Range"), sigc::mem_fun(*this, &Editor::set_selection_from_loop));
200  reg_sens (editor_actions, "select-punch-range", _("Set Range to Punch Range"), sigc::mem_fun(*this, &Editor::set_selection_from_punch));
201  reg_sens (editor_actions, "select-from-regions", _("Set Range to Selected Regions"), sigc::mem_fun(*this, &Editor::set_selection_from_region));
202 
203  reg_sens (editor_actions, "select-all-after-edit-cursor", _("Select All After Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), true));
204  reg_sens (editor_actions, "alternate-select-all-after-edit-cursor", _("Select All After Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), true));
205  reg_sens (editor_actions, "select-all-before-edit-cursor", _("Select All Before Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), false));
206  reg_sens (editor_actions, "alternate-select-all-before-edit-cursor", _("Select All Before Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), false));
207 
208  reg_sens (editor_actions, "select-all-between-cursors", _("Select All Overlapping Edit Range"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_between), false));
209  reg_sens (editor_actions, "select-all-within-cursors", _("Select All Inside Edit Range"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_between), true));
210 
211  reg_sens (editor_actions, "select-range-between-cursors", _("Select Edit Range"), sigc::mem_fun(*this, &Editor::select_range_between));
212 
213  reg_sens (editor_actions, "select-all-in-punch-range", _("Select All in Punch Range"), sigc::mem_fun(*this, &Editor::select_all_selectables_using_punch));
214  reg_sens (editor_actions, "select-all-in-loop-range", _("Select All in Loop Range"), sigc::mem_fun(*this, &Editor::select_all_selectables_using_loop));
215 
216  reg_sens (editor_actions, "select-next-route", _("Select Next Track or Bus"), sigc::mem_fun(*this, &Editor::select_next_route));
217  reg_sens (editor_actions, "select-prev-route", _("Select Previous Track or Bus"), sigc::mem_fun(*this, &Editor::select_prev_route));
218 
219  act = reg_sens (editor_actions, "track-record-enable-toggle", _("Toggle Record Enable"), sigc::mem_fun(*this, &Editor::toggle_record_enable));
221  act = reg_sens (editor_actions, "track-solo-toggle", _("Toggle Solo"), sigc::mem_fun(*this, &Editor::toggle_solo));
223  act = reg_sens (editor_actions, "track-mute-toggle", _("Toggle Mute"), sigc::mem_fun(*this, &Editor::toggle_mute));
225  act = reg_sens (editor_actions, "track-solo-isolate-toggle", _("Toggle Solo Isolate"), sigc::mem_fun(*this, &Editor::toggle_solo_isolate));
227 
228  for (int i = 1; i <= 12; ++i) {
229  string const a = string_compose (X_("save-visual-state-%1"), i);
230  string const n = string_compose (_("Save View %1"), i);
231  reg_sens (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::start_visual_state_op), i - 1));
232  }
233 
234  for (int i = 1; i <= 12; ++i) {
235  string const a = string_compose (X_("goto-visual-state-%1"), i);
236  string const n = string_compose (_("Goto View %1"), i);
237  reg_sens (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::cancel_visual_state_op), i - 1));
238  }
239 
240  for (int i = 1; i <= 9; ++i) {
241  string const a = string_compose (X_("goto-mark-%1"), i);
242  string const n = string_compose (_("Locate to Mark %1"), i);
243  reg_sens (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::goto_nth_marker), i - 1));
244  }
245 
246  reg_sens (editor_actions, "jump-forward-to-mark", _("Jump to Next Mark"), sigc::mem_fun(*this, &Editor::jump_forward_to_mark));
247  reg_sens (editor_actions, "alternate-jump-forward-to-mark", _("Jump to Next Mark"), sigc::mem_fun(*this, &Editor::jump_forward_to_mark));
248  reg_sens (editor_actions, "jump-backward-to-mark", _("Jump to Previous Mark"), sigc::mem_fun(*this, &Editor::jump_backward_to_mark));
249  reg_sens (editor_actions, "alternate-jump-backward-to-mark", _("Jump to Previous Mark"), sigc::mem_fun(*this, &Editor::jump_backward_to_mark));
250 
251  reg_sens (editor_actions, "set-session-start-from-playhead", _("Set Session Start from Playhead"), sigc::mem_fun(*this, &Editor::set_session_start_from_playhead));
252  reg_sens (editor_actions, "set-session-end-from-playhead", _("Set Session End from Playhead"), sigc::mem_fun(*this, &Editor::set_session_end_from_playhead));
253 
254  reg_sens (editor_actions, "add-location-from-playhead", _("Add Mark from Playhead"), sigc::mem_fun(*this, &Editor::add_location_from_playhead_cursor));
255  reg_sens (editor_actions, "alternate-add-location-from-playhead", _("Add Mark from Playhead"), sigc::mem_fun(*this, &Editor::add_location_from_playhead_cursor));
256 
257  reg_sens (editor_actions, "remove-location-from-playhead", _("Remove Mark at Playhead"), sigc::mem_fun(*this, &Editor::remove_location_at_playhead_cursor));
258  reg_sens (editor_actions, "alternate-remove-location-from-playhead", _("Remove Mark at Playhead"), sigc::mem_fun(*this, &Editor::remove_location_at_playhead_cursor));
259 
260  reg_sens (editor_actions, "nudge-next-forward", _("Nudge Next Later"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_forward), true, false));
261  reg_sens (editor_actions, "nudge-next-backward", _("Nudge Next Earlier"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_backward), true, false));
262 
263  reg_sens (editor_actions, "nudge-playhead-forward", _("Nudge Playhead Forward"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_forward), false, true));
264  reg_sens (editor_actions, "nudge-playhead-backward", _("Nudge Playhead Backward"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_backward), false, true));
265  reg_sens (editor_actions, "playhead-forward-to-grid", _("Playhead To Next Grid"), sigc::mem_fun(*this, &Editor::playhead_forward_to_grid));
266  reg_sens (editor_actions, "playhead-backward-to-grid", _("Playhead To Previous Grid"), sigc::mem_fun(*this, &Editor::playhead_backward_to_grid));
267 
268  reg_sens (editor_actions, "temporal-zoom-out", _("Zoom Out"), sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), true));
269  reg_sens (editor_actions, "temporal-zoom-in", _("Zoom In"), sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), false));
270  reg_sens (editor_actions, "zoom-to-session", _("Zoom to Session"), sigc::mem_fun(*this, &Editor::temporal_zoom_session));
271  reg_sens (editor_actions, "zoom-to-selection", _("Zoom to Selection"), sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_selection), false));
272  reg_sens (editor_actions, "toggle-zoom", _("Toggle Zoom State"), sigc::mem_fun(*this, &Editor::swap_visual_state));
273 
274  reg_sens (editor_actions, "expand-tracks", _("Expand Track Height"), sigc::bind (sigc::mem_fun (*this, &Editor::tav_zoom_step), false));
275  reg_sens (editor_actions, "shrink-tracks", _("Shrink Track Height"), sigc::bind (sigc::mem_fun (*this, &Editor::tav_zoom_step), true));
276 
277  act = reg_sens (editor_actions, "move-selected-tracks-up", _("Move Selected Tracks Up"), sigc::bind (sigc::mem_fun(*_routes, &EditorRoutes::move_selected_tracks), true));
279  act = reg_sens (editor_actions, "move-selected-tracks-down", _("Move Selected Tracks Down"), sigc::bind (sigc::mem_fun(*_routes, &EditorRoutes::move_selected_tracks), false));
281 
282  act = reg_sens (editor_actions, "scroll-tracks-up", _("Scroll Tracks Up"), sigc::mem_fun(*this, &Editor::scroll_tracks_up));
284  act = reg_sens (editor_actions, "scroll-tracks-down", _("Scroll Tracks Down"), sigc::mem_fun(*this, &Editor::scroll_tracks_down));
286  act = reg_sens (editor_actions, "step-tracks-up", _("Step Tracks Up"), sigc::mem_fun(*this, &Editor::scroll_tracks_up_line));
288  act = reg_sens (editor_actions, "step-tracks-down", _("Step Tracks Down"), sigc::mem_fun(*this, &Editor::scroll_tracks_down_line));
290 
291  reg_sens (editor_actions, "scroll-backward", _("Scroll Backward"), sigc::bind (sigc::mem_fun(*this, &Editor::scroll_backward), 0.8f));
292  reg_sens (editor_actions, "scroll-forward", _("Scroll Forward"), sigc::bind (sigc::mem_fun(*this, &Editor::scroll_forward), 0.8f));
293  reg_sens (editor_actions, "center-playhead", _("Center Playhead"), sigc::mem_fun(*this, &Editor::center_playhead));
294  reg_sens (editor_actions, "center-edit-cursor", _("Center Edit Point"), sigc::mem_fun(*this, &Editor::center_edit_point));
295 
296  reg_sens (editor_actions, "scroll-playhead-forward", _("Playhead Forward"), sigc::bind (sigc::mem_fun(*this, &Editor::scroll_playhead), true));;
297  reg_sens (editor_actions, "scroll-playhead-backward", _("Playhead Backward"), sigc::bind (sigc::mem_fun(*this, &Editor::scroll_playhead), false));
298 
299  reg_sens (editor_actions, "playhead-to-edit", _("Playhead to Active Mark"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_align), true));
300  reg_sens (editor_actions, "edit-to-playhead", _("Active Mark to Playhead"), sigc::bind (sigc::mem_fun(*this, &Editor::cursor_align), false));
301 
302  toggle_reg_sens (editor_actions, "toggle-skip-playback", _("Use Skip Ranges"), sigc::mem_fun(*this, &Editor::toggle_skip_playback));
303 
304  reg_sens (editor_actions, "set-loop-from-edit-range", _("Set Loop from Selection"), sigc::bind (sigc::mem_fun(*this, &Editor::set_loop_from_selection), false));
305  reg_sens (editor_actions, "set-punch-from-edit-range", _("Set Punch from Selection"), sigc::mem_fun(*this, &Editor::set_punch_from_selection));
306  reg_sens (editor_actions, "set-session-from-edit-range", _("Set Session Start/End from Selection"), sigc::mem_fun(*this, &Editor::set_session_extents_from_selection));
307 
308  /* this is a duplicated action so that the main menu can use a different label */
309  reg_sens (editor_actions, "main-menu-play-selected-regions", _("Play Selected Regions"), sigc::mem_fun (*this, &Editor::play_selected_region));
310  reg_sens (editor_actions, "play-from-edit-point", _("Play From Edit Point"), sigc::mem_fun(*this, &Editor::play_from_edit_point));
311  reg_sens (editor_actions, "play-from-edit-point-and-return", _("Play from Edit Point and Return"), sigc::mem_fun(*this, &Editor::play_from_edit_point_and_return));
312 
313  reg_sens (editor_actions, "play-edit-range", _("Play Edit Range"), sigc::mem_fun(*this, &Editor::play_edit_range));
314 
315  reg_sens (editor_actions, "set-playhead", _("Playhead to Mouse"), sigc::mem_fun(*this, &Editor::set_playhead_cursor));
316  reg_sens (editor_actions, "set-edit-point", _("Active Marker to Mouse"), sigc::mem_fun(*this, &Editor::set_edit_point));
317 
318  reg_sens (editor_actions, "duplicate-range", _("Duplicate Range"), sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_range), false));
319 
320  undo_action = reg_sens (editor_actions, "undo", S_("Command|Undo"), sigc::bind (sigc::mem_fun(*this, &Editor::undo), 1U));
321 
322  redo_action = reg_sens (editor_actions, "redo", _("Redo"), sigc::bind (sigc::mem_fun(*this, &Editor::redo), 1U));
323  alternate_redo_action = reg_sens (editor_actions, "alternate-redo", _("Redo"), sigc::bind (sigc::mem_fun(*this, &Editor::redo), 1U));
324  alternate_alternate_redo_action = reg_sens (editor_actions, "alternate-alternate-redo", _("Redo"), sigc::bind (sigc::mem_fun(*this, &Editor::redo), 1U));
325 
326  selection_undo_action = reg_sens (editor_actions, "undo-last-selection-op", _("Undo Selection Change"), sigc::mem_fun(*this, &Editor::undo_selection_op));
327  selection_redo_action = reg_sens (editor_actions, "redo-last-selection-op", _("Redo Selection Change"), sigc::mem_fun(*this, &Editor::redo_selection_op));
328 
329  reg_sens (editor_actions, "export-audio", _("Export Audio"), sigc::mem_fun(*this, &Editor::export_audio));
330  reg_sens (editor_actions, "export-range", _("Export Range"), sigc::mem_fun(*this, &Editor::export_range));
331 
332  act = reg_sens (editor_actions, "editor-separate", _("Separate"), sigc::mem_fun(*this, &Editor::separate_region_from_selection));
334 
335  act = reg_sens (editor_actions, "separate-from-punch", _("Separate Using Punch Range"), sigc::mem_fun(*this, &Editor::separate_region_from_punch));
337 
338  act = reg_sens (editor_actions, "separate-from-loop", _("Separate Using Loop Range"), sigc::mem_fun(*this, &Editor::separate_region_from_loop));
340 
341  act = reg_sens (editor_actions, "editor-crop", _("Crop"), sigc::mem_fun(*this, &Editor::crop_region_to_selection));
343 
344  reg_sens (editor_actions, "editor-cut", _("Cut"), sigc::mem_fun(*this, &Editor::cut));
345  reg_sens (editor_actions, "editor-delete", _("Delete"), sigc::mem_fun(*this, &Editor::delete_));
346  reg_sens (editor_actions, "alternate-editor-delete", _("Delete"), sigc::mem_fun(*this, &Editor::delete_));
347 
348  reg_sens (editor_actions, "editor-copy", _("Copy"), sigc::mem_fun(*this, &Editor::copy));
349  reg_sens (editor_actions, "editor-paste", _("Paste"), sigc::mem_fun(*this, &Editor::keyboard_paste));
350 
351  reg_sens (editor_actions, "editor-fade-range", _("Fade Range Selection"), sigc::mem_fun(*this, &Editor::fade_range));
352 
353  reg_sens (editor_actions, "set-tempo-from-edit-range", _("Set Tempo from Edit Range = Bar"), sigc::mem_fun(*this, &Editor::use_range_as_bar));
354 
355  toggle_reg_sens (editor_actions, "toggle-log-window", _("Log"),
356  sigc::mem_fun (ARDOUR_UI::instance(), &ARDOUR_UI::toggle_errors));
357 
358  reg_sens (editor_actions, "alternate-tab-to-transient-forwards", _("Move to Next Transient"), sigc::bind (sigc::mem_fun(*this, &Editor::tab_to_transient), true));
359  reg_sens (editor_actions, "alternate-tab-to-transient-backwards", _("Move to Previous Transient"), sigc::bind (sigc::mem_fun(*this, &Editor::tab_to_transient), false));
360  reg_sens (editor_actions, "tab-to-transient-forwards", _("Move to Next Transient"), sigc::bind (sigc::mem_fun(*this, &Editor::tab_to_transient), true));
361  reg_sens (editor_actions, "tab-to-transient-backwards", _("Move to Previous Transient"), sigc::bind (sigc::mem_fun(*this, &Editor::tab_to_transient), false));
362 
363  reg_sens (editor_actions, "crop", _("Crop"), sigc::mem_fun(*this, &Editor::crop_region_to_selection));
364 
365  reg_sens (editor_actions, "start-range", _("Start Range"), sigc::mem_fun(*this, &Editor::keyboard_selection_begin));
366  reg_sens (editor_actions, "finish-range", _("Finish Range"), sigc::bind (sigc::mem_fun(*this, &Editor::keyboard_selection_finish), false));
367 
368  reg_sens (editor_actions, "alt-start-range", _("Start Range"), sigc::mem_fun(*this, &Editor::keyboard_selection_begin));
369  reg_sens (editor_actions, "alt-finish-range", _("Finish Range"), sigc::bind (sigc::mem_fun(*this, &Editor::keyboard_selection_finish), false));
370 
371 // reg_sens (editor_actions, "finish-add-range", _("Finish Add Range"), sigc::bind (sigc::mem_fun(*this, &Editor::keyboard_selection_finish), true));
372 
373  reg_sens (
374  editor_actions,
375  "move-range-start-to-previous-region-boundary",
376  _("Move Range Start to Previous Region Boundary"),
377  sigc::bind (sigc::mem_fun (*this, &Editor::move_range_selection_start_or_end_to_region_boundary), false, false)
378  );
379 
380  reg_sens (
381  editor_actions,
382  "move-range-start-to-next-region-boundary",
383  _("Move Range Start to Next Region Boundary"),
384  sigc::bind (sigc::mem_fun (*this, &Editor::move_range_selection_start_or_end_to_region_boundary), false, true)
385  );
386 
387  reg_sens (
388  editor_actions,
389  "move-range-end-to-previous-region-boundary",
390  _("Move Range End to Previous Region Boundary"),
391  sigc::bind (sigc::mem_fun (*this, &Editor::move_range_selection_start_or_end_to_region_boundary), true, false)
392  );
393 
394  reg_sens (
395  editor_actions,
396  "move-range-end-to-next-region-boundary",
397  _("Move Range End to Next Region Boundary"),
398  sigc::bind (sigc::mem_fun (*this, &Editor::move_range_selection_start_or_end_to_region_boundary), true, true)
399  );
400 
401  toggle_reg_sens (editor_actions, "toggle-follow-playhead", _("Follow Playhead"), (sigc::mem_fun(*this, &Editor::toggle_follow_playhead)));
402  act = reg_sens (editor_actions, "remove-last-capture", _("Remove Last Capture"), (sigc::mem_fun(*this, &Editor::remove_last_capture)));
403 
404  ActionManager::register_toggle_action (editor_actions, "toggle-stationary-playhead", _("Stationary Playhead"), (mem_fun(*this, &Editor::toggle_stationary_playhead)));
405 
406  act = reg_sens (editor_actions, "insert-time", _("Insert Time"), (sigc::mem_fun(*this, &Editor::do_insert_time)));
408  act = ActionManager::register_action (editor_actions, "cut-time", _("Cut Time"), (mem_fun(*this, &Editor::do_cut_time)));
411 
412 
413  act = reg_sens (editor_actions, "toggle-track-active", _("Toggle Active"), (sigc::mem_fun(*this, &Editor::toggle_tracks_active)));
415  act = reg_sens (editor_actions, "remove-track", _("Remove"), (sigc::mem_fun(*this, &Editor::remove_tracks)));
416  /* not selection sensitive? */
417 
419 
420  act = reg_sens (editor_actions, "fit-selection", _("Fit Selection (Vertical)"), sigc::mem_fun(*this, &Editor::fit_selection));
421 
422  act = reg_sens (editor_actions, "track-height-largest", _("Largest"), sigc::bind (
423  sigc::mem_fun(*this, &Editor::set_track_height), HeightLargest));
425  act = reg_sens (editor_actions, "track-height-larger", _("Larger"), sigc::bind (
426  sigc::mem_fun(*this, &Editor::set_track_height), HeightLarger));
428  act = reg_sens (editor_actions, "track-height-large", _("Large"), sigc::bind (
429  sigc::mem_fun(*this, &Editor::set_track_height), HeightLarge));
431  act = reg_sens (editor_actions, "track-height-normal", _("Normal"), sigc::bind (
432  sigc::mem_fun(*this, &Editor::set_track_height), HeightNormal));
434  act = reg_sens (editor_actions, "track-height-small", _("Small"), sigc::bind (
435  sigc::mem_fun(*this, &Editor::set_track_height), HeightSmall));
437 
438  toggle_reg_sens (editor_actions, "sound-midi-notes", _("Sound Selected MIDI Notes"), sigc::mem_fun (*this, &Editor::toggle_sound_midi_notes));
439 
440  Glib::RefPtr<ActionGroup> zoom_actions = ActionGroup::create (X_("Zoom"));
441  RadioAction::Group zoom_group;
442 
443  radio_reg_sens (zoom_actions, zoom_group, "zoom-focus-left", _("Zoom Focus Left"), sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_chosen), Editing::ZoomFocusLeft));
444  radio_reg_sens (zoom_actions, zoom_group, "zoom-focus-right", _("Zoom Focus Right"), sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_chosen), Editing::ZoomFocusRight));
445  radio_reg_sens (zoom_actions, zoom_group, "zoom-focus-center", _("Zoom Focus Center"), sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_chosen), Editing::ZoomFocusCenter));
446  radio_reg_sens (zoom_actions, zoom_group, "zoom-focus-playhead", _("Zoom Focus Playhead"), sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_chosen), Editing::ZoomFocusPlayhead));
447  radio_reg_sens (zoom_actions, zoom_group, "zoom-focus-mouse", _("Zoom Focus Mouse"), sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_chosen), Editing::ZoomFocusMouse));
448  radio_reg_sens (zoom_actions, zoom_group, "zoom-focus-edit", _("Zoom Focus Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::zoom_focus_chosen), Editing::ZoomFocusEdit));
449 
450  ActionManager::register_action (editor_actions, X_("cycle-zoom-focus"), _("Next Zoom Focus"), sigc::mem_fun (*this, &Editor::cycle_zoom_focus));
451 
452 
453  Glib::RefPtr<ActionGroup> mouse_mode_actions = ActionGroup::create (X_("MouseMode"));
454  RadioAction::Group mouse_mode_group;
455 
456  act = ActionManager::register_toggle_action (mouse_mode_actions, "set-mouse-mode-object-range", _("Smart Object Mode"), sigc::mem_fun (*this, &Editor::mouse_mode_object_range_toggled));
457  smart_mode_action = Glib::RefPtr<ToggleAction>::cast_static (act);
458  smart_mode_button.set_related_action (smart_mode_action);
459  smart_mode_button.set_text (_("Smart"));
460  smart_mode_button.set_name ("mouse mode button");
461 
462  act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-object", _("Object Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseObject));
463  mouse_move_button.set_related_action (act);
464  mouse_move_button.set_image (::get_icon("tool_object"));
465  mouse_move_button.set_name ("mouse mode button");
466 
467  act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-range", _("Range Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseRange));
468  mouse_select_button.set_related_action (act);
469  mouse_select_button.set_image (::get_icon("tool_range"));
470  mouse_select_button.set_name ("mouse mode button");
471 
472  act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-draw", _("Note Drawing Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseDraw));
473  mouse_draw_button.set_related_action (act);
474  mouse_draw_button.set_image (::get_icon("midi_tool_pencil"));
475  mouse_draw_button.set_name ("mouse mode button");
476 
477  act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-audition", _("Audition Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseAudition));
478  mouse_audition_button.set_related_action (act);
479  mouse_audition_button.set_image (::get_icon("tool_audition"));
480  mouse_audition_button.set_name ("mouse mode button");
481 
482  act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Time FX Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseTimeFX));
483  mouse_timefx_button.set_related_action (act);
484  mouse_timefx_button.set_image (::get_icon("tool_stretch"));
485  mouse_timefx_button.set_name ("mouse mode button");
486 
487  act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-content", _("Content Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseContent));
488  mouse_content_button.set_related_action (act);
489  mouse_content_button.set_image (::get_icon("tool_content"));
490  mouse_content_button.set_name ("mouse mode button");
491 
492  if(!Profile->get_mixbus()) {
493  act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-cut", _("Cut Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseCut));
494  mouse_cut_button.set_related_action (act);
495  mouse_cut_button.set_image (::get_icon("tool_cut"));
496  mouse_cut_button.set_name ("mouse mode button");
497  }
498 
499  ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), sigc::bind (sigc::mem_fun(*this, &Editor::step_mouse_mode), true));
500 
501  RadioAction::Group edit_point_group;
502  ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-playhead"), _("Playhead"), (sigc::bind (sigc::mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
503  ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-mouse"), _("Mouse"), (sigc::bind (sigc::mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtMouse)));
504  ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-selected-marker"), _("Marker"), (sigc::bind (sigc::mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtSelectedMarker)));
505 
506  ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change Edit Point"), sigc::bind (sigc::mem_fun (*this, &Editor::cycle_edit_point), false));
507  ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change Edit Point Including Marker"), sigc::bind (sigc::mem_fun (*this, &Editor::cycle_edit_point), true));
508 
509 // ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Splice));
510  ActionManager::register_action (editor_actions, "set-edit-ripple", _("Ripple"), bind (mem_fun (*this, &Editor::set_edit_mode), Ripple));
511  ActionManager::register_action (editor_actions, "set-edit-slide", _("Slide"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Slide));
512  ActionManager::register_action (editor_actions, "set-edit-lock", S_("EditMode|Lock"), sigc::bind (sigc::mem_fun (*this, &Editor::set_edit_mode), Lock));
513  ActionManager::register_action (editor_actions, "cycle-edit-mode", _("Cycle Edit Mode"), sigc::mem_fun (*this, &Editor::cycle_edit_mode));
514 
515  ActionManager::register_action (editor_actions, X_("SnapTo"), _("Snap to"));
516  ActionManager::register_action (editor_actions, X_("SnapMode"), _("Snap Mode"));
517 
518  RadioAction::Group snap_mode_group;
519  ActionManager::register_radio_action (editor_actions, snap_mode_group, X_("snap-off"), _("No Grid"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_mode_chosen), Editing::SnapOff)));
520  ActionManager::register_radio_action (editor_actions, snap_mode_group, X_("snap-normal"), _("Grid"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_mode_chosen), Editing::SnapNormal)));
521  ActionManager::register_radio_action (editor_actions, snap_mode_group, X_("snap-magnetic"), _("Magnetic"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_mode_chosen), Editing::SnapMagnetic)));
522 
523  ActionManager::register_action (editor_actions, X_("cycle-snap-mode"), _("Next Snap Mode"), sigc::mem_fun (*this, &Editor::cycle_snap_mode));
524  ActionManager::register_action (editor_actions, X_("next-snap-choice"), _("Next Snap Choice"), sigc::mem_fun (*this, &Editor::next_snap_choice));
525  ActionManager::register_action (editor_actions, X_("next-snap-choice-music-only"), _("Next Musical Snap Choice"), sigc::mem_fun (*this, &Editor::next_snap_choice_music_only));
526  ActionManager::register_action (editor_actions, X_("prev-snap-choice"), _("Previous Snap Choice"), sigc::mem_fun (*this, &Editor::prev_snap_choice));
527  ActionManager::register_action (editor_actions, X_("prev-snap-choice-music-only"), _("Previous Musical Snap Choice"), sigc::mem_fun (*this, &Editor::prev_snap_choice_music_only));
528 
529  Glib::RefPtr<ActionGroup> snap_actions = ActionGroup::create (X_("Snap"));
530  RadioAction::Group snap_choice_group;
531 
532  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-cd-frame"), _("Snap to CD Frame"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToCDFrame)));
533  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-timecode-frame"), _("Snap to Timecode Frame"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToTimecodeFrame)));
534  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-timecode-seconds"), _("Snap to Timecode Seconds"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToTimecodeSeconds)));
535  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-timecode-minutes"), _("Snap to Timecode Minutes"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToTimecodeMinutes)));
536  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-seconds"), _("Snap to Seconds"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToSeconds)));
537  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-minutes"), _("Snap to Minutes"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToMinutes)));
538 
539  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-onetwentyeighths"), _("Snap to One Twenty Eighths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv128)));
540  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-sixtyfourths"), _("Snap to Sixty Fourths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv64)));
541  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-thirtyseconds"), _("Snap to Thirty Seconds"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv32)));
542  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-twentyeighths"), _("Snap to Twenty Eighths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv28)));
543  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-twentyfourths"), _("Snap to Twenty Fourths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv24)));
544  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-twentieths"), _("Snap to Twentieths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv20)));
545  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-asixteenthbeat"), _("Snap to Sixteenths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv16)));
546  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-fourteenths"), _("Snap to Fourteenths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv14)));
547  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-twelfths"), _("Snap to Twelfths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv12)));
548  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-tenths"), _("Snap to Tenths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv10)));
549  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-eighths"), _("Snap to Eighths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv8)));
550  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-sevenths"), _("Snap to Sevenths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv7)));
551  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-sixths"), _("Snap to Sixths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv6)));
552  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-fifths"), _("Snap to Fifths"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv5)));
553  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-quarters"), _("Snap to Quarters"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv4)));
554  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-thirds"), _("Snap to Thirds"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv3)));
555  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-halves"), _("Snap to Halves"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeatDiv2)));
556 
557  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-beat"), _("Snap to Beat"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBeat)));
558  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-bar"), _("Snap to Bar"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToBar)));
559  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-mark"), _("Snap to Mark"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToMark)));
560  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-start"), _("Snap to Region Start"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionStart)));
561  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-end"), _("Snap to Region End"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionEnd)));
562  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-sync"), _("Snap to Region Sync"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionSync)));
563  ActionManager::register_radio_action (snap_actions, snap_choice_group, X_("snap-to-region-boundary"), _("Snap to Region Boundary"), (sigc::bind (sigc::mem_fun(*this, &Editor::snap_type_chosen), Editing::SnapToRegionBoundary)));
564 
565  ActionManager::register_toggle_action (editor_actions, X_("show-marker-lines"), _("Show Marker Lines"), sigc::mem_fun (*this, &Editor::toggle_marker_lines));
566 
567  /* RULERS */
568 
569  Glib::RefPtr<ActionGroup> ruler_actions = ActionGroup::create (X_("Rulers"));
570  ruler_tempo_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_tempo)));
571  ruler_meter_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Meter"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_meter)));
572  ruler_range_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-range-ruler"), _("Ranges"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_range_marker)));
573  ruler_marker_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-marker-ruler"), _("Markers"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_marker)));
574  ruler_cd_marker_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-cd-marker-ruler"), _("CD Markers"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_cd_marker)));
575  ruler_loop_punch_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_time_transport_marker)));
576  ruler_bbt_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-bbt-ruler"), _("Bars & Beats"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_bbt)));
577  ruler_samples_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-samples-ruler"), _("Samples"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_samples)));
578  ruler_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-timecode-ruler"), _("Timecode"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_timecode)));
579  ruler_minsec_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-minsec-ruler"), _("Min:Sec"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_metric_minsec)));
580 
581  ActionManager::register_action (editor_menu_actions, X_("VideoMonitorMenu"), _("Video Monitor"));
582 
583  ruler_video_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-video-ruler"), _("Video"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_ruler_visibility), ruler_video_timeline)));
584  xjadeo_proc_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("ToggleJadeo"), _("Video Monitor"), sigc::mem_fun (*this, &Editor::set_xjadeo_proc)));
585 
586  xjadeo_ontop_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-ontop"), _("Always on Top"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 1)));
587  xjadeo_timecode_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-timecode"), _("Timecode"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 2)));
588  xjadeo_frame_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-frame"), _("Frame number"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 3)));
589  xjadeo_osdbg_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-osdbg"), _("Timecode Background"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 4)));
590  xjadeo_fullscreen_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-fullscreen"), _("Fullscreen"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 5)));
591  xjadeo_letterbox_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (editor_actions, X_("toggle-vmon-letterbox"), _("Letterbox"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 6)));
592  xjadeo_zoom_100 = reg_sens (editor_actions, "zoom-vmon-100", _("Original Size"), sigc::bind (sigc::mem_fun (*this, &Editor::set_xjadeo_viewoption), (int) 7));
593 
594  /* set defaults here */
595 
596  no_ruler_shown_update = true;
597 
598  if (Profile->get_trx()) {
599  ruler_marker_action->set_active (true);
600  ruler_meter_action->set_active (false);
601  ruler_tempo_action->set_active (false);
602  ruler_range_action->set_active (false);
603  ruler_loop_punch_action->set_active (false);
604  ruler_loop_punch_action->set_active (false);
605  ruler_bbt_action->set_active (true);
606  ruler_cd_marker_action->set_active (false);
607  ruler_timecode_action->set_active (false);
608  ruler_minsec_action->set_active (true);
609  } else {
610  ruler_marker_action->set_active (true);
611  ruler_meter_action->set_active (true);
612  ruler_tempo_action->set_active (true);
613  ruler_range_action->set_active (true);
614  ruler_loop_punch_action->set_active (true);
615  ruler_loop_punch_action->set_active (true);
616  ruler_bbt_action->set_active (false);
617  ruler_cd_marker_action->set_active (true);
618  ruler_timecode_action->set_active (true);
619  ruler_minsec_action->set_active (false);
620  }
621 
622  ruler_video_action->set_active (false);
623  xjadeo_proc_action->set_active (false);
624  xjadeo_proc_action->set_sensitive (false);
625  xjadeo_ontop_action->set_active (false);
626  xjadeo_ontop_action->set_sensitive (false);
627  xjadeo_timecode_action->set_active (false);
628  xjadeo_timecode_action->set_sensitive (false);
629  xjadeo_frame_action->set_active (false);
630  xjadeo_frame_action->set_sensitive (false);
631  xjadeo_osdbg_action->set_active (false);
632  xjadeo_osdbg_action->set_sensitive (false);
633  xjadeo_fullscreen_action->set_active (false);
634  xjadeo_fullscreen_action->set_sensitive (false);
635  xjadeo_letterbox_action->set_active (false);
636  xjadeo_letterbox_action->set_sensitive (false);
637  xjadeo_zoom_100->set_sensitive (false);
638 
639  ruler_samples_action->set_active (false);
640  no_ruler_shown_update = false;
641 
642  /* REGION LIST */
643 
644  Glib::RefPtr<ActionGroup> rl_actions = ActionGroup::create (X_("RegionList"));
645  RadioAction::Group sort_type_group;
646  RadioAction::Group sort_order_group;
647 
648  /* the region list popup menu */
649  ActionManager::register_action (rl_actions, X_("RegionListSort"), _("Sort"));
650 
651  act = ActionManager::register_action (rl_actions, X_("rlAudition"), _("Audition"), sigc::mem_fun(*this, &Editor::audition_region_from_region_list));
653 
654  act = ActionManager::register_action (rl_actions, X_("rlHide"), _("Hide"), sigc::mem_fun(*this, &Editor::hide_region_from_region_list));
656 
657  act = ActionManager::register_action (rl_actions, X_("rlShow"), _("Show"), sigc::mem_fun(*this, &Editor::show_region_in_region_list));
659 
660  ActionManager::register_toggle_action (rl_actions, X_("rlShowAll"), _("Show All"), sigc::mem_fun(*_regions, &EditorRegions::toggle_full));
661  ActionManager::register_toggle_action (rl_actions, X_("rlShowAuto"), _("Show Automatic Regions"), sigc::mem_fun (*_regions, &EditorRegions::toggle_show_auto_regions));
662 
663  ActionManager::register_radio_action (rl_actions, sort_order_group, X_("SortAscending"), _("Ascending"),
664  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_direction), true));
665  ActionManager::register_radio_action (rl_actions, sort_order_group, X_("SortDescending"), _("Descending"),
666  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_direction), false));
667 
668  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionName"), _("By Region Name"),
669  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), ByName, false));
670  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionLength"), _("By Region Length"),
671  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), ByLength, false));
672  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionPosition"), _("By Region Position"),
673  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), ByPosition, false));
674  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionTimestamp"), _("By Region Timestamp"),
675  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), ByTimestamp, false));
676  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionStartinFile"), _("By Region Start in File"),
677  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), ByStartInFile, false));
678  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortByRegionEndinFile"), _("By Region End in File"),
679  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), ByEndInFile, false));
680  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortBySourceFileName"), _("By Source File Name"),
681  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileName, false));
682  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortBySourceFileLength"), _("By Source File Length"),
683  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileLength, false));
684  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortBySourceFileCreationDate"), _("By Source File Creation Date"),
685  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileCreationDate, false));
686  ActionManager::register_radio_action (rl_actions, sort_type_group, X_("SortBySourceFilesystem"), _("By Source Filesystem"),
687  sigc::bind (sigc::mem_fun (*_regions, &EditorRegions::reset_sort_type), BySourceFileFS, false));
688 
689  ActionManager::register_action (rl_actions, X_("removeUnusedRegions"), _("Remove Unused"), sigc::mem_fun (*_regions, &EditorRegions::remove_unused_regions));
690 
691  /* the next two are duplicate items with different names for use in two different contexts */
692 
693  act = reg_sens (editor_actions, X_("addExistingAudioFiles"), _("Import"), sigc::mem_fun (*this, &Editor::external_audio_dialog));
695 
696  act = reg_sens (editor_actions, X_("addExternalAudioToRegionList"), _("Import to Region List..."), sigc::bind (sigc::mem_fun(*this, &Editor::add_external_audio_action), ImportAsRegion));
698 
699  act = ActionManager::register_action (editor_actions, X_("importFromSession"), _("Import From Session"), sigc::mem_fun(*this, &Editor::session_import_dialog));
701 
702 
703  act = ActionManager::register_action (editor_actions, X_("bring-into-session"), _("Bring all media into session folder"), sigc::mem_fun(*this, &Editor::bring_all_sources_into_session));
705 
706  ActionManager::register_toggle_action (editor_actions, X_("ToggleSummary"), _("Show Summary"), sigc::mem_fun (*this, &Editor::set_summary));
707 
708  ActionManager::register_toggle_action (editor_actions, X_("ToggleGroupTabs"), _("Show Group Tabs"), sigc::mem_fun (*this, &Editor::set_group_tabs));
709 
710  ActionManager::register_toggle_action (editor_actions, X_("ToggleMeasureVisibility"), _("Show Measure Lines"), sigc::mem_fun (*this, &Editor::toggle_measure_visibility));
711 
712  /* if there is a logo in the editor canvas, its always visible at startup */
713 
714  act = ActionManager::register_toggle_action (editor_actions, X_("ToggleLogoVisibility"), _("Show Logo"), sigc::mem_fun (*this, &Editor::toggle_logo_visibility));
715  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
716  tact->set_active (true);
717 
718  ActionManager::register_action (editor_actions, X_("toggle-midi-input-active"), _("Toggle MIDI Input Active for Editor-Selected Tracks/Busses"),
719  sigc::bind (sigc::mem_fun (*this, &Editor::toggle_midi_input_active), false));
720 
721  ActionManager::add_action_group (rl_actions);
722  ActionManager::add_action_group (ruler_actions);
723  ActionManager::add_action_group (zoom_actions);
724  ActionManager::add_action_group (mouse_mode_actions);
725  ActionManager::add_action_group (snap_actions);
726  ActionManager::add_action_group (editor_actions);
727  ActionManager::add_action_group (editor_menu_actions);
728 }
729 
730 void
732 {
733  /* XXX move this to a better place */
734 
735  key_bindings.set_action_map (editor_action_map);
736 
737  std::string binding_file;
738 
739  if (find_file (ardour_config_search_path(), "editor.bindings", binding_file)) {
740  key_bindings.load (binding_file);
741  info << string_compose (_("Loaded editor bindings from %1"), binding_file) << endmsg;
742  } else {
743  error << string_compose (_("Could not find editor.bindings in search path %1"), ardour_config_search_path().to_string()) << endmsg;
744  }
745 }
746 
747 void
749 {
750  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), "toggle-skip-playback");
751 
752  if (act) {
753  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
754  bool s = Config->get_skip_playback ();
755  if (tact->get_active() != s) {
756  Config->set_skip_playback (tact->get_active());
757  }
758  }
759 }
760 
761 void
763 {
764  const char* action = 0;
765 
766  if (no_ruler_shown_update) {
767  return;
768  }
769 
770  switch (rt) {
771  case ruler_metric_timecode:
772  action = "toggle-timecode-ruler";
773  break;
774  case ruler_metric_bbt:
775  action = "toggle-bbt-ruler";
776  break;
777  case ruler_metric_samples:
778  action = "toggle-samples-ruler";
779  break;
780  case ruler_metric_minsec:
781  action = "toggle-minsec-ruler";
782  break;
783  case ruler_time_tempo:
784  action = "toggle-tempo-ruler";
785  break;
786  case ruler_time_meter:
787  action = "toggle-meter-ruler";
788  break;
789  case ruler_time_marker:
790  action = "toggle-marker-ruler";
791  break;
792  case ruler_time_range_marker:
793  action = "toggle-range-ruler";
794  break;
795  case ruler_time_transport_marker:
796  action = "toggle-loop-punch-ruler";
797  break;
798  case ruler_time_cd_marker:
799  action = "toggle-cd-marker-ruler";
800  break;
801  case ruler_video_timeline:
802  action = "toggle-video-ruler";
803  break;
804  }
805 
806  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Rulers"), action);
807 
808  if (act) {
809  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
810  update_ruler_visibility ();
811  store_ruler_visibility ();
812  }
813 }
814 
815 void
817 {
818  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleSummary"));
819  if (act) {
820  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
821  _session->config.set_show_summary (tact->get_active ());
822  }
823 }
824 
825 void
827 {
828  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleGroupTabs"));
829  if (act) {
830  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
831  _session->config.set_show_group_tabs (tact->get_active ());
832  }
833 }
834 
835 void
837 {
838  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Main"), X_("CloseVideo"));
839  if (act) {
840  act->set_sensitive (onoff);
841  }
842 }
843 
844 void
846 {
847  xjadeo_proc_action->set_sensitive(onoff);
848 }
849 
850 void
852 {
853  switch(state) {
854  case 1:
855  xjadeo_proc_action->set_active(true);
856  break;
857  case 0:
858  xjadeo_proc_action->set_active(false);
859  break;
860  default:
861  xjadeo_proc_action->set_active(!xjadeo_proc_action->get_active());
862  break;
863  }
864  bool onoff = xjadeo_proc_action->get_active();
865  xjadeo_ontop_action->set_sensitive(onoff);
866  xjadeo_timecode_action->set_sensitive(onoff);
867  xjadeo_frame_action->set_sensitive(onoff);
868  xjadeo_osdbg_action->set_sensitive(onoff);
869  xjadeo_fullscreen_action->set_sensitive(onoff);
870  xjadeo_letterbox_action->set_sensitive(onoff);
871  xjadeo_zoom_100->set_sensitive(onoff);
872 }
873 
874 void
876 {
877  if (xjadeo_proc_action->get_active()) {
879  } else {
881  }
882 }
883 
884 void
885 Editor::toggle_xjadeo_viewoption (int what, int state)
886 {
887  Glib::RefPtr<Gtk::ToggleAction> action;
888  switch (what) {
889  case 1:
890  action = xjadeo_ontop_action;
891  break;
892  case 2:
893  action = xjadeo_timecode_action;
894  break;
895  case 3:
896  action = xjadeo_frame_action;
897  break;
898  case 4:
899  action = xjadeo_osdbg_action;
900  break;
901  case 5:
902  action = xjadeo_fullscreen_action;
903  break;
904  case 6:
905  action = xjadeo_letterbox_action;
906  break;
907  case 7:
908  return;
909  default:
910  return;
911  }
912 
913  switch(state) {
914  case 1:
915  action->set_active(true);
916  break;
917  case 0:
918  action->set_active(false);
919  break;
920  default:
921  action->set_active(!action->get_active());
922  break;
923  }
924 }
925 
926 void
928 {
929  Glib::RefPtr<Gtk::ToggleAction> action;
930  switch (what) {
931  case 1:
932  action = xjadeo_ontop_action;
933  break;
934  case 2:
935  action = xjadeo_timecode_action;
936  break;
937  case 3:
938  action = xjadeo_frame_action;
939  break;
940  case 4:
941  action = xjadeo_osdbg_action;
942  break;
943  case 5:
944  action = xjadeo_fullscreen_action;
945  break;
946  case 6:
947  action = xjadeo_letterbox_action;
948  break;
949  case 7:
951  return;
952  default:
953  return;
954  }
955  if (action->get_active()) {
957  } else {
959  }
960 }
961 
962 void
964 {
965  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleMeasureVisibility"));
966  if (act) {
967  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
968  set_show_measures (tact->get_active());
969  }
970 }
971 
972 void
974 {
975  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleLogoVisibility"));
976 
977  if (act) {
978  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
979  if (logo_item) {
980  if (tact->get_active()) {
981  logo_item->show ();
982  } else {
983  logo_item->hide ();
984  }
985  }
986  }
987 }
988 
989 RefPtr<RadioAction>
991 {
992  const char* action = 0;
993  RefPtr<Action> act;
994 
995  switch (type) {
996  case Editing::SnapToCDFrame:
997  action = "snap-to-cd-frame";
998  break;
999  case Editing::SnapToTimecodeFrame:
1000  action = "snap-to-timecode-frame";
1001  break;
1002  case Editing::SnapToTimecodeSeconds:
1003  action = "snap-to-timecode-seconds";
1004  break;
1005  case Editing::SnapToTimecodeMinutes:
1006  action = "snap-to-timecode-minutes";
1007  break;
1008  case Editing::SnapToSeconds:
1009  action = "snap-to-seconds";
1010  break;
1011  case Editing::SnapToMinutes:
1012  action = "snap-to-minutes";
1013  break;
1014  case Editing::SnapToBeatDiv128:
1015  action = "snap-to-onetwentyeighths";
1016  break;
1017  case Editing::SnapToBeatDiv64:
1018  action = "snap-to-sixtyfourths";
1019  break;
1020  case Editing::SnapToBeatDiv32:
1021  action = "snap-to-thirtyseconds";
1022  break;
1023  case Editing::SnapToBeatDiv28:
1024  action = "snap-to-twentyeighths";
1025  break;
1026  case Editing::SnapToBeatDiv24:
1027  action = "snap-to-twentyfourths";
1028  break;
1029  case Editing::SnapToBeatDiv20:
1030  action = "snap-to-twentieths";
1031  break;
1032  case Editing::SnapToBeatDiv16:
1033  action = "snap-to-asixteenthbeat";
1034  break;
1035  case Editing::SnapToBeatDiv14:
1036  action = "snap-to-fourteenths";
1037  break;
1038  case Editing::SnapToBeatDiv12:
1039  action = "snap-to-twelfths";
1040  break;
1041  case Editing::SnapToBeatDiv10:
1042  action = "snap-to-tenths";
1043  break;
1044  case Editing::SnapToBeatDiv8:
1045  action = "snap-to-eighths";
1046  break;
1047  case Editing::SnapToBeatDiv7:
1048  action = "snap-to-sevenths";
1049  break;
1050  case Editing::SnapToBeatDiv6:
1051  action = "snap-to-sixths";
1052  break;
1053  case Editing::SnapToBeatDiv5:
1054  action = "snap-to-fifths";
1055  break;
1056  case Editing::SnapToBeatDiv4:
1057  action = "snap-to-quarters";
1058  break;
1059  case Editing::SnapToBeatDiv3:
1060  action = "snap-to-thirds";
1061  break;
1062  case Editing::SnapToBeatDiv2:
1063  action = "snap-to-halves";
1064  break;
1065  case Editing::SnapToBeat:
1066  action = "snap-to-beat";
1067  break;
1068  case Editing::SnapToBar:
1069  action = "snap-to-bar";
1070  break;
1071  case Editing::SnapToMark:
1072  action = "snap-to-mark";
1073  break;
1074  case Editing::SnapToRegionStart:
1075  action = "snap-to-region-start";
1076  break;
1077  case Editing::SnapToRegionEnd:
1078  action = "snap-to-region-end";
1079  break;
1080  case Editing::SnapToRegionSync:
1081  action = "snap-to-region-sync";
1082  break;
1083  case Editing::SnapToRegionBoundary:
1084  action = "snap-to-region-boundary";
1085  break;
1086  default:
1087  fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap-to type", (int) type) << endmsg;
1088  abort(); /*NOTREACHED*/
1089  }
1090 
1091  act = ActionManager::get_action (X_("Snap"), action);
1092 
1093  if (act) {
1094  RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
1095  return ract;
1096 
1097  } else {
1098  error << string_compose (_("programming error: %1"), "Editor::snap_type_chosen could not find action to match type.") << endmsg;
1099  return RefPtr<RadioAction>();
1100  }
1101 }
1102 
1103 void
1105 {
1106  switch (_snap_type) {
1107  case Editing::SnapToCDFrame:
1108  set_snap_to (Editing::SnapToTimecodeFrame);
1109  break;
1110  case Editing::SnapToTimecodeFrame:
1111  set_snap_to (Editing::SnapToTimecodeSeconds);
1112  break;
1113  case Editing::SnapToTimecodeSeconds:
1114  set_snap_to (Editing::SnapToTimecodeMinutes);
1115  break;
1116  case Editing::SnapToTimecodeMinutes:
1117  set_snap_to (Editing::SnapToSeconds);
1118  break;
1119  case Editing::SnapToSeconds:
1120  set_snap_to (Editing::SnapToMinutes);
1121  break;
1122  case Editing::SnapToMinutes:
1123  set_snap_to (Editing::SnapToBeatDiv128);
1124  break;
1125  case Editing::SnapToBeatDiv128:
1126  set_snap_to (Editing::SnapToBeatDiv64);
1127  break;
1128  case Editing::SnapToBeatDiv64:
1129  set_snap_to (Editing::SnapToBeatDiv32);
1130  break;
1131  case Editing::SnapToBeatDiv32:
1132  set_snap_to (Editing::SnapToBeatDiv28);
1133  break;
1134  case Editing::SnapToBeatDiv28:
1135  set_snap_to (Editing::SnapToBeatDiv24);
1136  break;
1137  case Editing::SnapToBeatDiv24:
1138  set_snap_to (Editing::SnapToBeatDiv20);
1139  break;
1140  case Editing::SnapToBeatDiv20:
1141  set_snap_to (Editing::SnapToBeatDiv16);
1142  break;
1143  case Editing::SnapToBeatDiv16:
1144  set_snap_to (Editing::SnapToBeatDiv14);
1145  break;
1146  case Editing::SnapToBeatDiv14:
1147  set_snap_to (Editing::SnapToBeatDiv12);
1148  break;
1149  case Editing::SnapToBeatDiv12:
1150  set_snap_to (Editing::SnapToBeatDiv10);
1151  break;
1152  case Editing::SnapToBeatDiv10:
1153  set_snap_to (Editing::SnapToBeatDiv8);
1154  break;
1155  case Editing::SnapToBeatDiv8:
1156  set_snap_to (Editing::SnapToBeatDiv7);
1157  break;
1158  case Editing::SnapToBeatDiv7:
1159  set_snap_to (Editing::SnapToBeatDiv6);
1160  break;
1161  case Editing::SnapToBeatDiv6:
1162  set_snap_to (Editing::SnapToBeatDiv5);
1163  break;
1164  case Editing::SnapToBeatDiv5:
1165  set_snap_to (Editing::SnapToBeatDiv4);
1166  break;
1167  case Editing::SnapToBeatDiv4:
1168  set_snap_to (Editing::SnapToBeatDiv3);
1169  break;
1170  case Editing::SnapToBeatDiv3:
1171  set_snap_to (Editing::SnapToBeatDiv2);
1172  break;
1173  case Editing::SnapToBeatDiv2:
1174  set_snap_to (Editing::SnapToBeat);
1175  break;
1176  case Editing::SnapToBeat:
1177  set_snap_to (Editing::SnapToBar);
1178  break;
1179  case Editing::SnapToBar:
1180  set_snap_to (Editing::SnapToMark);
1181  break;
1182  case Editing::SnapToMark:
1183  set_snap_to (Editing::SnapToRegionStart);
1184  break;
1185  case Editing::SnapToRegionStart:
1186  set_snap_to (Editing::SnapToRegionEnd);
1187  break;
1188  case Editing::SnapToRegionEnd:
1189  set_snap_to (Editing::SnapToRegionSync);
1190  break;
1191  case Editing::SnapToRegionSync:
1192  set_snap_to (Editing::SnapToRegionBoundary);
1193  break;
1194  case Editing::SnapToRegionBoundary:
1195  set_snap_to (Editing::SnapToCDFrame);
1196  break;
1197  }
1198 }
1199 
1200 void
1202 {
1203  switch (_snap_type) {
1204  case Editing::SnapToCDFrame:
1205  set_snap_to (Editing::SnapToRegionBoundary);
1206  break;
1207  case Editing::SnapToTimecodeFrame:
1208  set_snap_to (Editing::SnapToCDFrame);
1209  break;
1210  case Editing::SnapToTimecodeSeconds:
1211  set_snap_to (Editing::SnapToTimecodeFrame);
1212  break;
1213  case Editing::SnapToTimecodeMinutes:
1214  set_snap_to (Editing::SnapToTimecodeSeconds);
1215  break;
1216  case Editing::SnapToSeconds:
1217  set_snap_to (Editing::SnapToTimecodeMinutes);
1218  break;
1219  case Editing::SnapToMinutes:
1220  set_snap_to (Editing::SnapToSeconds);
1221  break;
1222  case Editing::SnapToBeatDiv128:
1223  set_snap_to (Editing::SnapToMinutes);
1224  break;
1225  case Editing::SnapToBeatDiv64:
1226  set_snap_to (Editing::SnapToBeatDiv128);
1227  break;
1228  case Editing::SnapToBeatDiv32:
1229  set_snap_to (Editing::SnapToBeatDiv64);
1230  break;
1231  case Editing::SnapToBeatDiv28:
1232  set_snap_to (Editing::SnapToBeatDiv32);
1233  break;
1234  case Editing::SnapToBeatDiv24:
1235  set_snap_to (Editing::SnapToBeatDiv28);
1236  break;
1237  case Editing::SnapToBeatDiv20:
1238  set_snap_to (Editing::SnapToBeatDiv24);
1239  break;
1240  case Editing::SnapToBeatDiv16:
1241  set_snap_to (Editing::SnapToBeatDiv20);
1242  break;
1243  case Editing::SnapToBeatDiv14:
1244  set_snap_to (Editing::SnapToBeatDiv16);
1245  break;
1246  case Editing::SnapToBeatDiv12:
1247  set_snap_to (Editing::SnapToBeatDiv14);
1248  break;
1249  case Editing::SnapToBeatDiv10:
1250  set_snap_to (Editing::SnapToBeatDiv12);
1251  break;
1252  case Editing::SnapToBeatDiv8:
1253  set_snap_to (Editing::SnapToBeatDiv10);
1254  break;
1255  case Editing::SnapToBeatDiv7:
1256  set_snap_to (Editing::SnapToBeatDiv8);
1257  break;
1258  case Editing::SnapToBeatDiv6:
1259  set_snap_to (Editing::SnapToBeatDiv7);
1260  break;
1261  case Editing::SnapToBeatDiv5:
1262  set_snap_to (Editing::SnapToBeatDiv6);
1263  break;
1264  case Editing::SnapToBeatDiv4:
1265  set_snap_to (Editing::SnapToBeatDiv5);
1266  break;
1267  case Editing::SnapToBeatDiv3:
1268  set_snap_to (Editing::SnapToBeatDiv4);
1269  break;
1270  case Editing::SnapToBeatDiv2:
1271  set_snap_to (Editing::SnapToBeatDiv3);
1272  break;
1273  case Editing::SnapToBeat:
1274  set_snap_to (Editing::SnapToBeatDiv2);
1275  break;
1276  case Editing::SnapToBar:
1277  set_snap_to (Editing::SnapToBeat);
1278  break;
1279  case Editing::SnapToMark:
1280  set_snap_to (Editing::SnapToBar);
1281  break;
1282  case Editing::SnapToRegionStart:
1283  set_snap_to (Editing::SnapToMark);
1284  break;
1285  case Editing::SnapToRegionEnd:
1286  set_snap_to (Editing::SnapToRegionStart);
1287  break;
1288  case Editing::SnapToRegionSync:
1289  set_snap_to (Editing::SnapToRegionEnd);
1290  break;
1291  case Editing::SnapToRegionBoundary:
1292  set_snap_to (Editing::SnapToRegionSync);
1293  break;
1294  }
1295 }
1296 
1297 void
1299 {
1300  switch (_snap_type) {
1301  case Editing::SnapToMark:
1302  case Editing::SnapToRegionStart:
1303  case Editing::SnapToRegionEnd:
1304  case Editing::SnapToRegionSync:
1305  case Editing::SnapToRegionBoundary:
1306  case Editing::SnapToCDFrame:
1307  case Editing::SnapToTimecodeFrame:
1308  case Editing::SnapToTimecodeSeconds:
1309  case Editing::SnapToTimecodeMinutes:
1310  case Editing::SnapToSeconds:
1311  case Editing::SnapToMinutes:
1312  set_snap_to (Editing::SnapToBeatDiv128);
1313  break;
1314  case Editing::SnapToBeatDiv128:
1315  set_snap_to (Editing::SnapToBeatDiv64);
1316  break;
1317  case Editing::SnapToBeatDiv64:
1318  set_snap_to (Editing::SnapToBeatDiv32);
1319  break;
1320  case Editing::SnapToBeatDiv32:
1321  set_snap_to (Editing::SnapToBeatDiv28);
1322  break;
1323  case Editing::SnapToBeatDiv28:
1324  set_snap_to (Editing::SnapToBeatDiv24);
1325  break;
1326  case Editing::SnapToBeatDiv24:
1327  set_snap_to (Editing::SnapToBeatDiv20);
1328  break;
1329  case Editing::SnapToBeatDiv20:
1330  set_snap_to (Editing::SnapToBeatDiv16);
1331  break;
1332  case Editing::SnapToBeatDiv16:
1333  set_snap_to (Editing::SnapToBeatDiv14);
1334  break;
1335  case Editing::SnapToBeatDiv14:
1336  set_snap_to (Editing::SnapToBeatDiv12);
1337  break;
1338  case Editing::SnapToBeatDiv12:
1339  set_snap_to (Editing::SnapToBeatDiv10);
1340  break;
1341  case Editing::SnapToBeatDiv10:
1342  set_snap_to (Editing::SnapToBeatDiv8);
1343  break;
1344  case Editing::SnapToBeatDiv8:
1345  set_snap_to (Editing::SnapToBeatDiv7);
1346  break;
1347  case Editing::SnapToBeatDiv7:
1348  set_snap_to (Editing::SnapToBeatDiv6);
1349  break;
1350  case Editing::SnapToBeatDiv6:
1351  set_snap_to (Editing::SnapToBeatDiv5);
1352  break;
1353  case Editing::SnapToBeatDiv5:
1354  set_snap_to (Editing::SnapToBeatDiv4);
1355  break;
1356  case Editing::SnapToBeatDiv4:
1357  set_snap_to (Editing::SnapToBeatDiv3);
1358  break;
1359  case Editing::SnapToBeatDiv3:
1360  set_snap_to (Editing::SnapToBeatDiv2);
1361  break;
1362  case Editing::SnapToBeatDiv2:
1363  set_snap_to (Editing::SnapToBeat);
1364  break;
1365  case Editing::SnapToBeat:
1366  set_snap_to (Editing::SnapToBar);
1367  break;
1368  case Editing::SnapToBar:
1369  set_snap_to (Editing::SnapToBeatDiv128);
1370  break;
1371  }
1372 }
1373 
1374 void
1376 {
1377  switch (_snap_type) {
1378  case Editing::SnapToMark:
1379  case Editing::SnapToRegionStart:
1380  case Editing::SnapToRegionEnd:
1381  case Editing::SnapToRegionSync:
1382  case Editing::SnapToRegionBoundary:
1383  case Editing::SnapToCDFrame:
1384  case Editing::SnapToTimecodeFrame:
1385  case Editing::SnapToTimecodeSeconds:
1386  case Editing::SnapToTimecodeMinutes:
1387  case Editing::SnapToSeconds:
1388  case Editing::SnapToMinutes:
1389  set_snap_to (Editing::SnapToBar);
1390  break;
1391  case Editing::SnapToBeatDiv128:
1392  set_snap_to (Editing::SnapToBeat);
1393  break;
1394  case Editing::SnapToBeatDiv64:
1395  set_snap_to (Editing::SnapToBeatDiv128);
1396  break;
1397  case Editing::SnapToBeatDiv32:
1398  set_snap_to (Editing::SnapToBeatDiv64);
1399  break;
1400  case Editing::SnapToBeatDiv28:
1401  set_snap_to (Editing::SnapToBeatDiv32);
1402  break;
1403  case Editing::SnapToBeatDiv24:
1404  set_snap_to (Editing::SnapToBeatDiv28);
1405  break;
1406  case Editing::SnapToBeatDiv20:
1407  set_snap_to (Editing::SnapToBeatDiv24);
1408  break;
1409  case Editing::SnapToBeatDiv16:
1410  set_snap_to (Editing::SnapToBeatDiv20);
1411  break;
1412  case Editing::SnapToBeatDiv14:
1413  set_snap_to (Editing::SnapToBeatDiv16);
1414  break;
1415  case Editing::SnapToBeatDiv12:
1416  set_snap_to (Editing::SnapToBeatDiv14);
1417  break;
1418  case Editing::SnapToBeatDiv10:
1419  set_snap_to (Editing::SnapToBeatDiv12);
1420  break;
1421  case Editing::SnapToBeatDiv8:
1422  set_snap_to (Editing::SnapToBeatDiv10);
1423  break;
1424  case Editing::SnapToBeatDiv7:
1425  set_snap_to (Editing::SnapToBeatDiv8);
1426  break;
1427  case Editing::SnapToBeatDiv6:
1428  set_snap_to (Editing::SnapToBeatDiv7);
1429  break;
1430  case Editing::SnapToBeatDiv5:
1431  set_snap_to (Editing::SnapToBeatDiv6);
1432  break;
1433  case Editing::SnapToBeatDiv4:
1434  set_snap_to (Editing::SnapToBeatDiv5);
1435  break;
1436  case Editing::SnapToBeatDiv3:
1437  set_snap_to (Editing::SnapToBeatDiv4);
1438  break;
1439  case Editing::SnapToBeatDiv2:
1440  set_snap_to (Editing::SnapToBeatDiv3);
1441  break;
1442  case Editing::SnapToBeat:
1443  set_snap_to (Editing::SnapToBeatDiv2);
1444  break;
1445  case Editing::SnapToBar:
1446  set_snap_to (Editing::SnapToBeat);
1447  break;
1448  }
1449 }
1450 
1451 void
1453 {
1454  /* this is driven by a toggle on a radio group, and so is invoked twice,
1455  once for the item that became inactive and once for the one that became
1456  active.
1457  */
1458 
1459  RefPtr<RadioAction> ract = snap_type_action (type);
1460 
1461  if (ract && ract->get_active()) {
1462  set_snap_to (type);
1463  }
1464 }
1465 
1466 RefPtr<RadioAction>
1468 {
1469  const char* action = 0;
1470  RefPtr<Action> act;
1471 
1472  switch (mode) {
1473  case Editing::SnapOff:
1474  action = X_("snap-off");
1475  break;
1476  case Editing::SnapNormal:
1477  action = X_("snap-normal");
1478  break;
1479  case Editing::SnapMagnetic:
1480  action = X_("snap-magnetic");
1481  break;
1482  default:
1483  fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap mode type", (int) mode) << endmsg;
1484  abort(); /*NOTREACHED*/
1485  }
1486 
1487  act = ActionManager::get_action (X_("Editor"), action);
1488 
1489  if (act) {
1490  RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
1491  return ract;
1492 
1493  } else {
1494  error << string_compose (_("programming error: %1: %2"), "Editor::snap_mode_chosen could not find action to match mode.", action) << endmsg;
1495  return RefPtr<RadioAction> ();
1496  }
1497 }
1498 
1499 void
1501 {
1502  switch (_snap_mode) {
1503  case SnapOff:
1504  set_snap_mode (SnapNormal);
1505  break;
1506  case SnapNormal:
1507  set_snap_mode (SnapMagnetic);
1508  break;
1509  case SnapMagnetic:
1510  set_snap_mode (SnapOff);
1511  break;
1512  }
1513 }
1514 
1515 void
1517 {
1518  /* this is driven by a toggle on a radio group, and so is invoked twice,
1519  once for the item that became inactive and once for the one that became
1520  active.
1521  */
1522 
1523  RefPtr<RadioAction> ract = snap_mode_action (mode);
1524 
1525  if (ract && ract->get_active()) {
1526  set_snap_mode (mode);
1527  }
1528 }
1529 
1530 RefPtr<RadioAction>
1532 {
1533  const char* action = 0;
1534  RefPtr<Action> act;
1535 
1536  switch (ep) {
1537  case Editing::EditAtPlayhead:
1538  action = X_("edit-at-playhead");
1539  break;
1540  case Editing::EditAtSelectedMarker:
1541  action = X_("edit-at-selected-marker");
1542  break;
1543  case Editing::EditAtMouse:
1544  action = X_("edit-at-mouse");
1545  break;
1546  default:
1547  fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible edit point type", (int) ep) << endmsg;
1548  abort(); /*NOTREACHED*/
1549  }
1550 
1551  act = ActionManager::get_action (X_("Editor"), action);
1552 
1553  if (act) {
1554  RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
1555  return ract;
1556 
1557  } else {
1558  error << string_compose (_("programming error: %1: %2"), "Editor::edit_point_action could not find action to match edit point.", action) << endmsg;
1559  return RefPtr<RadioAction> ();
1560  }
1561 }
1562 
1563 void
1565 {
1566  /* this is driven by a toggle on a radio group, and so is invoked twice,
1567  once for the item that became inactive and once for the one that became
1568  active.
1569  */
1570 
1571  RefPtr<RadioAction> ract = edit_point_action (ep);
1572 
1573  if (ract && ract->get_active()) {
1574  set_edit_point_preference (ep);
1575  }
1576 }
1577 
1578 
1579 RefPtr<RadioAction>
1581 {
1582  const char* action = 0;
1583  RefPtr<Action> act;
1584 
1585  switch (focus) {
1586  case ZoomFocusLeft:
1587  action = X_("zoom-focus-left");
1588  break;
1589  case ZoomFocusRight:
1590  action = X_("zoom-focus-right");
1591  break;
1592  case ZoomFocusCenter:
1593  action = X_("zoom-focus-center");
1594  break;
1595  case ZoomFocusPlayhead:
1596  action = X_("zoom-focus-playhead");
1597  break;
1598  case ZoomFocusMouse:
1599  action = X_("zoom-focus-mouse");
1600  break;
1601  case ZoomFocusEdit:
1602  action = X_("zoom-focus-edit");
1603  break;
1604  default:
1605  fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible focus type", (int) focus) << endmsg;
1606  abort(); /*NOTREACHED*/
1607  }
1608 
1609  act = ActionManager::get_action (X_("Zoom"), action);
1610 
1611  if (act) {
1612  RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
1613  return ract;
1614  } else {
1615  error << string_compose (_("programming error: %1: %2"), "Editor::zoom_focus_action could not find action to match focus.", action) << endmsg;
1616  }
1617 
1618  return RefPtr<RadioAction> ();
1619 }
1620 
1621 void
1623 {
1624  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("sound-midi-notes"));
1625 
1626  if (act) {
1627  bool s = ARDOUR_UI::config()->get_sound_midi_notes();
1628  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
1629  if (tact->get_active () != s) {
1630  ARDOUR_UI::config()->set_sound_midi_notes (tact->get_active());
1631  }
1632  }
1633 }
1634 
1635 void
1637 {
1638  /* this is driven by a toggle on a radio group, and so is invoked twice,
1639  once for the item that became inactive and once for the one that became
1640  active.
1641  */
1642 
1643  RefPtr<RadioAction> ract = zoom_focus_action (focus);
1644 
1645  if (ract && ract->get_active()) {
1646  set_zoom_focus (focus);
1647  }
1648 }
1649 
1653 void
1655 {
1657 
1658  if (p == "auto-loop") {
1659  update_loop_range_view ();
1660  } else if (p == "punch-in") {
1661  update_punch_range_view ();
1662  } else if (p == "punch-out") {
1663  update_punch_range_view ();
1664  } else if (p == "timecode-format") {
1665  update_just_timecode ();
1666  } else if (p == "show-region-fades") {
1667  update_region_fade_visibility ();
1668  } else if (p == "edit-mode") {
1669  edit_mode_selector.set_text (edit_mode_to_string (Config->get_edit_mode()));
1670  } else if (p == "show-track-meters") {
1671  toggle_meter_updating();
1672  } else if (p == "show-summary") {
1673 
1674  bool const s = _session->config.get_show_summary ();
1675  if (s) {
1676  _summary_hbox.show ();
1677  } else {
1678  _summary_hbox.hide ();
1679  }
1680 
1681  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleSummary"));
1682  if (act) {
1683  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
1684  if (tact->get_active () != s) {
1685  tact->set_active (s);
1686  }
1687  }
1688  } else if (p == "show-group-tabs") {
1689 
1690  bool const s = _session->config.get_show_group_tabs ();
1691  if (s) {
1692  _group_tabs->show ();
1693  } else {
1694  _group_tabs->hide ();
1695  }
1696 
1697  reset_controls_layout_width ();
1698 
1699  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("ToggleGroupTabs"));
1700  if (act) {
1701  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
1702  if (tact->get_active () != s) {
1703  tact->set_active (s);
1704  }
1705  }
1706  } else if (p == "timecode-offset" || p == "timecode-offset-negative") {
1707  update_just_timecode ();
1708  } else if (p == "show-zoom-tools") {
1709  if (_zoom_tearoff) {
1710  _zoom_tearoff->set_visible (ARDOUR_UI::config()->get_show_zoom_tools(), true);
1711  }
1712  } else if (p == "sound-midi-notes") {
1713  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("sound-midi-notes"));
1714 
1715  if (act) {
1716  bool s = ARDOUR_UI::config()->get_sound_midi_notes();
1717  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
1718  if (tact->get_active () != s) {
1719  tact->set_active (s);
1720  }
1721  }
1722  } else if (p == "show-region-gain") {
1723  set_gain_envelope_visibility ();
1724  } else if (p == "remote-model") {
1725  if (_routes) {
1726  _routes->reset_remote_control_ids ();
1727  }
1728  } else if (p == "use-tooltips") {
1729 
1730  /* this doesn't really belong here but it has to go somewhere */
1731 
1732  if (ARDOUR_UI::config()->get_use_tooltips()) {
1734  } else {
1736  }
1737  } else if (p == "skip-playback") {
1738  Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("toggle-skip-playback"));
1739 
1740  if (act) {
1741  bool s = Config->get_skip_playback ();
1742  Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
1743  if (tact->get_active () != s) {
1744  tact->set_active (s);
1745  }
1746  }
1747  }
1748 }
1749 
1750 void
1752 {
1753  _track_canvas->grab_focus();
1754 }
1755 
1756 void
1758 {
1759  if (_edit_point != EditAtMouse) {
1760  onoff = true;
1761  }
1762 
1763  for (vector<Glib::RefPtr<Action> >::iterator x = ActionManager::mouse_edit_point_requires_canvas_actions.begin();
1765  (*x)->set_sensitive (onoff);
1766  }
1767 }
1768 
1769 void
1771 {
1772  _region_actions = ActionGroup::create (X_("Region"));
1773 
1774  /* PART 1: actions that operate on the selection, and for which the edit point type and location is irrelevant */
1775 
1776  /* Remove selected regions */
1777  reg_sens (_region_actions, "remove-region", _("Remove"), sigc::mem_fun (*this, &Editor::remove_selected_regions));
1778 
1779  /* Offer dialogue box to rename the first selected region */
1780  reg_sens (_region_actions, "rename-region", _("Rename..."), sigc::mem_fun (*this, &Editor::rename_region));
1781 
1782  /* Raise all selected regions by 1 layer */
1783  reg_sens (_region_actions, "raise-region", _("Raise"), sigc::mem_fun (*this, &Editor::raise_region));
1784 
1785  /* Raise all selected regions to the top */
1786  reg_sens (_region_actions, "raise-region-to-top", _("Raise to Top"), sigc::mem_fun (*this, &Editor::raise_region_to_top));
1787 
1788  /* Lower all selected regions by 1 layer */
1789  reg_sens (_region_actions, "lower-region", _("Lower"), sigc::mem_fun (*this, &Editor::lower_region));
1790 
1791  /* Lower all selected regions to the bottom */
1792  reg_sens (_region_actions, "lower-region-to-bottom", _("Lower to Bottom"), sigc::mem_fun (*this, &Editor::lower_region_to_bottom));
1793 
1794  /* Move selected regions to their original (`natural') position */
1795  reg_sens (_region_actions, "naturalize-region", _("Move to Original Position"), sigc::mem_fun (*this, &Editor::naturalize_region));
1796 
1797  /* Toggle `locked' status of selected regions */
1798  toggle_reg_sens (_region_actions, "toggle-region-lock", _("Lock"), sigc::mem_fun(*this, &Editor::toggle_region_lock));
1799 
1800  toggle_reg_sens (_region_actions, "toggle-region-video-lock", _("Lock to Video"), sigc::mem_fun(*this, &Editor::toggle_region_video_lock));
1801 
1802  toggle_reg_sens (
1803  _region_actions,
1804  "toggle-region-lock-style",
1805  _("Glue to Bars and Beats"),
1806  sigc::mem_fun (*this, &Editor::toggle_region_lock_style)
1807  );
1808 
1809  /* Remove sync points from selected regions */
1810  reg_sens (_region_actions, "remove-region-sync", _("Remove Sync"), sigc::mem_fun(*this, &Editor::remove_region_sync));
1811 
1812  /* Mute or unmute selected regions */
1813  toggle_reg_sens (_region_actions, "toggle-region-mute", _("Mute"), sigc::mem_fun(*this, &Editor::toggle_region_mute));
1814 
1815  /* Open the normalize dialogue to operate on the selected regions */
1816  reg_sens (_region_actions, "normalize-region", _("Normalize..."), sigc::mem_fun(*this, &Editor::normalize_region));
1817 
1818  /* Reverse selected regions */
1819  reg_sens (_region_actions, "reverse-region", _("Reverse"), sigc::mem_fun (*this, &Editor::reverse_region));
1820 
1821  /* Split selected multi-channel regions into mono regions */
1822  reg_sens (_region_actions, "split-multichannel-region", _("Make Mono Regions"), sigc::mem_fun (*this, &Editor::split_multichannel_region));
1823 
1824  /* Boost selected region gain */
1825  reg_sens (_region_actions, "boost-region-gain", _("Boost Gain"), sigc::bind (sigc::mem_fun(*this, &Editor::adjust_region_gain), true));
1826 
1827  /* Cut selected region gain */
1828  reg_sens (_region_actions, "cut-region-gain", _("Cut Gain"), sigc::bind (sigc::mem_fun(*this, &Editor::adjust_region_gain), false));
1829 
1830  /* Open the pitch shift dialogue for any selected audio regions */
1831  reg_sens (_region_actions, "pitch-shift-region", _("Pitch Shift..."), sigc::mem_fun (*this, &Editor::pitch_shift_region));
1832 
1833  /* Open the transpose dialogue for any selected MIDI regions */
1834  reg_sens (_region_actions, "transpose-region", _("Transpose..."), sigc::mem_fun (*this, &Editor::transpose_region));
1835 
1836  /* Toggle selected region opacity */
1837  toggle_reg_sens (_region_actions, "toggle-opaque-region", _("Opaque"), sigc::mem_fun (*this, &Editor::toggle_opaque_region));
1838 
1839  /* Toggle active status of selected regions' fade in */
1840  toggle_reg_sens (
1841  _region_actions, "toggle-region-fade-in", _("Fade In"), sigc::bind (sigc::mem_fun (*this, &Editor::toggle_region_fades), 1)
1842  );
1843 
1844  /* Toggle active status of selected regions' fade out */
1845  toggle_reg_sens (
1846  _region_actions, "toggle-region-fade-out", _("Fade Out"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_region_fades), -1)
1847  );
1848 
1849  /* Toggle active status of selected regions' fade in and out */
1850  toggle_reg_sens (
1851  _region_actions, "toggle-region-fades", _("Fades"), sigc::bind (sigc::mem_fun(*this, &Editor::toggle_region_fades), 0)
1852  );
1853 
1854  /* Duplicate selected regions */
1855  reg_sens (_region_actions, "duplicate-region", _("Duplicate"), sigc::bind (sigc::mem_fun (*this, &Editor::duplicate_range), false));
1856 
1857  /* Open the dialogue to duplicate selected regions multiple times */
1858  reg_sens (
1859  _region_actions,
1860  "multi-duplicate-region",
1861  _("Multi-Duplicate..."),
1862  sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_range), true)
1863  );
1864 
1865  /* Fill tracks with selected regions */
1866  reg_sens (_region_actions, "region-fill-track", _("Fill Track"), sigc::mem_fun (*this, &Editor::region_fill_track));
1867 
1868  /* Set up the loop range from the selected regions */
1869  reg_sens (
1870  _region_actions, "set-loop-from-region", _("Set Loop Range"), sigc::bind (sigc::mem_fun (*this, &Editor::set_loop_from_region), false)
1871  );
1872 
1873  /* Set up the loop range from the selected regions, and start playback of it */
1874  reg_sens (_region_actions, "loop-region", _("Loop"), sigc::bind (sigc::mem_fun(*this, &Editor::set_loop_from_region), true));
1875 
1876  /* Set the punch range from the selected regions */
1877  reg_sens (_region_actions, "set-punch-from-region", _("Set Punch"), sigc::mem_fun (*this, &Editor::set_punch_from_region));
1878 
1879  /* Add a single range marker around all selected regions */
1880  reg_sens (
1881  _region_actions, "add-range-marker-from-region", _("Add Single Range Marker"), sigc::mem_fun (*this, &Editor::add_location_from_region)
1882  );
1883 
1884  /* Add a range marker around each selected region */
1885  reg_sens (
1886  _region_actions, "add-range-markers-from-region", _("Add Range Marker Per Region"), sigc::mem_fun (*this, &Editor::add_locations_from_region)
1887  );
1888 
1889  /* Snap selected regions to the grid */
1890  reg_sens (_region_actions, "snap-regions-to-grid", _("Snap Position To Grid"), sigc::mem_fun (*this, &Editor::snap_regions_to_grid));
1891 
1892  /* Close gaps in selected regions */
1893  reg_sens (_region_actions, "close-region-gaps", _("Close Gaps"), sigc::mem_fun (*this, &Editor::close_region_gaps));
1894 
1895  /* Open the Rhythm Ferret dialogue for the selected regions */
1896  reg_sens (_region_actions, "show-rhythm-ferret", _("Rhythm Ferret..."), sigc::mem_fun (*this, &Editor::show_rhythm_ferret));
1897 
1898  /* Export the first selected region */
1899  reg_sens (_region_actions, "export-region", _("Export..."), sigc::mem_fun (*this, &Editor::export_region));
1900 
1901  /* Separate under selected regions: XXX not sure what this does */
1902  reg_sens (
1903  _region_actions,
1904  "separate-under-region",
1905  _("Separate Under"),
1906  sigc::mem_fun (*this, &Editor::separate_under_selected_regions)
1907  );
1908 
1909  reg_sens (_region_actions, "set-fade-in-length", _("Set Fade In Length"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_length), true));
1910  reg_sens (_region_actions, "alternate-set-fade-in-length", _("Set Fade In Length"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_length), true));
1911  reg_sens (_region_actions, "set-fade-out-length", _("Set Fade Out Length"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_length), false));
1912  reg_sens (_region_actions, "alternate-set-fade-out-length", _("Set Fade Out Length"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_length), false));
1913 
1914  reg_sens (_region_actions, "set-tempo-from-region", _("Set Tempo from Region = Bar"), sigc::mem_fun (*this, &Editor::set_tempo_from_region));
1915 
1916  reg_sens (
1917  _region_actions,
1918  "split-region-at-transients",
1919  _("Split at Percussion Onsets"),
1920  sigc::mem_fun(*this, &Editor::split_region_at_transients)
1921  );
1922 
1923  /* Open the list editor dialogue for the selected regions */
1924  reg_sens (_region_actions, "show-region-list-editor", _("List Editor..."), sigc::mem_fun (*this, &Editor::show_midi_list_editor));
1925 
1926  /* Open the region properties dialogue for the selected regions */
1927  reg_sens (_region_actions, "show-region-properties", _("Properties..."), sigc::mem_fun (*this, &Editor::show_region_properties));
1928 
1929  reg_sens (_region_actions, "play-selected-regions", _("Play"), sigc::mem_fun(*this, &Editor::play_selected_region));
1930 
1931  reg_sens (_region_actions, "bounce-regions-processed", _("Bounce (with processing)"), (sigc::bind (sigc::mem_fun (*this, &Editor::bounce_region_selection), true)));
1932  reg_sens (_region_actions, "bounce-regions-unprocessed", _("Bounce (without processing)"), (sigc::bind (sigc::mem_fun (*this, &Editor::bounce_region_selection), false)));
1933  reg_sens (_region_actions, "combine-regions", _("Combine"), sigc::mem_fun (*this, &Editor::combine_regions));
1934  reg_sens (_region_actions, "uncombine-regions", _("Uncombine"), sigc::mem_fun (*this, &Editor::uncombine_regions));
1935 
1936  reg_sens (_region_actions, "analyze-region", _("Spectral Analysis..."), sigc::mem_fun (*this, &Editor::analyze_region_selection));
1937 
1938  reg_sens (_region_actions, "reset-region-gain-envelopes", _("Reset Envelope"), sigc::mem_fun (*this, &Editor::reset_region_gain_envelopes));
1939 
1940  reg_sens (_region_actions, "reset-region-scale-amplitude", _("Reset Gain"), sigc::mem_fun (*this, &Editor::reset_region_scale_amplitude));
1941 
1942  toggle_reg_sens (
1943  _region_actions,
1944  "toggle-region-gain-envelope-active",
1945  _("Envelope Active"),
1946  sigc::mem_fun (*this, &Editor::toggle_gain_envelope_active)
1947  );
1948 
1949  reg_sens (_region_actions, "quantize-region", _("Quantize..."), sigc::mem_fun (*this, &Editor::quantize_region));
1950  reg_sens (_region_actions, "legatize-region", _("Legatize"), sigc::bind(sigc::mem_fun (*this, &Editor::legatize_region), false));
1951  reg_sens (_region_actions, "transform-region", _("Transform..."), sigc::mem_fun (*this, &Editor::transform_region));
1952  reg_sens (_region_actions, "remove-overlap", _("Remove Overlap"), sigc::bind(sigc::mem_fun (*this, &Editor::legatize_region), true));
1953  reg_sens (_region_actions, "insert-patch-change", _("Insert Patch Change..."), sigc::bind (sigc::mem_fun (*this, &Editor::insert_patch_change), false));
1954  reg_sens (_region_actions, "insert-patch-change-context", _("Insert Patch Change..."), sigc::bind (sigc::mem_fun (*this, &Editor::insert_patch_change), true));
1955  reg_sens (_region_actions, "fork-region", _("Unlink from other copies"), sigc::mem_fun (*this, &Editor::fork_region));
1956  reg_sens (_region_actions, "strip-region-silence", _("Strip Silence..."), sigc::mem_fun (*this, &Editor::strip_region_silence));
1957  reg_sens (_region_actions, "set-selection-from-region", _("Set Range Selection"), sigc::mem_fun (*this, &Editor::set_selection_from_region));
1958 
1959  reg_sens (_region_actions, "nudge-forward", _("Nudge Later"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_forward), false, false));
1960  reg_sens (_region_actions, "alternate-nudge-forward", _("Nudge Later"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_forward), false, false));
1961  reg_sens (_region_actions, "nudge-backward", _("Nudge Earlier"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_backward), false, false));
1962  reg_sens (_region_actions, "alternate-nudge-backward", _("Nudge Earlier"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_backward), false, false));
1963 
1964  reg_sens (_region_actions, "sequence-regions", _("Sequence Regions"), sigc::mem_fun (*this, &Editor::sequence_regions));
1965 
1966  reg_sens (
1967  _region_actions,
1968  "nudge-forward-by-capture-offset",
1969  _("Nudge Later by Capture Offset"),
1970  sigc::mem_fun (*this, &Editor::nudge_forward_capture_offset)
1971  );
1972 
1973  reg_sens (
1974  _region_actions,
1975  "nudge-backward-by-capture-offset",
1976  _("Nudge Earlier by Capture Offset"),
1977  sigc::mem_fun (*this, &Editor::nudge_backward_capture_offset)
1978  );
1979 
1980  reg_sens (_region_actions, "trim-region-to-loop", _("Trim to Loop"), sigc::mem_fun (*this, &Editor::trim_region_to_loop));
1981  reg_sens (_region_actions, "trim-region-to-punch", _("Trim to Punch"), sigc::mem_fun (*this, &Editor::trim_region_to_punch));
1982 
1983  reg_sens (_region_actions, "trim-to-previous-region", _("Trim to Previous"), sigc::mem_fun(*this, &Editor::trim_region_to_previous_region_end));
1984  reg_sens (_region_actions, "trim-to-next-region", _("Trim to Next"), sigc::mem_fun(*this, &Editor::trim_region_to_next_region_start));
1985 
1986  /* PART 2: actions that are not related to the selection, but for which the edit point type and location is important */
1987 
1988  reg_sens (
1989  _region_actions,
1990  "insert-region-from-region-list",
1991  _("Insert Region From Region List"),
1992  sigc::bind (sigc::mem_fun (*this, &Editor::insert_region_list_selection), 1)
1993  );
1994 
1995  /* PART 3: actions that operate on the selection and also require the edit point location */
1996 
1997  reg_sens (_region_actions, "set-region-sync-position", _("Set Sync Position"), sigc::mem_fun (*this, &Editor::set_region_sync_position));
1998  reg_sens (_region_actions, "place-transient", _("Place Transient"), sigc::mem_fun (*this, &Editor::place_transient));
1999  reg_sens (_region_actions, "split-region", _("Split/Separate"), sigc::mem_fun (*this, &Editor::split_region));
2000  reg_sens (_region_actions, "trim-front", _("Trim Start at Edit Point"), sigc::mem_fun (*this, &Editor::trim_region_front));
2001  reg_sens (_region_actions, "trim-back", _("Trim End at Edit Point"), sigc::mem_fun (*this, &Editor::trim_region_back));
2002 
2003  reg_sens (
2004  _region_actions,
2005  "align-regions-start",
2006  _("Align Start"),
2007  sigc::bind (sigc::mem_fun(*this, &Editor::align_regions), ARDOUR::Start)
2008  );
2009 
2010  reg_sens (
2011  _region_actions,
2012  "align-regions-start-relative",
2013  _("Align Start Relative"),
2014  sigc::bind (sigc::mem_fun (*this, &Editor::align_regions_relative), ARDOUR::Start)
2015  );
2016 
2017  reg_sens (_region_actions, "align-regions-end", _("Align End"), sigc::bind (sigc::mem_fun (*this, &Editor::align_regions), ARDOUR::End));
2018 
2019  reg_sens (
2020  _region_actions,
2021  "align-regions-end-relative",
2022  _("Align End Relative"),
2023  sigc::bind (sigc::mem_fun(*this, &Editor::align_regions_relative), ARDOUR::End)
2024  );
2025 
2026  reg_sens (
2027  _region_actions,
2028  "align-regions-sync",
2029  _("Align Sync"),
2030  sigc::bind (sigc::mem_fun(*this, &Editor::align_regions), ARDOUR::SyncPoint)
2031  );
2032 
2033  reg_sens (
2034  _region_actions,
2035  "align-regions-sync-relative",
2036  _("Align Sync Relative"),
2037  sigc::bind (sigc::mem_fun (*this, &Editor::align_regions_relative), ARDOUR::SyncPoint)
2038  );
2039 
2040  Glib::RefPtr<Action> a = reg_sens (_region_actions, "choose-top-region", _("Choose Top..."), sigc::bind (sigc::mem_fun (*this, &Editor::change_region_layering_order), false));
2041  a->set_accel_group (get_accel_group ());
2042 
2043  a = reg_sens (_region_actions, "choose-top-region-context-menu", _("Choose Top..."), sigc::bind (sigc::mem_fun (*this, &Editor::change_region_layering_order), true));
2044  a->set_accel_group (get_accel_group ());
2045 
2046  _all_region_actions_sensitized = true;
2047 
2048  ActionManager::add_action_group (_region_actions);
2049 }
void transpose_region()
Definition: editor_ops.cc:6137
void set_xjadeo_proc()
void zoom_focus_chosen(Editing::ZoomFocus)
void selected_marker_to_selection_end()
Definition: editor_ops.cc:1246
bool get_mixbus() const
Definition: profile.h:53
void raise_region_to_top()
Definition: editor_ops.cc:2676
LIBPBD_API Transmitter fatal
std::string to_string(T t, std::ios_base &(*f)(std::ios_base &))
Definition: convert.h:53
void editor_list_button_toggled()
Definition: editor_mixer.cc:63
std::vector< Glib::RefPtr< Gtk::Action > > track_selection_sensitive_actions
Definition: actions.cc:53
void hide_region_from_region_list()
Definition: editor.cc:5480
void set_session_extents_from_selection()
Definition: editor_ops.cc:6079
void show_midi_list_editor()
Definition: editor_ops.cc:2702
void snap_mode_chosen(Editing::SnapMode)
void scroll_tracks_up_line()
Definition: editor_ops.cc:1408
void fit_selection()
Definition: editor_ops.cc:7240
void split_region_at_transients()
Definition: editor_ops.cc:6274
void reset_focus()
void toggle_sound_midi_notes()
void set_session_start_from_playhead()
Definition: editor_ops.cc:2118
void jump_backward_to_mark()
Definition: editor_ops.cc:2288
void reset_sort_type(Editing::RegionListSortType, bool)
void copy()
Definition: editor_ops.cc:3990
void redo(uint32_t n=1)
Definition: editor_ops.cc:134
void undo_selection_op()
Definition: editor.cc:3411
void cycle_edit_point(bool with_marker)
Definition: editor.cc:3646
void edit_point_chosen(Editing::EditPoint)
void next_snap_choice_music_only()
void cursor_to_previous_region_point(EditorCursor *, ARDOUR::RegionPoint)
Definition: editor_ops.cc:1018
void mouse_mode_toggled(Editing::MouseMode m)
void selected_marker_to_next_region_point(ARDOUR::RegionPoint)
Definition: editor_ops.cc:1199
void close_video_monitor()
void toggle_xjadeo_viewoption(int what, int state=-1)
void toggle_record_enable()
Definition: editor_ops.cc:5539
void cursor_align(bool playhead_to_edit)
Definition: editor_ops.cc:1314
void control_video_monitor(int, int)
void toggle_opaque_region()
Definition: editor_ops.cc:5515
void redo_selection_op()
Definition: editor.cc:3431
void open_video_monitor()
void reset_region_scale_amplitude()
Definition: editor_ops.cc:4979
void pitch_shift_region()
Definition: editor_ops.cc:6118
void sequence_regions()
Definition: editor_ops.cc:602
void show_rhythm_ferret()
Definition: editor.cc:5041
void normalize_region()
Definition: editor_ops.cc:4908
void set_summary()
Definition: ardour_ui.h:130
static ARDOUR_UI * instance()
Definition: ardour_ui.h:187
void set_playhead_cursor()
Definition: editor_ops.cc:5914
void cut()
Definition: editor_ops.cc:3983
void trim_region_to_punch()
Definition: editor_ops.cc:3666
void scroll_tracks_down_line()
Definition: editor_ops.cc:1396
void undo(uint32_t n=1)
Definition: editor_ops.cc:117
void step_mouse_mode(bool next)
void set_fade_length(bool in)
Definition: editor_ops.cc:5631
void toggle_region_fades(int dir)
Definition: editor_ops.cc:5820
void split_region()
Definition: editor_ops.cc:5939
void align_regions_relative(ARDOUR::RegionPoint point)
Definition: editor_ops.cc:3491
LIBGTKMM2EXT_API Glib::RefPtr< Gtk::Action > get_action(const char *group, const char *name)
Definition: actions.cc:406
void legatize_region(bool shrink_only)
Definition: editor_ops.cc:5201
void set_punch_from_selection()
Definition: editor_ops.cc:6065
void set_group_tabs()
tuple f
Definition: signals.py:35
void toggle_region_video_lock()
Definition: editor_ops.cc:5466
void remove_location_at_playhead_cursor()
Definition: editor_ops.cc:2172
void move_selected_tracks(bool)
Definition: Beats.hpp:239
LIBPBD_API Transmitter error
void fork_region()
Definition: editor_ops.cc:5131
void toggle_region_mute()
Definition: editor_ops.cc:7412
Glib::RefPtr< Gtk::RadioAction > snap_mode_action(Editing::SnapMode)
void register_region_actions()
void delete_()
Definition: editor_ops.cc:3969
void toggle_marker_lines()
void add_locations_from_region()
Definition: editor_ops.cc:2204
void selected_marker_to_selection_start()
Definition: editor_ops.cc:1211
std::ostream & endmsg(std::ostream &ostr)
Definition: transmitter.h:71
void insert_region_list_selection(float times)
Definition: editor_ops.cc:2388
SessionConfiguration config
Definition: session.h:866
void parameter_changed(std::string)
void temporal_zoom_step(bool coarser)
Definition: editor_ops.cc:1628
void select_all_selectables_using_edit(bool)
void quantize_region()
Definition: editor_ops.cc:5171
void select_range_between()
ZoomFocus
Definition: editing.h:119
void trim_region_back()
Definition: editor_ops.cc:3617
void reset_sort_direction(bool)
#define ENSURE_GUI_THREAD(obj, method,...)
Definition: gui_thread.h:34
SnapType
Definition: editing.h:49
bool find_file(const Searchpath &search_path, const string &filename, std::string &result)
Definition: file_utils.cc:187
void cursor_to_previous_region_boundary(bool with_selection)
Definition: editor_ops.cc:938
void keyboard_selection_finish(bool add)
Definition: editor_keys.cc:43
void register_actions()
void toggle_show_auto_regions()
void reset_canvas_action_sensitivity(bool)
void trim_region_front()
Definition: editor_ops.cc:3611
void selected_marker_to_previous_region_boundary(bool with_selection)
Definition: editor_ops.cc:1128
void invert_selection()
void nudge_forward_capture_offset()
Definition: editor_ops.cc:543
void cycle_snap_mode()
void editor_mixer_button_toggled()
Definition: editor_mixer.cc:53
void nudge_backward(bool next, bool force_playhead)
Definition: editor_ops.cc:449
void select_all_selectables_using_loop()
void set_track_height(Height)
Definition: editor_ops.cc:6765
void set_punch_from_region()
Definition: editor_ops.cc:6108
#define _(Text)
Definition: i18n.h:11
void center_playhead()
Definition: editor_ops.cc:4807
void toggle_region_lock_style()
Definition: editor_ops.cc:5490
void next_snap_choice()
void combine_regions()
Definition: editor_ops.cc:7442
#define X_(Text)
Definition: i18n.h:13
void toggle_follow_playhead()
Definition: editor.cc:3991
void bring_all_sources_into_session()
Definition: editor_ops.cc:7593
LIBARDOUR_API RCConfiguration * Config
Definition: globals.cc:119
void cursor_to_selection_end(EditorCursor *)
Definition: editor_ops.cc:1053
std::vector< Glib::RefPtr< Gtk::Action > > region_list_selection_sensitive_actions
Definition: actions.cc:51
void center_edit_point()
Definition: editor_ops.cc:4814
LIBGTKMM2EXT_API Glib::RefPtr< Gtk::Action > register_radio_action(Glib::RefPtr< Gtk::ActionGroup > group, Gtk::RadioAction::Group &, const char *name, const char *label, sigc::slot< void > sl, guint key, Gdk::ModifierType mods)
void raise_region()
Definition: editor_ops.cc:2670
void show_region_properties()
Definition: editor_ops.cc:2695
Glib::RefPtr< Gtk::RadioAction > zoom_focus_action(Editing::ZoomFocus)
VideoTimeLine * video_timeline
Definition: ardour_ui.h:236
void rename_region()
Definition: editor_ops.cc:2708
void set_selection_from_loop()
void play_from_edit_point()
Definition: editor_ops.cc:2475
void reverse_region()
Definition: editor_ops.cc:5041
void move_range_selection_start_or_end_to_region_boundary(bool, bool)
Definition: editor_ops.cc:306
static RefPtr< Action > reg_sens(RefPtr< ActionGroup > group, char const *name, char const *label, sigc::slot< void > slot)
void analyze_region_selection()
Definition: editor.cc:1719
LIBGTKMM2EXT_API void disable_tooltips()
Definition: utils.cc:810
void escape()
void do_cut_time()
Definition: editor_ops.cc:7070
void session_import_dialog()
Definition: amp.h:29
void scroll_tracks_down()
Definition: editor_ops.cc:1379
void toggle_solo_isolate()
Definition: editor_ops.cc:5610
void set_selection_from_punch()
void remove_region_sync()
Definition: editor_ops.cc:3420
void nudge_backward_capture_offset()
Definition: editor_ops.cc:567
void select_prev_route()
Definition: editor_ops.cc:6001
void remove_unused_regions()
void change_region_layering_order(bool from_context_menu)
Definition: editor.cc:5788
void scroll_forward(float pages=0.8f)
Definition: editor_ops.cc:1363
void split_multichannel_region()
Definition: editor_ops.cc:2911
void reset_region_gain_envelopes()
Definition: editor_ops.cc:5366
void select_all_tracks()
void close_region_gaps()
Definition: editor_ops.cc:6555
void select_all_objects(Selection::Operation op)
void toggle_errors()
Definition: gtk_ui.cc:604
void lower_region()
Definition: editor_ops.cc:2682
void scroll_tracks_up()
Definition: editor_ops.cc:1390
void select_all_selectables_between(bool within)
std::vector< Glib::RefPtr< Gtk::Action > > write_sensitive_actions
Definition: actions.cc:50
void set_close_video_sensitive(bool onoff)
void selected_marker_to_previous_region_point(ARDOUR::RegionPoint)
Definition: editor_ops.cc:1205
void play_selected_region()
Definition: editor_ops.cc:2789
std::vector< Glib::RefPtr< Gtk::Action > > session_sensitive_actions
Definition: actions.cc:49
void add_external_audio_action(Editing::ImportMode)
void prev_snap_choice_music_only()
void crop_region_to_selection()
Definition: editor_ops.cc:3210
void region_fill_track()
Definition: editor_ops.cc:3302
void cycle_edit_mode()
Definition: editor.cc:3600
void fade_range()
Definition: editor_ops.cc:5616
void snap_type_chosen(Editing::SnapType)
void deselect_all()
LIBARDOUR_API PBD::Searchpath ardour_config_search_path()
void bounce_region_selection(bool with_processing)
void separate_region_from_punch()
Definition: editor_ops.cc:3101
SnapMode
Definition: editing.h:63
void toggle_solo()
Definition: editor_ops.cc:5560
LIBPBD_API Transmitter info
void set_edit_point()
Definition: editor_ops.cc:5887
void lower_region_to_bottom()
Definition: editor_ops.cc:2688
LIBARDOUR_API RuntimeProfile * Profile
Definition: globals.cc:120
LIBGTKMM2EXT_API void enable_tooltips()
Definition: utils.cc:804
static void toggle_reg_sens(RefPtr< ActionGroup > group, char const *name, char const *label, sigc::slot< void > slot)
EditPoint
Definition: editing.h:178
void export_region()
void tav_zoom_step(bool coarser)
Definition: editor_ops.cc:1578
void set_xjadeo_viewoption(int)
void strip_region_silence()
Definition: editor_ops.cc:5052
void do_insert_time()
Definition: editor_ops.cc:6923
void separate_under_selected_regions()
Definition: editor_ops.cc:3135
void set_region_sync_position()
Definition: editor_ops.cc:3385
void jump_forward_to_mark()
Definition: editor_ops.cc:2272
void toggle_mute()
Definition: editor_ops.cc:5585
void snap_regions_to_grid()
Definition: editor_ops.cc:6516
void keyboard_paste()
Definition: editor_keys.cc:107
void cursor_to_selection_start(EditorCursor *)
Definition: editor_ops.cc:1024
void add_location_from_playhead_cursor()
Definition: editor_ops.cc:2166
void export_audio()
void uncombine_regions()
Definition: editor_ops.cc:7485
void select_all_selectables_using_punch()
void remove_last_capture()
Definition: editor_ops.cc:4878
static void radio_reg_sens(RefPtr< ActionGroup > action_group, RadioAction::Group &radio_group, char const *name, char const *label, sigc::slot< void > slot)
void load_bindings()
const char * name
void insert_patch_change(bool from_context)
Definition: editor_ops.cc:5247
void add_location_from_region()
Definition: editor_ops.cc:2233
bool get_trx() const
Definition: profile.h:50
void toggle_ruler_visibility(RulerType rt)
void trim_region_to_previous_region_end()
Definition: editor_ops.cc:3718
void toggle_xjadeo_proc(int state=-1)
void toggle_tracks_active()
Definition: editor_ops.cc:6775
void naturalize_region()
Definition: editor_ops.cc:3441
Glib::RefPtr< Gtk::RadioAction > snap_type_action(Editing::SnapType)
void use_range_as_bar()
Definition: editor_ops.cc:6175
void toggle_stationary_playhead()
Definition: editor.cc:4016
void toggle_skip_playback()
LIBGTKMM2EXT_API Glib::RefPtr< Gtk::Action > register_toggle_action(Glib::RefPtr< Gtk::ActionGroup > group, const char *name, const char *label, sigc::slot< void > sl, guint key, Gdk::ModifierType mods)
void duplicate_range(bool with_dialog)
Definition: editor.cc:3528
static UIConfiguration * config()
Definition: ardour_ui.h:188
void set_loop_from_selection(bool play)
Definition: editor_ops.cc:6032
void toggle_gain_envelope_active()
Definition: editor_ops.cc:5415
void toggle_region_lock()
Definition: editor_ops.cc:5442
void remove_selected_regions()
Definition: editor_ops.cc:4310
std::vector< Glib::RefPtr< Gtk::Action > > mouse_edit_point_requires_canvas_actions
Definition: actions.cc:58
void toggle_measure_visibility()
void transform_region()
Definition: editor_ops.cc:5220
void remove_tracks()
Definition: editor_ops.cc:6799
void playhead_backward_to_grid()
Definition: editor_ops.cc:6750
Definition: debug.h:30
void adjust_region_gain(bool up)
Definition: editor_ops.cc:5006
void toggle_midi_input_active(bool flip_others)
Definition: editor_ops.cc:7512
void place_transient()
Definition: editor_ops.cc:6477
void trim_region_to_next_region_start()
Definition: editor_ops.cc:3724
void select_next_route()
Definition: editor_ops.cc:5969
void set_edit_mode(ARDOUR::EditMode)
Definition: editor.cc:3594
void goto_nth_marker(int nth)
#define S_(Text)
Definition: i18n.h:18
LIBARDOUR_API const char * edit_mode_to_string(ARDOUR::EditMode)
Definition: utils.cc:437
void mouse_mode_object_range_toggled()
void temporal_zoom_session()
Definition: editor_ops.cc:1920
void set_selection_from_region()
RulerType
Definition: editor.h:856
void audition_region_from_region_list()
Definition: editor.cc:5474
void separate_region_from_selection()
Definition: editor_ops.cc:3073
void nudge_forward(bool next, bool force_playhead)
Definition: editor_ops.cc:368
void play_from_edit_point_and_return()
Definition: editor_ops.cc:2481
void cycle_zoom_focus()
Definition: editor.cc:3852
void cursor_to_next_region_boundary(bool with_selection)
Definition: editor_ops.cc:932
void export_range()
void set_tempo_from_region()
Definition: editor_ops.cc:6161
Glib::RefPtr< Gdk::Pixbuf > get_icon(const char *cname)
Definition: utils.cc:674
void toggle_logo_visibility()
void set_xjadeo_sensitive(bool onoff)
void selected_marker_to_next_region_boundary(bool with_selection)
Definition: editor_ops.cc:1122
LIBGTKMM2EXT_API void add_action_group(Glib::RefPtr< Gtk::ActionGroup >)
RegionPoint
Definition: types.h:369
void playhead_forward_to_grid()
Definition: editor_ops.cc:6734
void set_loop_from_region(bool play)
Definition: editor_ops.cc:6050
LIBGTKMM2EXT_API Glib::RefPtr< Gtk::Action > register_action(Glib::RefPtr< Gtk::ActionGroup > group, const char *name, const char *label)
void tab_to_transient(bool forward)
Definition: editor_ops.cc:6654
void separate_region_from_loop()
Definition: editor_ops.cc:3110
ARDOUR::Session * _session
void show_region_in_region_list()
Definition: editor.cc:5486
void trim_region_to_loop()
Definition: editor_ops.cc:3656
void cursor_to_next_region_point(EditorCursor *, ARDOUR::RegionPoint)
Definition: editor_ops.cc:1012
void swap_visual_state()
Definition: editor.cc:4465
void play_edit_range()
Definition: editor_ops.cc:2779
void scroll_backward(float pages=0.8f)
Definition: editor_ops.cc:1347
Glib::RefPtr< Gtk::RadioAction > edit_point_action(Editing::EditPoint)
void lock()
Definition: editor_ops.cc:7536
std::string string_compose(const std::string &fmt, const T1 &o1)
Definition: compose.h:208
void cancel_visual_state_op(uint32_t n)
Definition: editor_ops.cc:7406
void prev_snap_choice()
void temporal_zoom_selection(bool both_axes=false)
Definition: editor_ops.cc:1892
void align_regions(ARDOUR::RegionPoint)
Definition: editor_ops.cc:3465
void scroll_playhead(bool forward)
Definition: editor_ops.cc:1281
void keyboard_selection_begin()
Definition: editor_keys.cc:73
void external_audio_dialog()
void start_visual_state_op(uint32_t n)
Definition: editor_ops.cc:7394
void set_session_end_from_playhead()
Definition: editor_ops.cc:2142