FlatCAMProcess.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from FlatCAMGUI import FlatCAMActivityView
  2. class FCProcess(object):
  3. def __init__(self, descr):
  4. self.callbacks = {
  5. "done": []
  6. }
  7. self.descr = descr
  8. def done(self):
  9. for fcn in self.callbacks["done"]:
  10. fcn(self)
  11. def connect(self, callback, event="done"):
  12. if callback not in self.callbacks[event]:
  13. self.callbacks[event].append(callback)
  14. def disconnect(self, callback, event="done"):
  15. try:
  16. self.callbacks[event].remove(callback)
  17. except ValueError:
  18. pass
  19. def status_msg(self):
  20. return self.descr
  21. class FCProcessContainer(object):
  22. def __init__(self):
  23. self.procs = []
  24. def add(self, proc):
  25. self.procs.append(proc)
  26. def new(self, descr):
  27. proc = FCProcess(descr)
  28. proc.connect(self.on_done, event="done")
  29. def on_done(self, proc):
  30. pass
  31. def remove(self, proc):
  32. if proc in self.procs:
  33. self.procs.remove(proc)
  34. class FCVisibleProcessContainer(FCProcessContainer):
  35. def __init__(self, view):
  36. assert isinstance(view, FlatCAMActivityView)
  37. super(FCVisibleProcessContainer, self).__init__()
  38. self.view = view
  39. def on_done(self, proc):
  40. super(FCVisibleProcessContainer, self).on_done(proc)
  41. self.update_view()
  42. def update_view(self):
  43. if len(self.procs) == 0:
  44. self.view.set_idle()
  45. elif len(self.procs) == 1:
  46. self.view.set_busy(self.procs[0].status_msg())
  47. else:
  48. self.view.set_busy("%d processes running." % len(self.procs))