From 974919dc7c112d6a109be88c3ce7bd82cc7e1db7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 28 Oct 2024 14:06:51 +0100 Subject: [PATCH 1/2] Core: Extend DocumentObjectPy * expose isAttachedToDocument to Python * change DocumentObjectPy::getName() to return None instead of throwing an exception if object is not part of a document --- src/App/DocumentObjectPy.xml | 9 ++++++++- src/App/DocumentObjectPyImp.cpp | 17 ++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/App/DocumentObjectPy.xml b/src/App/DocumentObjectPy.xml index 7424fc9a58..463c013edf 100644 --- a/src/App/DocumentObjectPy.xml +++ b/src/App/DocumentObjectPy.xml @@ -232,6 +232,13 @@ Return tuple(obj,newElementName,oldElementName) + + + + isAttachedToDocument(): return true if the object is part of a document, false otherwise + + + A list of all objects this object links to. @@ -266,7 +273,7 @@ Return tuple(obj,newElementName,oldElementName) Return the internal name of this object - + diff --git a/src/App/DocumentObjectPyImp.cpp b/src/App/DocumentObjectPyImp.cpp index 36e863c8f2..af09d7d998 100644 --- a/src/App/DocumentObjectPyImp.cpp +++ b/src/App/DocumentObjectPyImp.cpp @@ -49,14 +49,14 @@ std::string DocumentObjectPy::representation() const return str.str(); } -Py::String DocumentObjectPy::getName() const +Py::Object DocumentObjectPy::getName() const { DocumentObject* object = this->getDocumentObjectPtr(); const char* internal = object->getNameInDocument(); if (!internal) { - throw Py::RuntimeError(std::string("This object is currently not part of a document")); + return Py::None(); } - return {std::string(internal)}; + return Py::String(internal); } Py::String DocumentObjectPy::getFullName() const @@ -76,6 +76,17 @@ Py::Object DocumentObjectPy::getDocument() const } } +PyObject* DocumentObjectPy::isAttachedToDocument(PyObject *args) +{ + if (!PyArg_ParseTuple(args, "")) { + return nullptr; + } + + DocumentObject* object = this->getDocumentObjectPtr(); + bool ok = object->isAttachedToDocument(); + return Py::new_reference_to(Py::Boolean(ok)); +} + PyObject* DocumentObjectPy::addProperty(PyObject *args, PyObject *kwd) { char *sType,*sName=nullptr,*sGroup=nullptr,*sDoc=nullptr; From e28c64b6ebd4fd78161c8fae00e7f03221316932 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 28 Oct 2024 14:13:50 +0100 Subject: [PATCH 2/2] Draft: Fixes #17461 --- src/Mod/Draft/draftguitools/gui_edit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/draftguitools/gui_edit.py b/src/Mod/Draft/draftguitools/gui_edit.py index a880f5f258..bf571891d5 100644 --- a/src/Mod/Draft/draftguitools/gui_edit.py +++ b/src/Mod/Draft/draftguitools/gui_edit.py @@ -811,7 +811,7 @@ class Edit(gui_base_original.Modifier): """ for obj in objs: obj_gui_tools = self.get_obj_gui_tools(obj) - if obj_gui_tools: + if obj_gui_tools and obj.isAttachedToDocument(): obj_gui_tools.restore_object_style(obj, self.objs_formats[obj.Name])