T466: Added ability to cancel parsing

This commit is contained in:
Victor Larchenko 2016-11-05 16:23:36 +06:00 committed by Youness Alaoui
parent 1932437b07
commit 0f835a240d

View file

@ -28,6 +28,9 @@ class GCODEReader(MeshReader):
def __init__(self):
super(GCODEReader, self).__init__()
self._supported_extensions = [".gcode", ".g"]
Application.getInstance().hideMessageSignal.connect(self.onHideMessage)
self.cancelled = False
self.message = None
def getInt(self, line, code):
n = line.find(code) + 1
@ -53,6 +56,10 @@ class GCODEReader(MeshReader):
except:
return None
def onHideMessage(self, m):
if m == self.message:
self.cancelled = True
def parent_changed(self, node):
if node.getParent() is None:
scene = Application.getInstance().getController().getScene()
@ -80,6 +87,7 @@ class GCODEReader(MeshReader):
extension = os.path.splitext(file_name)[1]
if extension.lower() in self._supported_extensions:
Logger.log("d", "Preparing to load %s" % file_name)
self.cancelled = False
Application.getInstance().deleteAll()
scene_node = SceneNode()
@ -120,9 +128,9 @@ class GCODEReader(MeshReader):
current_e = 0
current_layer = 0
message = Message(catalog.i18nc("@info:status", "Parsing GCODE"), lifetime=0, dismissable=False)
message.setProgress(0)
message.show()
self.message = Message(catalog.i18nc("@info:status", "Parsing GCODE"), lifetime=0)
self.message.setProgress(0)
self.message.show()
Logger.log("d", "Parsing %s" % file_name)
@ -166,9 +174,12 @@ class GCODEReader(MeshReader):
return True
for line in file:
if self.cancelled:
Logger.log("w", "Parsing %s cancelled" % file_name)
return None
current_line += 1
if current_line % file_step == 0:
message.setProgress(math.floor(current_line/file_lines*100))
self.message.setProgress(math.floor(current_line/file_lines*100))
if len(line) == 0:
continue
if line[0] == ";":
@ -233,7 +244,7 @@ class GCODEReader(MeshReader):
scene_node.addDecorator(decorator)
Logger.log("d", "Finished parsing %s" % file_name)
message.hide()
self.message.hide()
if current_layer == 0:
Logger.log("w", "File %s don't contain any valid layers" % file_name)