KDevelop API Documentation

parts/doxygen/config.h

Go to the documentation of this file.
00001 #ifndef CONFIG_H 00002 #define CONFIG_H 00003 00004 #include <qstrlist.h> 00005 #include <qfile.h> 00006 #include <qdict.h> 00007 #include <qptrlist.h> 00008 #include <qtextstream.h> 00009 00013 class ConfigOption 00014 { 00015 friend class Config; 00016 00017 public: 00018 00020 enum OptionType 00021 { 00022 O_Info, //<! A section header 00023 O_List, //<! A list of items 00024 O_Enum, //<! A fixed set of items 00025 O_String, //<! A single item 00026 O_Int, //<! An integer value 00027 O_Bool, //<! A boolean value 00028 O_Obsolete //<! An obsolete option 00029 }; 00030 enum 00031 { 00035 MAX_OPTION_LENGTH = 23 00036 }; 00037 ConfigOption(OptionType t) : m_kind(t) 00038 { 00039 m_spaces.fill(' ',40); 00040 } 00041 virtual ~ConfigOption() 00042 { 00043 } 00044 00046 OptionType kind() const { return m_kind; } 00047 QCString name() const { return m_name; } 00048 QCString docs() const { return m_doc; } 00049 00050 QCString dependsOn() const { return m_dependency; } 00051 void addDependency(const char *dep) { m_dependency = dep; } 00052 00053 protected: 00054 virtual void writeTemplate(QTextStream &t,bool sl,bool upd) = 0; 00055 virtual void convertStrToVal() {} 00056 virtual void substEnvVars() = 0; 00057 virtual void init() {} 00058 00059 QCString convertToComment(const QCString &s); 00060 void writeBoolValue(QTextStream &t,bool v); 00061 void writeIntValue(QTextStream &t,int i); 00062 void writeStringValue(QTextStream &t,QCString &s); 00063 void writeStringList(QTextStream &t,QStrList &l); 00064 00065 QCString m_spaces; 00066 QCString m_name; 00067 QCString m_doc; 00068 QCString m_dependency; 00069 OptionType m_kind; 00070 }; 00071 00075 class ConfigInfo : public ConfigOption 00076 { 00077 public: 00078 ConfigInfo(const char *name,const char *doc) 00079 : ConfigOption(O_Info) 00080 { 00081 m_name = name; 00082 m_doc = doc; 00083 } 00084 void writeTemplate(QTextStream &t, bool sl,bool) 00085 { 00086 if (!sl) 00087 { 00088 t << "\n"; 00089 } 00090 t << "#---------------------------------------------------------------------------\n"; 00091 t << "# " << m_doc << endl; 00092 t << "#---------------------------------------------------------------------------\n"; 00093 } 00094 void substEnvVars() {} 00095 }; 00096 00100 class ConfigList : public ConfigOption 00101 { 00102 public: 00103 enum WidgetType { String, File, Dir, FileAndDir }; 00104 ConfigList(const char *name,const char *doc) 00105 : ConfigOption(O_List) 00106 { 00107 m_name = name; 00108 m_doc = doc; 00109 m_widgetType = String; 00110 } 00111 void addValue(const char *v) { m_value.append(v); } 00112 void setWidgetType(WidgetType w) { m_widgetType = w; } 00113 WidgetType widgetType() const { return m_widgetType; } 00114 QStrList *valueRef() { return &m_value; } 00115 void writeTemplate(QTextStream &t,bool sl,bool) 00116 { 00117 if (!sl) 00118 { 00119 t << endl; 00120 t << convertToComment(m_doc); 00121 t << endl; 00122 } 00123 t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; 00124 writeStringList(t,m_value); 00125 t << "\n"; 00126 } 00127 void substEnvVars(); 00128 void init() { m_value.clear(); } 00129 private: 00130 QStrList m_value; 00131 WidgetType m_widgetType; 00132 }; 00133 00137 class ConfigEnum : public ConfigOption 00138 { 00139 public: 00140 ConfigEnum(const char *name,const char *doc,const char *defVal) 00141 : ConfigOption(O_Enum) 00142 { 00143 m_name = name; 00144 m_doc = doc; 00145 m_value = defVal; 00146 m_defValue = defVal; 00147 } 00148 void addValue(const char *v) { m_valueRange.append(v); } 00149 QStrListIterator iterator() 00150 { 00151 return QStrListIterator(m_valueRange); 00152 } 00153 QCString *valueRef() { return &m_value; } 00154 void substEnvVars(); 00155 void writeTemplate(QTextStream &t,bool sl,bool) 00156 { 00157 if (!sl) 00158 { 00159 t << endl; 00160 t << convertToComment(m_doc); 00161 t << endl; 00162 } 00163 t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; 00164 writeStringValue(t,m_value); 00165 t << "\n"; 00166 } 00167 void init() { m_value = m_defValue.copy(); } 00168 00169 private: 00170 QStrList m_valueRange; 00171 QCString m_value; 00172 QCString m_defValue; 00173 }; 00174 00178 class ConfigString : public ConfigOption 00179 { 00180 public: 00181 enum WidgetType { String, File, Dir }; 00182 ConfigString(const char *name,const char *doc) 00183 : ConfigOption(O_String) 00184 { 00185 m_name = name; 00186 m_doc = doc; 00187 m_widgetType = String; 00188 } 00189 ~ConfigString() 00190 { 00191 } 00192 void setWidgetType(WidgetType w) { m_widgetType = w; } 00193 WidgetType widgetType() const { return m_widgetType; } 00194 void setDefaultValue(const char *v) { m_defValue = v; } 00195 QCString *valueRef() { return &m_value; } 00196 void writeTemplate(QTextStream &t,bool sl,bool) 00197 { 00198 if (!sl) 00199 { 00200 t << endl; 00201 t << convertToComment(m_doc); 00202 t << endl; 00203 } 00204 t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; 00205 writeStringValue(t,m_value); 00206 t << "\n"; 00207 } 00208 void substEnvVars(); 00209 void init() { m_value = m_defValue.copy(); } 00210 00211 private: 00212 QCString m_value; 00213 QCString m_defValue; 00214 WidgetType m_widgetType; 00215 }; 00216 00220 class ConfigInt : public ConfigOption 00221 { 00222 public: 00223 ConfigInt(const char *name,const char *doc,int minVal,int maxVal,int defVal) 00224 : ConfigOption(O_Int) 00225 { 00226 m_name = name; 00227 m_doc = doc; 00228 m_value = defVal; 00229 m_defValue = defVal; 00230 m_minVal = minVal; 00231 m_maxVal = maxVal; 00232 } 00233 QCString *valueStringRef() { return &m_valueString; } 00234 int *valueRef() { return &m_value; } 00235 int minVal() const { return m_minVal; } 00236 int maxVal() const { return m_maxVal; } 00237 void convertStrToVal(); 00238 void substEnvVars(); 00239 void writeTemplate(QTextStream &t,bool sl,bool upd) 00240 { 00241 if (!sl) 00242 { 00243 t << endl; 00244 t << convertToComment(m_doc); 00245 t << endl; 00246 } 00247 t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; 00248 if (upd && !m_valueString.isEmpty()) 00249 { 00250 writeStringValue(t,m_valueString); 00251 } 00252 else 00253 { 00254 writeIntValue(t,m_value); 00255 } 00256 t << "\n"; 00257 } 00258 void init() { m_value = m_defValue; } 00259 private: 00260 int m_value; 00261 int m_defValue; 00262 int m_minVal; 00263 int m_maxVal; 00264 QCString m_valueString; 00265 }; 00266 00270 class ConfigBool : public ConfigOption 00271 { 00272 public: 00273 ConfigBool(const char *name,const char *doc,bool defVal) 00274 : ConfigOption(O_Bool) 00275 { 00276 m_name = name; 00277 m_doc = doc; 00278 m_value = defVal; 00279 m_defValue = defVal; 00280 } 00281 QCString *valueStringRef() { return &m_valueString; } 00282 bool *valueRef() { return &m_value; } 00283 void convertStrToVal(); 00284 void substEnvVars(); 00285 void setValueString(const QCString &v) { m_valueString = v; } 00286 void writeTemplate(QTextStream &t,bool sl,bool upd) 00287 { 00288 if (!sl) 00289 { 00290 t << endl; 00291 t << convertToComment(m_doc); 00292 t << endl; 00293 } 00294 t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "= "; 00295 if (upd && !m_valueString.isEmpty()) 00296 { 00297 writeStringValue(t,m_valueString); 00298 } 00299 else 00300 { 00301 writeBoolValue(t,m_value); 00302 } 00303 t << "\n"; 00304 } 00305 void init() { m_value = m_defValue; } 00306 private: 00307 bool m_value; 00308 bool m_defValue; 00309 QCString m_valueString; 00310 }; 00311 00315 class ConfigObsolete : public ConfigOption 00316 { 00317 public: 00318 ConfigObsolete(OptionType t) : ConfigOption(t) {} 00319 void writeTemplate(QTextStream &,bool,bool) {} 00320 void substEnvVars() {} 00321 }; 00322 00323 00324 // some convenience macros 00325 #define Config_getString(val) Config::instance()->getString(__FILE__,__LINE__,val) 00326 #define Config_getInt(val) Config::instance()->getInt(__FILE__,__LINE__,val) 00327 #define Config_getList(val) Config::instance()->getList(__FILE__,__LINE__,val) 00328 #define Config_getEnum(val) Config::instance()->getEnum(__FILE__,__LINE__,val) 00329 #define Config_getBool(val) Config::instance()->getBool(__FILE__,__LINE__,val) 00330 00342 class Config 00343 { 00344 public: 00346 // public API 00348 00350 static Config *instance() 00351 { 00352 if (m_instance==0) m_instance = new Config; 00353 return m_instance; 00354 } 00356 static void deleteInstance() 00357 { 00358 delete m_instance; 00359 } 00360 00364 QPtrListIterator<ConfigOption> iterator() 00365 { 00366 return QPtrListIterator<ConfigOption>(*m_options); 00367 } 00368 00378 QCString &getString(const char *fileName,int num,const char *name) const; 00379 00384 QStrList &getList(const char *fileName,int num,const char *name) const; 00385 00390 QCString &getEnum(const char *fileName,int num,const char *name) const; 00391 00396 int &getInt(const char *fileName,int num,const char *name) const; 00397 00402 bool &getBool(const char *fileName,int num,const char *name) const; 00403 00407 ConfigOption *get(const char *name) const 00408 { 00409 return m_dict->find(name); 00410 } 00411 /* @} */ 00412 00421 ConfigInfo *addInfo(const char *name,const char *doc) 00422 { 00423 ConfigInfo *result = new ConfigInfo(name,doc); 00424 m_options->append(result); 00425 return result; 00426 } 00427 00431 ConfigString *addString(const char *name, 00432 const char *doc) 00433 { 00434 ConfigString *result = new ConfigString(name,doc); 00435 m_options->append(result); 00436 m_dict->insert(name,result); 00437 return result; 00438 } 00439 00444 ConfigEnum *addEnum(const char *name, 00445 const char *doc, 00446 const char *defVal) 00447 { 00448 ConfigEnum *result = new ConfigEnum(name,doc,defVal); 00449 m_options->append(result); 00450 m_dict->insert(name,result); 00451 return result; 00452 } 00453 00457 ConfigList *addList(const char *name, 00458 const char *doc) 00459 { 00460 ConfigList *result = new ConfigList(name,doc); 00461 m_options->append(result); 00462 m_dict->insert(name,result); 00463 return result; 00464 } 00465 00471 ConfigInt *addInt(const char *name, 00472 const char *doc, 00473 int minVal,int maxVal,int defVal) 00474 { 00475 ConfigInt *result = new ConfigInt(name,doc,minVal,maxVal,defVal); 00476 m_options->append(result); 00477 m_dict->insert(name,result); 00478 return result; 00479 } 00480 00485 ConfigBool *addBool(const char *name, 00486 const char *doc, 00487 bool defVal) 00488 { 00489 ConfigBool *result = new ConfigBool(name,doc,defVal); 00490 m_options->append(result); 00491 m_dict->insert(name,result); 00492 return result; 00493 } 00495 ConfigOption *addObsolete(const char *name) 00496 { 00497 ConfigObsolete *option = new ConfigObsolete(ConfigOption::O_Obsolete); 00498 m_dict->insert(name,option); 00499 m_obsolete->append(option); 00500 return option; 00501 } 00508 void writeTemplate(QFile *f,bool shortIndex,bool updateOnly); 00509 00511 // internal API 00513 00517 void convertStrToVal(); 00518 00522 void substituteEnvironmentVars(); 00523 00527 void check(); 00528 00530 void init(); 00531 00536 bool parse(const char *fn); 00537 00541 void create(); 00542 00543 protected: 00544 00545 Config() 00546 { 00547 m_options = new QPtrList<ConfigOption>; 00548 m_obsolete = new QPtrList<ConfigOption>; 00549 m_dict = new QDict<ConfigOption>(257); 00550 m_options->setAutoDelete(TRUE); 00551 m_obsolete->setAutoDelete(TRUE); 00552 m_initialized = FALSE; 00553 create(); 00554 } 00555 ~Config() 00556 { 00557 delete m_options; 00558 delete m_obsolete; 00559 delete m_dict; 00560 } 00561 00562 private: 00563 QPtrList<ConfigOption> *m_options; 00564 QPtrList<ConfigOption> *m_obsolete; 00565 QDict<ConfigOption> *m_dict; 00566 static Config *m_instance; 00567 bool m_initialized; 00568 }; 00569 00570 #endif
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:51 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003