2 #include "libr2c2/block.h"
9 Object *Selection::get_object() const
14 return *objects.begin();
17 void Selection::clear()
20 signal_changed.emit();
23 void Selection::add_object(Object *o)
25 if(objects.insert(o).second)
26 signal_changed.emit();
29 void Selection::remove_object(Object *o)
32 signal_changed.emit();
35 void Selection::toggle_object(Object *o)
40 signal_changed.emit();
43 void Selection::select_more()
45 set<Track *> new_tracks;
46 for(set<Object *>::iterator i=objects.begin(); i!=objects.end(); ++i)
47 if(Track *track = dynamic_cast<Track *>(*i))
49 const vector<Track *> &links = track->get_links();
50 for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
52 new_tracks.insert(*j);
56 for(set<Track *>::iterator i=new_tracks.begin(); i!=new_tracks.end(); ++i)
57 if(objects.insert(*i).second)
61 signal_changed.emit();
64 void Selection::select_linked()
68 for(set<Object *>::iterator i=objects.begin(); i!=objects.end(); ++i)
69 if(Track *track = dynamic_cast<Track *>(*i))
70 queue.push_back(track);
74 Track *track = queue.front();
75 queue.erase(queue.begin());
77 const vector<Track *> &links = track->get_links();
78 for(vector<Track *>::const_iterator j=links.begin(); j!=links.end(); ++j)
79 if(*j && objects.insert(*j).second)
87 signal_changed.emit();
90 void Selection::select_blocks()
93 for(set<Object *>::iterator i=objects.begin(); i!=objects.end(); ++i)
94 if(Track *track = dynamic_cast<Track *>(*i))
96 const set<Track *> &btracks = track->get_block().get_tracks();
97 for(set<Track *>::iterator j=btracks.begin(); j!=btracks.end(); ++j)
98 if(objects.insert(*j).second)
103 signal_changed.emit();