#include <algorithm>
#include <cstdlib>
-#include <pbd/stacktrace.h>
+#include "pbd/stacktrace.h"
-#include <ardour/diskstream.h>
-#include <ardour/playlist.h>
-#include <ardour/route_group.h>
-#include <ardour/profile.h>
+#include "ardour/diskstream.h"
+#include "ardour/playlist.h"
+#include "ardour/route_group.h"
+#include "ardour/profile.h"
#include "editor.h"
#include "actions.h"
struct TrackViewByPositionSorter
{
bool operator() (const TimeAxisView* a, const TimeAxisView *b) {
- return a->y_position < b->y_position;
+ return a->y_position() < b->y_position();
}
};
return select_all_within (x1, x2, y1, y2, selection->tracks, op);
}
+void
+Editor::get_onscreen_tracks (TrackViewList& tvl)
+{
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ if ((*i)->y_position() < _canvas_height) {
+ tvl.push_back (*i);
+ }
+ }
+}
+
void
Editor::get_relevant_tracks (set<RouteTimeAxisView*>& relevant_tracks)
{
continue;
}
- RouteGroup* group = rtv->route()->edit_group();
+ RouteGroup* group = rtv->route()->route_group();
if (group && group->is_active()) {
if ((trtv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
- if (trtv->route()->edit_group() == group) {
+ if (trtv->route()->route_group() == group) {
relevant_tracks.insert (trtv);
}
}
/**
* Call a slot for a given `basis' track and also for any track that is in the same
- * active edit group.
+ * active route group with the `select' property.
* @param sl Slot to call.
* @param basis Basis track.
*/
/* always call for the basis */
tracks.insert (route_basis);
- RouteGroup* group = route_basis->route()->edit_group();
- if (group && group->is_active()) {
+ RouteGroup* group = route_basis->route()->route_group();
+ if (group && group->active_property (RouteGroup::Select)) {
/* the basis is a member of an active edit group; find other members */
for (TrackViewList::const_iterator i = track_views.begin(); i != track_views.end(); ++i) {
RouteTimeAxisView* v = dynamic_cast<RouteTimeAxisView*> (*i);
- if (v && v->route()->edit_group() == group) {
+ if (v && v->route()->route_group() == group) {
tracks.insert (v);
}
}
case Selection::Set:
if (!selection->selected (clicked_regionview)) {
- selection->set (clicked_regionview);
+ get_equivalent_regions (clicked_regionview, all_equivalent_regions);
+ selection->set (all_equivalent_regions);
commit = true;
} else {
/* no commit necessary: clicked on an already selected region */
void
Editor::region_selection_changed ()
{
+ region_list_change_connection.block(true);
+ editor_regions_selection_changed_connection.block(true);
+
+ region_list_display.get_selection()->unselect_all();
+
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+
(*i)->set_selected_regionviews (selection->regions);
+ set_selected_in_region_list(selection->regions);
+
}
sensitize_the_right_region_actions (!selection->regions.empty());
zoomed_to_region = false;
+
+ region_list_change_connection.block(false);
+ editor_regions_selection_changed_connection.block(false);
}
void
}
void
-Editor::select_all_selectables_using_cursor (Cursor *cursor, bool after)
+Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
{
nframes64_t start;
nframes64_t end;