cm_parameter.h

00001 /* -- 2007-05-07 -- 
00002  *  ardev - an augmented reality library for robot developers
00003  *  Copyright 2005-2007 - Toby Collett (ardev _at_ plan9.net.nz)
00004  *
00005  *  This library is free software; you can redistribute it and/or
00006  *  modify it under the terms of the GNU Lesser General Public
00007  *  License as published by the Free Software Foundation; either
00008  *  version 2.1 of the License, or (at your option) any later version.
00009  *
00010  *  This library is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00013  *  Lesser General Public License for more details.
00014  *
00015  *  You should have received a copy of the GNU Lesser General Public
00016  *  License along with this library; if not, write to the Free Software
00017  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
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 //#include <qobject.h>
00030 #include <QLineEdit>
00031 #include <QCheckBox>
00032 
00033 #include "cm_project.h"
00034 // Base Parameter Type
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 // Basic Types (string, int, double, float, boolean)
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 // ARDev Types (ie ARPoint...)
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

SourceForge.net Logo Generated on Sat May 12 15:25:43 2007 for ardev by doxygen 1.5.1