- added ability to run a callback function with callback_parameters after a new FlatCAM object is created

This commit is contained in:
Marius Stanciu 2020-10-22 00:35:23 +03:00 committed by Marius
parent 0df8423e20
commit 229d5c237e
2 changed files with 29 additions and 10 deletions

View File

@ -28,6 +28,7 @@ CHANGELOG for FlatCAM beta
- optimized a bit the UI for Gerber/Excellon/Geometry objects
- optimized FlatCAMObj.add_properties_items() method
- updated the Turkish translation (by Mehmet Kaya)
- added ability to run a callback function with callback_parameters after a new FlatCAM object is created
20.10.2020

View File

@ -34,7 +34,7 @@ class AppObject(QtCore.QObject):
# Emitted by app_obj.new_object() and passes the new object as argument, plot flag.
# on_object_created() adds the object to the collection, plots on appropriate flag
# and emits app_obj.new_object_available.
object_created = QtCore.pyqtSignal(object, bool, bool)
object_created = QtCore.pyqtSignal(object, bool, bool, object, list)
# Emitted when a object has been changed (like scaled, mirrored)
object_changed = QtCore.pyqtSignal(object)
@ -56,7 +56,7 @@ class AppObject(QtCore.QObject):
self.object_plotted.connect(self.on_object_plotted)
self.plots_updated.connect(self.app.on_plots_updated)
def new_object(self, kind, name, initialize, plot=True, autoselected=True):
def new_object(self, kind, name, initialize, plot=True, autoselected=True, callback=None, callback_params=None):
"""
Creates a new specialized FlatCAMObj and attaches it to the application,
this is, updates the GUI accordingly, any other records and plots it.
@ -78,10 +78,18 @@ class AppObject(QtCore.QObject):
:param plot: If to plot the resulting object
:param autoselected: if the resulting object is autoselected in the Project tab and therefore in the
self.collection
:param callback: a method that is launched after the object is created
:type callback: function
:param callback_params: a list of parameters for the parameter: callback
:type callback_params: list
:return: Either the object or the string 'fail'
:rtype: object
"""
if callback_params is None:
callback_params = [None]
log.debug("AppObject.new_object()")
obj_plot = plot
obj_autoselected = autoselected
@ -204,7 +212,10 @@ class AppObject(QtCore.QObject):
# Move the object to the main thread and let the app know that it is available.
# ############################################################################################################
obj.moveToThread(self.app.main_thread)
self.object_created.emit(obj, obj_plot, obj_autoselected)
if callback_params is None:
callback_params = []
self.object_created.emit(obj, obj_plot, obj_autoselected, callback, callback_params)
return obj
@ -324,15 +335,18 @@ class AppObject(QtCore.QObject):
self.new_object('document', 'new_document', initialize, plot=False)
def on_object_created(self, obj, plot, auto_select):
def on_object_created(self, obj, plot, auto_select, callback, callback_params):
"""
Event callback for object creation.
It will add the new object to the collection. After that it will plot the object in a threaded way
:param obj: The newly created FlatCAM object.
:param plot: if the newly create object t obe plotted
:param auto_select: if the newly created object to be autoselected after creation
:return: None
:param obj: The newly created FlatCAM object.
:param plot: if the newly create object to be plotted
:param auto_select: if the newly created object to be autoselected after creation
:param callback: a method that is launched after the object is created
:param callback_params: a list of parameters for the parameter: callback
:type callback_params: list
:return: None
"""
t0 = time.time() # DEBUG
@ -435,7 +449,7 @@ class AppObject(QtCore.QObject):
self.app.collection.set_all_inactive()
# here it is done the object plotting
def task(t_obj):
def plotting_task(t_obj):
with self.app.proc_container.new(_("Plotting")):
if t_obj.kind == 'cncjob':
t_obj.plot(kind=self.app.defaults["cncjob_plot_kind"])
@ -456,7 +470,11 @@ class AppObject(QtCore.QObject):
# Send to worker
# self.worker.add_task(worker_task, [self])
if plot is True:
self.app.worker_task.emit({'fcn': task, 'params': [obj]})
self.app.worker_task.emit({'fcn': plotting_task, 'params': [obj]})
if callback is not None:
# callback(*callback_params)
self.app.worker_task.emit({'fcn': callback, 'params': callback_params})
def on_object_changed(self, obj):
"""