2 #include "libr2c2/block.h"
9 Track *Selection::get_track() const
14 return *tracks.begin();
17 void Selection::clear()
20 signal_changed.emit();
23 void Selection::add_track(Track *t)
25 if(tracks.insert(t).second)
26 signal_changed.emit();
29 void Selection::remove_track(Track *t)
32 signal_changed.emit();
35 void Selection::toggle_track(Track *t)
40 signal_changed.emit();
43 void Selection::select_more()
45 set<Track *> new_tracks;
46 for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
48 const vector<Track *> &links = (*i)->get_links();
49 for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
51 new_tracks.insert(*j);
55 for(set<Track *>::iterator i=new_tracks.begin(); i!=new_tracks.end(); ++i)
56 if(tracks.insert(*i).second)
60 signal_changed.emit();
63 void Selection::select_linked()
66 list<Track *> queue(tracks.begin(), tracks.end());
69 Track *track = queue.front();
70 queue.erase(queue.begin());
72 const vector<Track *> &links = track->get_links();
73 for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
74 if(*j && tracks.insert(*j).second)
80 for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
82 const vector<Track *> &links = (*i)->get_links();
83 for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
84 if(*j && tracks.insert(*j).second)
89 signal_changed.emit();
92 void Selection::select_blocks()
95 for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
97 const set<Track *> &btracks = (*i)->get_block().get_tracks();
98 for(set<Track *>::iterator j=btracks.begin(); j!=btracks.end(); ++j)
107 signal_changed.emit();