]> git.tdb.fi Git - r2c2.git/blob - source/3d/trackchain.cpp
Clear the critical flag one track earlier
[r2c2.git] / source / 3d / trackchain.cpp
1 #include "layout.h"
2 #include "path.h"
3 #include "trackchain.h"
4 #include "track.h"
5
6 using namespace Msp;
7
8 namespace R2C2 {
9
10 TrackChain3D::TrackChain3D(Layout3D &l, TrackChain &r):
11         layout(l),
12         chain(r),
13         layer(0)
14 {
15         chain.signal_track_added.connect(sigc::mem_fun(this, &TrackChain3D::track_added));
16         chain.signal_track_removed.connect(sigc::mem_fun(this, &TrackChain3D::track_removed));
17
18         const TrackChain::TrackSet &tracks = chain.get_tracks();
19         for(TrackChain::TrackSet::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
20                 track_added(**i);
21 }
22
23 TrackChain3D::~TrackChain3D()
24 {
25         for(PathMap::iterator i=paths.begin(); i!=paths.end(); ++i)
26                 delete i->second;
27 }
28
29 void TrackChain3D::set_color(const GL::Color &c)
30 {
31         color = c;
32         for(PathMap::iterator i=paths.begin(); i!=paths.end(); ++i)
33                 i->second->set_color(color);
34 }
35
36 void TrackChain3D::set_layer(float l)
37 {
38         layer = l;
39         for(PathMap::iterator i=paths.begin(); i!=paths.end(); ++i)
40                 i->second->set_layer(layer);
41 }
42
43 void TrackChain3D::track_added(Track &track)
44 {
45         Track3D &track_3d = layout.get_3d(track);
46         Path3D *path = new Path3D(track_3d);
47         paths.insert(PathMap::value_type(&track, path));
48         path->set_color(color);
49         path->set_layer(layer);
50 }
51
52 void TrackChain3D::track_removed(Track &track)
53 {
54         PathMap::iterator i = paths.find(&track);
55         if(i!=paths.end())
56         {
57                 delete i->second;
58                 paths.erase(i);
59         }
60 }
61
62 } // namespace R2C2