]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/designer.cpp
Reduce interface clutter in Layout by storing Objects in a uniform way
[r2c2.git] / source / designer / designer.cpp
index 6d4d49d10b1c349138f027988cc1fa0af302afcd..d640073427c5c936ce2ceb53ced27d9a0472775f 100644 (file)
@@ -68,8 +68,8 @@ Designer::Designer(int argc, char **argv):
        layout = new Layout(catalogue);
        layout_3d = new Layout3D(*layout);
 
-       layout->signal_track_added.connect(sigc::mem_fun(this, &Designer::track_added));
-       layout->signal_track_removed.connect(sigc::mem_fun(this, &Designer::track_removed));
+       layout->signal_object_added.connect(sigc::mem_fun(this, &Designer::object_added));
+       layout->signal_object_removed.connect(sigc::mem_fun(this, &Designer::object_removed));
 
        if(argc>1)
        {
@@ -412,7 +412,7 @@ void Designer::key_press(unsigned key)
        else if(key==Msp::Input::KEY_F && shift)
        {
                const set<Track *> &tracks = selection.get_objects<Track>();
-               const set<Track *> &ltracks = layout->get_tracks();
+               const set<Track *> &ltracks = layout->get_all<Track>();
                for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
                {
                        (*i)->set_flex(!(*i)->get_flex());
@@ -513,16 +513,20 @@ void Designer::render()
        glColor3f(1.0, 1.0, 1.0);
 }
 
-void Designer::track_added(Track &trk)
+void Designer::object_added(Object &obj)
 {
-       new_tracks.push_back(&trk);
+       if(Track *trk = dynamic_cast<Track *>(&obj))
+               new_tracks.push_back(trk);
 }
 
-void Designer::track_removed(Track &trk)
+void Designer::object_removed(Object &obj)
 {
-       list<Track *>::iterator i = find(new_tracks.begin(), new_tracks.end(), &trk);
-       if(i!=new_tracks.end())
-               new_tracks.erase(i);
+       if(Track *trk = dynamic_cast<Track *>(&obj))
+       {
+               list<Track *>::iterator i = find(new_tracks.begin(), new_tracks.end(), trk);
+               if(i!=new_tracks.end())
+                       new_tracks.erase(i);
+       }
 }
 
 Object *Designer::pick_object(const Vector &pointer)
@@ -531,7 +535,7 @@ Object *Designer::pick_object(const Vector &pointer)
        const GL::Vector3 &cpos = view.get_camera().get_position();
        GL::Vector4 cray = view.get_camera().unproject(GL::Vector4(pointer.x, pointer.y, 0, 0));
 
-       return view.get_layout().get_layout().pick_object(Ray(cpos, Vector(cray)));
+       return view.get_layout().get_layout().pick<Object>(Ray(cpos, Vector(cray)));
 }
 
 void Designer::update_track_icon(Track3D &track)
@@ -651,7 +655,7 @@ string Designer::tooltip(int x, int y)
 
 void Designer::clear_paths()
 {
-       const set<Track *> &ltracks = layout->get_tracks();
+       const set<Track *> &ltracks = layout->get_all<Track>();
        for(set<Track *>::iterator i=ltracks.begin(); i!=ltracks.end(); ++i)
        {
                Track3D &t3d = layout_3d->get_track(**i);