[350] | 1 | #include "uibuilder.h" |
---|
| 2 | |
---|
| 3 | namespace bdm { |
---|
| 4 | |
---|
| 5 | //! global map of UIbulder names to instances of UIbuilders. Created by UIREGISTER macro |
---|
| 6 | UImap __uimap__; |
---|
| 7 | |
---|
| 8 | bdmroot* UIexternal::build ( Setting &S ) const { |
---|
| 9 | Config C; |
---|
| 10 | bdmroot* tmp; |
---|
| 11 | try { |
---|
| 12 | C.readFile ( ( const char* ) S["filename"] ); |
---|
| 13 | } |
---|
| 14 | catch ( ... ) { |
---|
| 15 | it_error ( "File " + string ( ( const char* ) S["filename"] ) + " not found or broken" ); |
---|
| 16 | } |
---|
| 17 | try { |
---|
| 18 | Setting& remS=C.lookup ( ( const char* ) S["path"] ); |
---|
| 19 | UIbuild ( remS,tmp ); |
---|
| 20 | } |
---|
| 21 | catch ( ... ) { |
---|
| 22 | it_error ( "External field " + string ( S.getPath() ) + " not valid" ); |
---|
| 23 | } |
---|
| 24 | return tmp; |
---|
| 25 | }; |
---|
| 26 | UIREGISTER ( UIexternal ); |
---|
| 27 | |
---|
| 28 | bdmroot* UIinternal::build ( Setting &S ) const { |
---|
| 29 | bdmroot* tmp; |
---|
| 30 | try { |
---|
| 31 | Setting* Stmp = &S; |
---|
| 32 | do {Stmp=& ( Stmp->getParent() );} |
---|
| 33 | while ( !Stmp->isRoot() ); |
---|
| 34 | Setting& intS=Stmp->lookup ( ( const char* ) S["path"] ); |
---|
| 35 | UIbuild ( intS,tmp ); |
---|
| 36 | } |
---|
| 37 | catch ( ... ) { |
---|
| 38 | it_error ( "Internal field " + string ( S.getPath() ) + " not valid" ); |
---|
| 39 | } |
---|
| 40 | return tmp; |
---|
| 41 | }; |
---|
| 42 | UIREGISTER ( UIinternal ); |
---|
| 43 | |
---|
| 44 | void UI_DBG ( Setting &S, const string &spc ) { |
---|
| 45 | const char *Name=S.getName(); |
---|
| 46 | if ( Name!=NULL ) {cout << spc << std::string ( Name );}; |
---|
| 47 | Setting::Type T=S.getType(); |
---|
| 48 | switch ( T ) { |
---|
| 49 | case Setting::TypeArray: |
---|
| 50 | cout << endl; |
---|
| 51 | for ( int i=0;i<S.getLength();i++ ) {UI_DBG ( S[i], spc+" " );}; |
---|
| 52 | break; |
---|
| 53 | case Setting::TypeList: |
---|
| 54 | cout << endl; |
---|
| 55 | for ( int i=0;i<S.getLength();i++ ) {UI_DBG ( S[i], spc+" " );}; |
---|
| 56 | break; |
---|
| 57 | case Setting::TypeGroup: |
---|
| 58 | cout << endl; |
---|
| 59 | for ( int i=0;i<S.getLength();i++ ) {UI_DBG ( S[i], spc+" " );} |
---|
| 60 | break; |
---|
| 61 | case Setting::TypeInt: |
---|
| 62 | cout << " = "; |
---|
| 63 | cout << int ( S ) <<endl; |
---|
| 64 | break; |
---|
| 65 | case Setting::TypeFloat: |
---|
| 66 | cout << " = "; |
---|
| 67 | cout << double ( S ) <<endl; |
---|
| 68 | break; |
---|
| 69 | case Setting::TypeString: |
---|
| 70 | cout << " = "; |
---|
| 71 | cout << ( const char* ) ( S ) <<endl; |
---|
| 72 | break; |
---|
| 73 | case Setting::TypeBoolean: |
---|
| 74 | cout << " = "; |
---|
| 75 | cout << bool ( S ) <<endl; |
---|
| 76 | break; |
---|
| 77 | default: {cout << "?";}; |
---|
| 78 | } |
---|
| 79 | } |
---|
| 80 | |
---|
| 81 | } |
---|
| 82 | //UIexternal* UIexternal_instance =new UIexternal(); |
---|