configtree.cpp
gehe zur Dokumentation dieser Datei
00001 
00038 #include "Defs.h"
00039 #include "configtree.h"
00040 
00041 
00042 long configtree::Read(const mutStringRef key, long defval)
00043 {
00044         return config -> Read(key, defval);
00045 }
00046 
00047 double configtree::Read(const mutStringRef key, double defval)
00048 {
00049         return config -> Read(key, defval);
00050 }
00051 
00052 int configtree::Read(const mutStringRef key, int defval)
00053 {
00054         return (int) config -> Read(key, (long) defval);
00055 }
00056 
00057 bool configtree::Read(const mutStringRef key, bool defval)
00058 { 
00059         return config -> Read(key, (long) defval);
00060 }
00061 
00062 mutString configtree::Read(const mutStringRef key, const mutStringRef defval)
00063 {
00064         return config -> Read(key, defval);
00065 }
00066         
00067 void configtree::Write (const mutStringRef key, long value)
00068 {
00069         config -> Write(key, value);
00070 }
00071 
00072 void configtree::Write (const mutStringRef key, double value)
00073 {
00074         config -> Write (key, value);
00075 }
00076 
00077 void configtree::Write (const mutStringRef key, int value)
00078 {
00079         config -> Write (key, (long) value);
00080 }
00081 
00082 void configtree::Write (const mutStringRef key, bool value)
00083 {
00084         config -> Write(key, (long) value);
00085 }
00086 
00087 void configtree::Write (const mutStringRef key, const mutStringRef value)
00088 {       
00089         config -> Write (key, value);
00090 }
00091 
00092 bool configtree::HasGroup(const mutStringRef subdir) const
00093 {
00094         return config->HasGroup(subdir);
00095 }
00096 
00097 void configtree::toLeaf(const mutStringRef subdir)
00098 {
00099         DEBUGLOG(config,_T("going to group '%s'"),subdir.c_str());
00100         wxASSERT(subdir.Find('/') == wxNOT_FOUND);
00101         wxASSERT(subdir != _T(".."));
00102         if (subdir.Find('/') != wxNOT_FOUND || subdir == _T("..")) {
00103                 UNREACHABLEC;
00104                 return;
00105         }
00106         state newstate;
00107 #ifdef DEBUG
00108         newstate.oldpath = config -> GetPath();
00109 #endif
00110         DEBUGLOG(config,_T("setting path to '%s'"),(subdir).c_str());
00111         config -> SetPath(subdir);
00112         newstate.chdepth = 1;
00113         states.push(newstate);
00114         DEBUGLOG(config,_T("current path = '%s', old path = '%s', depth = %d, id = %d, name = '%s'"),
00115                  config->GetPath().c_str(), newstate.oldpath.c_str(), newstate.chdepth, 
00116                  newstate.leafid, newstate.group.c_str());
00117 }
00118 
00119 void configtree::toLeaf(const mutStringRef name, int id)
00120 {
00121         DEBUGLOG(config,_T("going to group '%s' with id %d"),name.c_str(),id);
00122         toLeaf(name);
00123         state newstate = states.top();
00124         config->SetPath(wxString::Format(_T("%d"),id));
00125         newstate.chdepth++;
00126         states.pop();
00127         states.push(newstate);
00128         DEBUGLOG(config,_T("current path = '%s', old path = '%s', depth = %d, id = %d, name = '%s'"),
00129                  config->GetPath().c_str(), newstate.oldpath.c_str(), newstate.chdepth, 
00130                  newstate.leafid, newstate.group.c_str());
00131 }
00132 
00133 int configtree::toFirstLeaf(const mutStringRef name,mutStringRef id) 
00134 {
00135         DEBUGLOG(config,_T("going to first leaf of group '%s'"),name.c_str());
00136         toLeaf(name);
00137         state newstate = states.top();
00138         bool found = config->GetFirstGroup(id,newstate.leafid);
00139         if (!found) {
00140                 id = _T("0");
00141                 newstate.leafid = wxNOT_FOUND;
00142         }
00143         config->SetPath(id);
00144         newstate.chdepth++;
00145 #ifdef DEBUG
00146         newstate.group=name;
00147 #endif
00148         states.pop();
00149         states.push(newstate);
00150         DEBUGLOG(config,
00151                  _T("current path = '%s', old path = '%s', depth = %d, id = %d, name = '%s'"),
00152                  config->GetPath().c_str(), newstate.oldpath.c_str(), newstate.chdepth, 
00153                  newstate.leafid, newstate.group.c_str());
00154         return newstate.leafid;
00155 }
00156 
00157 
00158 int configtree::toNextLeaf(const mutStringRef name, mutStringRef id)
00159 {
00160 #ifdef DEBUG
00161         DEBUGLOG(config,_T("going to next leaf of group '%s'"),name.c_str());
00162         state oldstate=states.top();
00163         wxASSERT(oldstate.group==name);
00164         DEBUGLOG(config,
00165                  _T("current path = '%s', old path = '%s', depth = %d, id = %d, name = '%s'"),
00166                  config->GetPath().c_str(), 
00167                  oldstate.oldpath.c_str(), oldstate.chdepth, 
00168                  oldstate.leafid, oldstate.group.c_str());
00169 #endif
00170         toParent(1);
00171         toLeaf(name);
00172         state newstate = states.top();
00173 #ifdef DEBUG
00174         DEBUGLOG(config,
00175                  _T("current path = '%s', new old path = '%s', depth = %d, id = %d, name = '%s'"),
00176                  config->GetPath().c_str(), 
00177                  newstate.oldpath.c_str(), 
00178                  newstate.chdepth, newstate.leafid, newstate.group.c_str());
00179         wxASSERT(oldstate.oldpath == newstate.oldpath);
00180         newstate.group = oldstate.group;
00181 #endif
00182         bool found = config->GetNextGroup(id, newstate.leafid);
00183         if (found) {
00184                 config->SetPath(id);
00185                 newstate.chdepth++;
00186         } else newstate.leafid=wxNOT_FOUND;
00187         states.pop();
00188         states.push(newstate);
00189         DEBUGLOG(config,
00190                  _T("current path = '%s', new old path = '%s', depth = %d, id = %d, name = '%s'"),
00191                  config->GetPath().c_str(), 
00192                  newstate.oldpath.c_str(), 
00193                  newstate.chdepth, newstate.leafid,
00194                  newstate.group.c_str());
00195         return newstate.leafid;
00196 }
00197 
00198 
00199 void configtree::toParent(unsigned int count)
00200 {
00201         DEBUGLOG(config,_T("going up %d level groups"),count);
00202         while (count--) {
00203 #ifdef DEBUG
00204                 wxASSERT(states.size());
00205 #endif
00206                 if (!states.size()) {
00207                         UNREACHABLEC;
00208                         return;
00209                 }
00210                 state oldstate = states.top();
00211                 DEBUGLOG(config,_T("going up for %d levels"),oldstate.chdepth);
00212                 while (oldstate.chdepth--) 
00213                         config -> SetPath(_T(".."));
00214                 states.pop();
00215 #ifdef DEBUG
00216                 wxASSERT(config->GetPath() == oldstate.oldpath);
00217 #endif
00218                 DEBUGLOG(config,
00219                          _T("current path = '%s', old path = '%s', depth = %d, id = %d, name = '%s'"),
00220                          config->GetPath().c_str(), 
00221                          oldstate.oldpath.c_str(), 
00222                          oldstate.chdepth, oldstate.leafid, 
00223                          oldstate.group.c_str());
00224         }
00225 } 
00226 
00227 mutString configtree::GetPath()
00228 {
00229         return config -> GetPath();
00230 }
00231 
00232 void configtree::SetPath(const mutStringRef path)
00233 {
00234         DEBUGLOG(config,_T("setting path directly to '%s'"),path.c_str());
00235         config->SetPath(path);
00236 }
00237 
00238 
00239 
00240 

Erzeugt am Sun Aug 21 2011 10:51:54 für Mutabor von doxygen 1.7.4