mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-09 00:04:56 +01:00
Apply Select property of route groups at the Selection object level. Accordingly
simplify code related to selecting tracks. Add a TrackViewList object rather than "abusing" TrackSelection in lots of places. git-svn-id: svn://localhost/ardour2/branches/3.0@6358 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
8687895abb
commit
034db5fb1c
17 changed files with 192 additions and 240 deletions
|
|
@ -3572,43 +3572,6 @@ Editor::mouse_select_button_release (GdkEventButton* ev)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Editor::TrackViewList *
|
|
||||||
Editor::get_valid_views (TimeAxisView* track, RouteGroup* group)
|
|
||||||
{
|
|
||||||
TrackViewList::iterator i;
|
|
||||||
|
|
||||||
TrackViewList* v = new TrackViewList;
|
|
||||||
|
|
||||||
if (track == 0 && group == 0) {
|
|
||||||
|
|
||||||
/* all views */
|
|
||||||
|
|
||||||
for (i = track_views.begin(); i != track_views.end (); ++i) {
|
|
||||||
v->push_back (*i);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if ((track != 0 && group == 0) || (track != 0 && group != 0 && !group->active_property (RouteGroup::Select))) {
|
|
||||||
|
|
||||||
/* just the view for this track
|
|
||||||
*/
|
|
||||||
|
|
||||||
v->push_back (track);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/* views for all tracks in the route group */
|
|
||||||
|
|
||||||
for (i = track_views.begin(); i != track_views.end (); ++i) {
|
|
||||||
|
|
||||||
if (group == 0 || ((*i)->route_group() == group && group->active_property (RouteGroup::Select))) {
|
|
||||||
v->push_back (*i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::set_zoom_focus (ZoomFocus f)
|
Editor::set_zoom_focus (ZoomFocus f)
|
||||||
{
|
{
|
||||||
|
|
@ -4268,7 +4231,7 @@ Editor::post_zoom ()
|
||||||
|
|
||||||
if (mouse_mode == MouseRange && selection->time.start () != selection->time.end_frame ()) {
|
if (mouse_mode == MouseRange && selection->time.start () != selection->time.end_frame ()) {
|
||||||
if (!selection->tracks.empty()) {
|
if (!selection->tracks.empty()) {
|
||||||
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
for (TrackViewList::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
||||||
(*i)->reshow_selection (selection->time);
|
(*i)->reshow_selection (selection->time);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -4412,7 +4375,7 @@ struct EditorOrderTimeAxisSorter {
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::sort_track_selection (TrackSelection* sel)
|
Editor::sort_track_selection (TrackViewList* sel)
|
||||||
{
|
{
|
||||||
EditorOrderTimeAxisSorter cmp;
|
EditorOrderTimeAxisSorter cmp;
|
||||||
|
|
||||||
|
|
@ -4532,9 +4495,9 @@ Editor::set_punch_range (nframes64_t start, nframes64_t end, string cmd)
|
||||||
* @param ts Tracks to look on; if this is empty, all tracks are examined.
|
* @param ts Tracks to look on; if this is empty, all tracks are examined.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelection& ts) const
|
Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackViewList& ts) const
|
||||||
{
|
{
|
||||||
const TrackSelection* tracks;
|
const TrackViewList* tracks;
|
||||||
|
|
||||||
if (ts.empty()) {
|
if (ts.empty()) {
|
||||||
tracks = &track_views;
|
tracks = &track_views;
|
||||||
|
|
@ -4542,7 +4505,7 @@ Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelec
|
||||||
tracks = &ts;
|
tracks = &ts;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (TrackSelection::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
|
for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
|
||||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
|
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
|
||||||
if (rtv) {
|
if (rtv) {
|
||||||
boost::shared_ptr<Diskstream> ds;
|
boost::shared_ptr<Diskstream> ds;
|
||||||
|
|
@ -4567,9 +4530,9 @@ Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelec
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackSelection& ts) const
|
Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackViewList& ts) const
|
||||||
{
|
{
|
||||||
const TrackSelection* tracks;
|
const TrackViewList* tracks;
|
||||||
|
|
||||||
if (ts.empty()) {
|
if (ts.empty()) {
|
||||||
tracks = &track_views;
|
tracks = &track_views;
|
||||||
|
|
@ -4577,7 +4540,7 @@ Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackSe
|
||||||
tracks = &ts;
|
tracks = &ts;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (TrackSelection::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
|
for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) {
|
||||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
|
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(*t);
|
||||||
if (rtv) {
|
if (rtv) {
|
||||||
boost::shared_ptr<Diskstream> ds;
|
boost::shared_ptr<Diskstream> ds;
|
||||||
|
|
@ -4624,22 +4587,25 @@ Editor::get_regions_for_action (RegionSelection& rs, bool allow_entered, bool al
|
||||||
|
|
||||||
if (allow_edit_position) {
|
if (allow_edit_position) {
|
||||||
|
|
||||||
TrackSelection tracks = selection->tracks;
|
TrackViewList tracks = selection->tracks;
|
||||||
|
|
||||||
/* tracks is currently the set of selected tracks; add any other tracks that
|
/* tracks is currently the set of selected tracks; add any other tracks that
|
||||||
* have regions that are in the same edit-activated route group as one of
|
* have regions that are in the same edit-activated route group as one of
|
||||||
* our regions */
|
* our regions */
|
||||||
for (RegionSelection::iterator i = rs.begin (); i != rs.end(); ++i) {
|
for (RegionSelection::iterator i = rs.begin (); i != rs.end(); ++i) {
|
||||||
|
|
||||||
RouteGroup* g = (*i)->get_time_axis_view().route_group ();
|
RouteGroup* g = (*i)->get_time_axis_view().route_group ();
|
||||||
if (g && g->active_property (RouteGroup::Edit)) {
|
if (g && g->active_property (RouteGroup::Edit)) {
|
||||||
tracks.add (axis_views_from_routes (g->route_list()));
|
tracks.add (axis_views_from_routes (g->route_list()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now find regions that are at the edit position on those tracks */
|
if (!tracks.empty()) {
|
||||||
nframes64_t const where = get_preferred_edit_position ();
|
/* now find regions that are at the edit position on those tracks */
|
||||||
get_regions_at (rs, where, tracks);
|
nframes64_t const where = get_preferred_edit_position ();
|
||||||
|
get_regions_at (rs, where, tracks);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4750,7 +4716,7 @@ Editor::add_to_idle_resize (TimeAxisView* view, int32_t h)
|
||||||
min_resulting = min (min_resulting, int32_t (_pending_resize_view->current_height()) + _pending_resize_amount);
|
min_resulting = min (min_resulting, int32_t (_pending_resize_view->current_height()) + _pending_resize_amount);
|
||||||
|
|
||||||
if (selection->tracks.contains (_pending_resize_view)) {
|
if (selection->tracks.contains (_pending_resize_view)) {
|
||||||
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
for (TrackViewList::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
||||||
min_resulting = min (min_resulting, int32_t ((*i)->current_height()) + _pending_resize_amount);
|
min_resulting = min (min_resulting, int32_t ((*i)->current_height()) + _pending_resize_amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4774,7 +4740,7 @@ Editor::idle_resize ()
|
||||||
if (dynamic_cast<AutomationTimeAxisView*> (_pending_resize_view) == 0 &&
|
if (dynamic_cast<AutomationTimeAxisView*> (_pending_resize_view) == 0 &&
|
||||||
selection->tracks.contains (_pending_resize_view)) {
|
selection->tracks.contains (_pending_resize_view)) {
|
||||||
|
|
||||||
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
for (TrackViewList::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
||||||
if (*i != _pending_resize_view) {
|
if (*i != _pending_resize_view) {
|
||||||
(*i)->idle_resize ((*i)->current_height() + _pending_resize_amount);
|
(*i)->idle_resize ((*i)->current_height() + _pending_resize_amount);
|
||||||
}
|
}
|
||||||
|
|
@ -4824,10 +4790,10 @@ Editor::axis_view_from_route (boost::shared_ptr<Route> r) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackSelection
|
TrackViewList
|
||||||
Editor::axis_views_from_routes (boost::shared_ptr<RouteList> r) const
|
Editor::axis_views_from_routes (boost::shared_ptr<RouteList> r) const
|
||||||
{
|
{
|
||||||
TrackSelection t;
|
TrackViewList t;
|
||||||
|
|
||||||
for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
|
for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
|
||||||
TimeAxisView* tv = axis_view_from_route (*i);
|
TimeAxisView* tv = axis_view_from_route (*i);
|
||||||
|
|
@ -4949,7 +4915,7 @@ Editor::hide_track_in_display (TimeAxisView& tv, bool /*temponly*/)
|
||||||
bool
|
bool
|
||||||
Editor::sync_track_view_list_and_routes ()
|
Editor::sync_track_view_list_and_routes ()
|
||||||
{
|
{
|
||||||
track_views = TrackSelection (_routes->views ());
|
track_views = TrackViewList (_routes->views ());
|
||||||
|
|
||||||
_summary->set_dirty ();
|
_summary->set_dirty ();
|
||||||
_group_tabs->set_dirty ();
|
_group_tabs->set_dirty ();
|
||||||
|
|
@ -4984,7 +4950,7 @@ Editor::get_route_view_by_id (PBD::ID& id)
|
||||||
void
|
void
|
||||||
Editor::fit_route_group (RouteGroup *g)
|
Editor::fit_route_group (RouteGroup *g)
|
||||||
{
|
{
|
||||||
TrackSelection ts = axis_views_from_routes (g->route_list ());
|
TrackViewList ts = axis_views_from_routes (g->route_list ());
|
||||||
fit_tracks (ts);
|
fit_tracks (ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,6 @@ class TempoLines;
|
||||||
class TimeAxisView;
|
class TimeAxisView;
|
||||||
class TimeFXDialog;
|
class TimeFXDialog;
|
||||||
class TimeSelection;
|
class TimeSelection;
|
||||||
class TrackSelection;
|
|
||||||
class EditorGroupTabs;
|
class EditorGroupTabs;
|
||||||
class EditorRoutes;
|
class EditorRoutes;
|
||||||
class EditorRouteGroups;
|
class EditorRouteGroups;
|
||||||
|
|
@ -330,7 +329,6 @@ class Editor : public PublicEditor
|
||||||
void copy_playlists (TimeAxisView* v);
|
void copy_playlists (TimeAxisView* v);
|
||||||
void clear_playlists (TimeAxisView* v);
|
void clear_playlists (TimeAxisView* v);
|
||||||
|
|
||||||
TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0);
|
|
||||||
void get_onscreen_tracks (TrackViewList&);
|
void get_onscreen_tracks (TrackViewList&);
|
||||||
|
|
||||||
Width editor_mixer_strip_width;
|
Width editor_mixer_strip_width;
|
||||||
|
|
@ -433,6 +431,8 @@ class Editor : public PublicEditor
|
||||||
|
|
||||||
void center_screen (nframes64_t);
|
void center_screen (nframes64_t);
|
||||||
|
|
||||||
|
TrackViewList axis_views_from_routes (boost::shared_ptr<ARDOUR::RouteList>) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void map_transport_state ();
|
void map_transport_state ();
|
||||||
void map_position_change (nframes64_t);
|
void map_position_change (nframes64_t);
|
||||||
|
|
@ -560,10 +560,8 @@ class Editor : public PublicEditor
|
||||||
CrossfadeView* clicked_crossfadeview;
|
CrossfadeView* clicked_crossfadeview;
|
||||||
ControlPoint* clicked_control_point;
|
ControlPoint* clicked_control_point;
|
||||||
|
|
||||||
void sort_track_selection (TrackSelection* sel = 0);
|
void sort_track_selection (TrackViewList* sel = 0);
|
||||||
|
|
||||||
void get_relevant_tracks (std::set<RouteTimeAxisView*>& relevant_tracks) const;
|
|
||||||
void get_equivalent_tracks (RouteTimeAxisView*, std::set<RouteTimeAxisView*> &, ARDOUR::RouteGroup::Property) const;
|
|
||||||
void get_equivalent_regions (RegionView* rv, std::vector<RegionView*> &, ARDOUR::RouteGroup::Property) const;
|
void get_equivalent_regions (RegionView* rv, std::vector<RegionView*> &, ARDOUR::RouteGroup::Property) const;
|
||||||
RegionSelection get_equivalent_regions (RegionSelection &, ARDOUR::RouteGroup::Property) const;
|
RegionSelection get_equivalent_regions (RegionSelection &, ARDOUR::RouteGroup::Property) const;
|
||||||
void mapover_tracks (sigc::slot<void,RouteTimeAxisView&,uint32_t> sl, TimeAxisView*, ARDOUR::RouteGroup::Property) const;
|
void mapover_tracks (sigc::slot<void,RouteTimeAxisView&,uint32_t> sl, TimeAxisView*, ARDOUR::RouteGroup::Property) const;
|
||||||
|
|
@ -951,9 +949,8 @@ class Editor : public PublicEditor
|
||||||
TrackViewList track_views;
|
TrackViewList track_views;
|
||||||
std::pair<TimeAxisView*, ARDOUR::layer_t> trackview_by_y_position (double);
|
std::pair<TimeAxisView*, ARDOUR::layer_t> trackview_by_y_position (double);
|
||||||
TimeAxisView* axis_view_from_route (boost::shared_ptr<ARDOUR::Route>) const;
|
TimeAxisView* axis_view_from_route (boost::shared_ptr<ARDOUR::Route>) const;
|
||||||
TrackSelection axis_views_from_routes (boost::shared_ptr<ARDOUR::RouteList>) const;
|
|
||||||
|
|
||||||
TrackSelection get_tracks_for_range_action () const;
|
TrackViewList get_tracks_for_range_action () const;
|
||||||
|
|
||||||
static Gdk::Cursor* cross_hair_cursor;
|
static Gdk::Cursor* cross_hair_cursor;
|
||||||
static Gdk::Cursor* trimmer_cursor;
|
static Gdk::Cursor* trimmer_cursor;
|
||||||
|
|
@ -1953,8 +1950,8 @@ public:
|
||||||
|
|
||||||
bool get_edit_op_range (nframes64_t& start, nframes64_t& end) const;
|
bool get_edit_op_range (nframes64_t& start, nframes64_t& end) const;
|
||||||
|
|
||||||
void get_regions_at (RegionSelection&, nframes64_t where, const TrackSelection& ts) const;
|
void get_regions_at (RegionSelection&, nframes64_t where, const TrackViewList& ts) const;
|
||||||
void get_regions_after (RegionSelection&, nframes64_t where, const TrackSelection& ts) const;
|
void get_regions_after (RegionSelection&, nframes64_t where, const TrackViewList& ts) const;
|
||||||
|
|
||||||
void get_regions_for_action (RegionSelection&, bool allow_entered = false, bool allow_edit_position = true);
|
void get_regions_for_action (RegionSelection&, bool allow_entered = false, bool allow_edit_position = true);
|
||||||
|
|
||||||
|
|
@ -1974,7 +1971,7 @@ public:
|
||||||
BundleManager* _bundle_manager;
|
BundleManager* _bundle_manager;
|
||||||
GlobalPortMatrixWindow* _global_port_matrix[ARDOUR::DataType::num_types];
|
GlobalPortMatrixWindow* _global_port_matrix[ARDOUR::DataType::num_types];
|
||||||
|
|
||||||
void fit_tracks (TrackSelection &);
|
void fit_tracks (TrackViewList &);
|
||||||
void fit_selected_tracks ();
|
void fit_selected_tracks ();
|
||||||
void set_track_height (uint32_t h);
|
void set_track_height (uint32_t h);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -274,7 +274,7 @@ RegionMotionDrag::get_time_axis_view_summary ()
|
||||||
|
|
||||||
/* get a bitmask representing the visible tracks */
|
/* get a bitmask representing the visible tracks */
|
||||||
|
|
||||||
for (Editor::TrackViewList::iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
for (TrackViewList::iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
||||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
|
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
|
||||||
TimeAxisView::Children children_list;
|
TimeAxisView::Children children_list;
|
||||||
|
|
||||||
|
|
@ -1516,7 +1516,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
|
||||||
bool obey_snap = !Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier());
|
bool obey_snap = !Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier());
|
||||||
|
|
||||||
/* snap modifier works differently here..
|
/* snap modifier works differently here..
|
||||||
its' current state has to be passed to the
|
its current state has to be passed to the
|
||||||
various trim functions in order to work properly
|
various trim functions in order to work properly
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ EditorGroupTabs::compute_tabs () const
|
||||||
tab.group = 0;
|
tab.group = 0;
|
||||||
|
|
||||||
int32_t y = 0;
|
int32_t y = 0;
|
||||||
for (Editor::TrackViewList::iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
for (TrackViewList::iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
||||||
|
|
||||||
if ((*i)->marked_for_display() == false) {
|
if ((*i)->marked_for_display() == false) {
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -118,7 +118,7 @@ EditorGroupTabs::routes_for_tab (Tab const * t) const
|
||||||
RouteList routes;
|
RouteList routes;
|
||||||
int32_t y = 0;
|
int32_t y = 0;
|
||||||
|
|
||||||
for (Editor::TrackViewList::iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
for (TrackViewList::iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
||||||
|
|
||||||
if ((*i)->marked_for_display() == false) {
|
if ((*i)->marked_for_display() == false) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -2661,7 +2661,7 @@ Editor::region_from_selection ()
|
||||||
nframes64_t start = selection->time[clicked_selection].start;
|
nframes64_t start = selection->time[clicked_selection].start;
|
||||||
nframes64_t end = selection->time[clicked_selection].end;
|
nframes64_t end = selection->time[clicked_selection].end;
|
||||||
|
|
||||||
TrackSelection tracks = get_tracks_for_range_action ();
|
TrackViewList tracks = get_tracks_for_range_action ();
|
||||||
|
|
||||||
nframes64_t selection_cnt = end - start + 1;
|
nframes64_t selection_cnt = end - start + 1;
|
||||||
|
|
||||||
|
|
@ -2762,10 +2762,10 @@ add_if_covered (RegionView* rv, const AudioRange* ar, RegionSelection* rs)
|
||||||
* - all tracks
|
* - all tracks
|
||||||
* @return tracks.
|
* @return tracks.
|
||||||
*/
|
*/
|
||||||
TrackSelection
|
TrackViewList
|
||||||
Editor::get_tracks_for_range_action () const
|
Editor::get_tracks_for_range_action () const
|
||||||
{
|
{
|
||||||
TrackSelection t;
|
TrackViewList t;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
|
|
||||||
|
|
@ -2801,7 +2801,7 @@ Editor::separate_regions_between (const TimeSelection& ts)
|
||||||
boost::shared_ptr<Playlist> playlist;
|
boost::shared_ptr<Playlist> playlist;
|
||||||
RegionSelection new_selection;
|
RegionSelection new_selection;
|
||||||
|
|
||||||
TrackSelection tmptracks = get_tracks_for_range_action ();
|
TrackViewList tmptracks = get_tracks_for_range_action ();
|
||||||
sort_track_selection (&tmptracks);
|
sort_track_selection (&tmptracks);
|
||||||
|
|
||||||
for (TrackSelection::iterator i = tmptracks.begin(); i != tmptracks.end(); ++i) {
|
for (TrackSelection::iterator i = tmptracks.begin(); i != tmptracks.end(); ++i) {
|
||||||
|
|
@ -2965,7 +2965,7 @@ Editor::crop_region_to (nframes64_t start, nframes64_t end)
|
||||||
{
|
{
|
||||||
vector<boost::shared_ptr<Playlist> > playlists;
|
vector<boost::shared_ptr<Playlist> > playlists;
|
||||||
boost::shared_ptr<Playlist> playlist;
|
boost::shared_ptr<Playlist> playlist;
|
||||||
TrackSelection* ts;
|
TrackViewList* ts;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
ts = &track_views;
|
ts = &track_views;
|
||||||
|
|
@ -4230,8 +4230,8 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
|
||||||
void
|
void
|
||||||
Editor::cut_copy_ranges (CutCopyOp op)
|
Editor::cut_copy_ranges (CutCopyOp op)
|
||||||
{
|
{
|
||||||
TrackSelection* ts;
|
TrackViewList* ts;
|
||||||
TrackSelection entered;
|
TrackViewList entered;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
if (!entered_track) {
|
if (!entered_track) {
|
||||||
|
|
@ -4289,8 +4289,8 @@ Editor::paste_internal (nframes64_t position, float times)
|
||||||
|
|
||||||
begin_reversible_command (_("paste"));
|
begin_reversible_command (_("paste"));
|
||||||
|
|
||||||
TrackSelection ts;
|
TrackViewList ts;
|
||||||
TrackSelection::iterator i;
|
TrackViewList::iterator i;
|
||||||
size_t nth;
|
size_t nth;
|
||||||
|
|
||||||
/* get everything in the correct order */
|
/* get everything in the correct order */
|
||||||
|
|
@ -6380,7 +6380,7 @@ Editor::fit_selected_tracks ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::fit_tracks (TrackSelection & tracks)
|
Editor::fit_tracks (TrackViewList & tracks)
|
||||||
{
|
{
|
||||||
if (tracks.empty()) {
|
if (tracks.empty()) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -306,7 +306,7 @@ EditorRouteGroups::new_from_rec_enabled ()
|
||||||
{
|
{
|
||||||
RouteList rl;
|
RouteList rl;
|
||||||
|
|
||||||
for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) {
|
for (TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) {
|
||||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
|
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
|
||||||
if (rtv && rtv->route()->record_enabled()) {
|
if (rtv && rtv->route()->record_enabled()) {
|
||||||
rl.push_back (rtv->route());
|
rl.push_back (rtv->route());
|
||||||
|
|
@ -325,7 +325,7 @@ EditorRouteGroups::new_from_soloed ()
|
||||||
{
|
{
|
||||||
RouteList rl;
|
RouteList rl;
|
||||||
|
|
||||||
for (Editor::TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) {
|
for (TrackViewList::const_iterator i = _editor->get_track_views().begin(); i != _editor->get_track_views().end(); ++i) {
|
||||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
|
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
|
||||||
if (rtv && !rtv->route()->is_master() && rtv->route()->soloed()) {
|
if (rtv && !rtv->route()->is_master() && rtv->route()->soloed()) {
|
||||||
rl.push_back (rtv->route());
|
rl.push_back (rtv->route());
|
||||||
|
|
@ -520,13 +520,13 @@ EditorRouteGroups::row_change (const Gtk::TreeModel::Path&, const Gtk::TreeModel
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((*iter)[_columns.is_visible]) {
|
if ((*iter)[_columns.is_visible]) {
|
||||||
for (Editor::TrackViewList::const_iterator j = _editor->get_track_views().begin(); j != _editor->get_track_views().end(); ++j) {
|
for (TrackViewList::const_iterator j = _editor->get_track_views().begin(); j != _editor->get_track_views().end(); ++j) {
|
||||||
if ((*j)->route_group() == group) {
|
if ((*j)->route_group() == group) {
|
||||||
_editor->_routes->show_track_in_display (**j);
|
_editor->_routes->show_track_in_display (**j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (Editor::TrackViewList::const_iterator j = _editor->get_track_views().begin(); j != _editor->get_track_views().end(); ++j) {
|
for (TrackViewList::const_iterator j = _editor->get_track_views().begin(); j != _editor->get_track_views().end(); ++j) {
|
||||||
if ((*j)->route_group() == group) {
|
if ((*j)->route_group() == group) {
|
||||||
_editor->hide_track_in_display (**j);
|
_editor->hide_track_in_display (**j);
|
||||||
}
|
}
|
||||||
|
|
@ -688,7 +688,7 @@ EditorRouteGroups::collect (RouteGroup* g)
|
||||||
int const N = routes->size ();
|
int const N = routes->size ();
|
||||||
|
|
||||||
RouteList::iterator i = routes->begin ();
|
RouteList::iterator i = routes->begin ();
|
||||||
Editor::TrackViewList::const_iterator j = _editor->get_track_views().begin();
|
TrackViewList::const_iterator j = _editor->get_track_views().begin();
|
||||||
|
|
||||||
int diff = 0;
|
int diff = 0;
|
||||||
int coll = -1;
|
int coll = -1;
|
||||||
|
|
|
||||||
|
|
@ -262,48 +262,6 @@ Editor::get_onscreen_tracks (TrackViewList& tvl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Given a track, find any other tracks that are in the same active route group with a given property.
|
|
||||||
* @param basis Base track.
|
|
||||||
* @param equivs Filled with the base track and the found tracks.
|
|
||||||
* @param prop Property to look for in route groups.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
|
||||||
Editor::get_equivalent_tracks (RouteTimeAxisView* basis, set<RouteTimeAxisView*> & equivs, RouteGroup::Property prop) const
|
|
||||||
{
|
|
||||||
equivs.insert (basis);
|
|
||||||
|
|
||||||
RouteGroup* group = basis->route()->route_group();
|
|
||||||
if (group && group->active_property (prop)) {
|
|
||||||
|
|
||||||
/* the basis is a member of an active route group, with the appropriate
|
|
||||||
properties; 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()->route_group() == group) {
|
|
||||||
equivs.insert (v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Find tracks that are selected, and also those that are in the same `selection'-enabled route
|
|
||||||
* group as one that is selected.
|
|
||||||
* @param relevant_tracks set to add tracks to.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
|
||||||
Editor::get_relevant_tracks (set<RouteTimeAxisView*>& relevant_tracks) const
|
|
||||||
{
|
|
||||||
for (TrackSelection::iterator ti = selection->tracks.begin(); ti != selection->tracks.end(); ++ti) {
|
|
||||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*ti);
|
|
||||||
if (rtv) {
|
|
||||||
get_equivalent_tracks (rtv, relevant_tracks, RouteGroup::Select);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Call a slot for a given `basis' track and also for any track that is in the same
|
/** Call a slot for a given `basis' track and also for any track that is in the same
|
||||||
* active route group with a particular set of properties.
|
* active route group with a particular set of properties.
|
||||||
*
|
*
|
||||||
|
|
@ -321,7 +279,21 @@ Editor::mapover_tracks (sigc::slot<void, RouteTimeAxisView&, uint32_t> sl, TimeA
|
||||||
}
|
}
|
||||||
|
|
||||||
set<RouteTimeAxisView*> tracks;
|
set<RouteTimeAxisView*> tracks;
|
||||||
get_equivalent_tracks (route_basis, tracks, prop);
|
tracks.insert (route_basis);
|
||||||
|
|
||||||
|
RouteGroup* group = route_basis->route()->route_group();
|
||||||
|
if (group && group->active_property (prop)) {
|
||||||
|
|
||||||
|
/* the basis is a member of an active route group, with the appropriate
|
||||||
|
properties; 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()->route_group() == group) {
|
||||||
|
tracks.insert (v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* call the slots */
|
/* call the slots */
|
||||||
uint32_t const sz = tracks.size ();
|
uint32_t const sz = tracks.size ();
|
||||||
|
|
@ -490,8 +462,6 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op,
|
||||||
|
|
||||||
/* add all the equivalent regions, but only on button press */
|
/* add all the equivalent regions, but only on button press */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!all_equivalent_regions.empty()) {
|
if (!all_equivalent_regions.empty()) {
|
||||||
commit = true;
|
commit = true;
|
||||||
}
|
}
|
||||||
|
|
@ -611,16 +581,23 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op,
|
||||||
/* 2. find all the tracks we should select in */
|
/* 2. find all the tracks we should select in */
|
||||||
|
|
||||||
set<RouteTimeAxisView*> relevant_tracks;
|
set<RouteTimeAxisView*> relevant_tracks;
|
||||||
set<RouteTimeAxisView*> already_in_selection;
|
|
||||||
|
|
||||||
get_relevant_tracks (relevant_tracks);
|
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
|
||||||
|
RouteTimeAxisView* r = dynamic_cast<RouteTimeAxisView*> (*i);
|
||||||
|
if (r) {
|
||||||
|
relevant_tracks.insert (r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set<RouteTimeAxisView*> already_in_selection;
|
||||||
|
|
||||||
if (relevant_tracks.empty()) {
|
if (relevant_tracks.empty()) {
|
||||||
|
|
||||||
/* no relevant tracks -> no tracks selected .. thus .. if
|
/* no tracks selected .. thus .. if the
|
||||||
the regionview we're in isn't selected (i.e. we're
|
regionview we're in isn't selected
|
||||||
about to extend to it), then find all tracks between
|
(i.e. we're about to extend to it), then
|
||||||
the this one and any selected ones.
|
find all tracks between the this one and
|
||||||
|
any selected ones.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!selection->selected (entered_regionview)) {
|
if (!selection->selected (entered_regionview)) {
|
||||||
|
|
@ -654,7 +631,6 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op,
|
||||||
if (result.second) {
|
if (result.second) {
|
||||||
/* newly added to already_in_selection */
|
/* newly added to already_in_selection */
|
||||||
|
|
||||||
|
|
||||||
int d = artv->route()->order_key ("editor");
|
int d = artv->route()->order_key ("editor");
|
||||||
|
|
||||||
d -= key;
|
d -= key;
|
||||||
|
|
@ -709,8 +685,6 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op,
|
||||||
one that was clicked.
|
one that was clicked.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
get_relevant_tracks (relevant_tracks);
|
|
||||||
|
|
||||||
for (set<RouteTimeAxisView*>::iterator t = relevant_tracks.begin(); t != relevant_tracks.end(); ++t) {
|
for (set<RouteTimeAxisView*>::iterator t = relevant_tracks.begin(); t != relevant_tracks.end(); ++t) {
|
||||||
(*t)->get_selectables (first_frame, last_frame, -1.0, -1.0, results);
|
(*t)->get_selectables (first_frame, last_frame, -1.0, -1.0, results);
|
||||||
}
|
}
|
||||||
|
|
@ -1116,7 +1090,7 @@ Editor::select_all_selectables_using_time_selection ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackSelection* ts;
|
TrackViewList* ts;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
ts = &track_views;
|
ts = &track_views;
|
||||||
|
|
@ -1148,7 +1122,7 @@ Editor::select_all_selectables_using_punch()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackSelection* ts;
|
TrackViewList* ts;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
ts = &track_views;
|
ts = &track_views;
|
||||||
|
|
@ -1179,7 +1153,7 @@ Editor::select_all_selectables_using_loop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackSelection* ts;
|
TrackViewList* ts;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
ts = &track_views;
|
ts = &track_views;
|
||||||
|
|
@ -1221,7 +1195,7 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackSelection* ts;
|
TrackViewList* ts;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
ts = &track_views;
|
ts = &track_views;
|
||||||
|
|
@ -1261,7 +1235,7 @@ Editor::select_all_selectables_using_edit (bool after)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackSelection* ts;
|
TrackViewList* ts;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
ts = &track_views;
|
ts = &track_views;
|
||||||
|
|
@ -1290,7 +1264,7 @@ Editor::select_all_selectables_between (bool /*within*/)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackSelection* ts;
|
TrackViewList* ts;
|
||||||
|
|
||||||
if (selection->tracks.empty()) {
|
if (selection->tracks.empty()) {
|
||||||
ts = &track_views;
|
ts = &track_views;
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ EditorSummary::render (cairo_t* cr)
|
||||||
|
|
||||||
int h = 0;
|
int h = 0;
|
||||||
int max_height = 0;
|
int max_height = 0;
|
||||||
for (PublicEditor::TrackViewList::const_iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
for (TrackViewList::const_iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
||||||
int const t = (*i)->effective_height ();
|
int const t = (*i)->effective_height ();
|
||||||
h += t;
|
h += t;
|
||||||
max_height = max (max_height, t);
|
max_height = max (max_height, t);
|
||||||
|
|
@ -163,7 +163,7 @@ EditorSummary::render (cairo_t* cr)
|
||||||
/* render regions */
|
/* render regions */
|
||||||
|
|
||||||
double y = 0;
|
double y = 0;
|
||||||
for (PublicEditor::TrackViewList::const_iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
for (TrackViewList::const_iterator i = _editor->track_views.begin(); i != _editor->track_views.end(); ++i) {
|
||||||
StreamView* s = (*i)->view ();
|
StreamView* s = (*i)->view ();
|
||||||
|
|
||||||
if (s) {
|
if (s) {
|
||||||
|
|
|
||||||
|
|
@ -88,8 +88,6 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
|
||||||
PublicEditor ();
|
PublicEditor ();
|
||||||
virtual ~PublicEditor ();
|
virtual ~PublicEditor ();
|
||||||
|
|
||||||
typedef TrackSelection TrackViewList;
|
|
||||||
|
|
||||||
/** @return Singleton PublicEditor instance */
|
/** @return Singleton PublicEditor instance */
|
||||||
static PublicEditor& instance () { return *_instance; }
|
static PublicEditor& instance () { return *_instance; }
|
||||||
|
|
||||||
|
|
@ -244,7 +242,6 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
|
||||||
virtual double get_physical_screen_width() const = 0;
|
virtual double get_physical_screen_width() const = 0;
|
||||||
virtual void ensure_float (Gtk::Window&) = 0;
|
virtual void ensure_float (Gtk::Window&) = 0;
|
||||||
virtual void show_window () = 0;
|
virtual void show_window () = 0;
|
||||||
virtual TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0) = 0;
|
|
||||||
virtual nframes64_t leftmost_position() const = 0;
|
virtual nframes64_t leftmost_position() const = 0;
|
||||||
virtual nframes64_t current_page_frames() const = 0;
|
virtual nframes64_t current_page_frames() const = 0;
|
||||||
virtual void temporal_zoom_step (bool coarser) = 0;
|
virtual void temporal_zoom_step (bool coarser) = 0;
|
||||||
|
|
@ -353,6 +350,9 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
|
||||||
|
|
||||||
virtual void center_screen (nframes64_t) = 0;
|
virtual void center_screen (nframes64_t) = 0;
|
||||||
|
|
||||||
|
virtual TrackViewList axis_views_from_routes (boost::shared_ptr<ARDOUR::RouteList>) const = 0;
|
||||||
|
virtual TrackViewList const & get_track_views () = 0;
|
||||||
|
|
||||||
/// Singleton instance, set up by Editor::Editor()
|
/// Singleton instance, set up by Editor::Editor()
|
||||||
|
|
||||||
static PublicEditor* _instance;
|
static PublicEditor* _instance;
|
||||||
|
|
|
||||||
|
|
@ -1176,33 +1176,23 @@ RouteTimeAxisView::selection_click (GdkEventButton* ev)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PublicEditor::TrackViewList* tracks = _editor.get_valid_views (this, _route->route_group());
|
|
||||||
|
|
||||||
switch (ArdourKeyboard::selection_type (ev->state)) {
|
switch (ArdourKeyboard::selection_type (ev->state)) {
|
||||||
case Selection::Toggle:
|
case Selection::Toggle:
|
||||||
_editor.get_selection().toggle (*tracks);
|
_editor.get_selection().toggle (this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Selection::Set:
|
case Selection::Set:
|
||||||
_editor.get_selection().set (*tracks);
|
_editor.get_selection().set (this);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Selection::Extend:
|
case Selection::Extend:
|
||||||
if (tracks->size() > 1) {
|
_editor.extend_selection_to_track (*this);
|
||||||
/* add each one, do not "extend" */
|
|
||||||
_editor.get_selection().add (*tracks);
|
|
||||||
} else {
|
|
||||||
/* extend to the single track */
|
|
||||||
_editor.extend_selection_to_track (*tracks->front());
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Selection::Add:
|
case Selection::Add:
|
||||||
_editor.get_selection().add (*tracks);
|
_editor.get_selection().add (this);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete tracks;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -197,9 +197,9 @@ Selection::toggle (boost::shared_ptr<Playlist> pl)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::toggle (const list<TimeAxisView*>& track_list)
|
Selection::toggle (const TrackViewList& track_list)
|
||||||
{
|
{
|
||||||
for (list<TimeAxisView*>::const_iterator i = track_list.begin(); i != track_list.end(); ++i) {
|
for (TrackViewList::const_iterator i = track_list.begin(); i != track_list.end(); ++i) {
|
||||||
toggle ((*i));
|
toggle ((*i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -334,9 +334,9 @@ Selection::add (const list<boost::shared_ptr<Playlist> >& pllist)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::add (const list<TimeAxisView*>& track_list)
|
Selection::add (const TrackViewList& track_list)
|
||||||
{
|
{
|
||||||
list<TimeAxisView*> added = tracks.add (track_list);
|
TrackViewList added = tracks.add (track_list);
|
||||||
|
|
||||||
for (list<TimeAxisView*>::const_iterator i = added.begin(); i != added.end(); ++i) {
|
for (list<TimeAxisView*>::const_iterator i = added.begin(); i != added.end(); ++i) {
|
||||||
void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
|
void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
|
||||||
|
|
@ -351,12 +351,9 @@ Selection::add (const list<TimeAxisView*>& track_list)
|
||||||
void
|
void
|
||||||
Selection::add (TimeAxisView* track)
|
Selection::add (TimeAxisView* track)
|
||||||
{
|
{
|
||||||
if (find (tracks.begin(), tracks.end(), track) == tracks.end()) {
|
TrackViewList tr;
|
||||||
void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
|
tr.push_back (track);
|
||||||
track->GoingAway.connect (sigc::bind (sigc::mem_fun (*this, pmf), track));
|
add (tr);
|
||||||
tracks.push_back (track);
|
|
||||||
TracksChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -516,15 +513,14 @@ Selection::remove (TimeAxisView* track)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::remove (const list<TimeAxisView*>& track_list)
|
Selection::remove (const TrackViewList& track_list)
|
||||||
{
|
{
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
for (list<TimeAxisView*>::const_iterator i = track_list.begin(); i != track_list.end(); ++i) {
|
for (TrackViewList::const_iterator i = track_list.begin(); i != track_list.end(); ++i) {
|
||||||
|
|
||||||
list<TimeAxisView*>::iterator x;
|
TrackViewList::iterator x = find (tracks.begin(), tracks.end(), *i);
|
||||||
|
if (x != tracks.end()) {
|
||||||
if ((x = find (tracks.begin(), tracks.end(), (*i))) != tracks.end()) {
|
|
||||||
tracks.erase (x);
|
tracks.erase (x);
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
@ -669,7 +665,7 @@ Selection::set (TimeAxisView* track)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::set (const list<TimeAxisView*>& track_list)
|
Selection::set (const TrackViewList& track_list)
|
||||||
{
|
{
|
||||||
clear_tracks ();
|
clear_tracks ();
|
||||||
add (track_list);
|
add (track_list);
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ class Selection : public sigc::trackable
|
||||||
MidiRegionSelection midi_regions;
|
MidiRegionSelection midi_regions;
|
||||||
MidiNoteSelection midi_notes;
|
MidiNoteSelection midi_notes;
|
||||||
|
|
||||||
Selection (PublicEditor const * e) : editor (e), next_time_id (0) {
|
Selection (PublicEditor const * e) : tracks (e), editor (e), next_time_id (0) {
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,7 +112,7 @@ class Selection : public sigc::trackable
|
||||||
void toggle (std::list<Selectable*>&);
|
void toggle (std::list<Selectable*>&);
|
||||||
|
|
||||||
void set (TimeAxisView*);
|
void set (TimeAxisView*);
|
||||||
void set (const std::list<TimeAxisView*>&);
|
void set (const TrackViewList&);
|
||||||
void set (const MidiNoteSelection&);
|
void set (const MidiNoteSelection&);
|
||||||
void set (RegionView*, bool also_clear_tracks = true);
|
void set (RegionView*, bool also_clear_tracks = true);
|
||||||
void set (MidiRegionView*);
|
void set (MidiRegionView*);
|
||||||
|
|
@ -126,7 +126,7 @@ class Selection : public sigc::trackable
|
||||||
void set (const RegionSelection&);
|
void set (const RegionSelection&);
|
||||||
|
|
||||||
void toggle (TimeAxisView*);
|
void toggle (TimeAxisView*);
|
||||||
void toggle (const std::list<TimeAxisView*>&);
|
void toggle (const TrackViewList&);
|
||||||
void toggle (const MidiNoteSelection&);
|
void toggle (const MidiNoteSelection&);
|
||||||
void toggle (RegionView*);
|
void toggle (RegionView*);
|
||||||
void toggle (MidiRegionView*);
|
void toggle (MidiRegionView*);
|
||||||
|
|
@ -140,7 +140,7 @@ class Selection : public sigc::trackable
|
||||||
void toggle (Marker*);
|
void toggle (Marker*);
|
||||||
|
|
||||||
void add (TimeAxisView*);
|
void add (TimeAxisView*);
|
||||||
void add (const std::list<TimeAxisView*>&);
|
void add (const TrackViewList&);
|
||||||
void add (const MidiNoteSelection&);
|
void add (const MidiNoteSelection&);
|
||||||
void add (RegionView*);
|
void add (RegionView*);
|
||||||
void add (MidiRegionView*);
|
void add (MidiRegionView*);
|
||||||
|
|
@ -154,7 +154,7 @@ class Selection : public sigc::trackable
|
||||||
void add (const std::list<Marker*>&);
|
void add (const std::list<Marker*>&);
|
||||||
void add (const RegionSelection&);
|
void add (const RegionSelection&);
|
||||||
void remove (TimeAxisView*);
|
void remove (TimeAxisView*);
|
||||||
void remove (const std::list<TimeAxisView*>&);
|
void remove (const TrackViewList&);
|
||||||
void remove (const MidiNoteSelection&);
|
void remove (const MidiNoteSelection&);
|
||||||
void remove (RegionView*);
|
void remove (RegionView*);
|
||||||
void remove (MidiRegionView*);
|
void remove (MidiRegionView*);
|
||||||
|
|
|
||||||
|
|
@ -424,8 +424,7 @@ TimeAxisView::set_height(uint32_t h)
|
||||||
bool
|
bool
|
||||||
TimeAxisView::name_entry_key_release (GdkEventKey* ev)
|
TimeAxisView::name_entry_key_release (GdkEventKey* ev)
|
||||||
{
|
{
|
||||||
PublicEditor::TrackViewList *allviews = 0;
|
TrackViewList::iterator i;
|
||||||
PublicEditor::TrackViewList::iterator i;
|
|
||||||
|
|
||||||
switch (ev->keyval) {
|
switch (ev->keyval) {
|
||||||
case GDK_Escape:
|
case GDK_Escape:
|
||||||
|
|
@ -440,38 +439,40 @@ TimeAxisView::name_entry_key_release (GdkEventKey* ev)
|
||||||
*/
|
*/
|
||||||
case GDK_ISO_Left_Tab:
|
case GDK_ISO_Left_Tab:
|
||||||
case GDK_Tab:
|
case GDK_Tab:
|
||||||
|
{
|
||||||
name_entry_changed ();
|
name_entry_changed ();
|
||||||
allviews = _editor.get_valid_views (0);
|
TrackViewList const & allviews = _editor.get_track_views ();
|
||||||
if (allviews != 0) {
|
TrackViewList::const_iterator i = find (allviews.begin(), allviews.end(), this);
|
||||||
i = find (allviews->begin(), allviews->end(), this);
|
if (ev->keyval == GDK_Tab) {
|
||||||
if (ev->keyval == GDK_Tab) {
|
if (i != allviews.end()) {
|
||||||
if (i != allviews->end()) {
|
do {
|
||||||
do {
|
if (++i == allviews.end()) {
|
||||||
if (++i == allviews->end()) { return true; }
|
return true;
|
||||||
} while((*i)->hidden());
|
}
|
||||||
}
|
} while((*i)->hidden());
|
||||||
} else {
|
|
||||||
if (i != allviews->begin()) {
|
|
||||||
do {
|
|
||||||
if (i == allviews->begin()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
--i;
|
|
||||||
} while ((*i)->hidden());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (i != allviews.begin()) {
|
||||||
/* resize to show editable name display */
|
do {
|
||||||
|
if (i == allviews.begin()) {
|
||||||
if ((*i)->current_height() <= hSmaller) {
|
return true;
|
||||||
(*i)->set_height (hSmaller);
|
}
|
||||||
|
--i;
|
||||||
|
} while ((*i)->hidden());
|
||||||
}
|
}
|
||||||
|
|
||||||
(*i)->name_entry.grab_focus();
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
|
|
||||||
|
/* resize to show editable name display */
|
||||||
|
|
||||||
|
if ((*i)->current_height() <= hSmaller) {
|
||||||
|
(*i)->set_height (hSmaller);
|
||||||
|
}
|
||||||
|
|
||||||
|
(*i)->name_entry.grab_focus();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
case GDK_Up:
|
case GDK_Up:
|
||||||
case GDK_Down:
|
case GDK_Down:
|
||||||
name_entry_changed ();
|
name_entry_changed ();
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,57 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2000-2009 Paul Davis
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include "ardour/route_group.h"
|
||||||
#include "track_selection.h"
|
#include "track_selection.h"
|
||||||
|
#include "time_axis_view.h"
|
||||||
|
#include "public_editor.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
TrackSelection::TrackSelection (list<TimeAxisView*> const &t)
|
TrackSelection::TrackSelection (PublicEditor const * e, TrackViewList const &t)
|
||||||
: list<TimeAxisView*> (t)
|
: TrackViewList (t)
|
||||||
|
, _editor (e)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
list<TimeAxisView*>
|
TrackViewList
|
||||||
TrackSelection::add (list<TimeAxisView*> const & t)
|
TrackSelection::add (TrackViewList const & t)
|
||||||
{
|
{
|
||||||
list<TimeAxisView*> added;
|
TrackViewList added = TrackViewList::add (t);
|
||||||
|
|
||||||
for (TrackSelection::const_iterator i = t.begin(); i != t.end(); ++i) {
|
for (TrackSelection::const_iterator i = t.begin(); i != t.end(); ++i) {
|
||||||
if (!contains (*i)) {
|
|
||||||
added.push_back (*i);
|
/* select anything in the same select-enabled route group */
|
||||||
push_back (*i);
|
ARDOUR::RouteGroup* rg = (*i)->route_group ();
|
||||||
|
if (rg && rg->property (ARDOUR::RouteGroup::Select)) {
|
||||||
|
TrackViewList tr = _editor->axis_views_from_routes (rg->route_list ());
|
||||||
|
for (TrackViewList::iterator j = tr.begin(); j != tr.end(); ++j) {
|
||||||
|
if (!contains (*j)) {
|
||||||
|
added.push_back (*j);
|
||||||
|
push_back (*j);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return added;
|
return added;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
TrackSelection::contains (TimeAxisView const * t) const
|
|
||||||
{
|
|
||||||
return find (begin(), end(), t) != end();
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2000-2007 Paul Davis
|
Copyright (C) 2000-2009 Paul Davis
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -20,18 +20,20 @@
|
||||||
#ifndef __ardour_gtk_track_selection_h__
|
#ifndef __ardour_gtk_track_selection_h__
|
||||||
#define __ardour_gtk_track_selection_h__
|
#define __ardour_gtk_track_selection_h__
|
||||||
|
|
||||||
#include <list>
|
#include "track_view_list.h"
|
||||||
|
|
||||||
class TimeAxisView;
|
class PublicEditor;
|
||||||
|
|
||||||
class TrackSelection : public std::list<TimeAxisView*>
|
class TrackSelection : public TrackViewList
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TrackSelection () {}
|
TrackSelection (PublicEditor const * e) : _editor (e) {}
|
||||||
|
TrackSelection (PublicEditor const *, TrackViewList const &);
|
||||||
|
|
||||||
|
TrackViewList add (TrackViewList const &);
|
||||||
|
|
||||||
TrackSelection (std::list<TimeAxisView*> const &);
|
private:
|
||||||
std::list<TimeAxisView*> add (std::list<TimeAxisView*> const &);
|
PublicEditor const * _editor;
|
||||||
bool contains (TimeAxisView const *) const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __ardour_gtk_track_selection_h__ */
|
#endif /* __ardour_gtk_track_selection_h__ */
|
||||||
|
|
|
||||||
|
|
@ -192,6 +192,7 @@ gtk2_ardour_sources = [
|
||||||
'time_fx_dialog.cc',
|
'time_fx_dialog.cc',
|
||||||
'time_selection.cc',
|
'time_selection.cc',
|
||||||
'track_selection.cc',
|
'track_selection.cc',
|
||||||
|
'track_view_list.cc',
|
||||||
'ui_config.cc',
|
'ui_config.cc',
|
||||||
'utils.cc',
|
'utils.cc',
|
||||||
'version.cc',
|
'version.cc',
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,6 @@ public:
|
||||||
void destroy_subgroup ();
|
void destroy_subgroup ();
|
||||||
|
|
||||||
boost::shared_ptr<RouteList> route_list() { return routes; }
|
boost::shared_ptr<RouteList> route_list() { return routes; }
|
||||||
boost::shared_ptr<RouteList> route_list (Property forProperty);
|
|
||||||
|
|
||||||
sigc::signal<void> changed;
|
sigc::signal<void> changed;
|
||||||
sigc::signal<void,void*> FlagsChanged;
|
sigc::signal<void,void*> FlagsChanged;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue