/* $Id$
-This file is part of the MSP Märklin suite
+This file is part of R²C²
Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
Distributed under the GPL
*/
#include <algorithm>
+#include "libr2c2/block.h"
#include "selection.h"
using namespace std;
-using namespace Marklin;
+using namespace R2C2;
using namespace Msp;
Track *Selection::get_track() const
set<Track *> new_tracks;
for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
{
- const vector<Track *> &links=(*i)->get_links();
+ 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);
}
- bool changed=false;
+ bool changed = false;
for(set<Track *>::iterator i=new_tracks.begin(); i!=new_tracks.end(); ++i)
if(tracks.insert(*i).second)
- changed=true;
+ changed = true;
if(changed)
signal_changed.emit();
void Selection::select_linked()
{
- bool changed=false;
+ bool changed = false;
list<Track *> queue(tracks.begin(), tracks.end());
while(!queue.empty())
{
- Track *track=queue.front();
+ Track *track = queue.front();
queue.erase(queue.begin());
- const vector<Track *> &links=track->get_links();
+ 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)
{
queue.push_back(*j);
- changed=true;
+ changed = true;
}
}
for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
{
- const vector<Track *> &links=(*i)->get_links();
+ 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;
+ 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;
+ }
}
if(changed)