Go to the documentation of this file.00001 #include "rqt_mrta/config/param.h"
00002 #include "rqt_mrta/config/params.h"
00003
00004 namespace rqt_mrta
00005 {
00006 namespace config
00007 {
00008 Param::Param(Params* parent) : ParamInterface("param", parent) {}
00009
00010 Param::~Param() {}
00011
00012 QMetaType::Type Param::getType() const { return type_; }
00013
00014 QString Param::getToolTip() const { return tool_tip_; }
00015
00016 QVariant Param::getValue() const { return value_; }
00017
00018 QVariant Param::getDefaultValue() const { return default_value_; }
00019
00020 bool Param::isMandatory() const { return default_value_.isNull(); }
00021
00022 void Param::setType(const QString& type)
00023 {
00024 if (type == "bool")
00025 {
00026 setType(QMetaType::Bool);
00027 }
00028 else if (type == "int")
00029 {
00030 setType(QMetaType::Int);
00031 }
00032 else if (type == "double")
00033 {
00034 setType(QMetaType::Double);
00035 }
00036 else
00037 {
00038 setType(QMetaType::QString);
00039 }
00040 }
00041
00042 void Param::setType(const QMetaType::Type& type)
00043 {
00044 if (type != type_)
00045 {
00046 type_ = type;
00047 emit typeChanged(getFullName(), type);
00048 emit changed();
00049 }
00050 }
00051
00052 void Param::setToolTip(const QString& tool_tip)
00053 {
00054 if (tool_tip != tool_tip_)
00055 {
00056 tool_tip_ = tool_tip;
00057 emit toolTipChanged(getFullName(), tool_tip);
00058 emit changed();
00059 }
00060 }
00061
00062 void Param::setValue(const QString& value)
00063 {
00064 if (type_ == QMetaType::Bool)
00065 {
00066 setValue(QVariant::fromValue<bool>(value.toLower() == "true"));
00067 }
00068 else if (type_ == QMetaType::Int)
00069 {
00070 int v(value.toInt());
00071 setValue(v != 0 ? QVariant::fromValue<int>(v) : QVariant());
00072 }
00073 else if (type_ == QMetaType::Double)
00074 {
00075 double v(value.toDouble());
00076 setValue(v != 0.0 ? QVariant::fromValue<double>(v) : QVariant());
00077 }
00078 else
00079 {
00080 setValue(!value.isEmpty() ? QVariant::fromValue<QString>(value) : QVariant());
00081 }
00082 }
00083
00084 void Param::setValue(const QVariant& value)
00085 {
00086 if (value != value_)
00087 {
00088 value_ = value;
00089 emit valueChanged(getFullName(), value);
00090 emit changed();
00091 }
00092 }
00093
00094 void Param::setDefaultValue(const QString& value)
00095 {
00096 if (type_ == QMetaType::Bool)
00097 {
00098 setDefaultValue(QVariant::fromValue<bool>(value.toLower() == "true"));
00099 }
00100 else if (type_ == QMetaType::Int)
00101 {
00102 int v(value.toInt());
00103 setDefaultValue(v != 0 ? QVariant::fromValue<int>(v) : QVariant());
00104 }
00105 else if (type_ == QMetaType::Double)
00106 {
00107 double v(value.toDouble());
00108 setDefaultValue(v != 0.0 ? QVariant::fromValue<double>(v) : QVariant());
00109 }
00110 else
00111 {
00112 setDefaultValue(!value.isEmpty() ? QVariant::fromValue<QString>(value) : QVariant());
00113 }
00114 }
00115
00116 void Param::setDefaultValue(const QVariant& default_value)
00117 {
00118 if (default_value != default_value_)
00119 {
00120 default_value_ = default_value;
00121 emit defaultValueChanged(getFullName(), default_value);
00122 emit changed();
00123 }
00124 }
00125
00126 QString Param::validate() const
00127 {
00128 if (isMandatory() && value_.isNull())
00129 {
00130 return "The " + name_ + " parameter value must be given, because it is mandatory.";
00131 }
00132 if (tool_tip_.isEmpty())
00133 {
00134 return "The param tool tip must must be given. It helps the architecture "
00135 "users.";
00136 }
00137 return ParamInterface::validate();
00138 }
00139
00140 bool Param::isParam() const { return true; }
00141
00142 void Param::save(QSettings& settings) const
00143 {
00144 ParamInterface::save(settings);
00145 settings.setValue("type", type_);
00146 settings.setValue("value", value_);
00147 settings.setValue("default", default_value_);
00148 settings.setValue("tool_tip", tool_tip_);
00149 }
00150
00151 void Param::load(QSettings& settings)
00152 {
00153 ParamInterface::load(settings);
00154 setType(settings.value("type").toString());
00155 setValue(settings.value("value").toString());
00156 setDefaultValue(settings.value("default").toString());
00157 setToolTip(settings.value("tool_tip").toString());
00158 }
00159
00160 void Param::reset() { setValue(QString()); }
00161
00162 void Param::write(QDataStream& stream) const
00163 {
00164 ParamInterface::write(stream);
00165 stream << (int)type_;
00166 stream << value_;
00167 stream << default_value_;
00168 stream << tool_tip_;
00169 }
00170
00171 void Param::read(QDataStream& stream)
00172 {
00173 ParamInterface::read(stream);
00174 int type;
00175 QVariant value, default_value;
00176 QString tool_tip;
00177 stream >> type;
00178 setType(static_cast<QMetaType::Type>(type));
00179 stream >> value;
00180 setValue(value);
00181 stream >> default_value;
00182 setDefaultValue(default_value);
00183 stream >> tool_tip;
00184 setToolTip(tool_tip);
00185 }
00186
00187 Param& Param::operator=(const Param& config)
00188 {
00189 ParamInterface::operator=(config);
00190 setType(config.type_);
00191 setValue(config.value_);
00192 setDefaultValue(config.default_value_);
00193 setToolTip(config.tool_tip_);
00194 return *this;
00195 }
00196
00197 Param* Param::clone() const
00198 {
00199 Param* param = new Param();
00200 *param = *this;
00201 return param;
00202 }
00203
00204 QString Param::toYaml(const QString &prefix) const
00205 {
00206 return ParamInterface::toYaml(prefix) + value_.toString();
00207 }
00208 }
00209 }