diff --git a/ztools/ztools/commands/assembly_pattern_commands.py b/ztools/ztools/commands/assembly_pattern_commands.py index d3b3790..926b6a3 100644 --- a/ztools/ztools/commands/assembly_pattern_commands.py +++ b/ztools/ztools/commands/assembly_pattern_commands.py @@ -339,7 +339,7 @@ class AssemblyLinearPatternTaskPanel: return None def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel class AssemblyLinearPatternCommand: @@ -758,7 +758,7 @@ class AssemblyPolarPatternTaskPanel: return None def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel class AssemblyPolarPatternCommand: diff --git a/ztools/ztools/commands/datum_commands.py b/ztools/ztools/commands/datum_commands.py index 2eb942d..981d456 100644 --- a/ztools/ztools/commands/datum_commands.py +++ b/ztools/ztools/commands/datum_commands.py @@ -814,7 +814,7 @@ class DatumCreatorTaskPanel: return True def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel class ZTools_DatumCreator: diff --git a/ztools/ztools/commands/datum_viewprovider.py b/ztools/ztools/commands/datum_viewprovider.py index 913ed80..2170da2 100644 --- a/ztools/ztools/commands/datum_viewprovider.py +++ b/ztools/ztools/commands/datum_viewprovider.py @@ -32,7 +32,7 @@ class ZToolsDatumViewProvider: self._hide_attachment_props(vobj) def _hide_attachment_props(self, vobj): - """Hide FreeCAD attachment properties.""" + """Hide FreeCAD attachment properties using persistent property status.""" if not vobj or not vobj.Object: return @@ -48,7 +48,7 @@ class ZToolsDatumViewProvider: for prop in attachment_props: try: if hasattr(obj, prop): - vobj.setEditorMode(prop, 2) # 2 = Hidden + obj.setPropertyStatus(prop, "Hidden") except Exception: pass @@ -402,4 +402,4 @@ class DatumEditTaskPanel: def getStandardButtons(self): """Return dialog buttons.""" - return int(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel diff --git a/ztools/ztools/datums/core.py b/ztools/ztools/datums/core.py index dcaba08..031c10e 100644 --- a/ztools/ztools/datums/core.py +++ b/ztools/ztools/datums/core.py @@ -71,17 +71,9 @@ def _hide_attachment_properties(obj): Hide FreeCAD's vanilla attachment properties from the property editor. This prevents user confusion since ZTools uses its own attachment system. - Editor modes: - 0 = Normal (visible, editable) - 1 = Read-only - 2 = Hidden + Uses setPropertyStatus with "Hidden" which persists across save/restore, + unlike setEditorMode which is transient. """ - if not hasattr(obj, "ViewObject") or obj.ViewObject is None: - return - - vo = obj.ViewObject - - # Hide attachment-related properties attachment_props = [ "MapMode", "MapPathParameter", @@ -93,7 +85,7 @@ def _hide_attachment_properties(obj): for prop in attachment_props: try: if hasattr(obj, prop): - vo.setEditorMode(prop, 2) # 2 = Hidden + obj.setPropertyStatus(prop, "Hidden") except Exception: pass # Property might not exist on all datum types @@ -102,21 +94,33 @@ def _setup_ztools_viewprovider(obj): """ Set up a custom ViewProvider proxy for ZTools datums. This enables custom double-click behavior to open ZTools editor. + + Note: PartDesign datum ViewProviders (e.g. ViewProviderDatumPlane) are + pure C++ and do not support Python proxies. In that case we skip the + custom ViewProvider setup — the datum still works, just without custom + double-click edit behavior. """ if not hasattr(obj, "ViewObject") or obj.ViewObject is None: return vo = obj.ViewObject + # C++ ViewProviders for PartDesign datums don't expose a Proxy attribute + if not hasattr(vo, "Proxy"): + return + # Only set up if not already a ZTools ViewProvider - if hasattr(vo, "Proxy") and vo.Proxy is not None: + if vo.Proxy is not None: if hasattr(vo.Proxy, "_is_ztools"): return # Import here to avoid circular imports from ztools.commands.datum_viewprovider import ZToolsDatumViewProvider - ZToolsDatumViewProvider(vo) + try: + ZToolsDatumViewProvider(vo) + except Exception: + pass # C++ ViewProvider doesn't support Python proxy assignment def _setup_ztools_datum(