31 #include "control_protocol/control_protocol.h"
64 if (selection->selected (&view)) {
69 if (selection->tracks.empty()) {
71 if (!selection->selected (&view)) {
72 selection->set (&view);
84 bool passed_clicked =
false;
89 if (!selection->selected (&view)) {
90 to_be_added.push_back (&view);
95 for (TrackViewList::iterator i = sorted.begin(); i != sorted.end(); ++i) {
98 passed_clicked =
true;
101 if (selection->selected (*i)) {
102 if (passed_clicked) {
111 passed_clicked =
false;
115 for (TrackViewList::iterator i = sorted.begin(); i != sorted.end(); ++i) {
118 passed_clicked =
true;
122 if (passed_clicked) {
123 if ((*i)->hidden()) {
126 if (selection->selected (*i)) {
128 }
else if (!(*i)->hidden()) {
129 to_be_added.push_back (*i);
136 for (TrackViewList::reverse_iterator r = sorted.rbegin(); r != sorted.rend(); ++r) {
139 passed_clicked =
true;
143 if (passed_clicked) {
145 if ((*r)->hidden()) {
149 if (selection->selected (*r)) {
151 }
else if (!(*r)->hidden()) {
152 to_be_added.push_back (*r);
158 if (!to_be_added.empty()) {
159 selection->
add (to_be_added);
170 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
171 if ((*i)->marked_for_display()) {
172 visible_views.push_back (*i);
175 selection->set (visible_views);
184 if (!clicked_axisview) {
189 if (clicked_routeview) {
190 group = clicked_routeview->route()->route_group();
193 bool had_tracks = !selection->tracks.
empty();
194 RouteGroup& arg (_session->all_route_group());
198 if (selection->selected (clicked_axisview)) {
199 if (arg.is_select() && arg.is_active()) {
200 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
201 selection->remove(*i);
203 }
else if (group && group->
is_active()) {
204 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
205 if ((*i)->route_group() == group) {
206 selection->remove(*i);
210 selection->remove (clicked_axisview);
213 if (arg.is_select() && arg.is_active()) {
214 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
217 }
else if (group && group->
is_active()) {
218 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
219 if ((*i)->route_group() == group) {
224 selection->add (clicked_axisview);
230 if (!had_tracks && arg.is_select() && arg.is_active()) {
234 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
237 }
else if (group && group->
is_active()) {
238 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
239 if ((*i)->route_group() == group) {
244 selection->add (clicked_axisview);
250 if (!had_tracks && arg.is_select() && arg.is_active()) {
254 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
257 }
else if (group && group->
is_active()) {
258 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
259 if ((*i)->route_group() == group) {
264 selection->set (clicked_axisview);
277 begin_reversible_selection_op (
X_(
"Set Selected Track"));
281 if (selection->selected (&view)) {
283 selection->remove (&view);
286 selection->add (&view);
291 if (!selection->selected (&view)) {
292 selection->add (&view);
297 selection->set (&view);
301 extend_selection_to_track (view);
305 commit_reversible_selection_op ();
311 if (!clicked_routeview) {
319 set_selected_track (*clicked_routeview, op, no_remove);
325 if (!clicked_control_point) {
332 selection->set (clicked_control_point);
337 selection->add (clicked_control_point);
348 if (press && !selection->selected (clicked_control_point)) {
353 selection->toggle (clicked_control_point);
354 _control_point_toggled_on_press =
true;
355 }
else if (!press && !_control_point_toggled_on_press) {
357 selection->toggle (clicked_control_point);
360 _control_point_toggled_on_press =
false;
374 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
375 if ((*i)->y_position() < _visible_canvas_height) {
394 if (route_basis == 0) {
398 set<RouteTimeAxisView*> tracks;
399 tracks.insert (route_basis);
408 for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) {
417 uint32_t
const sz = tracks.size ();
419 for (set<RouteTimeAxisView*>::iterator i = tracks.begin(); i != tracks.end(); ++i) {
436 set<boost::shared_ptr<Playlist> > playlists;
438 if (route_basis == 0) {
442 set<RouteTimeAxisView*> tracks;
443 tracks.insert (route_basis);
452 for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) {
459 if (playlists.insert (t->
playlist()).second) {
474 uint32_t
const sz = tracks.size ();
476 for (set<RouteTimeAxisView*>::iterator i = tracks.begin(); i != tracks.end(); ++i) {
485 vector<boost::shared_ptr<Region> > results;
489 if ((tr = tv.
track()) == 0) {
505 all_equivs->push_back (marv);
517 equivalent_regions.push_back (basis);
525 for (RegionSelection::const_iterator i = basis.begin(); i != basis.end(); ++i) {
527 vector<RegionView*> eq;
529 mapover_tracks_with_unique_playlists (
531 &(*i)->get_time_axis_view(), prop);
533 for (vector<RegionView*>::iterator j = eq.begin(); j != eq.end(); ++j) {
546 int region_count = 0;
548 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
552 if ((tatv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
555 vector<boost::shared_ptr<Region> > results;
559 if ((tr = tatv->
track()) == 0) {
584 vector<RegionView*> all_equivalent_regions;
587 if (!clicked_regionview || !clicked_routeview) {
592 button_release_can_deselect =
false;
599 if (selection->selected (clicked_regionview)) {
606 button_release_can_deselect =
true;
609 if (button_release_can_deselect) {
613 selection->remove (clicked_regionview);
620 button_release_can_deselect =
false;
628 if (selection->selected (clicked_routeview)) {
631 all_equivalent_regions.push_back (clicked_regionview);
636 if (!all_equivalent_regions.empty()) {
640 selection->add (all_equivalent_regions);
646 if (!selection->selected (clicked_regionview)) {
648 selection->set (all_equivalent_regions);
656 selection->set(all_equivalent_regions);
669 list<Selectable*> results;
672 bool same_track =
false;
679 for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
680 if (&(*x)->get_time_axis_view() == &clicked_regionview->get_time_axis_view()) {
682 if ((*x)->region()->last_frame() > last_frame) {
683 last_frame = (*x)->region()->last_frame();
686 if ((*x)->region()->first_frame() < first_frame) {
687 first_frame = (*x)->region()->first_frame();
698 switch (clicked_regionview->region()->coverage (first_frame, last_frame)) {
700 if (last_frame < clicked_regionview->region()->first_frame()) {
701 first_frame = last_frame;
702 last_frame = clicked_regionview->region()->last_frame();
704 last_frame = first_frame;
705 first_frame = clicked_regionview->region()->first_frame();
710 if (last_frame < clicked_regionview->region()->first_frame()) {
711 first_frame = last_frame;
712 last_frame = clicked_regionview->region()->last_frame();
714 last_frame = first_frame;
715 first_frame = clicked_regionview->region()->first_frame();
720 if (last_frame < clicked_regionview->region()->first_frame()) {
721 first_frame = last_frame;
722 last_frame = clicked_regionview->region()->last_frame();
724 last_frame = first_frame;
725 first_frame = clicked_regionview->region()->first_frame();
745 first_frame = clicked_regionview->region()->position();
746 last_frame = clicked_regionview->region()->last_frame();
748 for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
749 if ((*i)->region()->position() < first_frame) {
750 first_frame = (*i)->region()->position();
752 if ((*i)->region()->last_frame() + 1 > last_frame) {
753 last_frame = (*i)->region()->last_frame();
760 set<RouteTimeAxisView*> relevant_tracks;
762 for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
765 relevant_tracks.insert (r);
769 set<RouteTimeAxisView*> already_in_selection;
771 if (relevant_tracks.empty()) {
780 if (!selection->selected (clicked_regionview)) {
788 relevant_tracks.insert (rtv);
795 int distance = INT_MAX;
798 for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
802 if (artv && artv != rtv) {
804 pair<set<RouteTimeAxisView*>::iterator,
bool> result;
806 result = already_in_selection.insert (artv);
815 if (abs (d) < distance) {
833 for (TrackViewList::iterator x = track_views.begin(); x != track_views.end(); ++x) {
835 if (artv && artv != rtv) {
839 if (k >= okey && k <= key) {
847 if (find (already_in_selection.begin(),
848 already_in_selection.end(),
849 artv) == already_in_selection.end()) {
851 relevant_tracks.insert (artv);
865 for (set<RouteTimeAxisView*>::iterator t = relevant_tracks.begin(); t != relevant_tracks.end(); ++t) {
866 (*t)->get_selectables (first_frame, last_frame, -1.0, -1.0, results);
873 for (list<Selectable*>::iterator x = results.begin(); x != results.end(); ++x) {
876 if ((arv = dynamic_cast<RegionView*>(*x)) != 0) {
877 regions.push_back (arv);
881 if (!regions.empty()) {
882 selection->add (regions);
895 vector<RegionView*> all_equivalent_regions;
897 get_regions_corresponding_to (region, all_equivalent_regions, region->
whole_file());
899 if (all_equivalent_regions.empty()) {
903 begin_reversible_selection_op (
X_(
"set selected regions"));
908 selection->toggle (all_equivalent_regions);
911 selection->set (all_equivalent_regions);
914 selection->add (all_equivalent_regions);
917 selection->add (all_equivalent_regions);
921 commit_reversible_selection_op () ;
942 if (selection->regions.size() > 1) {
946 begin_reversible_selection_op (
X_(
"set selected regions"));
950 commit_reversible_selection_op () ;
958 switch (selection->tracks.size()) {
962 set_selected_mixer_strip (*(selection->tracks.front()));
966 RouteNotificationListPtr routes (
new RouteNotificationList);
968 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
970 bool yn = (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
972 (*i)->set_selected (yn);
975 for (TimeAxisView::Children::iterator j = c.begin(); j != c.end(); ++j) {
976 (*j)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), j->get()) != selection->tracks.end());
980 (*i)->reshow_selection (selection->time);
982 (*i)->hide_selection ();
989 routes->push_back (rtav->
route());
998 ControlProtocol::TrackSelectionChanged (routes);
1017 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
1018 (*i)->hide_selection ();
1021 for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
1022 (*i)->show_selection (selection->time);
1025 if (selection->time.empty()) {
1036 Glib::ListHandle<Glib::RefPtr<Action> > all = _region_actions->get_actions ();
1038 for (Glib::ListHandle<Glib::RefPtr<Action> >::iterator i = all.begin(); i != all.end(); ++i) {
1039 (*i)->set_sensitive (s);
1042 _all_region_actions_sensitized = s;
1058 sensitize_all_region_actions (!rs.empty ());
1060 _ignore_region_action =
true;
1064 bool have_audio =
false;
1065 bool have_multichannel_audio =
false;
1066 bool have_midi =
false;
1067 bool have_locked =
false;
1068 bool have_unlocked =
false;
1069 bool have_video_locked =
false;
1070 bool have_video_unlocked =
false;
1071 bool have_position_lock_style_audio =
false;
1072 bool have_position_lock_style_music =
false;
1073 bool have_muted =
false;
1074 bool have_unmuted =
false;
1075 bool have_opaque =
false;
1076 bool have_non_opaque =
false;
1077 bool have_not_at_natural_position =
false;
1078 bool have_envelope_active =
false;
1079 bool have_envelope_inactive =
false;
1080 bool have_non_unity_scale_amplitude =
false;
1081 bool have_compound_regions =
false;
1082 bool have_inactive_fade_in =
false;
1083 bool have_inactive_fade_out =
false;
1084 bool have_active_fade_in =
false;
1085 bool have_active_fade_out =
false;
1087 for (list<RegionView*>::const_iterator i = rs.begin(); i != rs.end(); ++i) {
1095 have_multichannel_audio =
true;
1099 if (boost::dynamic_pointer_cast<MidiRegion> (r)) {
1104 have_compound_regions =
true;
1110 have_unlocked =
true;
1114 have_video_locked =
true;
1116 have_video_unlocked =
true;
1120 have_position_lock_style_music =
true;
1122 have_position_lock_style_audio =
true;
1128 have_unmuted =
true;
1134 have_non_opaque =
true;
1138 have_not_at_natural_position =
true;
1143 have_envelope_active =
true;
1145 have_envelope_inactive =
true;
1149 have_non_unity_scale_amplitude =
true;
1153 have_active_fade_in =
true;
1155 have_inactive_fade_in =
true;
1159 have_active_fade_out =
true;
1161 have_inactive_fade_out =
true;
1166 if (rs.size() > 1) {
1167 _region_actions->get_action(
"show-region-list-editor")->set_sensitive (
false);
1168 _region_actions->get_action(
"show-region-properties")->set_sensitive (
false);
1169 _region_actions->get_action(
"rename-region")->set_sensitive (
false);
1174 _region_actions->get_action(
"combine-regions")->set_sensitive (
true);
1176 _region_actions->get_action(
"combine-regions")->set_sensitive (
false);
1178 }
else if (rs.size() == 1) {
1179 _region_actions->get_action(
"add-range-markers-from-region")->set_sensitive (
false);
1180 _region_actions->get_action(
"close-region-gaps")->set_sensitive (
false);
1181 _region_actions->get_action(
"combine-regions")->set_sensitive (
false);
1184 if (!have_multichannel_audio) {
1185 _region_actions->get_action(
"split-multichannel-region")->set_sensitive (
false);
1189 editor_menu_actions->get_action(
"RegionMenuMIDI")->set_sensitive (
false);
1190 _region_actions->get_action(
"show-region-list-editor")->set_sensitive (
false);
1191 _region_actions->get_action(
"quantize-region")->set_sensitive (
false);
1192 _region_actions->get_action(
"legatize-region")->set_sensitive (
false);
1193 _region_actions->get_action(
"remove-overlap")->set_sensitive (
false);
1194 _region_actions->get_action(
"fork-region")->set_sensitive (
false);
1195 _region_actions->get_action(
"insert-patch-change-context")->set_sensitive (
false);
1196 _region_actions->get_action(
"insert-patch-change")->set_sensitive (
false);
1197 _region_actions->get_action(
"transpose-region")->set_sensitive (
false);
1199 editor_menu_actions->get_action(
"RegionMenuMIDI")->set_sensitive (
true);
1203 if (_edit_point == EditAtMouse) {
1204 _region_actions->get_action(
"set-region-sync-position")->set_sensitive (
false);
1205 _region_actions->get_action(
"trim-front")->set_sensitive (
false);
1206 _region_actions->get_action(
"trim-back")->set_sensitive (
false);
1207 _region_actions->get_action(
"split-region")->set_sensitive (
false);
1208 _region_actions->get_action(
"place-transient")->set_sensitive (
false);
1211 if (have_compound_regions) {
1212 _region_actions->get_action(
"uncombine-regions")->set_sensitive (
true);
1214 _region_actions->get_action(
"uncombine-regions")->set_sensitive (
false);
1219 if (have_envelope_active && !have_envelope_inactive) {
1220 Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-region-gain-envelope-active"))->set_active ();
1221 }
else if (have_envelope_active && have_envelope_inactive) {
1227 _region_actions->get_action(
"analyze-region")->set_sensitive (
false);
1228 _region_actions->get_action(
"reset-region-gain-envelopes")->set_sensitive (
false);
1229 _region_actions->get_action(
"toggle-region-gain-envelope-active")->set_sensitive (
false);
1230 _region_actions->get_action(
"pitch-shift-region")->set_sensitive (
false);
1234 if (!have_non_unity_scale_amplitude || !have_audio) {
1235 _region_actions->get_action(
"reset-region-scale-amplitude")->set_sensitive (
false);
1238 Glib::RefPtr<ToggleAction> a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-region-lock"));
1239 a->set_active (have_locked && !have_unlocked);
1240 if (have_locked && have_unlocked) {
1244 a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-region-video-lock"));
1245 a->set_active (have_video_locked && !have_video_unlocked);
1246 if (have_video_locked && have_video_unlocked) {
1250 a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-region-lock-style"));
1251 a->set_active (have_position_lock_style_music && !have_position_lock_style_audio);
1253 if (have_position_lock_style_music && have_position_lock_style_audio) {
1257 a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-region-mute"));
1258 a->set_active (have_muted && !have_unmuted);
1259 if (have_muted && have_unmuted) {
1263 a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-opaque-region"));
1264 a->set_active (have_opaque && !have_non_opaque);
1265 if (have_opaque && have_non_opaque) {
1269 if (!have_not_at_natural_position) {
1270 _region_actions->get_action(
"naturalize-region")->set_sensitive (
false);
1274 if (_edit_point == EditAtMouse || _regions->get_single_selection() == 0 || selection->tracks.empty()) {
1275 _region_actions->get_action(
"insert-region-from-region-list")->set_sensitive (
false);
1277 _region_actions->get_action(
"insert-region-from-region-list")->set_sensitive (
true);
1280 a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-region-fade-in"));
1281 a->set_active (have_active_fade_in && !have_inactive_fade_in);
1282 if (have_active_fade_in && have_inactive_fade_in) {
1286 a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-region-fade-out"));
1287 a->set_active (have_active_fade_out && !have_inactive_fade_out);
1289 if (have_active_fade_out && have_inactive_fade_out) {
1293 bool const have_active_fade = have_active_fade_in || have_active_fade_out;
1294 bool const have_inactive_fade = have_inactive_fade_in || have_inactive_fade_out;
1296 a = Glib::RefPtr<ToggleAction>::cast_dynamic (_region_actions->get_action(
"toggle-region-fades"));
1297 a->set_active (have_active_fade && !have_inactive_fade);
1299 if (have_active_fade && have_inactive_fade) {
1303 _ignore_region_action =
false;
1305 _all_region_actions_sensitized =
false;
1312 _regions->block_change_connection (
true);
1313 editor_regions_selection_changed_connection.block(
true);
1315 if (_region_selection_change_updates_region_list) {
1316 _regions->unselect_all ();
1319 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
1320 (*i)->set_selected_regionviews (selection->regions);
1323 if (_region_selection_change_updates_region_list) {
1324 _regions->set_selected (selection->regions);
1327 _regions->block_change_connection (
false);
1328 editor_regions_selection_changed_connection.block(
false);
1330 if (!_all_region_actions_sensitized) {
1334 sensitize_all_region_actions (
true);
1337 if (_session && !_session->transport_rolling() && !selection->regions.empty()) {
1338 maybe_locate_with_edit_preroll (selection->regions.start());
1345 for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
1346 (*i)->set_selected_points (selection->points);
1353 list<Selectable *> touched;
1355 if (!clicked_routeview) {
1359 begin_reversible_selection_op (
X_(
"Select All in Track"));
1361 clicked_routeview->get_selectables (0,
max_framepos, 0, DBL_MAX, touched);
1365 selection->add (touched);
1368 selection->set (touched);
1374 selection->add (touched);
1378 commit_reversible_selection_op ();
1384 bool selected =
false;
1386 for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
1406 list<Selectable *> touched;
1410 if (internal_editing() && select_all_internal_edit(op)) {
1414 for (TrackViewList::iterator iter = ts.begin(); iter != ts.end(); ++iter) {
1415 if ((*iter)->hidden()) {
1418 (*iter)->get_selectables (0,
max_framepos, 0, DBL_MAX, touched);
1419 selection->
add (*iter);
1423 begin_reversible_selection_op (
X_(
"select all"));
1426 selection->add (touched);
1429 selection->add (touched);
1432 selection->set (touched);
1438 commit_reversible_selection_op ();
1444 list<Selectable *> touched;
1446 if (!clicked_routeview) {
1450 begin_reversible_selection_op (
X_(
"Invert Selection in Track"));
1451 clicked_routeview->get_inverted_selectables (*selection, touched);
1452 selection->set (touched);
1453 commit_reversible_selection_op ();
1459 list<Selectable *> touched;
1461 if (internal_editing()) {
1462 for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
1471 for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) {
1472 if ((*iter)->hidden()) {
1475 (*iter)->get_inverted_selectables (*selection, touched);
1478 begin_reversible_selection_op (
X_(
"Invert Selection"));
1479 selection->set (touched);
1480 commit_reversible_selection_op ();
1493 list<Selectable*> found;
1495 for (TrackViewList::const_iterator iter = tracklist.begin(); iter != tracklist.end(); ++iter) {
1497 if ((*iter)->hidden()) {
1501 (*iter)->get_selectables (start, end, top, bot, found);
1504 if (found.empty()) {
1505 selection->clear_objects();
1506 selection->clear_time ();
1511 list<Selectable*>::iterator i = found.begin();
1512 while (i != found.end() && (*i)->get_selected()) {
1516 if (i == found.end()) {
1521 begin_reversible_selection_op (
X_(
"select all within"));
1524 selection->add (found);
1527 selection->toggle (found);
1530 selection->set (found);
1537 commit_reversible_selection_op ();
1543 if (selection->regions.empty()) {
1549 set<TimeAxisView*> tracks;
1551 for (RegionSelection::const_iterator r = selection->regions.begin(); r != selection->regions.end(); ++r) {
1552 tracks.insert (&(*r)->get_time_axis_view());
1556 tvl.insert (tvl.end(), tracks.begin(), tracks.end());
1560 selection->set (selection->regions.start(), selection->regions.end_frame());
1564 selection->set (tvl);
1567 set_mouse_mode (Editing::MouseRange,
false);
1576 if ((location = _session->locations()->auto_punch_location()) == 0) {
1580 set_selection_from_range (*location);
1588 if ((location = _session->locations()->auto_loop_location()) == 0) {
1591 set_selection_from_range (*location);
1597 begin_reversible_selection_op (
X_(
"set selection from range"));
1598 selection->set (loc.
start(), loc.
end());
1599 commit_reversible_selection_op ();
1602 set_mouse_mode (Editing::MouseRange,
false);
1609 list<Selectable *> touched;
1611 if (selection->time.empty()) {
1616 framepos_t end = selection->time[clicked_selection].end;
1618 if (end - start < 1) {
1624 if (selection->tracks.empty()) {
1627 ts = &selection->tracks;
1630 for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
1631 if ((*iter)->hidden()) {
1634 (*iter)->get_selectables (start, end - 1, 0, DBL_MAX, touched);
1637 begin_reversible_selection_op (
X_(
"select all from range"));
1638 selection->set (touched);
1639 commit_reversible_selection_op ();
1646 Location* location = _session->locations()->auto_punch_location();
1647 list<Selectable *> touched;
1649 if (location == 0 || (location->
end() - location->
start() <= 1)) {
1656 if (selection->tracks.empty()) {
1659 ts = &selection->tracks;
1662 for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
1663 if ((*iter)->hidden()) {
1666 (*iter)->get_selectables (location->
start(), location->
end() - 1, 0, DBL_MAX, touched);
1668 begin_reversible_selection_op (
X_(
"select all from punch"));
1669 selection->set (touched);
1670 commit_reversible_selection_op ();
1677 Location* location = _session->locations()->auto_loop_location();
1678 list<Selectable *> touched;
1680 if (location == 0 || (location->
end() - location->
start() <= 1)) {
1687 if (selection->tracks.empty()) {
1690 ts = &selection->tracks;
1693 for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
1694 if ((*iter)->hidden()) {
1697 (*iter)->get_selectables (location->
start(), location->
end() - 1, 0, DBL_MAX, touched);
1699 begin_reversible_selection_op (
X_(
"select all from loop"));
1700 selection->set (touched);
1701 commit_reversible_selection_op ();
1710 list<Selectable *> touched;
1714 end = _session->current_end_frame();
1724 if (internal_editing()) {
1725 for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
1735 begin_reversible_selection_op (
X_(
"select all after cursor"));
1737 begin_reversible_selection_op (
X_(
"select all before cursor"));
1742 if (selection->tracks.empty()) {
1745 ts = &selection->tracks;
1748 for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
1749 if ((*iter)->hidden()) {
1752 (*iter)->get_selectables (start, end, 0, DBL_MAX, touched);
1754 selection->set (touched);
1755 commit_reversible_selection_op ();
1763 list<Selectable *> touched;
1767 end = _session->current_end_frame();
1777 if (internal_editing()) {
1778 for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
1786 begin_reversible_selection_op (
X_(
"select all after edit"));
1788 begin_reversible_selection_op (
X_(
"select all before edit"));
1793 if (selection->tracks.empty()) {
1796 ts = &selection->tracks;
1799 for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
1800 if ((*iter)->hidden()) {
1803 (*iter)->get_selectables (start, end, 0, DBL_MAX, touched);
1805 selection->set (touched);
1806 commit_reversible_selection_op ();
1814 list<Selectable *> touched;
1816 if (!get_edit_op_range (start, end)) {
1820 if (internal_editing()) {
1821 for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
1830 if (selection->tracks.empty()) {
1833 ts = &selection->tracks;
1836 for (TrackViewList::iterator iter = ts->begin(); iter != ts->end(); ++iter) {
1837 if ((*iter)->hidden()) {
1840 (*iter)->get_selectables (start, end, 0, DBL_MAX, touched, within);
1843 begin_reversible_selection_op (
X_(
"Select all Selectables Between"));
1844 selection->set (touched);
1845 commit_reversible_selection_op ();
1854 if ( !selection->time.empty() ) {
1855 selection->clear_time ();
1858 if (!get_edit_op_range (start, end)) {
1862 begin_reversible_selection_op (
X_(
"Select Range Between"));
1863 set_mouse_mode (MouseRange);
1864 selection->set (start, end);
1865 commit_reversible_selection_op ();
1876 if ( (mouse_mode == MouseRange || get_smart_mode() ) && !selection->time.empty()) {
1878 start = selection->time.start();
1879 end = selection->time.end_frame();
1972 begin_reversible_selection_op (
X_(
"Deselect All"));
1973 selection->clear ();
1974 commit_reversible_selection_op ();
1980 begin_reversible_selection_op (
X_(
"Select Range"));
1981 selection->add (clicked_axisview);
1982 selection->time.clear ();
1983 long ret = selection->set (s, e);
1984 commit_reversible_selection_op ();
RegionView * find_view(boost::shared_ptr< const ARDOUR::Region >)
std::vector< Glib::RefPtr< Gtk::Action > > track_selection_sensitive_actions
void set_selected_track_as_side_effect(Selection::Operation op)
TimeAxisView & get_time_axis_view() const
bool select_all_internal_edit(Selection::Operation)
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r)
std::vector< Glib::RefPtr< Gtk::Action > > time_selection_sensitive_actions
std::vector< boost::shared_ptr< TimeAxisView > > Children
virtual TrackViewList add(TrackViewList const &)
void track_selection_changed()
void get_region_list_equivalent_regions(boost::shared_ptr< Region >, std::vector< boost::shared_ptr< Region > > &)
bool extend_selection_to_track(TimeAxisView &)
void set_selected_track(TimeAxisView &, Selection::Operation op=Selection::Set, bool no_remove=false)
bool set_selected_regionview_from_map_event(GdkEventAny *, StreamView *, boost::weak_ptr< ARDOUR::Region >)
StreamView * view() const
void select_all_selectables_using_edit(bool)
void select_range_between()
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
double y_position() const
bool fade_in_active() const
void set_selected_track_from_click(bool press, Selection::Operation op=Selection::Set, bool no_remove=false)
void select_all_selectables_using_loop()
LIBGTKMM2EXT_API void set_sensitive(std::vector< Glib::RefPtr< Gtk::Action > > &actions, bool)
void sensitize_all_region_actions(bool)
void set_selected_regionview_from_region_list(boost::shared_ptr< ARDOUR::Region > region, Selection::Operation op=Selection::Set)
void select_range(framepos_t start, framepos_t end)
framepos_t current_frame() const
bool get_edit_op_range(framepos_t &start, framepos_t &end) const
uint32_t order_key() const
void point_selection_changed()
bool video_locked() const
boost::shared_ptr< ARDOUR::Region > region() const
void set_selection_from_loop()
bool fade_out_active() const
void set_selection_from_punch()
void set_selection_from_range(ARDOUR::Location &)
gain_t scale_amplitude() const
boost::shared_ptr< ARDOUR::Track > track() const
bool enabled_property(PBD::PropertyID)
void get_equivalent_regions(RegionView *rv, std::vector< RegionView * > &, PBD::PropertyID) const
void select_all_objects(Selection::Operation op)
boost::shared_ptr< Playlist > playlist()
void swap(shared_ptr< T > &a, shared_ptr< T > &b)
void select_all_selectables_between(bool within)
void mapover_tracks(sigc::slot< void, RouteTimeAxisView &, uint32_t > sl, TimeAxisView *, PBD::PropertyID) const
void mapover_tracks_with_unique_playlists(sigc::slot< void, RouteTimeAxisView &, uint32_t > sl, TimeAxisView *, PBD::PropertyID) const
void get_onscreen_tracks(TrackViewList &)
LIBARDOUR_API PBD::PropertyDescriptor< bool > regions
void select_all_in_track(Selection::Operation op)
PositionLockStyle position_lock_style() const
LIBARDOUR_API PBD::PropertyDescriptor< bool > active
LIBARDOUR_API RuntimeProfile * Profile
void mapped_get_equivalent_regions(RouteTimeAxisView &, uint32_t, RegionView *, std::vector< RegionView * > *) const
void get_equivalent_regions(boost::shared_ptr< Region >, std::vector< boost::shared_ptr< Region > > &)
void time_selection_changed()
void select_all_selectables_using_punch()
uint32_t n_channels() const
RouteGroup * route_group() const
LIBARDOUR_API PBD::PropertyDescriptor< bool > select
bool set_selected_regionview_from_click(bool press, Selection::Operation op=Selection::Set)
bool set_selected_control_point_from_click(bool press, Selection::Operation op=Selection::Set)
int get_regionview_count_from_region_list(boost::shared_ptr< ARDOUR::Region >)
static const framepos_t max_framepos
void region_selection_changed()
void invert_selection_in_track()
void sensitize_the_right_region_actions()
long select_range(framepos_t, framepos_t)
void set_selection_from_region()
void select_all_selectables_using_time_selection()
void select_all_selectables_using_cursor(EditorCursor *, bool)
bool at_natural_position() const
boost::shared_ptr< ARDOUR::Route > route() const
void select_all_within(framepos_t, framepos_t, double, double, TrackViewList const &, Selection::Operation, bool)
bool envelope_active() const