Move setting error checking to StartSliceJob and allow the job to return a proper response

Now the job can determine if we can continue with slicing or not and if
not, why not.

This also means we can now show a message when we cannot find any
slicable objects.

Contributes to CURA-1278
This commit is contained in:
Arjen Hiemstra 2016-05-30 13:03:06 +02:00
parent cd2b853fff
commit 8039184c18
3 changed files with 56 additions and 38 deletions

View file

@ -82,7 +82,7 @@ class CuraEngineBackend(Backend):
self._always_restart = True #Always restart the engine when starting a new slice. Don't keep the process running. TODO: Fix engine statelessness.
self._process_layers_job = None #The currently active job to process layers, or None if it is not processing layers.
self._message = None #Pop-up message that shows the slicing progress bar (or an error message).
self._error_message = None #Pop-up message that shows errors.
self.backendQuit.connect(self._onBackendQuit)
self.backendConnected.connect(self._onBackendConnected)
@ -134,26 +134,8 @@ class CuraEngineBackend(Backend):
self._process_layers_job.abort()
self._process_layers_job = None
# #Don't slice if there is a setting with an error value.
# stack = Application.getInstance().getGlobalContainerStack()
# for key in stack.getAllKeys():
# validation_state = stack.getProperty(key, "validationState")
# #Only setting instances have a validation state, so settings which
# #are not overwritten by any instance will have none. The property
# #then, and only then, evaluates to None. We make the assumption that
# #the definition defines the setting with a default value that is
# #valid. Therefore we can allow both ValidatorState.Valid and None as
# #allowable validation states.
# #TODO: This assumption is wrong! If the definition defines an inheritance function that through inheritance evaluates to a disallowed value, a setting is still invalid even though it's default!
# #TODO: Therefore we must also validate setting definitions.
# if validation_state != None and validation_state != ValidatorState.Valid:
# Logger.log("w", "Setting %s is not valid, but %s. Aborting slicing.", key, validation_state)
# if self._message: #Hide any old message before creating a new one.
# self._message.hide()
# self._message = None
# self._message = Message(catalog.i18nc("@info:status", "Unable to slice. Please check your setting values for errors."))
# self._message.show()
# return
if self._error_message:
self._error_message.hide()
self.processingProgress.emit(0.0)
self.backendStateChange.emit(BackendState.NotStarted)
@ -200,12 +182,31 @@ class CuraEngineBackend(Backend):
# Note that cancelled slice jobs can still call this method.
if self._start_slice_job is job:
self._start_slice_job = None
if job.isCancelled() or job.getError() or job.getResult() != True:
if job.isCancelled() or job.getError() or job.getResult() == StartSliceJob.StartJobResult.Error:
return
else:
# Preparation completed, send it to the backend.
self._socket.sendMessage(job.getSettingsMessage())
self._socket.sendMessage(job.getSliceMessage())
if job.getResult() == StartSliceJob.StartJobResult.SettingError:
if Application.getInstance().getPlatformActivity:
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice. Please check your setting values for errors."), lifetime = 10)
self._error_message.show()
self.backendStateChange.emit(BackendState.Error)
else:
self.backendStateChange.emit(BackendState.NotStarted)
return
if job.getResult() == StartSliceJob.StartJobResult.NothingToSlice:
if Application.getInstance().getPlatformActivity:
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice. No suitable objects found."), lifetime = 10)
self._error_message.show()
self.backendStateChange.emit(BackendState.Error)
else:
self.backendStateChange.emit(BackendState.NotStarted)
return
# Preparation completed, send it to the backend.
self._socket.sendMessage(job.getSettingsMessage())
self._socket.sendMessage(job.getSliceMessage())
## Listener for when the scene has changed.
#