Activity indicator as context manager when opening files. Opening gerber from File->Open Gerber launches open_gerber in thread.

This commit is contained in:
jpcaram
2015-02-13 14:05:06 -05:00
parent 8da39d54d4
commit 2c699406f7
3 changed files with 73 additions and 94 deletions

View File

@@ -1393,13 +1393,11 @@ class App(QtCore.QObject):
# TODO: Improve the serialization methods and remove this fix.
filename = str(filename)
self.open_gerber(filename)
# if str(filename) == "":
# self.inform.emit("Open cancelled.")
# else:
# self.worker_task.emit({'fcn': self.open_gerber,
# 'params': [filename]})
if str(filename) == "":
self.inform.emit("Open cancelled.")
else:
self.worker_task.emit({'fcn': self.open_gerber,
'params': [filename]})
def on_fileopenexcellon(self):
"""
@@ -1584,40 +1582,24 @@ class App(QtCore.QObject):
App.log.debug("open_gerber()")
proc = self.proc_container.new("Opening Gerber")
log.debug("sys.getrefcount(proc) == %d" % sys.getrefcount(proc))
self.progress.emit(10)
with self.proc_container.new("Opening Gerber") as proc:
self.progress.emit(10)
# Object name
name = outname or filename.split('/')[-1].split('\\')[-1]
# Object name
name = outname or filename.split('/')[-1].split('\\')[-1]
### Object creation ###
self.new_object("gerber", name, obj_init)
self.new_object("gerber", name, obj_init)
# Register recent file
self.file_opened.emit("gerber", filename)
# New object creation and file processing
# try:
# self.new_object("gerber", name, obj_init)
# except:
# e = sys.exc_info()
# print "ERROR:", e[0]
# traceback.print_exc()
# self.message_dialog("Failed to create Gerber Object",
# "Attempting to create a FlatCAM Gerber Object from " +
# "Gerber file failed during processing:\n" +
# str(e[0]) + " " + str(e[1]), kind="error")
# GLib.timeout_add_seconds(1, lambda: self.set_progress_bar(0.0, "Idle"))
# self.collection.delete_active()
# return
self.progress.emit(100)
#proc.done()
# Register recent file
self.file_opened.emit("gerber", filename)
self.progress.emit(100)
#proc.done()
# GUI feedback
self.inform.emit("Opened: " + filename)
# GUI feedback
self.inform.emit("Opened: " + filename)
def open_excellon(self, filename, outname=None):
"""
@@ -1631,11 +1613,11 @@ class App(QtCore.QObject):
App.log.debug("open_excellon()")
self.progress.emit(10)
#self.progress.emit(10)
# How the object should be initialized
def obj_init(excellon_obj, app_obj):
self.progress.emit(20)
#self.progress.emit(20)
try:
excellon_obj.parse_file(filename)
@@ -1651,32 +1633,21 @@ class App(QtCore.QObject):
self.progress.emit(0)
raise e
self.progress.emit(70)
#self.progress.emit(70)
# Object name
name = outname or filename.split('/')[-1].split('\\')[-1]
with self.proc_container.new("Opening Excellon."):
self.new_object("excellon", name, obj_init)
# New object creation and file processing
# try:
# self.new_object("excellon", name, obj_init)
# except:
# e = sys.exc_info()
# App.log.error(str(e))
# self.message_dialog("Failed to create Excellon Object",
# "Attempting to create a FlatCAM Excellon Object from " +
# "Excellon file failed during processing:\n" +
# str(e[0]) + " " + str(e[1]), kind="error")
# self.progress.emit(0)
# self.collection.delete_active()
# return
# Object name
name = outname or filename.split('/')[-1].split('\\')[-1]
# Register recent file
self.file_opened.emit("excellon", filename)
self.new_object("excellon", name, obj_init)
# GUI feedback
self.inform.emit("Opened: " + filename)
self.progress.emit(100)
# Register recent file
self.file_opened.emit("excellon", filename)
# GUI feedback
self.inform.emit("Opened: " + filename)
#self.progress.emit(100)
def open_gcode(self, filename, outname=None):
"""
@@ -1715,29 +1686,31 @@ class App(QtCore.QObject):
self.progress.emit(60)
job_obj.create_geometry()
# Object name
name = outname or filename.split('/')[-1].split('\\')[-1]
with self.proc_container.new("Opening G-Code."):
# New object creation and file processing
try:
self.new_object("cncjob", name, obj_init)
except:
e = sys.exc_info()
App.log.error(str(e))
self.message_dialog("Failed to create CNCJob Object",
"Attempting to create a FlatCAM CNCJob Object from " +
"G-Code file failed during processing:\n" +
str(e[0]) + " " + str(e[1]), kind="error")
self.progress.emit(0)
self.collection.delete_active()
return
# Object name
name = outname or filename.split('/')[-1].split('\\')[-1]
# Register recent file
self.file_opened.emit("cncjob", filename)
# New object creation and file processing
try:
self.new_object("cncjob", name, obj_init)
except Exception as e:
# e = sys.exc_info()
App.log.error(str(e))
self.message_dialog("Failed to create CNCJob Object",
"Attempting to create a FlatCAM CNCJob Object from " +
"G-Code file failed during processing:\n" +
str(e[0]) + " " + str(e[1]), kind="error")
self.progress.emit(0)
self.collection.delete_active()
raise e
# GUI feedback
self.inform.emit("Opened: " + filename)
self.progress.emit(100)
# Register recent file
self.file_opened.emit("cncjob", filename)
# GUI feedback
self.inform.emit("Opened: " + filename)
self.progress.emit(100)
def open_project(self, filename):
"""

