X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_selection.cc;h=f2681b58e25e5ea32379c95a02314a26f05e1278;hb=a2c0b10d8a6cf4ab5a0fdcdfe157c35c0ed9a709;hp=3a6277ececf16b2d4d19df1435caa481f196b08b;hpb=827c23bef3a8ccc102895f55b7632074241f9684;p=ardour.git diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 3a6277ecec..f2681b58e2 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -43,7 +43,7 @@ #include "midi_region_view.h" #include "sfdb_ui.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -192,17 +192,10 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op) group = clicked_routeview->route()->route_group(); } - bool had_tracks = !selection->tracks.empty(); - RouteGroup& arg (_session->all_route_group()); - switch (op) { case Selection::Toggle: if (selection->selected (clicked_axisview)) { - if (arg.is_select() && arg.is_active()) { - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { - selection->remove(*i); - } - } else if (group && group->is_active()) { + if (group && group->is_active()) { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { if ((*i)->route_group() == group) { selection->remove(*i); @@ -212,11 +205,7 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op) selection->remove (clicked_axisview); } } else { - if (arg.is_select() && arg.is_active()) { - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { - selection->add(*i); - } - } else if (group && group->is_active()) { + if (group && group->is_active()) { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { if ((*i)->route_group() == group) { selection->add(*i); @@ -229,14 +218,7 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op) break; case Selection::Add: - if (!had_tracks && arg.is_select() && arg.is_active()) { - /* nothing was selected already, and all group is active etc. so use - all tracks. - */ - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { - selection->add(*i); - } - } else if (group && group->is_active()) { + if (group && group->is_active()) { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { if ((*i)->route_group() == group) { selection->add(*i); @@ -249,14 +231,7 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op) case Selection::Set: selection->clear(); - if (!had_tracks && arg.is_select() && arg.is_active()) { - /* nothing was selected already, and all group is active etc. so use - all tracks. - */ - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { - selection->add(*i); - } - } else if (group && group->is_active()) { + if (group && group->is_active()) { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) { if ((*i)->route_group() == group) { selection->add(*i); @@ -327,15 +302,27 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation if (!clicked_control_point) { return false; } + bool ret = false; switch (op) { case Selection::Set: - if (press) { + if (!selection->selected (clicked_control_point)) { selection->set (clicked_control_point); ret = true; + } else { + /* clicked on an already selected point */ + if (press) { + break; + } else { + if (selection->points.size() > 1) { + selection->set (clicked_control_point); + ret = true; + } + } } break; + case Selection::Add: if (press) { selection->add (clicked_control_point); @@ -634,7 +621,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) if (press) { if (selection->selected (clicked_routeview)) { - get_equivalent_regions (clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id); + get_equivalent_regions (clicked_regionview, all_equivalent_regions, ARDOUR::Properties::group_select.property_id); } else { all_equivalent_regions.push_back (clicked_regionview); } @@ -652,7 +639,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) case Selection::Set: if (!selection->selected (clicked_regionview)) { - get_equivalent_regions (clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id); + get_equivalent_regions (clicked_regionview, all_equivalent_regions, ARDOUR::Properties::group_select.property_id); selection->set (all_equivalent_regions); commit = true; } else { @@ -662,7 +649,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) else { if (selection->regions.size() > 1) { /* collapse region selection down to just this one region (and its equivalents) */ - get_equivalent_regions(clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id); + get_equivalent_regions(clicked_regionview, all_equivalent_regions, ARDOUR::Properties::group_select.property_id); selection->set(all_equivalent_regions); commit = true; } @@ -804,7 +791,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) RouteTimeAxisView* closest = 0; int distance = INT_MAX; - int key = rtv->route()->order_key (); + int key = rtv->route()->presentation_info().order (); for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { @@ -819,7 +806,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) if (result.second) { /* newly added to already_in_selection */ - int d = artv->route()->order_key (); + int d = artv->route()->presentation_info().order (); d -= key; @@ -835,7 +822,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) /* now add all tracks between that one and this one */ - int okey = closest->route()->order_key (); + int okey = closest->route()->presentation_info().order (); if (okey > key) { swap (okey, key); @@ -845,7 +832,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) RouteTimeAxisView* artv = dynamic_cast(*x); if (artv && artv != rtv) { - int k = artv->route()->order_key (); + int k = artv->route()->presentation_info().order (); if (k >= okey && k <= key) { @@ -892,7 +879,12 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) if (!regions.empty()) { selection->add (regions); commit = true; + } else if (selection->regions.empty() && !selection->selected (clicked_regionview)) { + /* ensure that at least the clicked regionview is selected. */ + selection->set (clicked_regionview); + commit = true; } + } out: @@ -975,6 +967,7 @@ Editor::track_selection_changed () } RouteNotificationListPtr routes (new RouteNotificationList); + StripableNotificationListPtr stripables (new StripableNotificationList); for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { @@ -998,6 +991,7 @@ Editor::track_selection_changed () RouteTimeAxisView* rtav = dynamic_cast (*i); if (rtav) { routes->push_back (rtav->route()); + stripables->push_back (rtav->route()); } } } @@ -1006,7 +1000,7 @@ Editor::track_selection_changed () /* notify control protocols */ - ControlProtocol::TrackSelectionChanged (routes); + ControlProtocol::StripableSelectionChanged (stripables); if (sfbrowser && _session && !_session->deletion_in_progress()) { uint32_t audio_track_cnt = 0; @@ -1038,10 +1032,6 @@ Editor::track_selection_changed () void Editor::time_selection_changed () { - if (Profile->get_sae()) { - return; - } - /* XXX this is superficially inefficient. Hide the selection in all * tracks, then show it in all selected tracks. * @@ -1103,7 +1093,6 @@ Editor::sensitize_all_region_actions (bool s) void Editor::sensitize_the_right_region_actions () { - RegionSelection rs = get_regions_from_selection_and_entered (); sensitize_all_region_actions (!rs.empty ()); @@ -1133,6 +1122,7 @@ Editor::sensitize_the_right_region_actions () bool have_inactive_fade_out = false; bool have_active_fade_in = false; bool have_active_fade_out = false; + bool have_transients = false; for (list::const_iterator i = rs.begin(); i != rs.end(); ++i) { @@ -1188,6 +1178,10 @@ Editor::sensitize_the_right_region_actions () have_not_at_natural_position = true; } + if (r->has_transients ()){ + have_transients = true; + } + if (ar) { if (ar->envelope_active()) { have_envelope_active = true; @@ -1213,6 +1207,8 @@ Editor::sensitize_the_right_region_actions () } } + _region_actions->get_action("split-region-at-transients")->set_sensitive (have_transients); + if (rs.size() > 1) { _region_actions->get_action("show-region-list-editor")->set_sensitive (false); _region_actions->get_action("show-region-properties")->set_sensitive (false); @@ -1275,7 +1271,8 @@ Editor::sensitize_the_right_region_actions () } else { - _region_actions->get_action("analyze-region")->set_sensitive (false); + _region_actions->get_action("loudness-analyze-region")->set_sensitive (false); + _region_actions->get_action("spectral-analyze-region")->set_sensitive (false); _region_actions->get_action("reset-region-gain-envelopes")->set_sensitive (false); _region_actions->get_action("toggle-region-gain-envelope-active")->set_sensitive (false); _region_actions->get_action("pitch-shift-region")->set_sensitive (false); @@ -1380,11 +1377,15 @@ Editor::region_selection_changed () _regions->block_change_connection (false); editor_regions_selection_changed_connection.block(false); - if (!_all_region_actions_sensitized) { - /* This selection change might have changed what region actions - are allowed, so sensitize them all in case a key is pressed. - */ - sensitize_all_region_actions (true); + if (selection->regions.empty()) { + sensitize_all_region_actions (false); + } else { + if (!_all_region_actions_sensitized) { + /* This selection change might have changed what region actions + are allowed, so sensitize them all in case a key is pressed. + */ + sensitize_all_region_actions (true); + } } if (_session && !_session->transport_rolling() && !selection->regions.empty()) { @@ -1573,7 +1574,7 @@ Editor::select_all_within (framepos_t start, framepos_t end, double top, double if (preserve_if_selected && op != Selection::Toggle) { list::iterator i = found.begin(); - while (i != found.end() && (*i)->get_selected()) { + while (i != found.end() && (*i)->selected()) { ++i; } @@ -1627,9 +1628,7 @@ Editor::set_selection_from_region () selection->set (tvl); - if (!Profile->get_sae()) { - set_mouse_mode (Editing::MouseRange, false); - } + set_mouse_mode (Editing::MouseRange, false); } void @@ -1662,9 +1661,7 @@ Editor::set_selection_from_range (Location& loc) selection->set (loc.start(), loc.end()); commit_reversible_selection_op (); - if (!Profile->get_sae()) { - set_mouse_mode (Editing::MouseRange, false); - } + set_mouse_mode (Editing::MouseRange, false); } void