1 /****************************************************************************
2 * MeshLab                                                           o o     *
3 * An extendible mesh processor                                    o     o   *
4 *                                                                _   O  _   *
5 * Copyright(C) 2005, 2006                                          \/)\/    *
6 * Visual Computing Lab                                            /\/|      *
7 * ISTI - Italian National Research Council                           |      *
8 *                                                                    \      *
9 * All rights reserved.                                                      *
10 *                                                                           *
11 * This program is free software; you can redistribute it and/or modify      *
12 * it under the terms of the GNU General Public License as published by      *
13 * the Free Software Foundation; either version 2 of the License, or         *
14 * (at your option) any later version.                                       *
15 *                                                                           *
16 * This program is distributed in the hope that it will be useful,           *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
19 * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)          *
20 * for more details.                                                         *
21 *                                                                           *
22 ****************************************************************************/
23 #ifndef MESHLAB_STDPARDIALOG_H
24 #define MESHLAB_STDPARDIALOG_H
25 
26 #include "../common/interfaces.h"
27 #include<QCheckBox>
28 #include<QRadioButton>
29 #include<QSpinBox>
30 #include<QTableWidget>
31 #include<QComboBox>
32 #include<QGridLayout>
33 #include<QDockWidget>
34 
35 class MeshLabWidget : public QWidget
36 {
37     Q_OBJECT
38 public:
39     MeshLabWidget(QWidget* p,RichParameter* rpar);
40 
41     // this one is called by resetValue to reset the values inside the widgets.
42     virtual void resetWidgetValue() = 0;
43     // bring the values from the Qt widgets to the parameter (e.g. from the checkBox to the parameter).
44     virtual void collectWidgetValue() = 0;
45     virtual void setWidgetValue(const Value& nv) = 0;
46     virtual ~MeshLabWidget();
47 
48     virtual void addWidgetToGridLayout(QGridLayout* lay,const int r) = 0;
49     // called when the user press the 'default' button to reset the parameter values to its default.
50     // It just set the parameter value and then it calls the specialized resetWidgetValue() to update also the widget.
51     void resetValue();
52     // update the parameter with the current widget values and return it.
53     Value& getWidgetValue();
54 
55     RichParameter* rp;
56     QLabel* helpLab;
57 signals:
58     void parameterChanged();
59 protected:
60     //void setEqualSpaceForEachColumn();
61 
62     //int row;
63     //QGridLayout* gridLay;
64     void InitRichParameter(RichParameter* rpar);
65 };
66 
67 
68 class BoolWidget : public MeshLabWidget
69 {
70     public:
71     //QLabel* lab;
72     QCheckBox* cb;
73     //QRadioButton* cb;
74 
75     BoolWidget(QWidget* p,RichBool* rb);
76     ~BoolWidget();
77 
78     void addWidgetToGridLayout(QGridLayout* lay,const int r);
79     void collectWidgetValue();
80     void resetWidgetValue();
81     void setWidgetValue(const Value& nv);
82 };
83 
84 
85 class LineEditWidget : public MeshLabWidget
86 {
87   Q_OBJECT
88 protected:
89     QLabel* lab;
90     QLineEdit* lned;
91     QString lastVal;
92 
93     private slots:
94         void changeChecker();
95     signals:
96         void lineEditChanged();
97 
98 public:
99     LineEditWidget(QWidget* p,RichParameter* rpar);
100     ~LineEditWidget();
101     void addWidgetToGridLayout(QGridLayout* lay,const int r);
102     virtual void collectWidgetValue() = 0;
103     virtual void resetWidgetValue() = 0;
104     virtual void setWidgetValue(const Value& nv) = 0;
105 };
106 
107 
108 
109 class IntWidget : public LineEditWidget
110 {
111 public:
112     IntWidget(QWidget* p,RichInt* rpar);
~IntWidget()113     ~IntWidget(){}
114     void collectWidgetValue();
115     void resetWidgetValue();
116     void setWidgetValue(const Value& nv);
117 };
118 
119 
120 
121 class FloatWidget : public  LineEditWidget
122 {
123 public:
124     FloatWidget(QWidget* p,RichFloat* rpar);
~FloatWidget()125     ~FloatWidget(){}
126     void collectWidgetValue();
127     void resetWidgetValue();
128     void setWidgetValue(const Value& nv);
129 };
130 
131 
132 
133 class StringWidget  : public  LineEditWidget
134 {
135 public:
136     StringWidget(QWidget* p,RichString* rpar);
~StringWidget()137     ~StringWidget(){}
138     void collectWidgetValue();
139     void resetWidgetValue();
140     void setWidgetValue(const Value& nv);
141 };
142 
143 //class Matrix44fWidget : public  MeshLabWidget
144 //{
145 //public:
146 //	Matrix44fWidget(QWidget* p,RichMatrix44f* rpar);
147 //
148 //	void collectWidgetValue();
149 //	void resetWidgetValue();
150 //};
151 
152 /*
153 class FloatListWidget : public MeshLabWidget
154 {
155 public:
156     FloatListWidget(QWidget* p,RichFloatList* rpar);
157 
158     void collectWidgetValue();
159     void resetWidgetValue();
160 };
161 */
162 
163 /*
164 class OpenFileWidget : public MeshLabWidget
165 {
166 public:
167     OpenFileWidget(QWidget* p,RichOpenFile* rpar);
168 
169     void collectWidgetValue();
170     void resetWidgetValue();
171 };
172 */
173 
174 
175 /// Widget to enter a color.
176 // public QHBoxLayout,
177 class ColorWidget : public MeshLabWidget
178 {
179       Q_OBJECT
180 
181         QPushButton* colorButton;
182         QLabel* colorLabel;
183         QLabel* descLabel;
184         QColor pickcol;
185 
186     public:
187     ColorWidget(QWidget *p, RichColor* newColor);
188     ~ColorWidget();
189 
190     void addWidgetToGridLayout(QGridLayout* lay,const int r);
191         void collectWidgetValue();
192         void resetWidgetValue();
193         void setWidgetValue(const Value& nv);
194         void initWidgetValue();
195 
196 private:
197     void  updateColorInfo(const ColorValue& newColor);
198 
199     signals:
200         void dialogParamChanged();
201     private slots:
202         void pickColor();
203 protected:
204     QHBoxLayout* vlay;
205 };
206 
207 
208 
209 /// Widget to enter a value as a percentage or as an absolute value.
210 /// You have to specify the default value and the range of the possible values.
211 /// The default value is expressed in ABSolute units (e.g. it should be in the min..max range.
212 
213 
214 //public QGridLayout
215 class AbsPercWidget : public MeshLabWidget
216 {
217       Q_OBJECT
218 
219 public:
220   AbsPercWidget(QWidget *p,RichAbsPerc* rabs);
221   ~AbsPercWidget();
222 
223     void addWidgetToGridLayout(QGridLayout* lay,const int r);
224     void collectWidgetValue();
225     void resetWidgetValue();
226     void setWidgetValue(const Value& nv);
227 
228 private:
229     void  setValue(float val, float minV, float maxV);
230 
231 public slots:
232 
233     void on_absSB_valueChanged(double newv);
234     void on_percSB_valueChanged(double newv);
235 signals:
236     void dialogParamChanged();
237 
238 protected:
239   QDoubleSpinBox *absSB;
240   QDoubleSpinBox *percSB;
241     QLabel* fieldDesc;
242   float m_min;
243   float m_max;
244   QGridLayout* vlay;
245 };
246 
247 
248 
249 /// Widget to enter a Point3f,
250 /// if at the creation you provide a pointer to a GLArea (the mesh viewing window)
251 /// the widget exposes a button for getting the current view directiont
252 
253 //public QHBoxLayout,
254 class Point3fWidget : public MeshLabWidget
255 {
256     Q_OBJECT
257 
258 public:
259   Point3fWidget(QWidget *p, RichPoint3f* rpf, QWidget *gla);
260   ~Point3fWidget();
261     QString paramName;
262     vcg::Point3f getValue();
263 
264     void addWidgetToGridLayout(QGridLayout* lay,const int r);
265     void collectWidgetValue();
266     void resetWidgetValue();
267     void setWidgetValue(const Value& nv);
268 
269     public slots:
270     void  getPoint();
271     void  setValue(QString name, Point3m val);
272   void  setShotValue(QString name, Shotm val);
273     signals:
274     void askViewDir(QString);
275     void askViewPos(QString);
276     void askSurfacePos(QString);
277     void askCameraPos(QString);
278 	void askTrackballPos(QString);
279 
280 protected:
281     QLineEdit * coordSB[3];
282     QComboBox *getPoint3Combo;
283     QPushButton *getPoint3Button;
284     QLabel* descLab;
285     QHBoxLayout* vlay;
286 };
287 
288 class Matrix44fWidget : public MeshLabWidget
289 {
290     Q_OBJECT
291 
292 public:
293     Matrix44fWidget(QWidget *p,  RichMatrix44f* rpf, QWidget *gla_curr);
294     ~Matrix44fWidget();
295     QString paramName;
296     vcg::Matrix44f getValue();
297 
298     void addWidgetToGridLayout(QGridLayout* lay,const int r);
299     void collectWidgetValue();
300     void resetWidgetValue();
301     void setWidgetValue(const Value& nv);
302 
303 public slots:
304     void setValue(QString name, Matrix44m val);
305     void getMatrix();
306     void pasteMatrix();
307     void invalidateMatrix(const QString& s);
308 signals:
309     void askMeshMatrix(QString);
310 
311 
312 protected:
313     QLineEdit * coordSB[16];
314     QPushButton *getPoint3Button;
315     QLabel* descLab;
316     QGridLayout* lay44;
317     QVBoxLayout* vlay;
318     vcg::Matrix44f m;
319     bool valid;
320 };
321 
322 /// Widget to enter a Shot,
323 /// if at the creation you provide a pointer to a GLArea (the mesh viewing window)
324 /// the widget has a combo and a button to get shot from different places.
325 
326 class ShotfWidget : public MeshLabWidget
327 {
328   Q_OBJECT
329 
330 public:
331   ShotfWidget(QWidget *p, RichShotf* rpf, QWidget *gla);
332   ~ShotfWidget();
333   QString paramName;
334   vcg::Shotf getValue();
335 
336   void addWidgetToGridLayout(QGridLayout* lay,const int r);
337   void collectWidgetValue();
338   void resetWidgetValue();
339   void setWidgetValue(const Value& nv);
340 
341   public slots:
342   void  getShot();
343   void  setShotValue(QString name, Shotm val);
344   signals:
345   void askRasterShot(QString);
346   void askMeshShot(QString);
347   void askViewerShot(QString);
348 
349 protected:
350   vcg::Shotf curShot;
351   QLineEdit * shotLE;
352   QPushButton *getShotButton;
353   QComboBox *getShotCombo;
354   QLabel* descLab;
355   QHBoxLayout* hlay;
356 };
357 
358 
359 //public QGridLayout,
360 class DynamicFloatWidget : public MeshLabWidget
361 {
362     Q_OBJECT
363 
364 public:
365   DynamicFloatWidget(QWidget *p, RichDynamicFloat* rdf);
366   ~DynamicFloatWidget();
367 
368   float getValue();
369     void  setValue(float val, float minV, float maxV);
370 
371     void addWidgetToGridLayout(QGridLayout* lay,const int r);
372     void collectWidgetValue();
373     void resetWidgetValue();
374     void setWidgetValue(const Value& nv);
375 
376     public slots:
377         void setValue(int newv);
378         void setValue();
379         void setValue(float newValue);
380 
381     signals:
382         //void valueChanged(int mask);
383         void dialogParamChanged();
384 
385 protected:
386     QLineEdit *valueLE;
387     QSlider   *valueSlider;
388     QLabel* fieldDesc;
389   float minVal;
390   float maxVal;
391     QHBoxLayout* hlay;
392 private :
393     float intToFloat(int val);
394     int floatToInt(float val);
395 };
396 
397 
398 
399 class ComboWidget : public MeshLabWidget
400 {
401     Q_OBJECT
402 protected:
403     QComboBox *enumCombo;
404     QLabel *enumLabel;
405 public:
406     ComboWidget(QWidget *p, RichParameter* rpar);
407     ~ComboWidget();
408     void Init(QWidget *p,int newEnum, QStringList values);
409     void addWidgetToGridLayout(QGridLayout* lay,const int r);
410     virtual void collectWidgetValue() = 0;
411     virtual void resetWidgetValue() = 0;
412     virtual void setWidgetValue(const Value& nv) = 0;
413 
414     int getIndex();
415     void  setIndex(int newEnum);
416 
417 signals:
418     void dialogParamChanged();
419 };
420 
421 /// Widget to select an entry from a list
422 
423 //public QHBoxLayout
424 class EnumWidget : public ComboWidget
425 {
426     Q_OBJECT
427 
428 public:
429     EnumWidget(QWidget *p, RichEnum* rpar);
~EnumWidget()430     ~EnumWidget(){};
431 
432     void collectWidgetValue();
433     void resetWidgetValue();
434     void setWidgetValue(const Value& nv);
435 
436     //returns the number of items in the list
437     int getSize();
438 };
439 
440 
441 /// Widget to select a Layer the current one
442 class MeshWidget : public ComboWidget
443 {
444 private:
445     MeshDocument *md;
446     //int defaultMeshIndex;
447 public:
448     MeshWidget(QWidget *p, RichMesh* defaultMesh);
~MeshWidget()449     ~MeshWidget(){};
450 
451     void collectWidgetValue();
452     void resetWidgetValue();
453     void setWidgetValue(const Value& nv);
454 
455     MeshModel * getMesh();
456     void setMesh(MeshModel * newMesh);
457 };
458 
459 class IOFileWidget : public MeshLabWidget
460 {
461     Q_OBJECT
462 
463 protected:
464     IOFileWidget(QWidget* p,RichParameter* rpar);
465     ~IOFileWidget();
466 
467     void  updateFileName(const FileValue& file);
468 
469 public:
470     void addWidgetToGridLayout(QGridLayout* lay,const int r);
471     void collectWidgetValue();
472     void resetWidgetValue();
473     void setWidgetValue(const Value& nv);
474 
475 protected slots:
476     virtual void selectFile() = 0;
477 
478 signals:
479     void dialogParamChanged();
480 
481 
482 protected:
483     QLineEdit* filename;
484     QPushButton* browse;
485     QString fl;
486     QLabel* descLab;
487     QHBoxLayout* hlay;
488 };
489 
490 class SaveFileWidget : public IOFileWidget
491 {
492     Q_OBJECT
493 public:
494     SaveFileWidget(QWidget* p,RichSaveFile* rpar);
495     ~SaveFileWidget();
496 
497 protected slots:
498     void selectFile();
499 
500 };
501 
502 class OpenFileWidget : public IOFileWidget
503 {
504     Q_OBJECT
505 public:
506     OpenFileWidget(QWidget *p, RichOpenFile* rdf);
507     ~OpenFileWidget();
508 
509     /*void collectWidgetValue();
510     void resetWidgetValue();
511     void setWidgetValue(const Value& nv);*/
512 
513 protected slots:
514     void selectFile();
515 };
516 
517 //class XMLMeshLabWidgetFactory
518 //{
519 //protected:
520 //	static QMap<QString,XMLMeshLabWidgetFactory*> mpfact;
521 //public:
522 //	XMLMeshLabWidgetFactory()
523 //	virtual XMLMeshLabWidget* create(const QMap<QString,QString>& widgetTable) = 0;
524 //};
525 //
526 //class XMLMeshLabWidget : public QObject
527 //{
528 //	Q_OBJECT
529 //public:
530 //	XMLMeshLabWidget(Expression* expr,QWidget* parent);
531 //	// bring the values from the Qt widgets to the parameter (e.g. from the checkBox to the parameter).
532 //	virtual void collectWidgetValue() = 0;
533 //	virtual void setWidgetExpression(const QString& nwExpStr) = 0;
534 //	virtual void updateWidget(const QStringList& xmlWidgetTag) = 0;
535 //	virtual ~XMLMeshLabWidget();
536 //
537 //	// called when the user press the 'default' button to reset the parameter values to its default.
538 //	// It just set the parameter value and then it calls the specialized resetWidgetValue() to update also the widget.
539 //	//void resetValue();
540 //	// update the parameter with the current widget values and return it.
541 //	//Value& getWidgetValue();
542 //
543 //signals:
544 //	void parameterChanged();
545 //
546 //protected:
547 //	int row;
548 //	QGridLayout* gridLay;
549 //	QLabel* helpLab;
550 //	QLineEdit* lExprEditor;
551 //	QTextEdit* tExprEditor;
552 //};
553 //
554 //class XMLBoolWidget : public XMLMeshLabWidget
555 //{
556 //	Q_OBJECT
557 //public:
558 //	XMLBoolWidget(QWidget* parent,const QStringList& xmlWidgetTag);
559 //	~XMLBoolWidget();
560 //	void resetWidgetValue();
561 //	// bring the values from the Qt widgets to the parameter (e.g. from the checkBox to the parameter).
562 //	void collectWidgetValue();
563 //	void setWidgetValue(const Value& nv);
564 //	void updateWidget(const QStringList& xmlWidgetTag);
565 //
566 //private:
567 //	QCheckBox* box;
568 //};
569 //
570 //
571 //struct AbsView
572 //{
573 //	QDoubleSpinBox *absSB;
574 //	QDoubleSpinBox *percSB;
575 //};
576 //
577 //struct DynamicView
578 //{
579 //	QSlider *valueSlider;
580 //	int mask;
581 //};
582 //
583 //class XMLFloatWidget : public XMLMeshLabWidget
584 //{
585 //	Q_OBJECT
586 //public:
587 //	XMLFloatWidget(QWidget* parent,const QStringList& xmlWidgetTag);
588 //	~XMLFloatWidget();
589 //	void resetWidgetValue();
590 //	// bring the values from the Qt widgets to the parameter (e.g. from the checkBox to the parameter).
591 //	void collectWidgetValue();
592 //	void setWidgetValue(const Value& nv);
593 //	void updateWidget(const QStringList& xmlWidgetTag);
594 //
595 //private:
596 //	AbsView* abs;
597 //	DynamicView* dyn;
598 //
599 //	QLabel* fieldDesc;
600 //	float minVal;
601 //	float maxVal;
602 //
603 //	float intToFloat(int val);
604 //	int floatToInt(float val);
605 //}
606 
607 /*
608 class QVariantListWidget : public MeshLabWidget
609 {
610     Q_OBJECT
611 public:
612     QVariantListWidget(QWidget *parent, QList<QVariant> &values);
613 
614     //get the values listed in this widget
615     QList<QVariant> getList();
616 
617     //set the values this widget lists
618     void setList(QList<QVariant> &values);
619 
620     public slots:
621         //add a new row for input at the end
622         void addRow();
623 
624         //remove the last row of the table widget
625         void removeRow();
626 
627         void collectWidgetValue();
628         void resetWidgetValue();
629 
630 private:
631     QTableWidget *tableWidget;
632 
633 };
634 */
635 
636 
637 /*
638 //public QVBoxLayout
639 class GetFileNameWidget : public MeshLabWidget
640 {
641     Q_OBJECT
642 public:
643     GetFileNameWidget(QWidget *parent, QString &defaultString, bool getOpenFileName, QString fileExtension = QString("*.*"));
644 
645     ~GetFileNameWidget();
646 
647     //set the values this widget lists
648     QString getFileName();
649 
650     //set the name to be something else
651     void setFileName(QString newName);
652 
653     public slots:
654         //add a new row for input at the end
655         void launchGetFileNameDialog();
656 
657         void collectWidgetValue();
658         void resetWidgetValue();
659 private:
660 
661     //open or save filename
662     bool _getOpenFileName;
663 
664     //label to display the current value of _filename
665     QLabel *fileNameLabel;
666 
667     //button to launch the get filename dialog
668     QPushButton *launchFileNameDialogButton;
669 
670     //the filename colected by the fileName dialog
671     QString _fileName;
672 
673     //the extension of the files to look for
674     QString _fileExtension;
675 
676 };
677 */
678 
679 /*---------------------------------*/
680 
681 /*
682 This class is used to automatically create a frame from a set of parameters.
683 it is used mostly for creating the main dialog of the filters, but it is used also
684 in the creation of the additional saving options, post and pre opening processing
685 and for general parameter setting in edit plugins (e.g. look at the alignment parameters)
686 */
687 class StdParFrame : public QFrame
688 {
689     Q_OBJECT
690 public:
691     StdParFrame(QWidget *p, QWidget *gla=0);
692 
693     void loadFrameContent(RichParameterSet &curParSet,MeshDocument *mdPt = 0);
694 
695     // The curParSet that is passed must be 'compatible' with the RichParameterSet that have been used to create the frame.
696     // This function updates the RichParameterSet used to create the frame AND fill also the passed <curParSet>
697     void readValues(RichParameterSet &curParSet);
698     void resetValues(RichParameterSet &curParSet);
699 
700     void toggleHelp();
701 
702     QVector<MeshLabWidget *> stdfieldwidgets;
703     QVector<QLabel *> helpList;
704 
705     QWidget *gla; // used for having a link to the glarea that spawned the parameter asking.
706     ~StdParFrame();
707 signals:
708 
709         void parameterChanged();
710 };
711 
712 
713 
714 // This class provide a modal dialog box for asking a generic parameter set
715 // It can be used by anyone needing for some values in a structured form and having some integrated help
716 class GenericParamDialog: public QDialog
717 {
718     Q_OBJECT
719 public:
720   GenericParamDialog(QWidget *p, RichParameterSet *_curParSet, QString title=QString(), MeshDocument *_meshDocument = 0);
721     ~GenericParamDialog();
722 
723     RichParameterSet *curParSet;
724     StdParFrame *stdParFrame;
725 
726     void createFrame();
727 
728     public slots:
729     void getAccept();
730     void toggleHelp();
731 
732     //reset the values on the gui back to the ones originally given to the dialog
733     void resetValues();
734 
735 private:
736     MeshDocument *meshDocument;
737 
738 };
739 
740 //QWidget* parent parameter says to the class who will destroy the MeshLabWidget object that it had created
741 //RichWidgetConstructor shouldn't destroy anything
742 
743 class RichWidgetInterfaceConstructor : public Visitor
744 {
745 public:
RichWidgetInterfaceConstructor(QWidget * parent)746         RichWidgetInterfaceConstructor(QWidget* parent):lastCreated(NULL),par(parent){}
747 
visit(RichBool & pd)748     void visit(RichBool& pd) {lastCreated = new BoolWidget(par,&pd);};
visit(RichInt & pd)749     void visit(RichInt& pd) {lastCreated = new IntWidget(par,&pd);};
visit(RichFloat & pd)750     void visit(RichFloat& pd){lastCreated = new FloatWidget(par,&pd);};
visit(RichString & pd)751     void visit(RichString& pd){lastCreated = new StringWidget(par,&pd);};
visit(RichMatrix44f & pd)752     void visit(RichMatrix44f&  pd ){  lastCreated = new Matrix44fWidget(par,&pd,reinterpret_cast<StdParFrame*>(par)->gla); }
visit(RichPoint3f & pd)753     void visit(RichPoint3f& pd){lastCreated = new Point3fWidget(par,&pd,reinterpret_cast<StdParFrame*>(par)->gla);};
visit(RichShotf & pd)754     void visit(RichShotf& pd){lastCreated = new ShotfWidget(par,&pd,reinterpret_cast<StdParFrame*>(par)->gla);};
visit(RichColor & pd)755     void visit(RichColor& pd){lastCreated = new ColorWidget(par,&pd);};
visit(RichAbsPerc & pd)756     void visit(RichAbsPerc& pd){lastCreated = new AbsPercWidget(par,&pd);};
visit(RichEnum & pd)757     void visit(RichEnum& pd){lastCreated = new EnumWidget(par,&pd);};
visit(RichFloatList &)758     void visit(RichFloatList& /*pd*/){assert(0);/*TO BE IMPLEMENTED*/ /*lastCreated = new FloatListWidget(par,&pd);*/};
visit(RichDynamicFloat & pd)759     void visit(RichDynamicFloat& pd){lastCreated = new DynamicFloatWidget(par,&pd);};
visit(RichOpenFile & pd)760     void visit(RichOpenFile& pd){lastCreated = new OpenFileWidget(par,&pd);};
visit(RichSaveFile & pd)761     void visit(RichSaveFile& pd){lastCreated = new SaveFileWidget(par,&pd);};
visit(RichMesh & pd)762     void visit(RichMesh& pd){lastCreated = new MeshWidget(par,&pd);};
763 
~RichWidgetInterfaceConstructor()764     ~RichWidgetInterfaceConstructor() {}
765 
766     MeshLabWidget* lastCreated;
767 private:
768     QWidget* par;
769 
770 };
771 
772 class RichParameterToQTableWidgetItemConstructor : public Visitor
773 {
774 public:
RichParameterToQTableWidgetItemConstructor()775     RichParameterToQTableWidgetItemConstructor(/*QListWidget* widlst*/):/*lst(widlst),*/lastCreated(NULL){}
776 
777     void visit(RichBool& pd);
778     void visit(RichInt& pd);
779     void visit(RichFloat& pd);
780     void visit(RichString& pd);
visit(RichMatrix44f &)781     void visit(RichMatrix44f& /*pd*/){assert(0);};
782     void visit(RichPoint3f& pd);
783   void visit(RichShotf& pd);
784     void visit(RichColor& pd);
785     void visit(RichAbsPerc& pd);
786     void visit(RichEnum& pd);
visit(RichFloatList &)787     void visit(RichFloatList& /*pd*/){assert(0);};
788     void visit(RichDynamicFloat& pd);
789     void visit(RichOpenFile& pd);
visit(RichSaveFile &)790     void visit(RichSaveFile& /*pd*/){assert(0);};
visit(RichMesh &)791     void visit(RichMesh& /*pd*/){assert(0);};
792 
793     /*QListWidget* lst;*/
794     QTableWidgetItem* lastCreated;
795 };
796 
797 
798 
799 #endif
800 
801