]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/selection.cpp
Match the API change in GLtk
[r2c2.git] / source / designer / selection.cpp
index ed71547b0f6a9a46c51279cc3f343cd298bc88a7..c6b1e390d97cb8f80f2aad3ea3f0cc60171b2ac0 100644 (file)
@@ -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 <algorithm>
+#include "libmarklin/block.h"
 #include "selection.h"
 
 using namespace std;
@@ -44,16 +52,16 @@ void Selection::select_more()
        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();
@@ -61,27 +69,45 @@ void Selection::select_more()
 
 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)