|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifndef CONFIGIMPL_H
|
|
Packit |
1c1d7e |
#define CONFIGIMPL_H
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <qstrlist.h>
|
|
Packit |
1c1d7e |
#include <qdict.h>
|
|
Packit |
1c1d7e |
#include <qlist.h>
|
|
Packit |
1c1d7e |
#include <qregexp.h>
|
|
Packit |
1c1d7e |
#include "ftextstream.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Abstract base class for any configuration option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
friend class ConfigImpl;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! The type of option */
|
|
Packit |
1c1d7e |
enum OptionType
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
O_Info, //
|
|
Packit |
1c1d7e |
O_List, //
|
|
Packit |
1c1d7e |
O_Enum, //
|
|
Packit |
1c1d7e |
O_String, //
|
|
Packit |
1c1d7e |
O_Int, //
|
|
Packit |
1c1d7e |
O_Bool, //
|
|
Packit |
1c1d7e |
O_Obsolete, //
|
|
Packit |
1c1d7e |
O_Disabled //
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
enum
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
/*! Maximum length of an option in the config file. Used for
|
|
Packit |
1c1d7e |
* alignment purposes.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
MAX_OPTION_LENGTH = 23
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
ConfigOption(OptionType t) : m_kind(t)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_spaces.fill(' ',40);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
virtual ~ConfigOption()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! returns the kind of option this is. */
|
|
Packit |
1c1d7e |
OptionType kind() const { return m_kind; }
|
|
Packit |
1c1d7e |
QCString name() const { return m_name; }
|
|
Packit |
1c1d7e |
QCString docs() const { return m_doc; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString dependsOn() const { return m_dependency; }
|
|
Packit |
1c1d7e |
void addDependency(const char *dep) { m_dependency = dep; }
|
|
Packit |
1c1d7e |
void setEncoding(const QCString &e) { m_encoding = e; }
|
|
Packit |
1c1d7e |
void setUserComment(const QCString &u) { m_userComment += u; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
protected:
|
|
Packit |
1c1d7e |
virtual void writeTemplate(FTextStream &t,bool sl,bool upd) = 0;
|
|
Packit |
1c1d7e |
virtual void convertStrToVal() {}
|
|
Packit |
1c1d7e |
virtual void substEnvVars() = 0;
|
|
Packit |
1c1d7e |
virtual void init() {}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void writeBoolValue(FTextStream &t,bool v);
|
|
Packit |
1c1d7e |
void writeIntValue(FTextStream &t,int i);
|
|
Packit |
1c1d7e |
void writeStringValue(FTextStream &t,QCString &s);
|
|
Packit |
1c1d7e |
void writeStringList(FTextStream &t,QStrList &l);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString m_spaces;
|
|
Packit |
1c1d7e |
QCString m_name;
|
|
Packit |
1c1d7e |
QCString m_doc;
|
|
Packit |
1c1d7e |
QCString m_dependency;
|
|
Packit |
1c1d7e |
QCString m_encoding;
|
|
Packit |
1c1d7e |
QCString m_userComment;
|
|
Packit |
1c1d7e |
OptionType m_kind;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Section marker for grouping the configuration options.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigInfo : public ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
ConfigInfo(const char *name,const char *doc)
|
|
Packit |
1c1d7e |
: ConfigOption(O_Info)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_name = name;
|
|
Packit |
1c1d7e |
m_doc = doc;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &t, bool sl,bool);
|
|
Packit |
1c1d7e |
void substEnvVars() {}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class respresenting a list type option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigList : public ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
enum WidgetType { String, File, Dir, FileAndDir };
|
|
Packit |
1c1d7e |
ConfigList(const char *name,const char *doc)
|
|
Packit |
1c1d7e |
: ConfigOption(O_List)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_name = name;
|
|
Packit |
1c1d7e |
m_doc = doc;
|
|
Packit |
1c1d7e |
m_widgetType = String;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
void addValue(const char *v) { m_defaultValue.append(v); }
|
|
Packit |
1c1d7e |
void setWidgetType(WidgetType w) { m_widgetType = w; }
|
|
Packit |
1c1d7e |
WidgetType widgetType() const { return m_widgetType; }
|
|
Packit |
1c1d7e |
QStrList *valueRef() { return &m_value; }
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &t,bool sl,bool);
|
|
Packit |
1c1d7e |
void substEnvVars();
|
|
Packit |
1c1d7e |
void init() { m_value = m_defaultValue; }
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QStrList m_value;
|
|
Packit |
1c1d7e |
QStrList m_defaultValue;
|
|
Packit |
1c1d7e |
WidgetType m_widgetType;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class representing an enum type option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigEnum : public ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
ConfigEnum(const char *name,const char *doc,const char *defVal)
|
|
Packit |
1c1d7e |
: ConfigOption(O_Enum)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_name = name;
|
|
Packit |
1c1d7e |
m_doc = doc;
|
|
Packit |
1c1d7e |
m_value = defVal;
|
|
Packit |
1c1d7e |
m_defValue = defVal;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
void addValue(const char *v) { m_valueRange.append(v); }
|
|
Packit |
1c1d7e |
QStrListIterator iterator()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return QStrListIterator(m_valueRange);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QCString *valueRef() { return &m_value; }
|
|
Packit |
1c1d7e |
void substEnvVars();
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &t,bool sl,bool);
|
|
Packit |
1c1d7e |
void init() { m_value = m_defValue.copy(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QStrList m_valueRange;
|
|
Packit |
1c1d7e |
QCString m_value;
|
|
Packit |
1c1d7e |
QCString m_defValue;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class representing a string type option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigString : public ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
enum WidgetType { String, File, Dir, Image };
|
|
Packit |
1c1d7e |
ConfigString(const char *name,const char *doc)
|
|
Packit |
1c1d7e |
: ConfigOption(O_String)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_name = name;
|
|
Packit |
1c1d7e |
m_doc = doc;
|
|
Packit |
1c1d7e |
m_widgetType = String;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
~ConfigString()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
void setWidgetType(WidgetType w) { m_widgetType = w; }
|
|
Packit |
1c1d7e |
WidgetType widgetType() const { return m_widgetType; }
|
|
Packit |
1c1d7e |
void setDefaultValue(const char *v) { m_defValue = v; }
|
|
Packit |
1c1d7e |
QCString *valueRef() { return &m_value; }
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &t,bool sl,bool);
|
|
Packit |
1c1d7e |
void substEnvVars();
|
|
Packit |
1c1d7e |
void init() { m_value = m_defValue.copy(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QCString m_value;
|
|
Packit |
1c1d7e |
QCString m_defValue;
|
|
Packit |
1c1d7e |
WidgetType m_widgetType;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class representing an integer type option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigInt : public ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
ConfigInt(const char *name,const char *doc,int minVal,int maxVal,int defVal)
|
|
Packit |
1c1d7e |
: ConfigOption(O_Int)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_name = name;
|
|
Packit |
1c1d7e |
m_doc = doc;
|
|
Packit |
1c1d7e |
m_value = defVal;
|
|
Packit |
1c1d7e |
m_defValue = defVal;
|
|
Packit |
1c1d7e |
m_minVal = minVal;
|
|
Packit |
1c1d7e |
m_maxVal = maxVal;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QCString *valueStringRef() { return &m_valueString; }
|
|
Packit |
1c1d7e |
int *valueRef() { return &m_value; }
|
|
Packit |
1c1d7e |
int minVal() const { return m_minVal; }
|
|
Packit |
1c1d7e |
int maxVal() const { return m_maxVal; }
|
|
Packit |
1c1d7e |
void convertStrToVal();
|
|
Packit |
1c1d7e |
void substEnvVars();
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &t,bool sl,bool upd);
|
|
Packit |
1c1d7e |
void init() { m_value = m_defValue; }
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
int m_value;
|
|
Packit |
1c1d7e |
int m_defValue;
|
|
Packit |
1c1d7e |
int m_minVal;
|
|
Packit |
1c1d7e |
int m_maxVal;
|
|
Packit |
1c1d7e |
QCString m_valueString;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class representing a Boolean type option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigBool : public ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
ConfigBool(const char *name,const char *doc,bool defVal)
|
|
Packit |
1c1d7e |
: ConfigOption(O_Bool)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_name = name;
|
|
Packit |
1c1d7e |
m_doc = doc;
|
|
Packit |
1c1d7e |
m_value = defVal;
|
|
Packit |
1c1d7e |
m_defValue = defVal;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QCString *valueStringRef() { return &m_valueString; }
|
|
Packit |
1c1d7e |
bool *valueRef() { return &m_value; }
|
|
Packit |
1c1d7e |
void convertStrToVal();
|
|
Packit |
1c1d7e |
void substEnvVars();
|
|
Packit |
1c1d7e |
void setValueString(const QCString &v) { m_valueString = v; }
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &t,bool sl,bool upd);
|
|
Packit |
1c1d7e |
void init() { m_value = m_defValue; }
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
bool m_value;
|
|
Packit |
1c1d7e |
bool m_defValue;
|
|
Packit |
1c1d7e |
QCString m_valueString;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Section marker for obsolete options
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigObsolete : public ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
ConfigObsolete(const char *name) : ConfigOption(O_Obsolete)
|
|
Packit |
1c1d7e |
{ m_name = name; }
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &,bool,bool);
|
|
Packit |
1c1d7e |
void substEnvVars() {}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Section marker for compile time optional options
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigDisabled : public ConfigOption
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
ConfigDisabled(const char *name) : ConfigOption(O_Disabled)
|
|
Packit |
1c1d7e |
{ m_name = name; }
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &,bool,bool);
|
|
Packit |
1c1d7e |
void substEnvVars() {}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// some convenience macros for access the config options
|
|
Packit |
1c1d7e |
#define ConfigImpl_getString(val) ConfigImpl::instance()->getString(__FILE__,__LINE__,val)
|
|
Packit |
1c1d7e |
#define ConfigImpl_getInt(val) ConfigImpl::instance()->getInt(__FILE__,__LINE__,val)
|
|
Packit |
1c1d7e |
#define ConfigImpl_getList(val) ConfigImpl::instance()->getList(__FILE__,__LINE__,val)
|
|
Packit |
1c1d7e |
#define ConfigImpl_getEnum(val) ConfigImpl::instance()->getEnum(__FILE__,__LINE__,val)
|
|
Packit |
1c1d7e |
#define ConfigImpl_getBool(val) ConfigImpl::instance()->getBool(__FILE__,__LINE__,val)
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Singleton for configuration variables.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* This object holds the global static variables
|
|
Packit |
1c1d7e |
* read from a user-supplied configuration file.
|
|
Packit |
1c1d7e |
* The static member instance() can be used to get
|
|
Packit |
1c1d7e |
* a pointer to the one and only instance.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Set all variables to their default values by
|
|
Packit |
1c1d7e |
* calling Config::instance()->init()
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class ConfigImpl
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
/////////////////////////////
|
|
Packit |
1c1d7e |
// public API
|
|
Packit |
1c1d7e |
/////////////////////////////
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the one and only instance of this class */
|
|
Packit |
1c1d7e |
static ConfigImpl *instance()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_instance==0) m_instance = new ConfigImpl;
|
|
Packit |
1c1d7e |
return m_instance;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/*! Delete the instance */
|
|
Packit |
1c1d7e |
static void deleteInstance()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
delete m_instance;
|
|
Packit |
1c1d7e |
m_instance=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns an iterator that can by used to iterate over the
|
|
Packit |
1c1d7e |
* configuration options.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
QListIterator<ConfigOption> iterator()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return QListIterator<ConfigOption>(*m_options);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*!
|
|
Packit |
1c1d7e |
* @name Getting configuration values.
|
|
Packit |
1c1d7e |
* @{
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the value of the string option with name \a fileName.
|
|
Packit |
1c1d7e |
* The arguments \a num and \a name are for debugging purposes only.
|
|
Packit |
1c1d7e |
* There is a convenience function Config_getString() for this.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
QCString &getString(const char *fileName,int num,const char *name) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the value of the list option with name \a fileName.
|
|
Packit |
1c1d7e |
* The arguments \a num and \a name are for debugging purposes only.
|
|
Packit |
1c1d7e |
* There is a convenience function Config_getList() for this.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
QStrList &getList(const char *fileName,int num,const char *name) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the value of the enum option with name \a fileName.
|
|
Packit |
1c1d7e |
* The arguments \a num and \a name are for debugging purposes only.
|
|
Packit |
1c1d7e |
* There is a convenience function Config_getEnum() for this.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
QCString &getEnum(const char *fileName,int num,const char *name) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the value of the integer option with name \a fileName.
|
|
Packit |
1c1d7e |
* The arguments \a num and \a name are for debugging purposes only.
|
|
Packit |
1c1d7e |
* There is a convenience function Config_getInt() for this.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
int &getInt(const char *fileName,int num,const char *name) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the value of the boolean option with name \a fileName.
|
|
Packit |
1c1d7e |
* The arguments \a num and \a name are for debugging purposes only.
|
|
Packit |
1c1d7e |
* There is a convenience function Config_getBool() for this.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
bool &getBool(const char *fileName,int num,const char *name) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the ConfigOption corresponding with \a name or 0 if
|
|
Packit |
1c1d7e |
* the option is not supported.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
ConfigOption *get(const char *name) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return m_dict->find(name);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/* @} */
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*!
|
|
Packit |
1c1d7e |
* @name Adding configuration options.
|
|
Packit |
1c1d7e |
* @{
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Starts a new configuration section with \a name and description \a doc.
|
|
Packit |
1c1d7e |
* \returns An object representing the option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
ConfigInfo *addInfo(const char *name,const char *doc)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ConfigInfo *result = new ConfigInfo(name,doc);
|
|
Packit |
1c1d7e |
m_options->append(result);
|
|
Packit |
1c1d7e |
return result;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Adds a new string option with \a name and documentation \a doc.
|
|
Packit |
1c1d7e |
* \returns An object representing the option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
ConfigString *addString(const char *name,
|
|
Packit |
1c1d7e |
const char *doc)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ConfigString *result = new ConfigString(name,doc);
|
|
Packit |
1c1d7e |
m_options->append(result);
|
|
Packit |
1c1d7e |
m_dict->insert(name,result);
|
|
Packit |
1c1d7e |
return result;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Adds a new enumeration option with \a name and documentation \a doc
|
|
Packit |
1c1d7e |
* and initial value \a defVal.
|
|
Packit |
1c1d7e |
* \returns An object representing the option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
ConfigEnum *addEnum(const char *name,
|
|
Packit |
1c1d7e |
const char *doc,
|
|
Packit |
1c1d7e |
const char *defVal)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ConfigEnum *result = new ConfigEnum(name,doc,defVal);
|
|
Packit |
1c1d7e |
m_options->append(result);
|
|
Packit |
1c1d7e |
m_dict->insert(name,result);
|
|
Packit |
1c1d7e |
return result;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Adds a new string option with \a name and documentation \a doc.
|
|
Packit |
1c1d7e |
* \returns An object representing the option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
ConfigList *addList(const char *name,
|
|
Packit |
1c1d7e |
const char *doc)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ConfigList *result = new ConfigList(name,doc);
|
|
Packit |
1c1d7e |
m_options->append(result);
|
|
Packit |
1c1d7e |
m_dict->insert(name,result);
|
|
Packit |
1c1d7e |
return result;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Adds a new integer option with \a name and documentation \a doc.
|
|
Packit |
1c1d7e |
* The integer has a range between \a minVal and \a maxVal and a
|
|
Packit |
1c1d7e |
* default value of \a defVal.
|
|
Packit |
1c1d7e |
* \returns An object representing the option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
ConfigInt *addInt(const char *name,
|
|
Packit |
1c1d7e |
const char *doc,
|
|
Packit |
1c1d7e |
int minVal,int maxVal,int defVal)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ConfigInt *result = new ConfigInt(name,doc,minVal,maxVal,defVal);
|
|
Packit |
1c1d7e |
m_options->append(result);
|
|
Packit |
1c1d7e |
m_dict->insert(name,result);
|
|
Packit |
1c1d7e |
return result;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Adds a new boolean option with \a name and documentation \a doc.
|
|
Packit |
1c1d7e |
* The boolean has a default value of \a defVal.
|
|
Packit |
1c1d7e |
* \returns An object representing the option.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
ConfigBool *addBool(const char *name,
|
|
Packit |
1c1d7e |
const char *doc,
|
|
Packit |
1c1d7e |
bool defVal)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ConfigBool *result = new ConfigBool(name,doc,defVal);
|
|
Packit |
1c1d7e |
m_options->append(result);
|
|
Packit |
1c1d7e |
m_dict->insert(name,result);
|
|
Packit |
1c1d7e |
return result;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/*! Adds an option that has become obsolete. */
|
|
Packit |
1c1d7e |
ConfigOption *addObsolete(const char *name)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ConfigObsolete *option = new ConfigObsolete(name);
|
|
Packit |
1c1d7e |
m_dict->insert(name,option);
|
|
Packit |
1c1d7e |
m_obsolete->append(option);
|
|
Packit |
1c1d7e |
return option;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/*! Adds an option that has been disabled at compile time. */
|
|
Packit |
1c1d7e |
ConfigOption *addDisabled(const char *name)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ConfigDisabled *option = new ConfigDisabled(name);
|
|
Packit |
1c1d7e |
m_dict->insert(name,option);
|
|
Packit |
1c1d7e |
m_disabled->append(option);
|
|
Packit |
1c1d7e |
return option;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/*! @} */
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Writes a template configuration to stream \a t. If \a shortIndex
|
|
Packit |
1c1d7e |
* is \c TRUE the description of each configuration option will
|
|
Packit |
1c1d7e |
* be omitted.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void writeTemplate(FTextStream &t,bool shortIndex,bool updateOnly);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void setHeader(const char *header) { m_header = header; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/////////////////////////////
|
|
Packit |
1c1d7e |
// internal API
|
|
Packit |
1c1d7e |
/////////////////////////////
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Converts the string values read from the configuration file
|
|
Packit |
1c1d7e |
* to real values for non-string type options (like int, and bools)
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void convertStrToVal();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Replaces references to environment variable by the actual value
|
|
Packit |
1c1d7e |
* of the environment variable.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void substituteEnvironmentVars();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Initialize config variables to their default value */
|
|
Packit |
1c1d7e |
void init();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Parse a configuration data in string \a str.
|
|
Packit |
1c1d7e |
* \returns TRUE if successful, or FALSE if the string could not be
|
|
Packit |
1c1d7e |
* parsed.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
//bool parseString(const char *fn,const char *str);
|
|
Packit |
1c1d7e |
bool parseString(const char *fn,const char *str,bool upd = FALSE);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Parse a configuration file with name \a fn.
|
|
Packit |
1c1d7e |
* \returns TRUE if successful, FALSE if the file could not be
|
|
Packit |
1c1d7e |
* opened or read.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
bool parse(const char *fn,bool upd = FALSE);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Called from the constructor, will add doxygen's default options
|
|
Packit |
1c1d7e |
* to the configuration object
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void create();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Append user start comment
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void appendStartComment(const QCString &u)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_startComment += u;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/*! Append user comment
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void appendUserComment(const QCString &u)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_userComment += u;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/*! Take the user start comment and reset it internally
|
|
Packit |
1c1d7e |
* \returns user start comment
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
QCString takeStartComment()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString result=m_startComment;
|
|
Packit |
1c1d7e |
m_startComment.resize(0);
|
|
Packit |
1c1d7e |
return result.replace(QRegExp("\r"),"");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/*! Take the user comment and reset it internally
|
|
Packit |
1c1d7e |
* \returns user comment
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
QCString takeUserComment()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QCString result=m_userComment;
|
|
Packit |
1c1d7e |
m_userComment.resize(0);
|
|
Packit |
1c1d7e |
return result.replace(QRegExp("\r"),"");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
protected:
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ConfigImpl()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_options = new QList<ConfigOption>;
|
|
Packit |
1c1d7e |
m_obsolete = new QList<ConfigOption>;
|
|
Packit |
1c1d7e |
m_disabled = new QList<ConfigOption>;
|
|
Packit |
1c1d7e |
m_dict = new QDict<ConfigOption>(257);
|
|
Packit |
1c1d7e |
m_options->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
m_obsolete->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
m_disabled->setAutoDelete(TRUE);
|
|
Packit |
1c1d7e |
m_initialized = FALSE;
|
|
Packit |
1c1d7e |
create();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
~ConfigImpl()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
delete m_options;
|
|
Packit |
1c1d7e |
delete m_obsolete;
|
|
Packit |
1c1d7e |
delete m_disabled;
|
|
Packit |
1c1d7e |
delete m_dict;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QList<ConfigOption> *m_options;
|
|
Packit |
1c1d7e |
QList<ConfigOption> *m_obsolete;
|
|
Packit |
1c1d7e |
QList<ConfigOption> *m_disabled;
|
|
Packit |
1c1d7e |
QDict<ConfigOption> *m_dict;
|
|
Packit |
1c1d7e |
static ConfigImpl *m_instance;
|
|
Packit |
1c1d7e |
QCString m_startComment;
|
|
Packit |
1c1d7e |
QCString m_userComment;
|
|
Packit |
1c1d7e |
bool m_initialized;
|
|
Packit |
1c1d7e |
QCString m_header;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#endif
|