| 1 | #include "userinfo.h" |
|---|
| 2 | |
|---|
| 3 | class Engine |
|---|
| 4 | { |
|---|
| 5 | public: |
|---|
| 6 | string producer; |
|---|
| 7 | double consumption; |
|---|
| 8 | |
|---|
| 9 | Engine( string producer, double consumption ) |
|---|
| 10 | : producer( producer ), |
|---|
| 11 | consumption( consumption ) |
|---|
| 12 | { |
|---|
| 13 | } |
|---|
| 14 | }; |
|---|
| 15 | |
|---|
| 16 | //! User info for strings |
|---|
| 17 | class EngineUI : public UserInfo<Engine> |
|---|
| 18 | { |
|---|
| 19 | public: |
|---|
| 20 | StringAttribute producer; |
|---|
| 21 | DoubleAttribute consumption; |
|---|
| 22 | |
|---|
| 23 | EngineUI() |
|---|
| 24 | : UserInfo<Engine>( "engine", "type of engine" ), |
|---|
| 25 | producer( "producer"), |
|---|
| 26 | consumption( "consumption") |
|---|
| 27 | { |
|---|
| 28 | producer.Attach( attributes ); |
|---|
| 29 | consumption.Attach( attributes ); |
|---|
| 30 | } |
|---|
| 31 | |
|---|
| 32 | Engine* build() |
|---|
| 33 | { |
|---|
| 34 | return new Engine( producer.value, consumption.value ); |
|---|
| 35 | } |
|---|
| 36 | }; |
|---|
| 37 | |
|---|
| 38 | |
|---|
| 39 | class Car |
|---|
| 40 | { |
|---|
| 41 | public: |
|---|
| 42 | string color; |
|---|
| 43 | int year; |
|---|
| 44 | Engine engine; |
|---|
| 45 | |
|---|
| 46 | Car( string color, int year, Engine engine) |
|---|
| 47 | : color( color ), |
|---|
| 48 | year( year ), |
|---|
| 49 | engine( engine ) |
|---|
| 50 | { |
|---|
| 51 | } |
|---|
| 52 | }; |
|---|
| 53 | |
|---|
| 54 | //! User info for strings |
|---|
| 55 | class CarUI : public UserInfo<Car> |
|---|
| 56 | { |
|---|
| 57 | public: |
|---|
| 58 | EngineUI engine; |
|---|
| 59 | |
|---|
| 60 | StringAttribute color; |
|---|
| 61 | IntAttribute year; |
|---|
| 62 | |
|---|
| 63 | CarUI() |
|---|
| 64 | : UserInfo<Car>("car", "type of a car"), |
|---|
| 65 | color( "color"), |
|---|
| 66 | year( "color" ) |
|---|
| 67 | { |
|---|
| 68 | engine.Attach( elements ); |
|---|
| 69 | |
|---|
| 70 | color.Attach( attributes ); |
|---|
| 71 | year.Attach( attributes ); |
|---|
| 72 | } |
|---|
| 73 | |
|---|
| 74 | Car* build() |
|---|
| 75 | { |
|---|
| 76 | Engine* pEng = engine.build(); |
|---|
| 77 | return new Car(color.value, year.value,*pEng); |
|---|
| 78 | } |
|---|
| 79 | }; |
|---|
| 80 | |
|---|
| 81 | |
|---|
| 82 | int main() |
|---|
| 83 | { |
|---|
| 84 | CarUI car; |
|---|
| 85 | |
|---|
| 86 | car.Save( "car.xml" ); |
|---|
| 87 | |
|---|
| 88 | /* |
|---|
| 89 | car.Load( "car.xml" ); |
|---|
| 90 | Car *pDefaultCar = car.build(); |
|---|
| 91 | cout << "our car has " << pDefaultCar->color << " color"; |
|---|
| 92 | delete pDefaultCar; |
|---|
| 93 | // */ |
|---|
| 94 | |
|---|
| 95 | getchar(); |
|---|
| 96 | return 0; |
|---|
| 97 | } |
|---|