Draft: Fix multiple crashes when using modification functions - fixes #0004243

This commit is contained in:
marioalexis
2021-01-02 02:15:01 -03:00
parent 01072f3709
commit 4d9e29418a
13 changed files with 27 additions and 58 deletions

View File

@@ -79,16 +79,14 @@ class Array(gui_base_original.Modifier):
if self.ui:
self.ui.selectUi()
_msg(translate("draft", "Select an object to array"))
self.call = \
self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
else:
self.proceed()
def proceed(self):
"""Proceed with the command if one object was selected."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
if Gui.Selection.getSelection():
obj = Gui.Selection.getSelection()[0]
Gui.addModule("Draft")

View File

@@ -80,17 +80,14 @@ class Clone(gui_base_original.Modifier):
if self.ui:
self.ui.selectUi()
_msg(translate("draft", "Select an object to clone"))
self.call = \
self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
else:
self.proceed()
def proceed(self):
"""Proceed with the command if one object was selected."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
if Gui.Selection.getSelection():
sels = len(Gui.Selection.getSelection())
Gui.addModule("Draft")

View File

@@ -71,17 +71,14 @@ class Downgrade(gui_base_original.Modifier):
if not Gui.Selection.getSelection():
self.ui.selectUi()
_msg(translate("draft", "Select an object to upgrade"))
self.call = \
self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
else:
self.proceed()
def proceed(self):
"""Proceed with execution of the command after selection."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
if Gui.Selection.getSelection():
Gui.addModule("Draft")
_cmd = 'Draft.downgrade'

View File

@@ -71,17 +71,14 @@ class Draft2Sketch(gui_base_original.Modifier):
if self.ui:
self.ui.selectUi()
_msg(translate("draft", "Select an object to convert."))
self.call = \
self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
else:
self.proceed()
def proceed(self):
"""Proceed with the command if one object was selected."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
sel = Gui.Selection.getSelection()
allSketches = True
allDraft = True

View File

@@ -70,16 +70,14 @@ class Facebinder(gui_base_original.Creator):
if self.ui:
self.ui.selectUi()
_msg(translate("draft", "Select faces from existing objects"))
self.call = \
self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
else:
self.proceed()
def proceed(self):
"""Proceed when a valid selection has been made."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
if Gui.Selection.getSelection():
App.ActiveDocument.openTransaction("Create Facebinder")
Gui.addModule("Draft")

View File

@@ -78,8 +78,9 @@ class Join(gui_base_original.Modifier):
if not Gui.Selection.getSelection():
self.ui.selectUi()
_msg(translate("draft", "Select an object to join"))
self.call = self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
else:
self.proceed()
@@ -90,8 +91,6 @@ class Join(gui_base_original.Modifier):
visually share a point. This is due to the underlying `joinWires`
method not handling the points correctly.
"""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
if Gui.Selection.getSelection():
self.print_selection()
Gui.addModule("Draft")

View File

@@ -78,9 +78,9 @@ class Offset(gui_base_original.Modifier):
if not Gui.Selection.getSelection():
self.ui.selectUi()
_msg(translate("draft", "Select an object to offset"))
self.call = \
self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
elif len(Gui.Selection.getSelection()) > 1:
_wrn(translate("draft", "Offset only works "
"on one object at a time."))

View File

@@ -103,9 +103,6 @@ class PathArray(gui_base_original.Modifier):
def proceed(self):
"""Proceed with the command if one object was selected."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
sel = Gui.Selection.getSelectionEx()
if len(sel) != 2:
_err(_tr("Please select exactly two objects, "

View File

@@ -80,9 +80,6 @@ class PathTwistedArray(gui_base_original.Modifier):
def proceed(self):
"""Proceed with the command if one object was selected."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
sel = Gui.Selection.getSelectionEx()
if len(sel) != 2:
_err(_tr("Please select exactly two objects, "

View File

@@ -113,9 +113,6 @@ class PointArray(gui_base_original.Modifier):
def proceed(self):
"""Proceed with the command if one object was selected."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
sel = Gui.Selection.getSelectionEx()
if len(sel) != 2:
_err(_tr("Please select exactly two objects, "

View File

@@ -75,17 +75,14 @@ class Shape2DView(gui_base_original.Modifier):
if self.ui:
self.ui.selectUi()
_msg(translate("draft", "Select an object to project"))
self.call = \
self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
else:
self.proceed()
def proceed(self):
"""Proceed with the command if one object was selected."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
faces = []
objs = []
vec = Gui.ActiveDocument.ActiveView.getViewDirection().negative()

View File

@@ -112,8 +112,6 @@ class Split(gui_base_original.Modifier):
self.commit(translate("draft", "Split line"),
_cmd_list)
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
self.finish()

View File

@@ -73,17 +73,14 @@ class Upgrade(gui_base_original.Modifier):
if not Gui.Selection.getSelection():
self.ui.selectUi()
_msg(translate("draft", "Select an object to upgrade"))
self.call = \
self.view.addEventCallback("SoEvent",
gui_tool_utils.selectObject)
self.call = self.view.addEventCallback(
"SoEvent",
gui_tool_utils.selectObject)
else:
self.proceed()
def proceed(self):
"""Proceed with execution of the command after selection."""
if self.call:
self.view.removeEventCallback("SoEvent", self.call)
if Gui.Selection.getSelection():
Gui.addModule("Draft")
_cmd = 'Draft.upgrade'