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
RevLine 
[351]1
[344]2#include <string>
[357]3#include "user_info.h"
[244]4
[344]5using std::string;
[244]6using namespace std;
[254]7using namespace bdm;
[244]8
[351]9class Passenger : public bdmroot
10{
11public:
12
[357]13  Passenger() {
14  }
[351]15};
16
17class Human : public Passenger
18{
19public:
[357]20  string name;
[351]21
[357]22  Human() {
23    name = "none";
24  }
[351]25
[357]26  virtual void from_setting(const Setting &root) {
27    root.lookupValue("name", name);
28  }
[351]29
[357]30  virtual void to_setting(Setting &root) const {
31    Setting &name_setting = root.add("name", Setting::TypeString);
32    name_setting = name;
33  }
[351]34
[357]35  string to_string() {
36    return name;
37  }
[351]38};
39
40UIREGISTER(Human);
41
42class Robot : public Passenger
43{
44public:
[357]45  int number;
46  Array<string> software;
[351]47
[357]48  Robot() : software() {
49    number = -1;
50  }
[351]51
[357]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  }
[351]57
[357]58  virtual void to_setting(Setting &root) const {
59    Setting &number_setting = root.add("number", Setting::TypeInt);
60    number_setting = number;
[351]61
[357]62    UI::save(software, root, "software");
63  }
[351]64
[357]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  }
[351]72};
73
74UIREGISTER(Robot);
75
[344]76class Transport : public bdmroot
77{
78public:
[357]79  int year;
80  string manufacturer;
[344]81
[357]82  Transport() {
83    year = 1900;
84    manufacturer = "unknown";
85  }
[344]86
[357]87  Transport(int year, string manufacturer)
88      : year(year), manufacturer(manufacturer) {
89  }
[344]90
[357]91  virtual void from_setting(const Setting &root) {
92    root.lookupValue("year", year);
93    root.lookupValue("manufacturer", manufacturer);
94  }
[344]95
[357]96  virtual void to_setting(Setting &root) const {
97    Setting &year_setting = root.add("year", Setting::TypeInt);
98    year_setting = year;
[344]99
[357]100    Setting &manufacturer_setting = root.add("manufacturer", Setting::TypeString);
101    manufacturer_setting = manufacturer;
102  }
[244]103};
104
[344]105class Car : public Transport
106{
107public:
[357]108  int kilometers;
109  Array<Passenger*> passengers;
[344]110
[357]111  Car() : Transport() {
112    kilometers = 0;
113  }
[344]114
115
[357]116  Car(int year, string manufacturer, int kilometers)
117      : Transport(year, manufacturer), kilometers(kilometers) {
118  }
[344]119
[357]120  virtual void from_setting(const Setting &root) {
121    Transport::from_setting(root);
[344]122
[357]123    root.lookupValue("kilometers", kilometers);
[351]124
[357]125        if( root.exists( "passengers" ) )
126            UI::get(passengers, root, "passengers");
127  }
[344]128
[357]129  virtual void to_setting(Setting &root) const {
130    Transport::to_setting(root);
[344]131
[357]132    Setting &kilometers_setting = root.add("kilometers", Setting::TypeInt);
133    kilometers_setting = kilometers;
[351]134
[357]135    UI::save(passengers, root, "passengers");
136  }
[344]137
[357]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  }
[244]148};
149
[344]150UIREGISTER(Car);
151
152class Bike : public Transport
153{
154public:
[357]155  bool electricLights;
156  mat matr;
[344]157
[357]158  Bike() : Transport(), matr("2,2;3,4") {
159    electricLights = false;
160  }
[344]161
[357]162  Bike(int year, string manufacturer, bool electricLights)
163      : Transport(year, manufacturer), electricLights(electricLights) {
164  }
[344]165
[357]166  ~Bike() {
167  }
[344]168
[357]169  void from_setting(const Setting &root) {
170    Transport::from_setting(root);
[344]171
[357]172    root.lookupValue("electricLights", electricLights);
[344]173
[357]174        UI::get(matr, root, "matr");
175  }
[344]176
[357]177  void to_setting(Setting &root) const {
178    Transport::to_setting(root);
[344]179
[357]180    Setting &electricLights_setting = root.add("electricLights", Setting::TypeBoolean);
181    electricLights_setting = electricLights;
[344]182
[357]183    UI::save(matr, root, "matr");
184  }
[344]185
[357]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  }
[244]192};
193
[344]194UIREGISTER(Bike);
[244]195
[344]196int main()
[357]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();
[351]211
[357]212  /////////////////////////////////// SAVING //////////////////////////
[351]213
[357]214  Car audi(1968, "zyl", 200);
215  Car liaz(1989, "skoda", 1000);
216  Bike author(2001, "noname", false);
217  UI_File out;
[351]218
[357]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");
[351]224
[357]225  cout << "all the transport means were saved correctly" << endl;
226  getchar();
227  return 0;
[244]228}
Note: See TracBrowser for help on using the browser.