using namespace R2C2;
using namespace Msp;
-Track *Selection::get_track() const
+Object *Selection::get_object() const
{
- if(tracks.empty())
+ if(objects.empty())
return 0;
else
- return *tracks.begin();
+ return *objects.begin();
}
void Selection::clear()
{
- tracks.clear();
+ objects.clear();
signal_changed.emit();
}
-void Selection::add_track(Track *t)
+void Selection::add_object(Object *o)
{
- if(tracks.insert(t).second)
+ if(objects.insert(o).second)
signal_changed.emit();
}
-void Selection::remove_track(Track *t)
+void Selection::remove_object(Object *o)
{
- if(tracks.erase(t))
+ if(objects.erase(o))
signal_changed.emit();
}
-void Selection::toggle_track(Track *t)
+void Selection::toggle_object(Object *o)
{
- if(!tracks.erase(t))
- tracks.insert(t);
+ if(!objects.erase(o))
+ objects.insert(o);
signal_changed.emit();
}
void Selection::select_more()
{
set<Track *> new_tracks;
- for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
- {
- const vector<Track *> &links = (*i)->get_links();
- for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
- if(*j)
- new_tracks.insert(*j);
- }
+ for(set<Object *>::iterator i=objects.begin(); i!=objects.end(); ++i)
+ if(Track *track = dynamic_cast<Track *>(*i))
+ {
+ const vector<Track *> &links = track->get_links();
+ for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
+ if(*j)
+ new_tracks.insert(*j);
+ }
bool changed = false;
for(set<Track *>::iterator i=new_tracks.begin(); i!=new_tracks.end(); ++i)
- if(tracks.insert(*i).second)
+ if(objects.insert(*i).second)
changed = true;
if(changed)
void Selection::select_linked()
{
bool changed = false;
- list<Track *> queue(tracks.begin(), tracks.end());
+ list<Track *> queue;
+ for(set<Object *>::iterator i=objects.begin(); i!=objects.end(); ++i)
+ if(Track *track = dynamic_cast<Track *>(*i))
+ queue.push_back(track);
+
while(!queue.empty())
{
Track *track = queue.front();
const vector<Track *> &links = track->get_links();
for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
- if(*j && tracks.insert(*j).second)
+ if(*j && objects.insert(*j).second)
{
queue.push_back(*j);
changed = true;
}
}
- for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
- {
- const vector<Track *> &links = (*i)->get_links();
- for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
- if(*j && tracks.insert(*j).second)
- changed = true;
- }
if(changed)
signal_changed.emit();
void Selection::select_blocks()
{
bool changed = false;
- for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
- {
- const set<Track *> &btracks = (*i)->get_block().get_tracks();
- for(set<Track *>::iterator j=btracks.begin(); j!=btracks.end(); ++j)
- if(!tracks.count(*j))
- {
- tracks.insert(*j);
- changed = true;
- }
- }
+ for(set<Object *>::iterator i=objects.begin(); i!=objects.end(); ++i)
+ if(Track *track = dynamic_cast<Track *>(*i))
+ {
+ const set<Track *> &btracks = track->get_block().get_tracks();
+ for(set<Track *>::iterator j=btracks.begin(); j!=btracks.end(); ++j)
+ if(objects.insert(*j).second)
+ changed = true;
+ }
if(changed)
signal_changed.emit();