root/tests/UI/UIbuilder_test.cpp @ 259

Revision 257, 1.4 kB (checked in by smidl, 16 years ago)

All objects have a virtual predecessor. This allows type checking in UI, see

Line 
1#include <uibuilder.h>
2
3using namespace libconfig;
4using namespace std;
5using namespace bdm;
6
7class cls :public bdmroot{
8        public:
9                int a;
10                string S;
11                cls(int a0, string S0):a(a0),S(S0){};
12                virtual void print(){cout << a << " and "<< S << endl;}
13};
14class cls2: public cls{
15        public:
16        cls2(int a0, string S0):cls(a0,S0){};
17        void print(){cout << a << " or "<< S << endl;}
18};
19
20class UItest : public UIbuilder{
21        public:
22        UItest():UIbuilder("test"){}
23        bdmroot* build(Setting &S) const{
24                try{
25                        int a=S["a"];
26                        string St;
27                        S.lookupValue("S",St);
28                        cls* tmp = new cls(a,St);
29                        return tmp;
30                }
31                catch (...){
32                        it_error(string(S.getPath()) + " is not a valid test UI");
33                }
34        }       
35};
36
37class UItest2 : public UIbuilder{
38        public:
39        UItest2():UIbuilder("test2"){}
40        bdmroot* build(Setting &S) const{
41                try{
42                        int a=S["a"];
43                        string St;
44                        S.lookupValue("S",St);
45                        return  new cls2(a,St);
46                }
47                catch (...){
48                        it_error(string(S.getPath()) + " is not a valid test UI");
49                }
50        }       
51        int no(){return 2;}
52};
53
54UIREGISTER(UItest);
55UIREGISTER(UItest2);
56//UItest* UItest_instance = new UItest();
57//UItest2* UItest2_instance = new UItest2();
58
59int main(){
60UIFile UI("UIbuilder_test.cfg");
61
62cls* Cls;
63UIbuild(UI.lookup("test"),Cls);
64cls* Cls2;
65UIbuild(UI.lookup("test2"),Cls2);
66cls* Cls3;
67UIbuild(UI.lookup("test3"),Cls3);
68
69Cls->print();
70Cls2->print();
71Cls3->print(); 
72
73delete Cls;
74delete Cls2;
75delete Cls3;
76}
Note: See TracBrowser for help on using the browser.