From 3357cd91e7bf1ac626b636514de4b9bc66efc243 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 12 Dec 2016 17:01:26 +0100 Subject: [PATCH] Qt4/Qt5 neutral changes: + change inheritance of PropertyItem to not derive from BaseClass (and QObject) any more to fix crashes with Qt5 --- src/Gui/propertyeditor/PropertyItem.cpp | 77 ++++++++----- src/Gui/propertyeditor/PropertyItem.h | 105 +++++++++++++----- src/Gui/propertyeditor/PropertyModel.cpp | 20 +--- src/Mod/Fem/Gui/PropertyFemMeshItem.cpp | 2 +- src/Mod/Fem/Gui/PropertyFemMeshItem.h | 2 +- src/Mod/Mesh/Gui/PropertyEditorMesh.cpp | 2 +- src/Mod/Mesh/Gui/PropertyEditorMesh.h | 2 +- .../Gui/PropertyConstraintListItem.cpp | 2 +- .../Sketcher/Gui/PropertyConstraintListItem.h | 2 +- 9 files changed, 136 insertions(+), 78 deletions(-) diff --git a/src/Gui/propertyeditor/PropertyItem.cpp b/src/Gui/propertyeditor/PropertyItem.cpp index 2107b80970..a8fdcc82ab 100644 --- a/src/Gui/propertyeditor/PropertyItem.cpp +++ b/src/Gui/propertyeditor/PropertyItem.cpp @@ -79,7 +79,30 @@ namespace Gui { namespace PropertyEditor { } } -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyItem, Base::BaseClass) +Gui::PropertyEditor::PropertyItemFactory* Gui::PropertyEditor::PropertyItemFactory::_singleton = NULL; + +PropertyItemFactory& PropertyItemFactory::instance() +{ + if (_singleton == NULL) + _singleton = new PropertyItemFactory; + return *_singleton; +} + +void PropertyItemFactory::destruct () +{ + delete _singleton; + _singleton = 0; +} + +PropertyItem* PropertyItemFactory::createPropertyItem (const char* sName) const +{ + PropertyItem* w = static_cast(Produce(sName)); + return w; +} + +// ---------------------------------------------------- + +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyItem) PropertyItem::PropertyItem() : parentItem(0), readonly(false), cleared(false) { @@ -474,7 +497,7 @@ void PropertyItem::bind(const App::Property& prop) { // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyStringItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyStringItem) PropertyStringItem::PropertyStringItem() { @@ -520,7 +543,7 @@ QVariant PropertyStringItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyFontItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyFontItem) PropertyFontItem::PropertyFontItem() { @@ -570,7 +593,7 @@ QVariant PropertyFontItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertySeparatorItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertySeparatorItem) QWidget* PropertySeparatorItem::createEditor(QWidget* parent, const QObject* receiver, const char* method) const { @@ -582,7 +605,7 @@ QWidget* PropertySeparatorItem::createEditor(QWidget* parent, const QObject* rec // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyIntegerItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyIntegerItem) PropertyIntegerItem::PropertyIntegerItem() { @@ -649,7 +672,7 @@ QVariant PropertyIntegerItem::toString(const QVariant& v) const { // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyIntegerConstraintItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyIntegerConstraintItem) PropertyIntegerConstraintItem::PropertyIntegerConstraintItem() { @@ -732,7 +755,7 @@ QVariant PropertyIntegerConstraintItem::toString(const QVariant& v) const { // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyFloatItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyFloatItem) PropertyFloatItem::PropertyFloatItem() { @@ -801,7 +824,7 @@ QVariant PropertyFloatItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyUnitItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyUnitItem) PropertyUnitItem::PropertyUnitItem() { @@ -875,7 +898,7 @@ QVariant PropertyUnitItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyUnitConstraintItem, Gui::PropertyEditor::PropertyUnitItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyUnitConstraintItem) PropertyUnitConstraintItem::PropertyUnitConstraintItem() { @@ -911,7 +934,7 @@ void PropertyUnitConstraintItem::setEditorData(QWidget *editor, const QVariant& // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyFloatConstraintItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyFloatConstraintItem) PropertyFloatConstraintItem::PropertyFloatConstraintItem() { @@ -993,7 +1016,7 @@ QVariant PropertyFloatConstraintItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyAngleItem, Gui::PropertyEditor::PropertyFloatItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyAngleItem) PropertyAngleItem::PropertyAngleItem() { @@ -1035,7 +1058,7 @@ QVariant PropertyAngleItem::toString(const QVariant& prop) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyBoolItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyBoolItem) PropertyBoolItem::PropertyBoolItem() { @@ -1083,7 +1106,7 @@ QVariant PropertyBoolItem::editorData(QWidget *editor) const // --------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyVectorItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyVectorItem) PropertyVectorItem::PropertyVectorItem() { @@ -1196,7 +1219,7 @@ void PropertyVectorItem::propertyBound() { // --------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyVectorDistanceItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyVectorDistanceItem) PropertyVectorDistanceItem::PropertyVectorDistanceItem() { @@ -1311,7 +1334,7 @@ void PropertyVectorDistanceItem::propertyBound() { // --------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyMatrixItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyMatrixItem) PropertyMatrixItem::PropertyMatrixItem() { @@ -1732,7 +1755,7 @@ void PlacementEditor::updateValue(const QVariant& v, bool incr, bool data) } } -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyPlacementItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyPlacementItem) PropertyPlacementItem::PropertyPlacementItem() : init_axis(false), changed_value(false), rot_angle(0), rot_axis(0,0,1) { @@ -1951,7 +1974,7 @@ void PropertyPlacementItem::propertyBound() { // --------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyEnumItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyEnumItem) PropertyEnumItem::PropertyEnumItem() { @@ -2037,7 +2060,7 @@ QVariant PropertyEnumItem::editorData(QWidget *editor) const // --------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyStringListItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyStringListItem) PropertyStringListItem::PropertyStringListItem() { @@ -2109,7 +2132,7 @@ void PropertyStringListItem::setValue(const QVariant& value) // --------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyFloatListItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyFloatListItem) PropertyFloatListItem::PropertyFloatListItem() { @@ -2183,7 +2206,7 @@ void PropertyFloatListItem::setValue(const QVariant& value) // --------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyIntegerListItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyIntegerListItem) PropertyIntegerListItem::PropertyIntegerListItem() { @@ -2258,7 +2281,7 @@ void PropertyIntegerListItem::setValue(const QVariant& value) // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyColorItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyColorItem) PropertyColorItem::PropertyColorItem() { @@ -2345,7 +2368,7 @@ namespace Gui { namespace PropertyEditor { Q_DECLARE_METATYPE(Gui::PropertyEditor::Material) -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyMaterialItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyMaterialItem) PropertyMaterialItem::PropertyMaterialItem() { @@ -2657,7 +2680,7 @@ QVariant PropertyMaterialItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyMaterialListItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyMaterialListItem) PropertyMaterialListItem::PropertyMaterialListItem() { @@ -3122,7 +3145,7 @@ QVariant PropertyMaterialListItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyFileItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyFileItem) PropertyFileItem::PropertyFileItem() { @@ -3173,7 +3196,7 @@ QVariant PropertyFileItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyPathItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyPathItem) PropertyPathItem::PropertyPathItem() { @@ -3225,7 +3248,7 @@ QVariant PropertyPathItem::editorData(QWidget *editor) const // -------------------------------------------------------------------- -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyTransientFileItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyTransientFileItem) PropertyTransientFileItem::PropertyTransientFileItem() { @@ -3346,7 +3369,7 @@ void LinkLabel::onLinkActivated (const QString& s) } } -TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyLinkItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(Gui::PropertyEditor::PropertyLinkItem) PropertyLinkItem::PropertyLinkItem() { diff --git a/src/Gui/propertyeditor/PropertyItem.h b/src/Gui/propertyeditor/PropertyItem.h index 4d3cb724ff..2c609bdcca 100644 --- a/src/Gui/propertyeditor/PropertyItem.h +++ b/src/Gui/propertyeditor/PropertyItem.h @@ -29,7 +29,7 @@ #include #include -#include +#include #include #include #include @@ -49,15 +49,62 @@ Q_DECLARE_METATYPE(Base::Quantity) Q_DECLARE_METATYPE(QList) #endif +#define PROPERTYITEM_HEADER \ +public: \ + static void *create(void); \ + static void init(void); + +#define PROPERTYITEM_SOURCE(_class_) \ +void * _class_::create(void) { \ + return new _class_ ();\ +} \ +void _class_::init(void) { \ + (void)new Gui::PropertyEditor::PropertyItemProducer<_class_>(#_class_); \ +} + namespace Gui { namespace Dialog { class TaskPlacement; } namespace PropertyEditor { +class PropertyItem; + +/** + * The PropertyItemFactory provides methods for the dynamic creation of property items. + * \author Werner Mayer + */ +class GuiExport PropertyItemFactory : public Base::Factory +{ +public: + static PropertyItemFactory& instance(); + static void destruct (); + + PropertyItem* createPropertyItem (const char* sName) const; + +private: + static PropertyItemFactory* _singleton; + + PropertyItemFactory(){} + ~PropertyItemFactory(){} +}; + +template +class PropertyItemProducer : public Base::AbstractProducer +{ +public: + PropertyItemProducer(const char* className) { + PropertyItemFactory::instance().AddProducer(className, this); + } + virtual ~PropertyItemProducer() { + } + virtual void* Produce () const { + return CLASS::create(); + } +}; + class GuiExport PropertyItem : virtual public QObject, public Base::BaseClass, public ExpressionBinding { Q_OBJECT - - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER public: ~PropertyItem(); @@ -134,7 +181,7 @@ private: */ class GuiExport PropertyStringItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -154,7 +201,7 @@ protected: */ class GuiExport PropertyFontItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -174,7 +221,7 @@ protected: */ class GuiExport PropertySeparatorItem : public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER bool isSeparator() const { return true; } QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; @@ -186,7 +233,7 @@ class GuiExport PropertySeparatorItem : public PropertyItem */ class GuiExport PropertyIntegerItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -207,7 +254,7 @@ protected: */ class GuiExport PropertyIntegerConstraintItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -228,7 +275,7 @@ protected: */ class GuiExport PropertyFloatItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -249,7 +296,7 @@ protected: */ class GuiExport PropertyUnitItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -269,7 +316,7 @@ protected: */ class GuiExport PropertyUnitConstraintItem: public PropertyUnitItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -283,7 +330,7 @@ protected: */ class GuiExport PropertyFloatConstraintItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -304,7 +351,7 @@ protected: */ class GuiExport PropertyAngleItem : public PropertyFloatItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER protected: virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -320,7 +367,7 @@ protected: */ class GuiExport PropertyBoolItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -345,7 +392,7 @@ class GuiExport PropertyVectorItem: public PropertyItem Q_PROPERTY(double x READ x WRITE setX DESIGNABLE true USER true) Q_PROPERTY(double y READ y WRITE setY DESIGNABLE true USER true) Q_PROPERTY(double z READ z WRITE setZ DESIGNABLE true USER true) - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -384,7 +431,7 @@ class GuiExport PropertyVectorDistanceItem: public PropertyItem Q_PROPERTY(Base::Quantity x READ x WRITE setX DESIGNABLE true USER true) Q_PROPERTY(Base::Quantity y READ y WRITE setY DESIGNABLE true USER true) Q_PROPERTY(Base::Quantity z READ z WRITE setZ DESIGNABLE true USER true) - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -431,7 +478,7 @@ class GuiExport PropertyMatrixItem: public PropertyItem Q_PROPERTY(double A42 READ getA42 WRITE setA42 DESIGNABLE true USER true) Q_PROPERTY(double A43 READ getA43 WRITE setA43 DESIGNABLE true USER true) Q_PROPERTY(double A44 READ getA44 WRITE setA44 DESIGNABLE true USER true) - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -528,7 +575,7 @@ class GuiExport PropertyPlacementItem: public PropertyItem Q_PROPERTY(Base::Quantity Angle READ getAngle WRITE setAngle DESIGNABLE true USER true) Q_PROPERTY(Base::Vector3d Axis READ getAxis WRITE setAxis DESIGNABLE true USER true) Q_PROPERTY(Base::Vector3d Position READ getPosition WRITE setPosition DESIGNABLE true USER true) - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -567,7 +614,7 @@ private: */ class GuiExport PropertyEnumItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -587,7 +634,7 @@ protected: */ class GuiExport PropertyStringListItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -608,7 +655,7 @@ protected: */ class GuiExport PropertyFloatListItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -629,7 +676,7 @@ protected: */ class GuiExport PropertyIntegerListItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -650,7 +697,7 @@ protected: */ class GuiExport PropertyColorItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -679,7 +726,7 @@ class GuiExport PropertyMaterialItem : public PropertyItem Q_PROPERTY(QColor EmissiveColor READ getEmissiveColor WRITE setEmissiveColor DESIGNABLE true USER true) Q_PROPERTY(float Shininess READ getShininess WRITE setShininess DESIGNABLE true USER true) Q_PROPERTY(float Transparency READ getTransparency WRITE setTransparency DESIGNABLE true USER true) - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -728,7 +775,7 @@ class GuiExport PropertyMaterialListItem : public PropertyItem Q_PROPERTY(QColor EmissiveColor READ getEmissiveColor WRITE setEmissiveColor DESIGNABLE true USER true) Q_PROPERTY(float Shininess READ getShininess WRITE setShininess DESIGNABLE true USER true) Q_PROPERTY(float Transparency READ getTransparency WRITE setTransparency DESIGNABLE true USER true) - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -774,7 +821,7 @@ private: */ class GuiExport PropertyFileItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -795,7 +842,7 @@ protected: */ class GuiExport PropertyPathItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -816,7 +863,7 @@ protected: */ class GuiExport PropertyTransientFileItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; @@ -872,7 +919,7 @@ private: */ class GuiExport PropertyLinkItem: public PropertyItem { - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; diff --git a/src/Gui/propertyeditor/PropertyModel.cpp b/src/Gui/propertyeditor/PropertyModel.cpp index 8ab4876001..b0cc7b856a 100644 --- a/src/Gui/propertyeditor/PropertyModel.cpp +++ b/src/Gui/propertyeditor/PropertyModel.cpp @@ -239,18 +239,12 @@ void PropertyModel::buildUp(const PropertyModel::PropertyList& props) App::Property* prop = it->front(); QString editor = QString::fromLatin1(prop->getEditorName()); if (!editor.isEmpty()) { - Base::BaseClass* item = 0; - try { - item = static_cast(Base::Type:: - createInstanceByName(prop->getEditorName(),true)); - } - catch (...) { - } + PropertyItem* item = PropertyItemFactory::instance().createPropertyItem(prop->getEditorName()); if (!item) { qWarning("No property item for type %s found\n", prop->getEditorName()); continue; } - if (item->getTypeId().isDerivedFrom(PropertyItem::getClassTypeId())) { + else { PropertyItem* child = (PropertyItem*)item; child->setParent(rootItem); rootItem->appendChild(child); @@ -286,17 +280,11 @@ void PropertyModel::appendProperty(const App::Property& prop) { QString editor = QString::fromLatin1(prop.getEditorName()); if (!editor.isEmpty()) { - Base::BaseClass* item = 0; - try { - item = static_cast(Base::Type:: - createInstanceByName(prop.getEditorName(),true)); - } - catch (...) { - } + PropertyItem* item = PropertyItemFactory::instance().createPropertyItem(prop.getEditorName()); if (!item) { qWarning("No property item for type %s found\n", prop.getEditorName()); } - else if (item->getTypeId().isDerivedFrom(PropertyItem::getClassTypeId())) { + else { // notify system to add new row int row = rootItem->childCount(); beginInsertRows(QModelIndex(), row, row); diff --git a/src/Mod/Fem/Gui/PropertyFemMeshItem.cpp b/src/Mod/Fem/Gui/PropertyFemMeshItem.cpp index 35d88773fe..6f6e9fdf80 100644 --- a/src/Mod/Fem/Gui/PropertyFemMeshItem.cpp +++ b/src/Mod/Fem/Gui/PropertyFemMeshItem.cpp @@ -33,7 +33,7 @@ using namespace FemGui; -TYPESYSTEM_SOURCE(FemGui::PropertyFemMeshItem, Gui::PropertyEditor::PropertyItem); +PROPERTYITEM_SOURCE(FemGui::PropertyFemMeshItem) PropertyFemMeshItem::PropertyFemMeshItem() { diff --git a/src/Mod/Fem/Gui/PropertyFemMeshItem.h b/src/Mod/Fem/Gui/PropertyFemMeshItem.h index d6d70d977a..5167ecfbc4 100644 --- a/src/Mod/Fem/Gui/PropertyFemMeshItem.h +++ b/src/Mod/Fem/Gui/PropertyFemMeshItem.h @@ -41,7 +41,7 @@ class PropertyFemMeshItem : public Gui::PropertyEditor::PropertyItem Q_PROPERTY(int Volumes READ countVolumes) Q_PROPERTY(int Polyhedrons READ countPolyhedrons) Q_PROPERTY(int Groups READ countGroups) - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; diff --git a/src/Mod/Mesh/Gui/PropertyEditorMesh.cpp b/src/Mod/Mesh/Gui/PropertyEditorMesh.cpp index 1134f49bf7..1910ae7257 100644 --- a/src/Mod/Mesh/Gui/PropertyEditorMesh.cpp +++ b/src/Mod/Mesh/Gui/PropertyEditorMesh.cpp @@ -33,7 +33,7 @@ using namespace MeshGui; using MeshCore::MeshKernel; -TYPESYSTEM_SOURCE(MeshGui::PropertyMeshKernelItem, Gui::PropertyEditor::PropertyItem); +PROPERTYITEM_SOURCE(MeshGui::PropertyMeshKernelItem) PropertyMeshKernelItem::PropertyMeshKernelItem() { diff --git a/src/Mod/Mesh/Gui/PropertyEditorMesh.h b/src/Mod/Mesh/Gui/PropertyEditorMesh.h index 7b6855a9d9..f8311fdf6f 100644 --- a/src/Mod/Mesh/Gui/PropertyEditorMesh.h +++ b/src/Mod/Mesh/Gui/PropertyEditorMesh.h @@ -37,7 +37,7 @@ class MeshGuiExport PropertyMeshKernelItem : public Gui::PropertyEditor::Propert Q_PROPERTY(int Points READ countPoints) Q_PROPERTY(int Edges READ countEdges) Q_PROPERTY(int Faces READ countFaces) - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const; diff --git a/src/Mod/Sketcher/Gui/PropertyConstraintListItem.cpp b/src/Mod/Sketcher/Gui/PropertyConstraintListItem.cpp index e17b4dfffa..ad1ddbae20 100644 --- a/src/Mod/Sketcher/Gui/PropertyConstraintListItem.cpp +++ b/src/Mod/Sketcher/Gui/PropertyConstraintListItem.cpp @@ -36,7 +36,7 @@ using namespace SketcherGui; using namespace Gui::PropertyEditor; -TYPESYSTEM_SOURCE(SketcherGui::PropertyConstraintListItem, Gui::PropertyEditor::PropertyItem) +PROPERTYITEM_SOURCE(SketcherGui::PropertyConstraintListItem) PropertyConstraintListItem::PropertyConstraintListItem() { diff --git a/src/Mod/Sketcher/Gui/PropertyConstraintListItem.h b/src/Mod/Sketcher/Gui/PropertyConstraintListItem.h index 421feaeea3..381fb09566 100644 --- a/src/Mod/Sketcher/Gui/PropertyConstraintListItem.h +++ b/src/Mod/Sketcher/Gui/PropertyConstraintListItem.h @@ -43,7 +43,7 @@ namespace SketcherGui { class PropertyConstraintListItem: public Gui::PropertyEditor::PropertyItem { Q_OBJECT - TYPESYSTEM_HEADER(); + PROPERTYITEM_HEADER virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; virtual void setEditorData(QWidget *editor, const QVariant& data) const;