From d6958ea1e63c8edd91c6071d4d5c824835704935 Mon Sep 17 00:00:00 2001 From: Florian Foinant-Willig Date: Sun, 16 Mar 2025 14:53:16 +0100 Subject: [PATCH] Add `locked` keyword argument to DocumentObject::addProperty --- src/App/DocumentObject.pyi | 3 ++- src/App/DocumentObjectPyImp.cpp | 19 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/App/DocumentObject.pyi b/src/App/DocumentObject.pyi index ee8d664391..106ef5ebbc 100644 --- a/src/App/DocumentObject.pyi +++ b/src/App/DocumentObject.pyi @@ -71,10 +71,11 @@ class DocumentObject(ExtensionContainer): attr: int = 0, read_only: bool = False, hidden: bool = False, + locked: bool = False, enum_vals: list = [] ) -> "DocumentObject": """ - addProperty(type: string, name: string, group="", doc="", attr=0, read_only=False, hidden=False, enum_vals=[]) -- Add a generic property. + addProperty(type: string, name: string, group="", doc="", attr=0, read_only=False, hidden=False, locked = False, enum_vals=[]) -- Add a generic property. """ ... diff --git a/src/App/DocumentObjectPyImp.cpp b/src/App/DocumentObjectPyImp.cpp index 1e1b512aa8..9a1a7d0322 100644 --- a/src/App/DocumentObjectPyImp.cpp +++ b/src/App/DocumentObjectPyImp.cpp @@ -91,21 +91,21 @@ PyObject* DocumentObjectPy::addProperty(PyObject* args, PyObject* kwd) { char *sType, *sName = nullptr, *sGroup = nullptr, *sDoc = nullptr; short attr = 0; - std::string sDocStr; - PyObject *ro = Py_False, *hd = Py_False; + PyObject *ro = Py_False, *hd = Py_False, *lk = Py_False; PyObject* enumVals = nullptr; - const std::array kwlist {"type", + const std::array kwlist {"type", "name", "group", "doc", "attr", "read_only", "hidden", + "locked", "enum_vals", nullptr}; if (!Base::Wrapped_ParseTupleAndKeywords(args, kwd, - "ss|sethO!O!O", + "ss|sethO!O!O!O", kwlist, &sType, &sName, @@ -117,23 +117,22 @@ PyObject* DocumentObjectPy::addProperty(PyObject* args, PyObject* kwd) &ro, &PyBool_Type, &hd, + &PyBool_Type, + &lk, &enumVals)) { return nullptr; } - if (sDoc) { - sDocStr = sDoc; - PyMem_Free(sDoc); - } - Property* prop = getDocumentObjectPtr()->addDynamicProperty(sType, sName, sGroup, - sDocStr.c_str(), + sDoc, attr, Base::asBoolean(ro), Base::asBoolean(hd)); + prop->setStatus(Property::LockDynamic, Base::asBoolean(lk)); + // enum support auto* propEnum = dynamic_cast(prop); if (propEnum && enumVals) {