diff --git a/src/App/PropertyStandard.h b/src/App/PropertyStandard.h index ea818207e..0c27647c4 100644 --- a/src/App/PropertyStandard.h +++ b/src/App/PropertyStandard.h @@ -287,6 +287,8 @@ public: void setValues (const std::vector& values); const std::vector &getValues(void) const{return _lValueList;} + virtual const char* getEditorName(void) const + { return "Gui::PropertyEditor::PropertyIntegerListItem"; } virtual PyObject *getPyObject(void); virtual void setPyObject(PyObject *); @@ -535,7 +537,10 @@ public: void setValues (const std::vector& values); const std::vector &getValues(void) const{return _lValueList;} - + + virtual const char* getEditorName(void) const + { return "Gui::PropertyEditor::PropertyFloatListItem"; } + virtual PyObject *getPyObject(void); virtual void setPyObject(PyObject *); @@ -688,7 +693,8 @@ public: const std::vector &getValues(void) const{return _lValueList;} - virtual const char* getEditorName(void) const { return "Gui::PropertyEditor::PropertyStringListItem"; } + virtual const char* getEditorName(void) const + { return "Gui::PropertyEditor::PropertyStringListItem"; } virtual PyObject *getPyObject(void); virtual void setPyObject(PyObject *); diff --git a/src/Gui/SoFCDB.cpp b/src/Gui/SoFCDB.cpp index becfb5473..f50c89ec4 100644 --- a/src/Gui/SoFCDB.cpp +++ b/src/Gui/SoFCDB.cpp @@ -120,6 +120,8 @@ void Gui::SoFCDB::init() PropertyPlacementItem ::init(); PropertyEnumItem ::init(); PropertyStringListItem ::init(); + PropertyFloatListItem ::init(); + PropertyIntegerListItem ::init(); PropertyColorItem ::init(); PropertyFileItem ::init(); PropertyPathItem ::init(); diff --git a/src/Gui/Widgets.cpp b/src/Gui/Widgets.cpp index 9d63c5b93..80651a24a 100644 --- a/src/Gui/Widgets.cpp +++ b/src/Gui/Widgets.cpp @@ -1021,7 +1021,7 @@ void LabelEditor::changeText() QDialog dlg(this); QVBoxLayout* hboxLayout = new QVBoxLayout(&dlg); QDialogButtonBox* buttonBox = new QDialogButtonBox(&dlg); - buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Close); + buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QPlainTextEdit *edit = new QPlainTextEdit(&dlg); edit->setPlainText(this->lineEdit->text()); diff --git a/src/Gui/propertyeditor/PropertyItem.cpp b/src/Gui/propertyeditor/PropertyItem.cpp index fc3876222..281c68667 100644 --- a/src/Gui/propertyeditor/PropertyItem.cpp +++ b/src/Gui/propertyeditor/PropertyItem.cpp @@ -1841,6 +1841,140 @@ void PropertyStringListItem::setValue(const QVariant& value) setPropertyValue(data); } +// --------------------------------------------------------------- + +TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyFloatListItem, Gui::PropertyEditor::PropertyItem); + +PropertyFloatListItem::PropertyFloatListItem() +{ +} + +QWidget* PropertyFloatListItem::createEditor(QWidget* parent, const QObject* receiver, const char* method) const +{ + Gui::LabelEditor* le = new Gui::LabelEditor(parent); + le->setAutoFillBackground(true); + QObject::connect(le, SIGNAL(textChanged(const QString&)), receiver, method); + return le; +} + +void PropertyFloatListItem::setEditorData(QWidget *editor, const QVariant& data) const +{ + Gui::LabelEditor *le = qobject_cast(editor); + QStringList list = data.toStringList(); + le->setText(list.join(QChar::fromAscii('\n'))); +} + +QVariant PropertyFloatListItem::editorData(QWidget *editor) const +{ + Gui::LabelEditor *le = qobject_cast(editor); + QString complete = le->text(); + QStringList list = complete.split(QChar::fromAscii('\n')); + return QVariant(list); +} + +QVariant PropertyFloatListItem::toString(const QVariant& prop) const +{ + QStringList list = prop.toStringList(); + QString text = QString::fromUtf8("[%1]").arg(list.join(QLatin1String(","))); + + return QVariant(text); +} + +QVariant PropertyFloatListItem::value(const App::Property* prop) const +{ + assert(prop && prop->getTypeId().isDerivedFrom(App::PropertyFloatList::getClassTypeId())); + + QStringList list; + const std::vector& value = static_cast(prop)->getValues(); + for (std::vector::const_iterator jt = value.begin(); jt != value.end(); ++jt) { + list << QString::number(*jt); + } + + return QVariant(list); +} + +void PropertyFloatListItem::setValue(const QVariant& value) +{ + if (!value.canConvert(QVariant::StringList)) + return; + QStringList values = value.toStringList(); + QString data; + QTextStream str(&data); + str << "["; + for (QStringList::Iterator it = values.begin(); it != values.end(); ++it) { + str << *it << ","; + } + str << "]"; + setPropertyValue(data); +} + +// --------------------------------------------------------------- + +TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyIntegerListItem, Gui::PropertyEditor::PropertyItem); + +PropertyIntegerListItem::PropertyIntegerListItem() +{ +} + +QWidget* PropertyIntegerListItem::createEditor(QWidget* parent, const QObject* receiver, const char* method) const +{ + Gui::LabelEditor* le = new Gui::LabelEditor(parent); + le->setAutoFillBackground(true); + QObject::connect(le, SIGNAL(textChanged(const QString&)), receiver, method); + return le; +} + +void PropertyIntegerListItem::setEditorData(QWidget *editor, const QVariant& data) const +{ + Gui::LabelEditor *le = qobject_cast(editor); + QStringList list = data.toStringList(); + le->setText(list.join(QChar::fromAscii('\n'))); +} + +QVariant PropertyIntegerListItem::editorData(QWidget *editor) const +{ + Gui::LabelEditor *le = qobject_cast(editor); + QString complete = le->text(); + QStringList list = complete.split(QChar::fromAscii('\n')); + return QVariant(list); +} + +QVariant PropertyIntegerListItem::toString(const QVariant& prop) const +{ + QStringList list = prop.toStringList(); + QString text = QString::fromUtf8("[%1]").arg(list.join(QLatin1String(","))); + + return QVariant(text); +} + +QVariant PropertyIntegerListItem::value(const App::Property* prop) const +{ + assert(prop && prop->getTypeId().isDerivedFrom(App::PropertyIntegerList::getClassTypeId())); + + QStringList list; + const std::vector& value = static_cast(prop)->getValues(); + for (std::vector::const_iterator jt = value.begin(); jt != value.end(); ++jt) { + list << QString::number(*jt); + } + + return QVariant(list); +} + +void PropertyIntegerListItem::setValue(const QVariant& value) +{ + if (!value.canConvert(QVariant::StringList)) + return; + QStringList values = value.toStringList(); + QString data; + QTextStream str(&data); + str << "["; + for (QStringList::Iterator it = values.begin(); it != values.end(); ++it) { + str << *it << ","; + } + str << "]"; + setPropertyValue(data); +} + // -------------------------------------------------------------------- TYPESYSTEM_SOURCE(Gui::PropertyEditor::PropertyColorItem, Gui::PropertyEditor::PropertyItem); diff --git a/src/Gui/propertyeditor/PropertyItem.h b/src/Gui/propertyeditor/PropertyItem.h index cac3511e8..fec932ddc 100644 --- a/src/Gui/propertyeditor/PropertyItem.h +++ b/src/Gui/propertyeditor/PropertyItem.h @@ -559,7 +559,7 @@ protected: }; /** - * Edit properties of enum type. + * Edit properties of string list type. * \author Werner Mayer */ class GuiExport PropertyStringListItem: public PropertyItem @@ -579,6 +579,48 @@ protected: PropertyStringListItem(); }; +/** + * Edit properties of float list type. + * \author Werner Mayer + */ +class GuiExport PropertyFloatListItem: public PropertyItem +{ + TYPESYSTEM_HEADER(); + + virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; + virtual void setEditorData(QWidget *editor, const QVariant& data) const; + virtual QVariant editorData(QWidget *editor) const; + +protected: + QVariant toString(const QVariant&) const; + virtual QVariant value(const App::Property*) const; + virtual void setValue(const QVariant&); + +protected: + PropertyFloatListItem(); +}; + +/** + * Edit properties of float list type. + * \author Werner Mayer + */ +class GuiExport PropertyIntegerListItem: public PropertyItem +{ + TYPESYSTEM_HEADER(); + + virtual QWidget* createEditor(QWidget* parent, const QObject* receiver, const char* method) const; + virtual void setEditorData(QWidget *editor, const QVariant& data) const; + virtual QVariant editorData(QWidget *editor) const; + +protected: + QVariant toString(const QVariant&) const; + virtual QVariant value(const App::Property*) const; + virtual void setValue(const QVariant&); + +protected: + PropertyIntegerListItem(); +}; + /** * Change a color property. * \author Werner Mayer