X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fselection.cpp;h=b351b452953d24c75574c0998cc187247ed19614;hb=7b4155fa0581d7c5fe198e4fb1dea61fa0846eec;hp=ed71547b0f6a9a46c51279cc3f343cd298bc88a7;hpb=52cbe8d99669f843f8f75c51128e2748584dd03a;p=r2c2.git diff --git a/source/designer/selection.cpp b/source/designer/selection.cpp index ed71547..b351b45 100644 --- a/source/designer/selection.cpp +++ b/source/designer/selection.cpp @@ -1,59 +1,60 @@ #include +#include "libr2c2/block.h" #include "selection.h" using namespace std; -using namespace Marklin; +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 new_tracks; - for(set::iterator i=tracks.begin(); i!=tracks.end(); ++i) + set new_objects; + for(set::iterator i=objects.begin(); i!=objects.end(); ++i) { - const vector &links=(*i)->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) - if(tracks.insert(*i).second) - changed=true; + bool changed = false; + for(set::iterator i=new_objects.begin(); i!=new_objects.end(); ++i) + if(objects.insert(*i).second) + changed = true; if(changed) signal_changed.emit(); @@ -61,29 +62,40 @@ void Selection::select_more() void Selection::select_linked() { - bool changed=false; - list queue(tracks.begin(), tracks.end()); + bool changed = false; + 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 && tracks.insert(*j).second) - { - queue.push_back(*j); - changed=true; - } - } - for(set::iterator i=tracks.begin(); i!=tracks.end(); ++i) - { - const vector &links=(*i)->get_links(); - for(vector::const_iterator j=links.begin(); j!=links.end(); ++j) - if(*j && tracks.insert(*j).second) - 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) signal_changed.emit(); } + +void Selection::select_blocks() +{ + bool changed = false; + for(set::iterator i=objects.begin(); i!=objects.end(); ++i) + if(Track *track = dynamic_cast(*i)) + { + const set &btracks = track->get_block().get_tracks(); + for(set::iterator j=btracks.begin(); j!=btracks.end(); ++j) + if(objects.insert(*j).second) + changed = true; + } + + if(changed) + signal_changed.emit(); +}