diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index dbe625fe8a7a..fcc2f63bb117 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3718,6 +3718,11 @@ def __init__(self): self.running = False self.trackers = [] self.obj = None + self.call = None + self.selectstate = None + self.originalDisplayMode = None + self.originalPoints = None + self.originalNodes = None def GetResources(self): return {'Pixmap' : 'Draft_Edit', @@ -3731,22 +3736,50 @@ def Activated(self): Modifier.Activated(self,"Edit") if FreeCADGui.Selection.getSelection(): self.selection = FreeCADGui.Selection.getSelection() - if "Proxy" in self.selection[0].PropertiesList: - if hasattr(self.selection[0].Proxy,"Type"): - self.proceed() + if len(self.selection) == 1: + if "Proxy" in self.selection[0].PropertiesList: + if hasattr(self.selection[0].Proxy,"Type"): + if not Draft.getType(self.selection[0]) in ["BezCurve","Wire","BSpline","Circle","Rectangle", + "Polygon","Dimension","Space","Structure","PanelCut", + "PanelSheet"]: + msg(translate("draft", "This object type is not editable\n"),'warning') + self.finish() + return + self.proceed() + return + else: + msg(translate("draft", "This object type is not editable\n"),'warning') + self.finish() + return + else: + msg(translate("draft", "This object type is not editable\n"),'warning') + self.finish() return + else: + msg(translate("draft", "Please select only one object\n"),'warning') + self.finish() + return self.ghost = None self.ui.selectUi() msg(translate("draft", "Select a Draft object to edit\n")) + if self.call: + self.view.removeEventCallback("SoEvent",self.call) self.call = self.view.addEventCallback("SoEvent",selectObject) def proceed(self): if self.call: self.view.removeEventCallback("SoEvent",self.call) + self.call = None if self.doc: self.obj = FreeCADGui.Selection.getSelection() if self.obj: self.obj = self.obj[0] + if not Draft.getType(self.obj) in ["BezCurve","Wire","BSpline","Circle","Rectangle", + "Polygon","Dimension","Space","Structure","PanelCut", + "PanelSheet"]: + msg(translate("draft", "This object type is not editable\n"),'warning') + self.finish() + return if (Draft.getType(self.obj) == "BezCurve"): self.ui.editUi("BezCurve") else: @@ -3867,12 +3900,19 @@ def finish(self,closed=False): for t in self.trackers: t.finalize() if self.obj: - if hasattr(self.obj.ViewObject,"Selectable"): + if hasattr(self.obj.ViewObject,"Selectable") and (self.selectstate != None): self.obj.ViewObject.Selectable = self.selectstate if Draft.getType(self.obj) == "Structure": - self.obj.ViewObject.DisplayMode = self.originalDisplayMode - self.obj.ViewObject.NodeSize = self.originalPoints - self.obj.ViewObject.ShowNodes = self.originalNodes + if self.originalDisplayMode != None: + self.obj.ViewObject.DisplayMode = self.originalDisplayMode + if self.originalPoints != None: + self.obj.ViewObject.NodeSize = self.originalPoints + if self.originalNodes != None: + self.obj.ViewObject.ShowNodes = self.originalNodes + self.selectstate = None + self.originalDisplayMode = None + self.originalPoints = None + self.originalNodes = None Modifier.finish(self) plane.restore() if FreeCADGui.Snapper.grid: