X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fselection.cpp;h=c93dd3628e5840394e9c190aaa53d2419e06282f;hb=f950f5a77714a155e57c868101911e181a617818;hp=604890b92795c9fb090a6882308d54b96fbe2da4;hpb=1ff06c5bc46a677fa389ef86c6b26664368f1653;p=r2c2.git diff --git a/source/designer/selection.cpp b/source/designer/selection.cpp index 604890b..c93dd36 100644 --- a/source/designer/selection.cpp +++ b/source/designer/selection.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of R²C² -Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #include #include "libr2c2/block.h" #include "selection.h" @@ -13,36 +6,36 @@ using namespace std; 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(); } @@ -50,17 +43,18 @@ void Selection::toggle_track(Track *t) void Selection::select_more() { set new_tracks; - 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) - new_tracks.insert(*j); - } + 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); + } bool changed = false; for(set::iterator i=new_tracks.begin(); i!=new_tracks.end(); ++i) - if(tracks.insert(*i).second) + if(objects.insert(*i).second) changed = true; if(changed) @@ -70,7 +64,11 @@ void Selection::select_more() void Selection::select_linked() { bool changed = false; - list queue(tracks.begin(), tracks.end()); + list queue; + for(set::iterator i=objects.begin(); i!=objects.end(); ++i) + if(Track *track = dynamic_cast(*i)) + queue.push_back(track); + while(!queue.empty()) { Track *track = queue.front(); @@ -78,19 +76,12 @@ void Selection::select_linked() const vector &links = track->get_links(); for(vector::const_iterator j=links.begin(); j!=links.end(); ++j) - if(*j && tracks.insert(*j).second) + if(*j && objects.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; - } if(changed) signal_changed.emit(); @@ -99,16 +90,14 @@ void Selection::select_linked() 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; - } - } + 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();