X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fselection.cpp;h=b351b452953d24c75574c0998cc187247ed19614;hb=7b4155fa0581d7c5fe198e4fb1dea61fa0846eec;hp=c93dd3628e5840394e9c190aaa53d2419e06282f;hpb=f950f5a77714a155e57c868101911e181a617818;p=r2c2.git diff --git a/source/designer/selection.cpp b/source/designer/selection.cpp index c93dd36..b351b45 100644 --- a/source/designer/selection.cpp +++ b/source/designer/selection.cpp @@ -42,18 +42,17 @@ void Selection::toggle_object(Object *o) void Selection::select_more() { - set new_tracks; + set new_objects; for(set::iterator i=objects.begin(); i!=objects.end(); ++i) - if(Track *track = dynamic_cast(*i)) - { - const vector &links = track->get_links(); - for(vector::const_iterator j=links.begin(); j!=links.end(); ++j) - if(*j) - new_tracks.insert(*j); - } + { + unsigned nls = (*i)->get_n_link_slots(); + for(unsigned j=0; jget_link(j)) + new_objects.insert(obj); + } bool changed = false; - for(set::iterator i=new_tracks.begin(); i!=new_tracks.end(); ++i) + for(set::iterator i=new_objects.begin(); i!=new_objects.end(); ++i) if(objects.insert(*i).second) changed = true; @@ -64,23 +63,21 @@ void Selection::select_more() void Selection::select_linked() { bool changed = false; - list queue; - for(set::iterator i=objects.begin(); i!=objects.end(); ++i) - if(Track *track = dynamic_cast(*i)) - queue.push_back(track); + list queue(objects.begin(), objects.end()); while(!queue.empty()) { - Track *track = queue.front(); - queue.erase(queue.begin()); - - const vector &links = track->get_links(); - for(vector::const_iterator j=links.begin(); j!=links.end(); ++j) - if(*j && objects.insert(*j).second) - { - queue.push_back(*j); - changed = true; - } + Object *obj = queue.front(); + queue.pop_front(); + + unsigned nls = obj->get_n_link_slots(); + for(unsigned j=0; jget_link(j)) + if(objects.insert(linked).second) + { + queue.push_back(linked); + changed = true; + } } if(changed)