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