| [345] | 1 | #include <user_info.h> | 
|---|
| [344] | 2 | #include <string> | 
|---|
| [244] | 3 |  | 
|---|
| [344] | 4 | using std::string; | 
|---|
| [244] | 5 | using namespace std; | 
|---|
| [254] | 6 | using namespace bdm; | 
|---|
| [244] | 7 |  | 
|---|
| [344] | 8 | class Transport : public bdmroot | 
|---|
|  | 9 | { | 
|---|
|  | 10 | public: | 
|---|
|  | 11 | int year; | 
|---|
|  | 12 | string manufacturer; | 
|---|
|  | 13 |  | 
|---|
|  | 14 | Transport() | 
|---|
|  | 15 | { | 
|---|
|  | 16 | year = 1900; | 
|---|
|  | 17 | manufacturer = "unknown"; | 
|---|
|  | 18 | } | 
|---|
|  | 19 |  | 
|---|
|  | 20 | Transport( int year, string manufacturer ) | 
|---|
|  | 21 | : year( year ), manufacturer( manufacturer ) | 
|---|
|  | 22 | { | 
|---|
|  | 23 | } | 
|---|
|  | 24 |  | 
|---|
| [345] | 25 | virtual void from_setting( const Setting &root ) | 
|---|
| [344] | 26 | { | 
|---|
|  | 27 | root.lookupValue( "year", year ); | 
|---|
|  | 28 | root.lookupValue( "manufacturer", manufacturer ); | 
|---|
|  | 29 | } | 
|---|
|  | 30 |  | 
|---|
| [345] | 31 | virtual void to_setting( Setting &root ) | 
|---|
| [344] | 32 | { | 
|---|
|  | 33 | Setting &year_setting = root.add("year", Setting::TypeInt ); | 
|---|
|  | 34 | year_setting = year; | 
|---|
|  | 35 |  | 
|---|
|  | 36 | Setting &manufacturer_setting = root.add("manufacturer", Setting::TypeString ); | 
|---|
|  | 37 | manufacturer_setting = manufacturer; | 
|---|
|  | 38 | } | 
|---|
| [244] | 39 | }; | 
|---|
|  | 40 |  | 
|---|
| [344] | 41 | class Car : public Transport | 
|---|
|  | 42 | { | 
|---|
|  | 43 | public: | 
|---|
|  | 44 | int kilometers; | 
|---|
|  | 45 |  | 
|---|
|  | 46 | Car() : Transport() | 
|---|
|  | 47 | { | 
|---|
|  | 48 | kilometers = 0; | 
|---|
|  | 49 | } | 
|---|
|  | 50 |  | 
|---|
|  | 51 |  | 
|---|
|  | 52 | Car( int year, string manufacturer, int kilometers ) | 
|---|
|  | 53 | : Transport( year, manufacturer ), kilometers( kilometers ) | 
|---|
|  | 54 | { | 
|---|
|  | 55 | } | 
|---|
|  | 56 |  | 
|---|
| [345] | 57 | virtual void from_setting( const Setting &root ) | 
|---|
| [344] | 58 | { | 
|---|
| [345] | 59 | Transport::from_setting( root ); | 
|---|
| [344] | 60 |  | 
|---|
|  | 61 | root.lookupValue( "kilometers", kilometers ); | 
|---|
|  | 62 | } | 
|---|
|  | 63 |  | 
|---|
| [345] | 64 | virtual void to_setting( Setting &root ) | 
|---|
| [344] | 65 | { | 
|---|
| [345] | 66 | Transport::to_setting( root ); | 
|---|
| [344] | 67 |  | 
|---|
|  | 68 | Setting &kilometers_setting = root.add("kilometers", Setting::TypeInt ); | 
|---|
|  | 69 | kilometers_setting = kilometers; | 
|---|
|  | 70 | } | 
|---|
|  | 71 |  | 
|---|
|  | 72 | string ToString() | 
|---|
|  | 73 | { | 
|---|
|  | 74 | stringstream stream; | 
|---|
|  | 75 | stream << "a car made in " << year << " by " << manufacturer << ", having " << kilometers << " kilometers on the clock."; | 
|---|
|  | 76 | return stream.str(); | 
|---|
|  | 77 | } | 
|---|
| [244] | 78 | }; | 
|---|
|  | 79 |  | 
|---|
| [344] | 80 | UIREGISTER(Car); | 
|---|
|  | 81 |  | 
|---|
|  | 82 | class Bike : public Transport | 
|---|
|  | 83 | { | 
|---|
|  | 84 | public: | 
|---|
|  | 85 | bool electricLights; | 
|---|
|  | 86 | mat matr; | 
|---|
|  | 87 |  | 
|---|
|  | 88 | Bike() : Transport(), matr("2,2;3,4") | 
|---|
|  | 89 | { | 
|---|
|  | 90 | electricLights = false; | 
|---|
|  | 91 | } | 
|---|
|  | 92 |  | 
|---|
|  | 93 | Bike( int year, string manufacturer, bool electricLights ) | 
|---|
|  | 94 | : Transport( year, manufacturer ), electricLights( electricLights ) | 
|---|
|  | 95 | { | 
|---|
|  | 96 | } | 
|---|
|  | 97 |  | 
|---|
|  | 98 | ~Bike() | 
|---|
|  | 99 | { | 
|---|
|  | 100 | } | 
|---|
|  | 101 |  | 
|---|
| [345] | 102 | void from_setting( const Setting &root ) | 
|---|
| [344] | 103 | { | 
|---|
| [345] | 104 | Transport::from_setting( root ); | 
|---|
| [344] | 105 |  | 
|---|
|  | 106 | root.lookupValue( "electricLights", electricLights ); | 
|---|
|  | 107 |  | 
|---|
| [345] | 108 | UI::get( matr, root, "matr" ); | 
|---|
| [344] | 109 | } | 
|---|
|  | 110 |  | 
|---|
| [345] | 111 | void to_setting( Setting &root ) | 
|---|
| [344] | 112 | { | 
|---|
| [345] | 113 | Transport::to_setting( root ); | 
|---|
| [344] | 114 |  | 
|---|
|  | 115 | Setting &electricLights_setting = root.add("electricLights", Setting::TypeBoolean ); | 
|---|
|  | 116 | electricLights_setting = electricLights; | 
|---|
|  | 117 |  | 
|---|
| [345] | 118 | UI::save( matr, root, "matr" ); | 
|---|
| [344] | 119 | } | 
|---|
|  | 120 |  | 
|---|
|  | 121 | string ToString() | 
|---|
|  | 122 | { | 
|---|
|  | 123 | stringstream stream; | 
|---|
|  | 124 | stream << "a bike made in " << year << " by " << manufacturer; | 
|---|
|  | 125 | if( electricLights ) stream << " with electric lights included"; | 
|---|
|  | 126 | return stream.str(); | 
|---|
|  | 127 | } | 
|---|
| [244] | 128 | }; | 
|---|
|  | 129 |  | 
|---|
| [344] | 130 | UIREGISTER(Bike); | 
|---|
| [244] | 131 |  | 
|---|
| [344] | 132 | int main() | 
|---|
|  | 133 | { | 
|---|
|  | 134 | /////////////////////////////////// SAVING ////////////////////////// | 
|---|
|  | 135 | /* | 
|---|
|  | 136 | Car audi( 1998, "audi", 25000); | 
|---|
|  | 137 | Car liaz( 1992, "liaz", 1555000); | 
|---|
|  | 138 | Bike author( 1996, "author", true ); | 
|---|
| [244] | 139 |  | 
|---|
| [345] | 140 | UI_File root("testUI.cfg"); | 
|---|
|  | 141 | UI::save( audi, root, "pepikovo"); | 
|---|
|  | 142 | UI::save( liaz, root, "jardovo"); | 
|---|
|  | 143 | UI::save( author, root, "ondrejovo"); | 
|---|
|  | 144 | root.save(); | 
|---|
| [244] | 145 |  | 
|---|
| [344] | 146 | cout << "all the transport means were saved correctly" << endl; | 
|---|
|  | 147 | getchar(); | 
|---|
|  | 148 | */ | 
|---|
|  | 149 |  | 
|---|
|  | 150 | //////////////////////////////////// LOADING //////////////////////////////// | 
|---|
| [345] | 151 | UI_File root("testUI.cfg"); | 
|---|
|  | 152 | root.load(); | 
|---|
|  | 153 | Transport *pepikovo = UI::build<Transport>( root, "pepikovo"); | 
|---|
| [344] | 154 | cout << "pepikovo: " << pepikovo->ToString() << endl; | 
|---|
| [345] | 155 | Transport *jardovo = UI::build<Transport>( root, "jardovo"); | 
|---|
| [344] | 156 | cout << "jardovo: " << jardovo->ToString() << endl; | 
|---|
| [345] | 157 | Transport *ondrejovo = UI::build<Transport>( root, "ondrejovo"); | 
|---|
| [344] | 158 | cout << "ondrejovo: " << ondrejovo->ToString() << endl; | 
|---|
| [345] | 159 | Transport *elisky = UI::build<Transport>( root, "elisky"); | 
|---|
| [344] | 160 | cout << "elisky: " << elisky->ToString() << endl; | 
|---|
| [345] | 161 | Transport *kati = UI::build<Transport>( root, "kati"); | 
|---|
| [344] | 162 | cout << "kati: " << kati->ToString() << endl; | 
|---|
|  | 163 | getchar(); | 
|---|
|  | 164 | return 0; | 
|---|
| [244] | 165 | } | 
|---|