summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2015-01-07 15:31:05 -0600
committerBen Loftis <ben@harrisonconsoles.com>2015-01-07 15:31:30 -0600
commita4f7c21ec38e59281b4755b6b96651f0b310cdd2 (patch)
tree4049d0617956090d9acfbbf70d282f080b7ce314
parent915a840119132b7994e25796859d3bcdd6f9a775 (diff)
now that regions and range selections are exclusive, the separate actions to set ranges or zoom to selections are redundant. save some menu entries and keybindings by consolidating them. also consolidate some code with new function get_selection_extents(). as a side-effect, this checkin fixes the assert failure in play_with_preroll
-rw-r--r--gtk2_ardour/ardour.menus.in12
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc2
-rw-r--r--gtk2_ardour/editor.cc6
-rw-r--r--gtk2_ardour/editor.h3
-rw-r--r--gtk2_ardour/editor_actions.cc6
-rw-r--r--gtk2_ardour/editor_ops.cc199
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in4
7 files changed, 90 insertions, 142 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index c609724957..2bfbac6451 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -51,8 +51,6 @@
<menu name='Transport' action='Transport'>
<menuitem action='ToggleRoll'/>
<menu action="PlayMenu">
- <menuitem action='main-menu-play-selected-regions'/>
- <menuitem action='play-edit-range'/>
<menuitem action='PlaySelection'/>
<menuitem action='PlayPreroll'/>
<menuitem action='play-from-edit-point-and-return'/>
@@ -65,14 +63,8 @@
#if 0
<menuitem action='toggle-skip-playback'/>
#endif
- <menu action="SetLoopMenu">
- <menuitem action='set-loop-from-edit-range'/>
- <menuitem action='set-loop-from-region'/>
- </menu>
- <menu action="SetPunchMenu">
- <menuitem action='set-punch-from-edit-range'/>
- <menuitem action='set-punch-from-region'/>
- </menu>
+ <menuitem action='set-loop-from-edit-range'/>
+ <menuitem action='set-punch-from-edit-range'/>
<separator/>
<menuitem action='Forward'/>
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 0b237526ac..ed0ea95c43 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -267,7 +267,7 @@ if (Profile->get_mixbus())
act = ActionManager::register_action (transport_actions, X_("Loop"), _("Play Loop Range"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_session_auto_loop));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
- act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selected Range"), sigc::mem_fun(*this, &ARDOUR_UI::transport_play_selection));
+ act = ActionManager::register_action (transport_actions, X_("PlaySelection"), _("Play Selection"), sigc::mem_fun(*this, &ARDOUR_UI::transport_play_selection));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::transport_sensitive_actions.push_back (act);
act = ActionManager::register_action (transport_actions, X_("PlayPreroll"), _("Play Selection w/Preroll"), sigc::mem_fun(*this, &ARDOUR_UI::transport_play_preroll));
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 217d55bb9a..eecf5e79d2 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -1860,9 +1860,9 @@ Editor::add_selection_context_items (Menu_Helpers::MenuList& edit_items)
edit_items.push_back (MenuElem (_("Select All in Range"), sigc::mem_fun(*this, &Editor::select_all_selectables_using_time_selection)));
edit_items.push_back (SeparatorElem());
- edit_items.push_back (MenuElem (_("Set Loop from Range"), sigc::bind (sigc::mem_fun(*this, &Editor::set_loop_from_selection), false)));
- edit_items.push_back (MenuElem (_("Set Punch from Range"), sigc::mem_fun(*this, &Editor::set_punch_from_selection)));
- edit_items.push_back (MenuElem (_("Set Session Start/End from Range"), sigc::mem_fun(*this, &Editor::set_session_extents_from_selection)));
+ edit_items.push_back (MenuElem (_("Set Loop from Selection"), sigc::bind (sigc::mem_fun(*this, &Editor::set_loop_from_selection), false)));
+ edit_items.push_back (MenuElem (_("Set Punch from Selection"), sigc::mem_fun(*this, &Editor::set_punch_from_selection)));
+ edit_items.push_back (MenuElem (_("Set Session Start/End from Selection"), sigc::mem_fun(*this, &Editor::set_session_extents_from_selection)));
edit_items.push_back (SeparatorElem());
edit_items.push_back (MenuElem (_("Add Range Markers"), sigc::mem_fun (*this, &Editor::add_location_from_selection)));
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 83b1a074e2..674ee716d8 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -242,6 +242,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
/* selection */
Selection& get_selection() const { return *selection; }
+ bool get_selection_extents ( framepos_t &start, framepos_t &end ); // the time extents of the current selection, whether Range, Region(s), Control Points, or Notes
Selection& get_cut_buffer() const { return *cut_buffer; }
void track_mixer_selection ();
@@ -1425,9 +1426,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void set_session_extents_from_selection ();
- void set_loop_from_edit_range (bool play);
void set_loop_from_region (bool play);
- void set_punch_from_edit_range ();
void set_loop_range (framepos_t start, framepos_t end, std::string cmd);
void set_punch_range (framepos_t start, framepos_t end, std::string cmd);
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index 49b39397cd..5af1fe92a2 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -295,9 +295,9 @@ Editor::register_actions ()
toggle_reg_sens (editor_actions, "toggle-skip-playback", _("Use Skip Ranges"), sigc::mem_fun(*this, &Editor::toggle_skip_playback));
- reg_sens (editor_actions, "set-loop-from-edit-range", _("Set Loop from Edit Range"), sigc::bind (sigc::mem_fun(*this, &Editor::set_loop_from_edit_range), false));
- reg_sens (editor_actions, "set-punch-from-edit-range", _("Set Punch from Edit Range"), sigc::mem_fun(*this, &Editor::set_punch_from_edit_range));
- reg_sens (editor_actions, "set-session-from-edit-range", _("Set Session Start/End from Edit Range"), sigc::mem_fun(*this, &Editor::set_session_extents_from_selection));
+ 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));
+ reg_sens (editor_actions, "set-punch-from-edit-range", _("Set Punch from Selection"), sigc::mem_fun(*this, &Editor::set_punch_from_selection));
+ 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));
/* this is a duplicated action so that the main menu can use a different label */
reg_sens (editor_actions, "main-menu-play-selected-regions", _("Play Selected Regions"), sigc::mem_fun (*this, &Editor::play_selected_region));
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 529a524d8c..4ce5d09f3b 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -1712,29 +1712,9 @@ Editor::temporal_zoom_region (bool both_axes)
framepos_t end = 0;
set<TimeAxisView*> tracks;
- RegionSelection rs = get_regions_from_selection_and_entered ();
-
- if (rs.empty()) {
- return;
- }
-
- for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
-
- if ((*i)->region()->position() < start) {
- start = (*i)->region()->position();
- }
-
- if ((*i)->region()->last_frame() + 1 > end) {
- end = (*i)->region()->last_frame() + 1;
- }
-
- tracks.insert (&((*i)->get_time_axis_view()));
- }
-
- if ((start == 0 && end == 0) || end < start) {
+ if ( !get_selection_extents(start, end) )
return;
- }
-
+
calc_extra_zoom_edges (start, end);
/* if we're zooming on both axes we need to save track heights etc.
@@ -1772,6 +1752,46 @@ Editor::temporal_zoom_region (bool both_axes)
}
+bool
+Editor::get_selection_extents ( framepos_t &start, framepos_t &end )
+{
+ start = max_framepos;
+ end = 0;
+ bool ret = true;
+
+ //ToDo: if notes are selected, set extents to that selection
+
+ //ToDo: if control points are selected, set extents to that selection
+
+ if ( !selection->regions.empty() ) {
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
+ for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
+
+ if ((*i)->region()->position() < start) {
+ start = (*i)->region()->position();
+ }
+
+ if ((*i)->region()->last_frame() + 1 > end) {
+ end = (*i)->region()->last_frame() + 1;
+ }
+ }
+
+ } else if (!selection->time.empty()) {
+ start = selection->time.start();
+ end = selection->time.end_frame();
+ } else
+ ret = false; //no selection found
+
+ //range check
+ if ((start == 0 && end == 0) || end < start) {
+ ret = false;
+ }
+
+ return ret;
+}
+
+
void
Editor::temporal_zoom_selection (bool both_axes)
{
@@ -1788,16 +1808,14 @@ Editor::temporal_zoom_selection (bool both_axes)
//if a range is selected, zoom to that
if (!selection->time.empty()) {
- framepos_t start = selection->time.start();
- framepos_t end = selection->time.end_frame();
-
- calc_extra_zoom_edges(start, end);
-
- temporal_zoom_by_frame (start, end);
-
+ framepos_t start, end;
+ if (get_selection_extents (start, end)) {
+ calc_extra_zoom_edges(start, end);
+ temporal_zoom_by_frame (start, end);
+ }
+
if (both_axes)
fit_selected_tracks();
-
}
}
@@ -2342,11 +2360,15 @@ Editor::play_from_edit_point_and_return ()
void
Editor::play_selection ()
{
- if (selection->time.empty()) {
+ framepos_t start, end;
+ if (!get_selection_extents ( start, end))
return;
- }
- _session->request_play_range (&selection->time, true);
+ AudioRange ar (start, end, 0);
+ list<AudioRange> lar;
+ lar.push_back (ar);
+
+ _session->request_play_range (&lar, true);
}
framepos_t
@@ -2379,16 +2401,17 @@ Editor::maybe_locate_with_edit_preroll ( framepos_t location )
void
Editor::play_with_preroll ()
{
- if (selection->time.empty()) {
- return;
- } else {
+ {
framepos_t preroll = get_preroll();
- framepos_t start = 0;
- if (selection->time[clicked_selection].start > preroll)
- start = selection->time[clicked_selection].start - preroll;
+ framepos_t start, end;
+ if (!get_selection_extents ( start, end))
+ return;
+
+ if (start > preroll)
+ start = start - preroll;
- framepos_t end = selection->time[clicked_selection].end + preroll;
+ end = end + preroll; //"post-roll"
AudioRange ar (start, end, 0);
list<AudioRange> lar;
@@ -5859,36 +5882,15 @@ Editor::select_prev_route()
void
Editor::set_loop_from_selection (bool play)
{
- if (_session == 0 || selection->time.empty()) {
- return;
- }
-
- framepos_t start = selection->time[clicked_selection].start;
- framepos_t end = selection->time[clicked_selection].end;
-
- set_loop_range (start, end, _("set loop range from selection"));
-
- if (play) {
- _session->request_locate (start, true);
- _session->request_play_loop (true);
- }
-}
-
-void
-Editor::set_loop_from_edit_range (bool play)
-{
if (_session == 0) {
return;
}
- framepos_t start;
- framepos_t end;
-
- if (!get_edit_op_range (start, end)) {
+ framepos_t start, end;
+ if (!get_selection_extents ( start, end))
return;
- }
- set_loop_range (start, end, _("set loop range from edit range"));
+ set_loop_range (start, end, _("set loop range from selection"));
if (play) {
_session->request_locate (start, true);
@@ -5899,23 +5901,9 @@ Editor::set_loop_from_edit_range (bool play)
void
Editor::set_loop_from_region (bool play)
{
- framepos_t start = max_framepos;
- framepos_t end = 0;
-
- RegionSelection rs = get_regions_from_selection_and_entered ();
-
- if (rs.empty()) {
+ framepos_t start, end;
+ if (!get_selection_extents ( start, end))
return;
- }
-
- for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
- if ((*i)->region()->position() < start) {
- start = (*i)->region()->position();
- }
- if ((*i)->region()->last_frame() + 1 > end) {
- end = (*i)->region()->last_frame() + 1;
- }
- }
set_loop_range (start, end, _("set loop range from region"));
@@ -5928,12 +5916,13 @@ Editor::set_loop_from_region (bool play)
void
Editor::set_punch_from_selection ()
{
- if (_session == 0 || selection->time.empty()) {
+ if (_session == 0) {
return;
}
- framepos_t start = selection->time[clicked_selection].start;
- framepos_t end = selection->time[clicked_selection].end;
+ framepos_t start, end;
+ if (!get_selection_extents ( start, end))
+ return;
set_punch_range (start, end, _("set punch range from selection"));
}
@@ -5941,15 +5930,16 @@ Editor::set_punch_from_selection ()
void
Editor::set_session_extents_from_selection ()
{
- if (_session == 0 || selection->time.empty()) {
+ if (_session == 0) {
return;
}
+
+ framepos_t start, end;
+ if (!get_selection_extents ( start, end))
+ return;
begin_reversible_command (_("set session start/stop from selection"));
- framepos_t start = selection->time[clicked_selection].start;
- framepos_t end = selection->time[clicked_selection].end;
-
Location* loc;
if ((loc = _session->locations()->session_range_location()) == 0) {
_session->set_session_extents ( start, end ); // this will create a new session range; no need for UNDO
@@ -5967,42 +5957,11 @@ Editor::set_session_extents_from_selection ()
}
void
-Editor::set_punch_from_edit_range ()
-{
- if (_session == 0) {
- return;
- }
-
- framepos_t start;
- framepos_t end;
-
- if (!get_edit_op_range (start, end)) {
- return;
- }
-
- set_punch_range (start, end, _("set punch range from edit range"));
-}
-
-void
Editor::set_punch_from_region ()
{
- framepos_t start = max_framepos;
- framepos_t end = 0;
-
- RegionSelection rs = get_regions_from_selection_and_entered ();
-
- if (rs.empty()) {
+ framepos_t start, end;
+ if (!get_selection_extents ( start, end))
return;
- }
-
- for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
- if ((*i)->region()->position() < start) {
- start = (*i)->region()->position();
- }
- if ((*i)->region()->last_frame() + 1 > end) {
- end = (*i)->region()->last_frame() + 1;
- }
- }
set_punch_range (start, end, _("set punch range from region"));
}
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index 8660b2c99e..b2aa557bfa 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -98,7 +98,7 @@ This mode provides many different operations on both regions and control points,
@eep|Editor/cycle-edit-point-with-marker|<@PRIMARY@>grave|next EP w/marker
@trans|Transport/ToggleRoll|space|toggle roll
-@epp|Editor/play-edit-range|<@SECONDARY@>space|play edit range
+@epp|Editor/PlaySelection|<@SECONDARY@>space|play edit range
@epp|Editor/play-from-edit-point-and-return|<@LEVEL4@>space|play from EP \& return
@trans|Transport/ToggleRollMaybe|<@PRIMARY@><@SECONDARY@>space|stop (keep loop/range play)
@trans|Transport/ToggleRollForgetCapture|<@PRIMARY@>space|stop and destroy
@@ -119,10 +119,8 @@ This mode provides many different operations on both regions and control points,
@eep|Editor/trim-to-next-region|<@PRIMARY@>k|trim region to start of next region
@ranges|Editor/set-loop-from-edit-range|bracketright|set loop range from edit range
-@ranges|Region/set-loop-from-region|<@SECONDARY@>bracketright|set loop range from region(s)
@ranges|Editor/set-punch-from-edit-range|bracketleft|set punch range from edit range
-@ranges|Region/set-punch-from-region|<@SECONDARY@>bracketleft|set punch range from region(s)
@rop|Region/boost-region-gain|asciicircum|increase region gain
@rop|Region/cut-region-gain|ampersand|reduce region gain