root/tests/testUI.cpp @ 357

Revision 357, 5.1 kB (checked in by mido, 15 years ago)

mnoho zmen:
1) presun FindXXX modulu do \system
2) zalozeni dokumentace \doc\local\library_structure.dox
3) presun obsahu \tests\UI primo do \tests
4) namisto \INSTALL zalozen \install.html, je to vhodnejsi pro uzivatele WINDOWS, a snad i obecne
5) snaha o predelani veskerych UI podle nove koncepce, soubory pmsm_ui.h, arx_ui.h, KF_ui.h, libDS_ui.h, libEF_ui.h a loggers_ui.h ponechavam
jen zdokumentacnich duvodu, nic by na nich jiz nemelo zaviset, a po zkontrolovani spravnosti provedenych uprav by mely byt smazany
6) predelani estimatoru tak, aby fungoval s novym UI konceptem
7) vytazeni tridy bdmroot do samostatneho souboru \bdm\bdmroot.h
8) pridana dokumentace pro zacleneni programu ASTYLE do Visual studia, ASTYLE pridan do instalacniho balicku pro Windows

  • Property svn:eol-style set to native
Line 
1
2#include <string>
3#include "user_info.h"
4
5using std::string;
6using namespace std;
7using namespace bdm;
8
9class Passenger : public bdmroot
10{
11public:
12
13  Passenger() {
14  }
15};
16
17class Human : public Passenger
18{
19public:
20  string name;
21
22  Human() {
23    name = "none";
24  }
25
26  virtual void from_setting(const Setting &root) {
27    root.lookupValue("name", name);
28  }
29
30  virtual void to_setting(Setting &root) const {
31    Setting &name_setting = root.add("name", Setting::TypeString);
32    name_setting = name;
33  }
34
35  string to_string() {
36    return name;
37  }
38};
39
40UIREGISTER(Human);
41
42class Robot : public Passenger
43{
44public:
45  int number;
46  Array<string> software;
47
48  Robot() : software() {
49    number = -1;
50  }
51
52  virtual void from_setting(const Setting &root) {
53    root.lookupValue("number", number);
54        if( root.exists( "software" ) )
55                UI::get(software, root, "software");
56  }
57
58  virtual void to_setting(Setting &root) const {
59    Setting &number_setting = root.add("number", Setting::TypeInt);
60    number_setting = number;
61
62    UI::save(software, root, "software");
63  }
64
65  string to_string() {
66    stringstream stream;
67    stream << number;
68    for (int i = 0; i < software.length(); i++)
69      stream << "_" + software(i);
70    return stream.str();
71  }
72};
73
74UIREGISTER(Robot);
75
76class Transport : public bdmroot
77{
78public:
79  int year;
80  string manufacturer;
81
82  Transport() {
83    year = 1900;
84    manufacturer = "unknown";
85  }
86
87  Transport(int year, string manufacturer)
88      : year(year), manufacturer(manufacturer) {
89  }
90
91  virtual void from_setting(const Setting &root) {
92    root.lookupValue("year", year);
93    root.lookupValue("manufacturer", manufacturer);
94  }
95
96  virtual void to_setting(Setting &root) const {
97    Setting &year_setting = root.add("year", Setting::TypeInt);
98    year_setting = year;
99
100    Setting &manufacturer_setting = root.add("manufacturer", Setting::TypeString);
101    manufacturer_setting = manufacturer;
102  }
103};
104
105class Car : public Transport
106{
107public:
108  int kilometers;
109  Array<Passenger*> passengers;
110
111  Car() : Transport() {
112    kilometers = 0;
113  }
114
115
116  Car(int year, string manufacturer, int kilometers)
117      : Transport(year, manufacturer), kilometers(kilometers) {
118  }
119
120  virtual void from_setting(const Setting &root) {
121    Transport::from_setting(root);
122
123    root.lookupValue("kilometers", kilometers);
124
125        if( root.exists( "passengers" ) )
126            UI::get(passengers, root, "passengers");
127  }
128
129  virtual void to_setting(Setting &root) const {
130    Transport::to_setting(root);
131
132    Setting &kilometers_setting = root.add("kilometers", Setting::TypeInt);
133    kilometers_setting = kilometers;
134
135    UI::save(passengers, root, "passengers");
136  }
137
138  string to_string() {
139    stringstream stream;
140    stream << "A car made in " << year << " by " << manufacturer << ", having " << kilometers << " kilometers on the clock.";
141    if (passengers.length()) {
142      stream << "The names of passengers are as follows: ";
143      for (int i = 0; i < passengers.length(); i++)
144        stream << passengers(i)->to_string() << " ";
145    }
146    return stream.str();
147  }
148};
149
150UIREGISTER(Car);
151
152class Bike : public Transport
153{
154public:
155  bool electricLights;
156  mat matr;
157
158  Bike() : Transport(), matr("2,2;3,4") {
159    electricLights = false;
160  }
161
162  Bike(int year, string manufacturer, bool electricLights)
163      : Transport(year, manufacturer), electricLights(electricLights) {
164  }
165
166  ~Bike() {
167  }
168
169  void from_setting(const Setting &root) {
170    Transport::from_setting(root);
171
172    root.lookupValue("electricLights", electricLights);
173
174        UI::get(matr, root, "matr");
175  }
176
177  void to_setting(Setting &root) const {
178    Transport::to_setting(root);
179
180    Setting &electricLights_setting = root.add("electricLights", Setting::TypeBoolean);
181    electricLights_setting = electricLights;
182
183    UI::save(matr, root, "matr");
184  }
185
186  string to_string() {
187    stringstream stream;
188    stream << "a bike made in " << year << " by " << manufacturer;
189    if (electricLights) stream << " with electric lights included";
190    return stream.str();
191  }
192};
193
194UIREGISTER(Bike);
195
196int main()
197{
198  //////////////////////////////////// LOADING ////////////////////////////////
199  UI_File in("testUI_in.cfg");
200  Transport *pepikovo = UI::build<Transport>(in, "pepikovo");
201  cout << "pepikovo: " << pepikovo->to_string() << endl;
202  Transport *jardovo = UI::build<Transport>(in, "jardovo");
203  cout << "jardovo: " << jardovo->to_string() << endl;
204  Transport *ondrejovo = UI::build<Transport>(in, "ondrejovo");
205  cout << "ondrejovo: " << ondrejovo->to_string() << endl;
206  Transport *elisky = UI::build<Transport>(in, "elisky");
207  cout << "elisky: " << elisky->to_string() << endl;
208  Transport *kati = UI::build<Transport>(in, "kati");
209  cout << "kati: " << kati->to_string() << endl;
210  getchar();
211
212  /////////////////////////////////// SAVING //////////////////////////
213
214  Car audi(1968, "zyl", 200);
215  Car liaz(1989, "skoda", 1000);
216  Bike author(2001, "noname", false);
217  UI_File out;
218
219  UI::save(&audi, out, "marty");
220  UI::save(&liaz, out, "bohousovo");
221  UI::save(&author, out, "karlovo");
222  UI::save(pepikovo, out, "pepikovo");
223  out.save("testUI_out.cfg");
224
225  cout << "all the transport means were saved correctly" << endl;
226  getchar();
227  return 0;
228}
Note: See TracBrowser for help on using the browser.