-void Layout3D::track_added(Track &t)
-{
- new Track3D(*this, t);
-}
-
-void Layout3D::track_removed(Track &t)
-{
- TrackMap::iterator i = tracks.find(&t);
- if(i!=tracks.end())
- delete i->second;
-}
-
-void Layout3D::vehicle_added(Vehicle &v)
-{
- new Vehicle3D(*this, v);
-}
-
-void Layout3D::vehicle_removed(Vehicle &v)
-{
- VehicleMap::iterator i = vehicles.find(&v);
- if(i!=vehicles.end())
- delete i->second;
-}
-
-void Layout3D::signal_added(Signal &s)
-{
- new Signal3D(*this, s);
-}
-
-void Layout3D::signal_removed(Signal &s)
-{
- SignalMap::iterator i = signals.find(&s);
- if(i!=signals.end())
- delete i->second;
+void Layout3D::object_added(Object &o)
+{
+ if(Track *t = dynamic_cast<Track *>(&o))
+ new Track3D(*this, *t);
+ else if(Signal *s = dynamic_cast<Signal *>(&o))
+ new Signal3D(*this, *s);
+ else if(Vehicle *v = dynamic_cast<Vehicle *>(&o))
+ new Vehicle3D(*this, *v);
+}
+
+void Layout3D::object_removed(Object &o)
+{
+ if(Track *t = dynamic_cast<Track *>(&o))
+ {
+ TrackMap::iterator i = tracks.find(t);
+ if(i!=tracks.end())
+ delete i->second;
+ }
+ else if(Signal *s = dynamic_cast<Signal *>(&o))
+ {
+ SignalMap::iterator i = signals.find(s);
+ if(i!=signals.end())
+ delete i->second;
+ }
+ else if(Vehicle *v = dynamic_cast<Vehicle *>(&o))
+ {
+ VehicleMap::iterator i = vehicles.find(v);
+ if(i!=vehicles.end())
+ delete i->second;
+ }