]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/catalogue.h
Move gauge to TrackAppearance
[r2c2.git] / source / libr2c2 / catalogue.h
1 #ifndef LIBR2C2_CATALOGUE_H_
2 #define LIBR2C2_CATALOGUE_H_
3
4 #include <map>
5 #include <msp/datafile/objectloader.h>
6 #include "articlenumber.h"
7 #include "layout.h"
8 #include "trackappearance.h"
9
10 namespace R2C2 {
11
12 class ObjectType;
13
14 class Catalogue
15 {
16 public:
17         class Loader: public Msp::DataFile::ObjectLoader<Catalogue>
18         {
19         public:
20                 Loader(Catalogue &);
21         private:
22                 void layout();
23                 void scale(float, float);
24                 void signal(ArticleNumber);
25                 void terrain(ArticleNumber);
26                 void track(ArticleNumber);
27                 void track_appearance();
28                 void vehicle(ArticleNumber);
29         };
30
31         typedef std::map<ArticleNumber, ObjectType *> ObjectMap;
32
33         sigc::signal<void, const ObjectType &> signal_object_added;
34
35 private:
36         float scale;
37         TrackAppearance appearance;
38         ObjectMap objects;
39         Layout layout;
40
41 public:
42         Catalogue();
43         ~Catalogue();
44
45         float get_scale() const { return scale; }
46
47         void add(ObjectType &);
48         const ObjectType &get(const ArticleNumber &) const;
49         const ObjectMap &get_all() const { return objects; }
50
51         template<typename T>
52         const T &get(const ArticleNumber &an) const
53         { return dynamic_cast<const T &>(get(an)); }
54
55         Layout &get_layout() { return layout; }
56 };
57
58 } // namespace R2C2
59
60 #endif