00001
00002
00004
00005 #ifndef FIELDS_H
00006 #define FIELDS_H
00007
00008 #include <sstream>
00009
00010 #include <qwidget.h>
00011 #include <qtabwidget.h>
00012 #include <qlayout.h>
00013 #include <qscrollview.h>
00014 #include <qframe.h>
00015 #include <qpushbutton.h>
00016
00017 #include "SFFloatGUI.h"
00018 #include "SFIntGUI.h"
00019 #include "SFVector2GUI.h"
00020 #include "SFVector3GUI.h"
00021 #include "SFVector4GUI.h"
00022 #include "SFStringGUI.h"
00023 #include "SFBoolGUI.h"
00024 #include "MFEditor.h"
00025
00026 #include "X3DSFVec2fGUI.h"
00027 #include "X3DSFVec3fGUI.h"
00028 #include "X3DSFRotationGUI.h"
00029
00030
00031
00032 namespace X3DTK {
00033 namespace Qt{
00034
00035 class ObjectGUI;
00036
00063
00064
00066 inline std::istream& operator >> ( std::istream& in, X3DTK::SFVec2f& a )
00067 {
00068 in >> a.x >> a.y;
00069 return in;
00070 }
00071
00072
00074 inline std::istream& operator >> ( std::istream& in, X3DTK::SFVec3f& a )
00075 {
00076 in >> a.x >> a.y >> a.z;
00077 return in;
00078 }
00079
00080
00082 inline std::istream& operator >> ( std::istream& in, X3DTK::SFRotation& a )
00083 {
00084 in >> a.x >> a.y >> a.z >> a.angle;
00085 return in;
00086 }
00087
00088
00093 class Field{
00094 public:
00095
00097 QString name;
00098
00100 void * pointer;
00101
00102 Field(QString name, void * pointer)
00103 : name(name), pointer(pointer){}
00104
00105 virtual ~Field(){};
00106
00108 virtual void add(QWidget * parent)=0;
00109
00110
00111 } ;
00112
00115 class AbstractMField : public Field {
00116 public:
00117
00119 unsigned int nbColumns;
00120
00125 bool edit;
00126
00127 AbstractMField(QString name, void * pointer, unsigned int nbColumns=1, bool edit=false)
00128 : Field(name, pointer)
00129 , nbColumns(nbColumns)
00130 , edit(edit)
00131 {}
00132
00134 virtual QString read()=0;
00135
00137 virtual void write(QString s)=0;
00138 } ;
00139
00141 typedef std::list<Field *> FieldList;
00142
00144 template <typename TypeSField>
00145 class SField : public Field {
00146 public:
00147 SField(QString name, void * pointer)
00148 : Field(name, pointer){}
00149
00151 virtual QWidget* SFieldGUI(QString name, TypeSField * ptr, QWidget * parent)=0;
00152
00154 virtual void add(QWidget * parent);
00155
00156 } ;
00157
00159 template <typename TypeSField>
00160 class MField : public AbstractMField {
00161 protected:
00163 QWidget * MFtab;
00165 QGridLayout * MFtabLayout;
00167 std::list<QWidget *> chidrenMFtabList;
00169 ObjectGUI * objectGUI;
00171
00172 public:
00173
00174 MField(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00175 : AbstractMField(name, pointer, nbColumns, edit)
00176 , MFtab(NULL)
00177 , MFtabLayout(NULL)
00178 , objectGUI(NULL)
00179 {}
00180
00182 virtual QWidget* SFieldGUI(QString name, TypeSField * ptr, QWidget * parent)=0;
00183
00185 virtual void add(QWidget * parent);
00186
00188 virtual QString read();
00189
00191 virtual void write(QString s);
00192 } ;
00193
00195 class SFFloat : public SField<float> {
00196 public:
00197
00198 SFFloat(QString name, void * pointer)
00199 : SField<float>(name, pointer){}
00200
00202 virtual QWidget* SFieldGUI(QString name, float * ptr, QWidget * parent)
00203 {
00204 return new SFFloatGUI(name, ptr, parent);
00205 }
00206
00207 } ;
00208
00210 class SFInt : public SField<int> {
00211 public:
00212
00213 SFInt(QString name, void * pointer)
00214 : SField<int>(name, pointer){}
00215
00217 virtual QWidget* SFieldGUI(QString name, int * ptr, QWidget * parent)
00218 {
00219 return new SFIntGUI(name, ptr, parent);
00220 }
00221
00222 } ;
00223
00225 class SFVector2 : public SField<animal::Vec2> {
00226 public:
00227
00228 SFVector2(QString name, void * pointer)
00229 : SField<animal::Vec2>(name, pointer){}
00230
00232 virtual QWidget* SFieldGUI(QString name, animal::Vec2 * ptr, QWidget * parent)
00233 {
00234 return new SFVector2GUI(name, ptr, parent);
00235 }
00236
00237 } ;
00238
00240 class SFVector3 : public SField<animal::Vec3> {
00241 public:
00242
00243 SFVector3(QString name, void * pointer)
00244 : SField<animal::Vec3>(name, pointer){}
00245
00247 virtual QWidget* SFieldGUI(QString name, animal::Vec3 * ptr, QWidget * parent)
00248 {
00249 return new SFVector3GUI(name, ptr, parent);
00250 }
00251
00252 } ;
00253
00255 class SFVector4 : public SField<animal::Vec4> {
00256 public:
00257
00258 SFVector4(QString name, void * pointer)
00259 : SField<animal::Vec4>(name, pointer){}
00260
00262 virtual QWidget* SFieldGUI(QString name, animal::Vec4 * ptr, QWidget * parent)
00263 {
00264 return new SFVector4GUI(name, ptr, parent);
00265 }
00266
00267 } ;
00268
00270 class SFString : public SField<QString> {
00271 public:
00272
00273 SFString(QString name, void * pointer)
00274 : SField<QString>(name, pointer){}
00275
00277 virtual QWidget* SFieldGUI(QString name, QString * ptr, QWidget * parent)
00278 {
00279 return new SFStringGUI(name, ptr, parent);
00280 }
00281
00282 } ;
00283
00285 class SFBool : public SField<bool> {
00286 public:
00287
00288 SFBool(QString name, void * pointer)
00289 : SField<bool>(name, pointer){}
00290
00292 virtual QWidget* SFieldGUI(QString name, bool * ptr, QWidget * parent)
00293 {
00294 return new SFBoolGUI(name, ptr, parent);
00295 }
00296
00297 } ;
00298
00299
00301 class MFFloat : public MField<float> {
00302 public:
00303
00304 MFFloat(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00305 : MField<float>(name, pointer, nbColumns, edit){}
00306
00308 virtual QWidget* SFieldGUI(QString name, float * ptr, QWidget * parent)
00309 {
00310 return new SFFloatGUI(name, ptr, parent);
00311 }
00312
00313 } ;
00314
00316 class MFInt : public MField<int> {
00317 public:
00318
00319 MFInt(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00320 : MField<int>(name, pointer, nbColumns, edit){}
00321
00323 virtual QWidget* SFieldGUI(QString name, int * ptr, QWidget * parent)
00324 {
00325 return new SFIntGUI(name, ptr, parent);
00326 }
00327
00328 } ;
00329
00331 class MFVector2 : public MField<animal::Vec2> {
00332 public:
00333
00334 MFVector2(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00335 : MField<animal::Vec2>(name, pointer, nbColumns, edit){}
00336
00338 virtual QWidget* SFieldGUI(QString name, animal::Vec2 * ptr, QWidget * parent)
00339 {
00340 return new SFVector2GUI(name, ptr, parent);
00341 }
00342
00343 } ;
00344
00346 class MFVector3 : public MField<animal::Vec3> {
00347 public:
00348
00349 MFVector3(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00350 : MField<animal::Vec3>(name, pointer, nbColumns, edit){}
00351
00353 virtual QWidget* SFieldGUI(QString name, animal::Vec3 * ptr, QWidget * parent)
00354 {
00355 return new SFVector3GUI(name, ptr, parent);
00356 }
00357
00358 } ;
00359
00361 class MFVector4 : public MField<animal::Vec4> {
00362 public:
00363
00364 MFVector4(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00365 : MField<animal::Vec4>(name, pointer, nbColumns, edit){}
00366
00368 virtual QWidget* SFieldGUI(QString name, animal::Vec4 * ptr, QWidget * parent)
00369 {
00370 return new SFVector4GUI(name, ptr, parent);
00371 }
00372
00373 } ;
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00398
00399
00400
00401
00402
00403
00404
00407 class X3DSFVec2f : public SField<X3DTK::SFVec2f> {
00408 public:
00409
00410 X3DSFVec2f(QString name, void * pointer)
00411 : SField<X3DTK::SFVec2f>(name, pointer){}
00412
00414 virtual QWidget* SFieldGUI(QString name, X3DTK::SFVec2f * ptr, QWidget * parent)
00415 {
00416 return new X3DSFVec2fGUI(name, ptr, parent);
00417 }
00418
00419 } ;
00420
00423 class X3DSFVec3f : public SField<X3DTK::SFVec3f> {
00424 public:
00425
00426 X3DSFVec3f(QString name, void * pointer)
00427 : SField<X3DTK::SFVec3f>(name, pointer){}
00428
00430 virtual QWidget* SFieldGUI(QString name, X3DTK::SFVec3f * ptr, QWidget * parent)
00431 {
00432 return new X3DSFVec3fGUI(name, ptr, parent);
00433 }
00434
00435 } ;
00436
00439 class X3DSFRotation : public SField<X3DTK::SFRotation> {
00440 public:
00441
00442 X3DSFRotation(QString name, void * pointer)
00443 : SField<X3DTK::SFRotation>(name, pointer){}
00444
00446 virtual QWidget* SFieldGUI(QString name, X3DTK::SFRotation * ptr, QWidget * parent)
00447 {
00448 return new X3DSFRotationGUI(name, ptr, parent);
00449 }
00450
00451 } ;
00452
00455 class X3DMFVec2f : public MField<X3DTK::SFVec2f> {
00456 public:
00457
00458 X3DMFVec2f(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00459 : MField<X3DTK::SFVec2f>(name, pointer, nbColumns, edit){}
00460
00462 virtual QWidget* SFieldGUI(QString name, X3DTK::SFVec2f * ptr, QWidget * parent)
00463 {
00464 return new X3DSFVec2fGUI(name, ptr, parent);
00465 }
00466
00467 } ;
00468
00471 class X3DMFVec3f : public MField<X3DTK::SFVec3f> {
00472 public:
00473
00474 X3DMFVec3f(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00475 : MField<X3DTK::SFVec3f>(name, pointer, nbColumns, edit){}
00476
00478 virtual QWidget* SFieldGUI(QString name, X3DTK::SFVec3f * ptr, QWidget * parent)
00479 {
00480 return new X3DSFVec3fGUI(name, ptr, parent);
00481 }
00482
00483 } ;
00484
00487 class X3DMFRotation : public MField<X3DTK::SFRotation> {
00488 public:
00489
00490 X3DMFRotation(QString name, void * pointer, unsigned int nbColumns=1, bool edit = false)
00491 : MField<X3DTK::SFRotation>(name, pointer, nbColumns, edit){}
00492
00494 virtual QWidget* SFieldGUI(QString name, X3DTK::SFRotation * ptr, QWidget * parent)
00495 {
00496 return new X3DSFRotationGUI(name, ptr, parent);
00497 }
00498
00499 } ;
00500
00501 }
00502 }
00503
00504 #endif // FIELDS_H
00505
00506