1 /**************************************************************************** 2 * MeshLab o o * 3 * A versatile mesh processing toolbox o o * 4 * _ O _ * 5 * Copyright(C) 2004-2008 \/)\/ * 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 24 #ifndef MESHLAB_FILTERPARAMETER_H 25 #define MESHLAB_FILTERPARAMETER_H 26 #include <QtCore> 27 #include <QtXml> 28 29 #include <QMap> 30 #include<QString> 31 #include <QPair> 32 #include <QAction> 33 #include <vcg/math/matrix44.h> 34 #include <vcg/space/color4.h> 35 #include <vcg/math/shot.h> 36 #include <wrap/callback.h> 37 38 #include "xmlfilterinfo.h" 39 40 class MeshModel; 41 class MeshDocument; 42 43 //enum TypeId {BOOL,INT,FLOAT,STRING,MATRIX44F,POINT3F,COLOR,ENUM,MESH,GROUP,FILENAME}; 44 // 45 //class Binding 46 //{ 47 //public: 48 // TypeId tid; 49 // QString name; 50 // QString value; 51 //}; 52 // 53 //class BindingSet 54 //{ 55 //public: 56 // QList<Binding> binds; 57 // 58 // bool declare(const TypeId id,const QString& nm,const QString& val); 59 //}; 60 // 61 //class Environment 62 //{ 63 //public: 64 // BindingSet globals; 65 // BindingSet locals; 66 // 67 // int evalInt(const QString& val,bool& conv) const; 68 // float evalFloat(const QString& val,bool& conv) const; 69 // bool evalBool(const QString& val,bool& conv) const; 70 //}; 71 // 72 //class Decoration 73 //{ 74 //public: 75 // QString fieldDesc; 76 // QString tooltip; 77 //}; 78 79 class Value 80 { 81 public: getBool()82 virtual bool getBool() const { assert(0); return bool(); } getInt()83 virtual int getInt() const { assert(0); return int(); } getFloat()84 virtual float getFloat() const { assert(0); return float(); } getString()85 virtual QString getString() const { assert(0); return QString(); } getMatrix44f()86 virtual vcg::Matrix44f getMatrix44f() const { assert(0); return vcg::Matrix44f(); } getPoint3f()87 virtual vcg::Point3f getPoint3f() const { assert(0); return vcg::Point3f(); } getShotf()88 virtual vcg::Shotf getShotf() const { assert(0); return vcg::Shotf(); } getColor()89 virtual QColor getColor() const { assert(0); return QColor(); } getAbsPerc()90 virtual float getAbsPerc() const { assert(0); return float(); } getEnum()91 virtual int getEnum() const { assert(0); return int(); } getMesh()92 virtual MeshModel* getMesh() const { assert(0); return NULL; } getFloatList()93 virtual QList<float> getFloatList() const { assert(0); return QList<float>(); } getDynamicFloat()94 virtual float getDynamicFloat() const { assert(0); return float(); } getFileName()95 virtual QString getFileName() const { assert(0); return QString(); } 96 isBool()97 virtual bool isBool() const { return false; } isInt()98 virtual bool isInt() const { return false; } isFloat()99 virtual bool isFloat() const { return false; } isString()100 virtual bool isString() const { return false; } isMatrix44f()101 virtual bool isMatrix44f() const { return false; } isPoint3f()102 virtual bool isPoint3f() const { return false; } isShotf()103 virtual bool isShotf() const { return false; } isColor()104 virtual bool isColor() const { return false; } isAbsPerc()105 virtual bool isAbsPerc() const { return false; } isEnum()106 virtual bool isEnum() const { return false; } isMesh()107 virtual bool isMesh() const { return false; } isFloatList()108 virtual bool isFloatList() const { return false; } isDynamicFloat()109 virtual bool isDynamicFloat() const { return false; } isFileName()110 virtual bool isFileName() const { return false; } 111 112 113 virtual QString typeName() const = 0; 114 virtual void set(const Value& p) = 0; ~Value()115 virtual ~Value() {} 116 }; 117 118 class BoolValue : public Value 119 { 120 public: 121 BoolValue(const bool val); getBool()122 inline bool getBool() const { return pval; } isBool()123 inline bool isBool() const { return true; } typeName()124 inline QString typeName() const { return QString("Bool"); } set(const Value & p)125 inline void set(const Value& p) { pval = p.getBool(); } ~BoolValue()126 ~BoolValue() {} 127 private: 128 bool pval; 129 }; 130 131 class IntValue : public Value 132 { 133 public: IntValue(const int val)134 IntValue(const int val) : pval(val) {} getInt()135 inline int getInt() const { return pval; } isInt()136 inline bool isInt() const { return true; } typeName()137 inline QString typeName() const { return QString("Int"); } set(const Value & p)138 inline void set(const Value& p) { pval = p.getInt(); } ~IntValue()139 ~IntValue() {} 140 private: 141 int pval; 142 }; 143 144 class FloatValue : public Value 145 { 146 public: FloatValue(const float val)147 FloatValue(const float val) :pval(val) {} getFloat()148 inline float getFloat() const { return pval; } isFloat()149 inline bool isFloat() const { return true; } typeName()150 inline QString typeName() const { return QString("Float"); } set(const Value & p)151 inline void set(const Value& p) { pval = p.getFloat(); } ~FloatValue()152 ~FloatValue() {} 153 private: 154 float pval; 155 }; 156 157 class StringValue : public Value 158 { 159 public: StringValue(const QString & val)160 StringValue(const QString& val) :pval(val) {} getString()161 inline QString getString() const { return pval; } isString()162 inline bool isString() const { return true; } typeName()163 inline QString typeName() const { return QString("String"); } set(const Value & p)164 inline void set(const Value& p) { pval = p.getString(); } ~StringValue()165 ~StringValue() {} 166 private: 167 QString pval; 168 }; 169 170 class Matrix44fValue : public Value 171 { 172 public: Matrix44fValue(const vcg::Matrix44f & val)173 Matrix44fValue(const vcg::Matrix44f& val) :pval(val) {} Matrix44fValue(const vcg::Matrix44d & val)174 Matrix44fValue(const vcg::Matrix44d& val) :pval(vcg::Matrix44f::Construct(val)) {} getMatrix44f()175 inline vcg::Matrix44f getMatrix44f() const { return pval; } isMatrix44f()176 inline bool isMatrix44f() const { return true; } typeName()177 inline QString typeName() const { return QString("Matrix44f"); } set(const Value & p)178 inline void set(const Value& p) { pval = p.getMatrix44f(); } ~Matrix44fValue()179 ~Matrix44fValue() {} 180 private: 181 vcg::Matrix44f pval; 182 }; 183 184 class Point3fValue : public Value 185 { 186 public: Point3fValue(const vcg::Point3f & val)187 Point3fValue(const vcg::Point3f& val) : pval(val) {} Point3fValue(const vcg::Point3d & val)188 Point3fValue(const vcg::Point3d& val) : pval(vcg::Point3f::Construct(val)) {} getPoint3f()189 inline vcg::Point3f getPoint3f() const { return pval; } isPoint3f()190 inline bool isPoint3f() const { return true; } typeName()191 inline QString typeName() const { return QString("Point3f"); } set(const Value & p)192 inline void set(const Value& p) { pval = p.getPoint3f(); } ~Point3fValue()193 ~Point3fValue() {} 194 private: 195 vcg::Point3f pval; 196 }; 197 198 class ShotfValue : public Value 199 { 200 public: ShotfValue(const vcg::Shotf & val)201 ShotfValue(const vcg::Shotf& val) : pval(val) {} getShotf()202 inline vcg::Shotf getShotf() const { return pval; } isShotf()203 inline bool isShotf() const { return true; } typeName()204 inline QString typeName() const { return QString("Shotf"); } set(const Value & p)205 inline void set(const Value& p) { pval = p.getShotf(); } ~ShotfValue()206 ~ShotfValue() {} 207 private: 208 vcg::Shotf pval; 209 }; 210 211 class ColorValue : public Value 212 { 213 public: ColorValue(QColor val)214 ColorValue(QColor val) :pval(val) {} getColor()215 inline QColor getColor() const { return pval; } isColor()216 inline bool isColor() const { return true; } typeName()217 inline QString typeName() const { return QString("Color"); } set(const Value & p)218 inline void set(const Value& p) { pval = p.getColor(); } ~ColorValue()219 ~ColorValue() {} 220 private: 221 QColor pval; 222 }; 223 224 class AbsPercValue : public FloatValue 225 { 226 public: AbsPercValue(const float val)227 AbsPercValue(const float val) :FloatValue(val) {} getAbsPerc()228 inline float getAbsPerc() const { return getFloat(); } typeName()229 inline QString typeName() const { return QString("AbsPerc"); } isAbsPerc()230 inline bool isAbsPerc() const { return true; } ~AbsPercValue()231 ~AbsPercValue() {} 232 }; 233 234 class EnumValue : public IntValue 235 { 236 public: EnumValue(const int val)237 EnumValue(const int val) :IntValue(val) {} getEnum()238 inline int getEnum() const { return getInt(); } isEnum()239 inline bool isEnum() const { return true; } typeName()240 inline QString typeName() const { return QString("Enum"); } ~EnumValue()241 ~EnumValue() {} 242 }; 243 244 class FloatListValue : public Value 245 { 246 public: FloatListValue(QList<float> & val)247 FloatListValue(QList<float>& val) :pval(val) {} getFloatList()248 inline QList<float> getFloatList() const { return pval; } set(const Value & p)249 inline void set(const Value& p) { pval = p.getFloatList(); } typeName()250 inline QString typeName() const { return QString("FloatList"); } isFloatList()251 inline bool isFloatList() const { return true; } ~FloatListValue()252 ~FloatListValue() {} 253 private: 254 QList<float> pval; 255 }; 256 257 class DynamicFloatValue : public FloatValue 258 { 259 public: DynamicFloatValue(const float val)260 DynamicFloatValue(const float val) :FloatValue(val) {} getDynamicFloat()261 inline float getDynamicFloat() const { return getFloat(); } isDynamicFloat()262 inline bool isDynamicFloat() const { return true; } typeName()263 inline QString typeName() const { return QString("DynamicFloat"); } ~DynamicFloatValue()264 ~DynamicFloatValue() {} 265 }; 266 267 class FileValue : public Value 268 { 269 public: FileValue(QString filename)270 FileValue(QString filename) :pval(filename) {} getFileName()271 inline QString getFileName() const { return pval; } isFileName()272 inline bool isFileName() const { return true; } typeName()273 inline QString typeName() const { return QString("FileName"); } set(const Value & p)274 inline void set(const Value& p) { pval = p.getFileName(); } ~FileValue()275 ~FileValue() {} 276 private: 277 QString pval; 278 }; 279 280 class MeshValue : public Value 281 { 282 public: MeshValue(MeshModel * mesh)283 MeshValue(MeshModel* mesh) : pval(mesh) {} getMesh()284 inline MeshModel* getMesh() const { return pval; } isMesh()285 inline bool isMesh() const { return true; } typeName()286 inline QString typeName() const { return QString("Mesh"); } set(const Value & p)287 inline void set(const Value& p) { pval = p.getMesh(); } ~MeshValue()288 ~MeshValue() {} 289 290 private: 291 MeshModel* pval; 292 }; 293 294 /*************************/ 295 296 //class ParameterDeclaration 297 //{ 298 //public: 299 // const QString name; 300 // Value* val; 301 // 302 // virtual void accept(Visitor& v) = 0; 303 // virtual bool operator==(const ParameterDeclaration& rp) = 0; 304 // virtual ~RichParameter(); 305 //}; 306 // 307 //class BoolDeclaration 308 //{ 309 //public: 310 // BoolDeclaration(const QString nm,const bool defval); 311 // bool operator==(const ParameterDeclaration& rp); 312 // void accept(Visitor& v); 313 // ~BoolDeclaration(); 314 //}; 315 // 316 //class IntDeclaration 317 //{ 318 //public: 319 // IntDeclaration(const QString nm,const bool defval); 320 // bool operator==(const ParameterDeclaration& rp); 321 // void accept(Visitor& v); 322 // ~IntDeclaration(); 323 //}; 324 325 326 /******************************/ 327 328 class ParameterDecoration 329 { 330 public: 331 QString fieldDesc; 332 QString tooltip; 333 Value* defVal; 334 335 ParameterDecoration(Value* defvalue, const QString& desc = QString(), const QString& tltip = QString()); 336 337 virtual ~ParameterDecoration(); 338 339 }; 340 341 class BoolDecoration : public ParameterDecoration 342 { 343 public: 344 BoolDecoration(BoolValue* defvalue, const QString& desc = QString(), const QString& tltip = QString()); ~BoolDecoration()345 ~BoolDecoration() {} 346 }; 347 348 class IntDecoration : public ParameterDecoration 349 { 350 public: 351 IntDecoration(IntValue* defvalue, const QString& desc = QString(), const QString& tltip = QString()); ~IntDecoration()352 ~IntDecoration() {} 353 }; 354 355 class FloatDecoration : public ParameterDecoration 356 { 357 public: 358 FloatDecoration(FloatValue* defvalue, const QString& desc = QString(), const QString& tltip = QString()); ~FloatDecoration()359 ~FloatDecoration() {} 360 }; 361 362 class StringDecoration : public ParameterDecoration 363 { 364 public: 365 StringDecoration(StringValue* defvalue, const QString& desc = QString(), const QString& tltip = QString()); ~StringDecoration()366 ~StringDecoration() {} 367 }; 368 369 class Matrix44fDecoration : public ParameterDecoration 370 { 371 public: 372 Matrix44fDecoration(Matrix44fValue* defvalue, const QString& desc = QString(), const QString& tltip = QString()); ~Matrix44fDecoration()373 ~Matrix44fDecoration() {} 374 }; 375 376 class Point3fDecoration : public ParameterDecoration 377 { 378 public: 379 Point3fDecoration(Point3fValue* defvalue, const QString& desc = QString(), const QString& tltip = QString()); ~Point3fDecoration()380 ~Point3fDecoration() {} 381 }; 382 383 class ShotfDecoration : public ParameterDecoration 384 { 385 public: 386 ShotfDecoration(ShotfValue* defvalue, const QString& desc = QString(), const QString& tltip = QString()); ~ShotfDecoration()387 ~ShotfDecoration() {} 388 }; 389 390 class ColorDecoration : public ParameterDecoration 391 { 392 public: 393 ColorDecoration(ColorValue* defvalue, const QString& desc = QString(), const QString& tltip = QString()); ~ColorDecoration()394 ~ColorDecoration() {} 395 }; 396 397 class AbsPercDecoration : public ParameterDecoration 398 { 399 public: 400 AbsPercDecoration(AbsPercValue* defvalue, const float minVal, const float maxVal, const QString& desc = QString(), const QString& tltip = QString()); 401 float min; 402 float max; ~AbsPercDecoration()403 ~AbsPercDecoration() {} 404 }; 405 406 class EnumDecoration : public ParameterDecoration 407 { 408 public: 409 EnumDecoration(EnumValue* defvalue, QStringList values, const QString& desc = QString(), const QString& tltip = QString()); 410 QStringList enumvalues; ~EnumDecoration()411 ~EnumDecoration() {} 412 }; 413 414 class FloatListDecoration : public ParameterDecoration 415 { 416 public: 417 FloatListDecoration(FloatListValue* defvalue, const QString desc = QString(), const QString tltip = QString()) ParameterDecoration(defvalue,desc,tltip)418 :ParameterDecoration(defvalue, desc, tltip) {} ~FloatListDecoration()419 ~FloatListDecoration() {} 420 }; 421 422 class DynamicFloatDecoration : public ParameterDecoration 423 { 424 public: 425 DynamicFloatDecoration(DynamicFloatValue* defvalue, const float minVal, const float maxVal, const QString& desc = QString(), const QString& tltip = QString()); ~DynamicFloatDecoration()426 ~DynamicFloatDecoration() {}; 427 float min; 428 float max; 429 }; 430 431 class SaveFileDecoration : public ParameterDecoration 432 { 433 public: 434 SaveFileDecoration(FileValue* defvalue, const QString& extension, const QString& desc = QString(), const QString& tltip = QString()); ~SaveFileDecoration()435 ~SaveFileDecoration() {} 436 437 QString ext; 438 }; 439 440 class OpenFileDecoration : public ParameterDecoration 441 { 442 public: 443 OpenFileDecoration(FileValue* directorydefvalue, const QStringList& extensions, const QString& desc = QString(), const QString& tltip = QString()); ~OpenFileDecoration()444 ~OpenFileDecoration() {} 445 446 QStringList exts; 447 }; 448 449 450 class MeshDecoration : public ParameterDecoration 451 { 452 public: 453 MeshDecoration(MeshValue* defvalue, MeshDocument* doc, const QString& desc = QString(), const QString& tltip = QString()); 454 455 MeshDecoration(int meshind, MeshDocument* doc, const QString& desc = QString(), const QString& tltip = QString()); 456 457 //WARNING: IT SHOULD BE USED ONLY BY MESHLABSERVER!!!!!!! 458 MeshDecoration(int meshind, const QString& desc = QString(), const QString& tooltip = QString()); 459 ~MeshDecoration()460 ~MeshDecoration() {} 461 462 MeshDocument* meshdoc; 463 int meshindex; 464 }; 465 466 /******************************/ 467 class RichBool; 468 class RichInt; 469 class RichFloat; 470 class RichString; 471 class RichMatrix44f; 472 class RichPoint3f; 473 class RichShotf; 474 class RichColor; 475 class RichAbsPerc; 476 class RichEnum; 477 class RichFloatList; 478 class RichDynamicFloat; 479 class RichOpenFile; 480 class RichSaveFile; 481 class RichMesh; 482 483 484 class Visitor 485 { 486 public: 487 488 virtual void visit(RichBool& pd) = 0; 489 virtual void visit(RichInt& pd) = 0; 490 virtual void visit(RichFloat& pd) = 0; 491 virtual void visit(RichString& pd) = 0; 492 virtual void visit(RichMatrix44f& pd) = 0; 493 virtual void visit(RichPoint3f& pd) = 0; 494 virtual void visit(RichShotf& pd) = 0; 495 virtual void visit(RichColor& pd) = 0; 496 virtual void visit(RichAbsPerc& pd) = 0; 497 virtual void visit(RichEnum& pd) = 0; 498 virtual void visit(RichFloatList& pd) = 0; 499 virtual void visit(RichDynamicFloat& pd) = 0; 500 virtual void visit(RichOpenFile& pd) = 0; 501 virtual void visit(RichSaveFile& pd) = 0; 502 virtual void visit(RichMesh& pd) = 0; 503 ~Visitor()504 virtual ~Visitor() {} 505 }; 506 507 class RichParameter 508 { 509 public: 510 const QString name; 511 512 Value* val; 513 514 ParameterDecoration* pd; 515 516 RichParameter(const QString& nm, Value* v, ParameterDecoration* prdec, bool isxmlpar = false); 517 virtual void accept(Visitor& v) = 0; 518 virtual bool operator==(const RichParameter& rp) = 0; 519 virtual ~RichParameter(); 520 isDerivedFromXMLParam()521 inline bool isDerivedFromXMLParam() { return isxmlparam; } setIsDerivedFromXMLParam(bool derived)522 inline void setIsDerivedFromXMLParam(bool derived) { isxmlparam = derived; } 523 524 private: 525 bool isxmlparam; 526 }; 527 528 529 class RichBool : public RichParameter 530 { 531 public: 532 RichBool(const QString nm, const bool defval); 533 RichBool(const QString nm, const bool defval, const QString desc); 534 RichBool(const QString& nm, const bool defval, const QString& desc, const QString& tltip); 535 RichBool(const QString& nm, const bool val, const bool defval, const QString& desc, const QString& tltip, bool isxmlpar = false); 536 void accept(Visitor& v); 537 bool operator==(const RichParameter& rb); 538 539 ~RichBool(); 540 }; 541 542 class RichInt : public RichParameter 543 { 544 public: 545 RichInt(const QString& nm, const int defval, const QString& desc = QString(), const QString& tltip = QString()); 546 RichInt(const QString& nm, const int val, const int defval, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 547 void accept(Visitor& v); 548 bool operator==(const RichParameter& rb); 549 ~RichInt(); 550 }; 551 552 class RichFloat : public RichParameter 553 { 554 public: 555 RichFloat(const QString& nm, const float defval, const QString& desc = QString(), const QString& tltip = QString()); 556 RichFloat(const QString& nm, const float val, const float defval, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 557 void accept(Visitor& v); 558 bool operator==(const RichParameter& rb); 559 ~RichFloat(); 560 }; 561 562 class RichString : public RichParameter 563 { 564 public: 565 RichString(const QString& nm, const QString& defval, const QString& desc, const QString& tltip); 566 RichString(const QString& nm, const QString& defval); 567 RichString(const QString& nm, const QString& defval, const QString& desc); 568 RichString(const QString& nm, const QString& val, const QString& defval, const QString& desc, const QString& tltip, bool isxmlpar = false); 569 void accept(Visitor& v); 570 bool operator==(const RichParameter& rb); 571 ~RichString(); 572 }; 573 574 class RichMatrix44f : public RichParameter 575 { 576 public: 577 RichMatrix44f(const QString& nm, const vcg::Matrix44f& defval, const QString& desc = QString(), const QString& tltip = QString()); 578 RichMatrix44f(const QString& nm, const vcg::Matrix44d& defval, const QString& desc = QString(), const QString& tltip = QString()); 579 RichMatrix44f(const QString& nm, const vcg::Matrix44f& val, const vcg::Matrix44f& defval, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 580 void accept(Visitor& v); 581 bool operator==(const RichParameter& rb); 582 ~RichMatrix44f(); 583 }; 584 585 class RichPoint3f : public RichParameter 586 { 587 public: 588 RichPoint3f(const QString& nm, const vcg::Point3f& defval, const QString& desc = QString(), const QString& tltip = QString()); 589 RichPoint3f(const QString& nm, const vcg::Point3d& defval, const QString& desc = QString(), const QString& tltip = QString()); 590 RichPoint3f(const QString& nm, const vcg::Point3f& val, const vcg::Point3f& defval, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 591 void accept(Visitor& v); 592 bool operator==(const RichParameter& rb); 593 ~RichPoint3f(); 594 }; 595 class RichShotf : public RichParameter 596 { 597 public: 598 RichShotf(const QString& nm, const vcg::Shotf& defval, const QString& desc = QString(), const QString& tltip = QString()); 599 RichShotf(const QString& nm, const vcg::Shotf& val, const vcg::Shotf& defval, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 600 void accept(Visitor& v); 601 bool operator==(const RichParameter& rb); 602 ~RichShotf(); 603 }; 604 605 class RichColor : public RichParameter 606 { 607 public: 608 RichColor(const QString& nm, const QColor& defval); 609 RichColor(const QString& nm, const QColor& defval, const QString& desc); 610 RichColor(const QString& nm, const QColor& defval, const QString& desc, const QString& tltip); 611 RichColor(const QString& nm, const QColor& val, const QColor& defval, const QString& desc, const QString& tltip, bool isxmlpar = false); 612 void accept(Visitor& v); 613 bool operator==(const RichParameter& rb); 614 ~RichColor(); 615 616 }; 617 618 class RichAbsPerc : public RichParameter 619 { 620 public: 621 RichAbsPerc(const QString& nm, const float defval, const float minval, const float maxval, const QString& desc = QString(), const QString& tltip = QString()); 622 RichAbsPerc(const QString& nm, const float val, const float defval, const float minval, const float maxval, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 623 void accept(Visitor& v); 624 bool operator==(const RichParameter& rb); 625 ~RichAbsPerc(); 626 }; 627 628 class RichEnum : public RichParameter 629 { 630 public: 631 RichEnum(const QString& nm, const int defval, const QStringList& values, const QString& desc = QString(), const QString& tltip = QString()); 632 RichEnum(const QString& nm, const int val, const int defval, const QStringList& values, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 633 void accept(Visitor& v); 634 bool operator==(const RichParameter& rb); 635 ~RichEnum(); 636 }; 637 638 class RichMesh : public RichParameter 639 { 640 public: 641 642 //lastCreated = new RichMesh(pd.name, pd.val->getMesh(), dec->defVal->getMesh(), dec->meshdoc, dec->fieldDesc, dec->tooltip, pd.isDerivedFromXMLParam()); 643 //else 644 // lastCreated = new RichMesh(pd.name, dec->meshindex, pd.isDerivedFromXMLParam()); 645 RichMesh(const QString& nm, MeshModel* defval, MeshDocument* doc, const QString& desc = QString(), const QString& tltip = QString()); 646 RichMesh(const QString& nm, MeshModel* val, MeshModel* defval, MeshDocument* doc, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 647 648 RichMesh(const QString& nm, int meshindex, MeshDocument* doc, const QString& desc = QString(), const QString& tltip = QString()); 649 650 //WARNING: IT SHOULD BE USED ONLY BY MESHLABSERVER!!!!!!! 651 RichMesh(const QString& nm, int meshind, bool isxmlpar = false); 652 RichMesh(const QString& nm, int meshind, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 653 654 void accept(Visitor& v); 655 bool operator==(const RichParameter& rb); 656 ~RichMesh(); 657 658 int meshindex; 659 }; 660 661 class RichFloatList : public RichParameter 662 { 663 public: 664 RichFloatList(const QString& nm, FloatListValue* v, FloatListDecoration* prdec); 665 RichFloatList(const QString& nm, FloatListValue* val, FloatListValue* v, FloatListDecoration* prdec, bool isxmlpar = false); 666 void accept(Visitor& v); 667 bool operator==(const RichParameter& rb); 668 ~RichFloatList(); 669 }; 670 671 class RichDynamicFloat : public RichParameter 672 { 673 public: 674 RichDynamicFloat(const QString& nm, const float defval, const float minval, const float maxval, const QString& desc = QString(), const QString& tltip = QString()); 675 RichDynamicFloat(const QString& nm, const float val, const float defval, const float minval, const float maxval, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 676 void accept(Visitor& v); 677 bool operator==(const RichParameter& rb); 678 ~RichDynamicFloat(); 679 680 }; 681 682 class RichOpenFile : public RichParameter 683 { 684 public: 685 RichOpenFile(const QString& nm, const QString& directorydefval, const QStringList& exts, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 686 void accept(Visitor& v); 687 bool operator==(const RichParameter& rb); 688 ~RichOpenFile(); 689 }; 690 691 class RichSaveFile : public RichParameter 692 { 693 public: 694 RichSaveFile(const QString& nm, const QString& filedefval, const QString& ext, const QString& desc = QString(), const QString& tltip = QString(), bool isxmlpar = false); 695 void accept(Visitor& v); 696 bool operator==(const RichParameter& rb); 697 ~RichSaveFile(); 698 }; 699 700 701 702 /******************************/ 703 704 class RichParameterCopyConstructor : public Visitor 705 { 706 public: RichParameterCopyConstructor()707 RichParameterCopyConstructor() {} 708 709 void visit(RichBool& pd); 710 void visit(RichInt& pd); 711 void visit(RichFloat& pd); 712 void visit(RichString& pd); 713 void visit(RichMatrix44f& pd); 714 void visit(RichPoint3f& pd); 715 void visit(RichShotf& pd); 716 void visit(RichColor& pd); 717 void visit(RichAbsPerc& pd); 718 719 void visit(RichEnum& pd); 720 void visit(RichFloatList& pd); 721 722 void visit(RichDynamicFloat& pd); 723 724 void visit(RichOpenFile& pd); 725 void visit(RichSaveFile& pd); 726 void visit(RichMesh& pd); 727 ~RichParameterCopyConstructor()728 ~RichParameterCopyConstructor() {} 729 730 RichParameter* lastCreated; 731 }; 732 733 class RichParameterAdapter 734 { 735 public: 736 static bool create(const QDomElement& np, RichParameter** par); 737 static bool create(const QString & namepreamble, const MLXMLPluginInfo::XMLMap & xmlparam, RichParameter ** par); 738 739 static QString convertToStringValue(RichParameter& rp); 740 }; 741 742 class RichParameterValueToStringVisitor : public Visitor 743 { 744 public: RichParameterValueToStringVisitor()745 RichParameterValueToStringVisitor() : stringvalue() {} 746 747 void visit(RichBool& pd); 748 void visit(RichInt& pd); 749 void visit(RichFloat& pd); 750 void visit(RichString& pd); 751 void visit(RichMatrix44f& pd); 752 void visit(RichPoint3f& pd); 753 void visit(RichShotf& pd); 754 void visit(RichColor& pd); 755 void visit(RichAbsPerc& pd); 756 757 void visit(RichEnum& pd); 758 void visit(RichFloatList& pd); 759 760 void visit(RichDynamicFloat& pd); 761 762 void visit(RichOpenFile& pd); 763 void visit(RichSaveFile& pd); 764 void visit(RichMesh& pd); 765 ~RichParameterValueToStringVisitor()766 ~RichParameterValueToStringVisitor() {} 767 768 QString stringvalue; 769 }; 770 771 772 class RichParameterXMLVisitor : public Visitor 773 { 774 public: RichParameterXMLVisitor(QDomDocument & doc)775 RichParameterXMLVisitor(QDomDocument& doc) : docdom(doc) {} 776 777 void visit(RichBool& pd); 778 void visit(RichInt& pd); 779 void visit(RichFloat& pd); 780 void visit(RichString& pd); 781 void visit(RichMatrix44f& pd); 782 void visit(RichPoint3f& pd); 783 void visit(RichShotf& pd); 784 void visit(RichColor& pd); 785 void visit(RichAbsPerc& pd); 786 787 void visit(RichEnum& pd); 788 void visit(RichFloatList& pd); 789 790 void visit(RichDynamicFloat& pd); 791 792 void visit(RichOpenFile& pd); 793 void visit(RichSaveFile& pd); 794 void visit(RichMesh& pd); 795 ~RichParameterXMLVisitor()796 ~RichParameterXMLVisitor() {} 797 798 QDomDocument docdom; 799 QDomElement parElem; 800 private: 801 void fillRichParameterAttribute(const QString& type, const QString& name, const QString& desc, const QString& tooltip, bool isxmlpar); 802 void fillRichParameterAttribute(const QString& type, const QString& name, const QString& val, const QString& desc, const QString& tooltip, bool isxmlpar); 803 }; 804 805 class RichParameterSet 806 { 807 808 public: 809 RichParameterSet(); 810 RichParameterSet(const RichParameterSet& rps); 811 // The data is just a list of Parameters 812 //QMap<QString, FilterParameter *> paramMap; 813 QList<RichParameter*> paramList; 814 bool isEmpty() const; 815 RichParameter* findParameter(const QString& name) const; 816 bool hasParameter(const QString& name) const; 817 818 819 RichParameterSet& operator=(const RichParameterSet& rps); 820 RichParameterSet& copy(const RichParameterSet& rps); 821 RichParameterSet& join(const RichParameterSet& rps); 822 bool operator==(const RichParameterSet& rps); 823 824 RichParameterSet& addParam(RichParameter* pd); 825 826 //remove a parameter from the set by name 827 RichParameterSet& removeParameter(const QString& name); 828 829 void clear(); 830 831 void setValue(const QString& name, const Value& val); 832 833 bool getBool(const QString& name) const; 834 int getInt(const QString& name) const; 835 float getFloat(const QString& name) const; 836 QString getString(const QString& name) const; 837 vcg::Matrix44f getMatrix44(const QString& name) const; 838 vcg::Matrix44<MESHLAB_SCALAR> getMatrix44m(const QString& name) const; 839 vcg::Point3f getPoint3f(const QString& name) const; 840 vcg::Point3<MESHLAB_SCALAR> getPoint3m(const QString& name) const; 841 vcg::Shotf getShotf(const QString& name) const; 842 vcg::Shot<MESHLAB_SCALAR> getShotm(const QString& name) const; 843 QColor getColor(const QString& name) const; 844 vcg::Color4b getColor4b(const QString& name) const; 845 float getAbsPerc(const QString& name) const; 846 int getEnum(const QString& name) const; 847 MeshModel* getMesh(const QString& name) const; 848 QList<float> getFloatList(const QString& name) const; 849 float getDynamicFloat(const QString& name) const; 850 QString getOpenFileName(const QString& name) const; 851 QString getSaveFileName(const QString& name) const; 852 853 854 ~RichParameterSet(); 855 }; 856 857 /****************************/ 858 859 860 861 #endif 862