00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef ARIDE_PARAMETER_H
00021 #define ARIDE_PARAMETER_H
00022
00023 #include <assert.h>
00024
00025 #include <ardev/ardev.h>
00026 #include <ardev/debug.h>
00027
00028 #define signals protected
00029
00030 #include <QLineEdit>
00031 #include <QCheckBox>
00032
00033 #include "cm_project.h"
00034
00035
00036 class Parameter : public QObject
00037 {
00038 Q_OBJECT
00039 public:
00040 Parameter(QString _Name, QString _Description, QString _DefaultValue="") {Name = _Name;Description = _Description;DefaultValue=_DefaultValue;};
00041 virtual ~Parameter() {};
00042
00043 QString Name;
00044 QString Type;
00045 QString Description;
00046 QString DefaultValue;
00047
00048 virtual QString toString() = 0;
00049 virtual QString fromString(const QString & inString) = 0;
00050
00051 virtual void update() {};
00052
00053 virtual QWidget * CreateTypeWidget()=0;
00054 signals:
00055 void requestUpdate();
00056 };
00057
00058
00059 class StringParameter : public Parameter
00060 {
00061 Q_OBJECT
00062
00063 public:
00064 StringParameter(QString _Name, QString _Description, QString _DefaultValue="") : Parameter(_Name,_Description,_DefaultValue) {id=0;Type="String";};
00065 virtual ~StringParameter() {};
00066
00067 QString Value;
00068 virtual QWidget * CreateTypeWidget()
00069 {
00070 QLineEdit * temp = new QLineEdit(toString());
00071 id = temp->winId();
00072 temp->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding));
00073 connect(temp,SIGNAL(textChanged(const QString&)),this,SLOT(ValueChanged(const QString &)));
00074 return temp;
00075 };
00076 virtual QString toString() {return Value;};
00077 virtual QString fromString(const QString & inString)
00078 {
00079 QLineEdit * temp = reinterpret_cast<QLineEdit*> (QWidget::find(id));
00080 if (inString == Value)
00081 return Value;
00082 Value = inString;
00083 if (temp && inString != temp->text())
00084 temp->setText(inString);
00085 return Value;
00086 };
00087 protected slots:
00088 virtual void ValueChanged(const QString & NewValue) {fromString(NewValue);};
00089
00090 protected:
00091 WId id;
00092
00093 };
00094
00095 class NameParameter : public StringParameter
00096 {
00097 Q_OBJECT
00098
00099 public:
00100 NameParameter(QString _Name, QString _Description, QString _DefaultValue="") : StringParameter(_Name,_Description,_DefaultValue) {Type="Name";};
00101 virtual ~NameParameter() {};
00102
00103 protected slots:
00104 virtual void ValueChanged(const QString & NewValue) {fromString(NewValue);emit requestUpdate();};
00105
00106
00107
00108 };
00109
00110 class IntParameter : public StringParameter
00111 {
00112 public:
00113 IntParameter(QString _Name, QString _Description, QString _DefaultValue="") : StringParameter(_Name,_Description,_DefaultValue) {Type="int";};
00114
00115 QString toString() {return QString().setNum(Value);};
00116 QString fromString(const QString & inString) {Value=inString.toInt(); return toString();};
00117
00118 int Value;
00119 };
00120
00121 class FloatParameter : public StringParameter
00122 {
00123 public:
00124 FloatParameter(QString _Name, QString _Description, QString _DefaultValue="") : StringParameter(_Name,_Description,_DefaultValue) {Type="float";};
00125
00126
00127 QString toString() {return QString().setNum(Value);};
00128 QString fromString(const QString & inString) {Value=inString.toFloat(); return toString();};
00129
00130 float Value;
00131 };
00132
00133 class DoubleParameter : public StringParameter
00134 {
00135 public:
00136 DoubleParameter(QString _Name, QString _Description, QString _DefaultValue="") : StringParameter(_Name,_Description,_DefaultValue) {Type="double";};
00137
00138 QString toString() {return QString().setNum(Value);};
00139 QString fromString(const QString & inString) {Value=inString.toDouble(); return toString();};
00140
00141 double Value;
00142 };
00143
00144 class BooleanParameter : public Parameter
00145 {
00146 Q_OBJECT
00147
00148 public:
00149 BooleanParameter(QString _Name, QString _Description, QString _DefaultValue="") : Parameter(_Name,_Description,_DefaultValue)
00150 {Type="boolean";id = 0;Value=false;};
00151 virtual ~BooleanParameter() {};
00152
00153 bool Value;
00154 QWidget * CreateTypeWidget()
00155 {
00156 QCheckBox * widget = new QCheckBox();
00157 id=widget->winId();
00158 widget->setChecked(Value);
00159 connect(widget,SIGNAL(toggled(bool)),this,SLOT(ValueChanged(bool)));
00160 return widget;
00161 };
00162 virtual QString toString() {return Value ? "True" : "False";};
00163 virtual QString fromString(const QString & inString)
00164 {
00165 QCheckBox * widget = reinterpret_cast<QCheckBox*> (QWidget::find(id));
00166 bool inValue = (inString == "True");
00167 if (inValue == Value)
00168 return toString();
00169 Value = inValue;
00170 if (widget)
00171 widget->setChecked(Value);
00172 return toString();
00173 };
00174 protected slots:
00175 void ValueChanged(bool State) {Value = State;};
00176 protected:
00177 WId id;
00178 };
00179
00180
00181
00182 class ARPointParameter : public Parameter
00183 {
00184 Q_OBJECT
00185
00186 public:
00187 ARPointParameter(QString _Name, QString _Description, QString _DefaultValue="") : Parameter(_Name,_Description,_DefaultValue) {Type="arpoint";};
00188 virtual ~ARPointParameter() {};
00189
00190 virtual QWidget * CreateTypeWidget();
00191
00192 virtual QString toString();
00193 virtual QString fromString(const QString & inString);
00194
00195 ARPoint Value;
00196
00197 protected slots:
00198 void xChange(const QString & inString) {Value.x = inString.toDouble();};
00199 void yChange(const QString & inString) {Value.y = inString.toDouble();};
00200 void zChange(const QString & inString) {Value.z = inString.toDouble();};
00201 };
00202
00203 class ARPositionParameter : public Parameter
00204 {
00205 Q_OBJECT
00206
00207 public:
00208 ARPositionParameter(QString _Name, QString _Description, QString _DefaultValue="") : Parameter(_Name,_Description,_DefaultValue) {Type="arposition";};
00209 virtual ~ARPositionParameter() {};
00210
00211 virtual QWidget * CreateTypeWidget();
00212
00213 virtual QString toString();
00214 virtual QString fromString(const QString & inString);
00215
00216 ARPosition Value;
00217
00218 protected slots:
00219 void o_xChange(const QString & inString) {Value.Origin.x = inString.toDouble();};
00220 void o_yChange(const QString & inString) {Value.Origin.y = inString.toDouble();};
00221 void o_zChange(const QString & inString) {Value.Origin.z = inString.toDouble();};
00222 void d_xChange(const QString & inString) {Value.Direction.x = DTOR(inString.toDouble());};
00223 void d_yChange(const QString & inString) {Value.Direction.y = DTOR(inString.toDouble());};
00224 void d_zChange(const QString & inString) {Value.Direction.z = DTOR(inString.toDouble());};
00225 };
00226
00227
00228 class ARColourParameter : public Parameter
00229 {
00230 Q_OBJECT
00231
00232 public:
00233 ARColourParameter(QString _Name, QString _Description, QString _DefaultValue="") : Parameter(_Name,_Description,_DefaultValue) {Type="arcolour";};
00234 virtual ~ARColourParameter() {};
00235
00236 virtual QWidget * CreateTypeWidget();
00237
00238 virtual QString toString();
00239 virtual QString fromString(const QString & inString);
00240
00241 ARColour Value;
00242
00243 protected slots:
00244 void rChange(const QString & inString) {Value.r = inString.toDouble();};
00245 void gChange(const QString & inString) {Value.g = inString.toDouble();};
00246 void bChange(const QString & inString) {Value.b = inString.toDouble();};
00247 void aChange(const QString & inString) {Value.a = inString.toDouble();};
00248 };
00249
00250
00251
00252 #endif