00001
00002
00003
00004
00005
00006
00007
00009 #include <iostream>
00010 #include "Configurable/CfgDialog.h"
00011
00012
00013
00014 CfgDialog::CfgDialog() :
00015 fCurrent(),
00016 fDefault(),
00017 fResult()
00018 { }
00019
00020
00021
00022 CfgDialog::CfgDialog(const Registry& cur, const Registry& defl) :
00023 fCurrent(cur),
00024 fDefault(defl),
00025 fResult()
00026 { }
00027
00028
00029
00030 CfgDialog::~CfgDialog() { }
00031
00032
00033
00034 void CfgDialog::SetCurrent(const Registry& r)
00035 {
00036
00037
00038
00039
00040 fCurrent.UnLockValues();
00041 fCurrent = r;
00042 fCurrent.LockValues();
00043 }
00044
00045
00046
00047 void CfgDialog::SetDefault(const Registry& r)
00048 {
00049
00050
00051
00052 fDefault.UnLockValues();
00053 fDefault = r;
00054 fCurrent.LockValues();
00055 }
00056
00057
00058
00059 Registry& CfgDialog::Query()
00060 {
00061
00062
00063
00064
00065 Registry::RegistryKey rk = fCurrent.Key();
00066
00067
00068 fResult = fCurrent;
00069 fResult.UnLockValues();
00070
00071 const char* k;
00072 while ( (k=rk()) ) {
00073
00074 char c;
00075 const char* s;
00076 int i;
00077 double d;
00078 Registry r;
00079
00080
00081
00082
00083 bool isBool = false;
00084
00085 bool isChar = fDefault.Get(k, c);
00086 bool isString = fDefault.Get(k, s);
00087 bool isInt = fDefault.Get(k, i);
00088 bool isDouble = fDefault.Get(k, d);
00089 bool isRegistry = false;
00090
00091
00092 #define PROMPT(t,c,d) \
00093 std::cout << " "<<t<<" "<<k<<" = ["<<d<<"] "<<c<<" =? ";
00094
00095 if (isBool) {
00096
00097
00098
00099
00100
00101 }
00102 else if (isChar) {
00103 char c1, c_in;
00104 fDefault.Get(k, c1);
00105 PROMPT("char",c,c1);
00106 std::cin >> c_in;
00107 fResult.Set(k, c_in);
00108 }
00109 else if (isString) {
00110 const char* s1;
00111 std::string s_in;
00112 fDefault.Get(k, s1);
00113 PROMPT("string",s,s1);
00114 std::cin >> s_in;
00115
00116
00117 fResult.Set(k, s_in.c_str());
00118 }
00119 else if (isInt) {
00120 int i1, i_in;
00121 fDefault.Get(k, i1);
00122 PROMPT("int",i,i1);
00123 std::cin >> i_in;
00124 fResult.Set(k, i_in);
00125 }
00126 else if (isDouble) {
00127 double d1, d_in;
00128 fDefault.Get(k, d1);
00129 PROMPT("double",d,d1);
00130 std::cin >> d_in;
00131 fResult.Set(k, d_in);
00132 }
00133 else if (isRegistry) {
00134
00135
00136
00137
00138
00139
00140
00141 }
00142 }
00143 return fResult;
00144 }
00145