]> git.tdb.fi Git - r2c2.git/blob - source/libmarklin/catalogue.h
f1654a19d62add8b8f5c31fdd95295acb837e10b
[r2c2.git] / source / libmarklin / catalogue.h
1 /* $Id$
2
3 This file is part of the MSP Märklin suite
4 Copyright © 2006-2010  Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
6 */
7
8 #ifndef LIBMARKLIN_CATALOGUE_H_
9 #define LIBMARKLIN_CATALOGUE_H_
10
11 #include <map>
12 #include <msp/datafile/loader.h>
13 #include "layout.h"
14 #include "profile.h"
15
16 namespace Marklin {
17
18 class LocoType;
19 class TrackType;
20
21 class Catalogue
22 {
23 public:
24         class Loader: public Msp::DataFile::BasicLoader<Catalogue>
25         {
26         public:
27                 Loader(Catalogue &);
28         private:
29                 void ballast_profile();
30                 void gauge(float);
31                 void layout();
32                 void locomotive(unsigned);
33                 void rail_profile();
34                 void scale(float, float);
35                 void track(unsigned);
36         };
37
38         sigc::signal<void, const TrackType &> signal_track_added;
39         sigc::signal<void, const LocoType &> signal_loco_added;
40
41 private:
42         float scale;
43         float gauge;
44         Profile rail_profile;
45         Profile ballast_profile;
46         Profile path_profile;
47         std::map<unsigned, TrackType *> tracks;
48         std::map<unsigned, LocoType *> locos;
49         Layout layout;
50
51 public:
52         Catalogue();
53         ~Catalogue();
54
55         float get_scale() const { return scale; }
56         float get_gauge() const { return gauge; }
57         const Profile &get_rail_profile() const { return rail_profile; }
58         const Profile &get_ballast_profile() const { return ballast_profile; }
59         const Profile &get_path_profile() const { return path_profile; }
60
61         void add_track(TrackType &);
62         const TrackType &get_track(unsigned) const;
63         const std::map<unsigned, TrackType *> &get_tracks() const { return tracks; }
64
65         void add_locomotive(LocoType &);
66         const LocoType &get_locomotive(unsigned) const;
67         const std::map<unsigned, LocoType *> &get_locomotives() const { return locos; }
68
69         Layout &get_layout() { return layout; }
70 };
71
72 } // namespace Marklin
73
74 #endif