X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fselection.cpp;h=c6b1e390d97cb8f80f2aad3ea3f0cc60171b2ac0;hb=e9653dffd0026fb3c02c91a4c0feca688a86c721;hp=ed71547b0f6a9a46c51279cc3f343cd298bc88a7;hpb=52cbe8d99669f843f8f75c51128e2748584dd03a;p=r2c2.git diff --git a/source/designer/selection.cpp b/source/designer/selection.cpp index ed71547..c6b1e39 100644 --- a/source/designer/selection.cpp +++ b/source/designer/selection.cpp @@ -1,4 +1,12 @@ +/* $Id$ + +This file is part of the MSP Märklin suite +Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa +Distributed under the GPL +*/ + #include +#include "libmarklin/block.h" #include "selection.h" using namespace std; @@ -44,16 +52,16 @@ void Selection::select_more() set new_tracks; for(set::iterator i=tracks.begin(); i!=tracks.end(); ++i) { - const vector &links=(*i)->get_links(); + const vector &links = (*i)->get_links(); for(vector::const_iterator j=links.begin(); j!=links.end(); ++j) if(*j) new_tracks.insert(*j); } - bool changed=false; + bool changed = false; for(set::iterator i=new_tracks.begin(); i!=new_tracks.end(); ++i) if(tracks.insert(*i).second) - changed=true; + changed = true; if(changed) signal_changed.emit(); @@ -61,27 +69,45 @@ void Selection::select_more() void Selection::select_linked() { - bool changed=false; + bool changed = false; list queue(tracks.begin(), tracks.end()); while(!queue.empty()) { - Track *track=queue.front(); + Track *track = queue.front(); queue.erase(queue.begin()); - const vector &links=track->get_links(); + 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; + changed = true; } } for(set::iterator i=tracks.begin(); i!=tracks.end(); ++i) { - const vector &links=(*i)->get_links(); + 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; + changed = true; + } + + if(changed) + signal_changed.emit(); +} + +void Selection::select_blocks() +{ + bool changed = false; + for(set::iterator i=tracks.begin(); i!=tracks.end(); ++i) + { + const set &btracks = (*i)->get_block().get_tracks(); + for(set::iterator j=btracks.begin(); j!=btracks.end(); ++j) + if(!tracks.count(*j)) + { + tracks.insert(*j); + changed = true; + } } if(changed)