View File

@@ -2,6 +2,17 @@ from FlatCAMGUI import FlatCAMActivityView
from PyQt4 import QtCore
import weakref
import logging
log = logging.getLogger('base2')
log.setLevel(logging.DEBUG)
#log.setLevel(logging.WARNING)
#log.setLevel(logging.INFO)
formatter = logging.Formatter('[%(levelname)s] %(message)s')
handler = logging.StreamHandler()
handler.setFormatter(formatter)
log.addHandler(handler)
class FCProcess(object):
@@ -13,9 +24,6 @@ class FCProcess(object):
self.status = "Active"
def __del__(self):
# print "#######################"
# print "# FCProcess.__del__() #"
# print "#######################"
self.done()
def __enter__(self):
@@ -23,15 +31,14 @@ class FCProcess(object):
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type is not None:
print "Abnormal termination of process!"
print exc_type
print exc_val
print exc_tb
log.error("Abnormal termination of process!")
log.error(exc_type)
log.error(exc_val)
log.error(exc_tb)
self.done()
def done(self):
# print "FCProcess.done()"
for fcn in self.callbacks["done"]:
fcn(self)
@@ -113,21 +120,18 @@ class FCVisibleProcessContainer(QtCore.QObject, FCProcessContainer):
self.something_changed.connect(self.update_view)
def on_done(self, proc):
print "FCVisibleProcessContainer.on_done()"
log.debug("FCVisibleProcessContainer.on_done()")
super(FCVisibleProcessContainer, self).on_done(proc)
#self.update_view()
self.something_changed.emit()
def on_change(self, proc):
print "FCVisibleProcessContainer.on_change()"
log.debug("FCVisibleProcessContainer.on_change()")
super(FCVisibleProcessContainer, self).on_change(proc)
#self.update_view()
self.something_changed.emit()
def update_view(self):
# print "FCVisibleProcessContainer.update_view()"
if len(self.procs) == 0:
self.view.set_idle()

View File

@@ -1929,10 +1929,12 @@ class Gerber (Geometry):
# --- Apply buffer ---
log.warn("Joining %d polygons." % len(poly_buffer))
new_poly = cascaded_union(poly_buffer)
new_poly = new_poly.buffer(0)
if current_polarity == 'D':
self.solid_geometry = self.solid_geometry.union(cascaded_union(poly_buffer))
self.solid_geometry = self.solid_geometry.union(new_poly)
else:
self.solid_geometry = self.solid_geometry.difference(cascaded_union(poly_buffer))
self.solid_geometry = self.solid_geometry.difference(new_poly)
except Exception, err:
#print traceback.format_exc()