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