Guest User

Untitled

a guest
Dec 22nd, 2012
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.68 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import sys, os
  4. BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
  5. libdir = os.path.join(BASE, "lib", "python")
  6. datadir = os.path.join(BASE, "share", "linuxcnc")
  7. sys.path.insert(0, libdir)
  8. xmlname = os.path.join(datadir,"gremlin.glade")
  9.  
  10. # import libraries
  11. import pygtk
  12. pygtk.require("2.0")
  13. import gtk
  14.  
  15. import linuxcnc, hal
  16. import gremlin
  17. import gladevcp.makepins
  18.  
  19. # main class
  20. class jt_gui(object):
  21.  
  22. def __init__(self, inifile):
  23. self.builder = gtk.Builder()
  24. self.builder.add_from_file(xmlname)
  25. self.builder.connect_signals(self)
  26. self.version = os.environ['LINUXCNCVERSION']
  27. self.ini_file_path = os.environ['INI_FILE_NAME']
  28. self.ini_file_object = linuxcnc.ini(self.ini_file_path)
  29. self.machine_name = self.ini_file_object.find('EMC', 'MACHINE')
  30. self.command = linuxcnc.command()
  31. self.status = linuxcnc.stat()
  32. self.error = linuxcnc.error_channel()
  33. self.statusbar = self.builder.get_object('statusbar')
  34. self.filechooser = self.builder.get_object('filechooser')
  35. self.filefilter = gtk.FileFilter()
  36. self.filefilter.set_name('Machinable Files')
  37. self.filefilter.add_pattern('*.ngc')
  38. self.filefilter.add_pattern('*.NGC')
  39. self.filechooser.add_filter(self.filefilter)
  40. self.filefilter = gtk.FileFilter()
  41. self.filefilter.set_name("All files")
  42. self.filefilter.add_pattern("*")
  43. self.filechooser.add_filter(self.filefilter)
  44. self.filechooser.set_current_folder('/home/john/linuxcnc/nc_files')
  45.  
  46. self.gremlin = jt_gremlin(self.ini_file_object)
  47.  
  48. self.use_commanded = self.builder.get_object('cb_use_commanded')
  49. if self.gremlin.use_commanded: self.use_commanded.set_active(True)
  50. self.show_limits = self.builder.get_object('cb_show_limits')
  51. if self.gremlin.show_limits: self.show_limits.set_active(True)
  52. self.show_extents = self.builder.get_object('cb_show_extents')
  53. if self.gremlin.show_extents: self.show_extents.set_active(True)
  54. self.show_live_plot = self.builder.get_object('cb_show_live_plot')
  55. if self.gremlin.show_live_plot: self.show_live_plot.set_active(True)
  56. self.metric_units = self.builder.get_object('cb_metric_units')
  57. if self.gremlin.metric_units: self.metric_units.set_active(True)
  58. self.show_program = self.builder.get_object('cb_show_program')
  59. if self.gremlin.show_program: self.show_program.set_active(True)
  60. self.show_rapids = self.builder.get_object('cb_show_rapids')
  61. if self.gremlin.show_rapids: self.show_rapids.set_active(True)
  62. self.use_relative = self.builder.get_object('cb_use_relative')
  63. if self.gremlin.use_relative: self.use_relative.set_active(True)
  64. self.show_tool = self.builder.get_object('cb_show_tool')
  65. if self.gremlin.show_tool: self.show_tool.set_active(True)
  66. self.show_dtg = self.builder.get_object('cb_show_dtg')
  67. if self.gremlin.show_dtg: self.show_dtg.set_active(True)
  68.  
  69. self.gremlin.current_view = 'p'
  70. self.plot = self.builder.get_object('hbox1')
  71. self.plot.pack_start(self.gremlin)
  72. self.plot.reorder_child(self.gremlin, 1)
  73.  
  74. self.window = self.builder.get_object('main_window')
  75. self.window.set_title(self.machine_name + ' Version ' + self.version)
  76. self.window.show_all()
  77.  
  78. # menu functions
  79. def on_menu_file_open_activate(self, widget, data=None):
  80. response = self.filechooser.run()
  81. if response == gtk.RESPONSE_OK:
  82. self.file = self.filechooser.get_filename()
  83. self.command.reset_interpreter()
  84. self.command.program_open(self.file)
  85. self.command.wait_complete()
  86. self.error_check()
  87. self.gremlin.load(self.file)
  88. elif response == gtk.RESPONSE_CANCEL:
  89. print 'Closed, no files selected'
  90. self.filechooser.hide()
  91.  
  92. def on_menu_view_activate(self, widget, data=None):
  93. self.name = gtk.Buildable.get_name(widget)
  94. if self.name == 'menu_view_p': self.gremlin.current_view = 'p'
  95. elif self.name == 'menu_view_x': self.gremlin.current_view = 'x'
  96. elif self.name == 'menu_view_y': self.gremlin.current_view = 'y'
  97. elif self.name == 'menu_view_z': self.gremlin.current_view = 'z'
  98. self.gremlin.set_current_view()
  99.  
  100. def on_menu_file_quit_activate(self, widget, data=None):
  101. print 'file quit'
  102. gtk.main_quit()
  103.  
  104. #buttonbox
  105. def on_btn_program_clicked(self, widget, data=None):
  106. pass
  107.  
  108. def on_btn_jog_clicked(self, widget, data=None):
  109. pass
  110.  
  111. def on_btn_touchoff_clicked(self, widget, data=None):
  112. pass
  113.  
  114. #checkboxes
  115. def on_cb_toggled(self, widget, data=None):
  116. self.name = gtk.Buildable.get_name(widget)
  117. if self.name == 'cb_program_alpha': pass
  118. elif self.name == 'cb_use_commanded':
  119. if widget.get_active():self.gremlin.use_commanded = True
  120. else:self.gremlin.use_commanded = False
  121. elif self.name == 'cb_show_limits':
  122. if widget.get_active():self.gremlin.show_limits = True
  123. else:self.gremlin.show_limits = False
  124. elif self.name == 'cb_show_extents':
  125. if widget.get_active():self.gremlin.show_extents_option = True
  126. else:self.gremlin.show_extents_option = False
  127. elif self.name == 'cb_show_live_plot':
  128. if widget.get_active():self.gremlin.show_live_plot = True
  129. else:self.gremlin.show_live_plot = False
  130. elif self.name == 'cb_metric_units':
  131. if widget.get_active():self.gremlin.metric_units = True
  132. else:self.gremlin.metric_units = False
  133. elif self.name == 'cb_show_program':
  134. if widget.get_active():self.gremlin.show_program = True
  135. else:self.gremlin.show_program = False
  136. elif self.name == 'cb_show_rapids':
  137. if widget.get_active():self.gremlin.show_rapids = True
  138. else:self.gremlin.show_rapids = False
  139. elif self.name == 'cb_use_relative':
  140. if widget.get_active():self.gremlin.use_relative = True
  141. else:self.gremlin.use_relative = False
  142. elif self.name == 'cb_show_tool':
  143. if widget.get_active():self.gremlin.show_tool = True
  144. else:self.gremlin.show_tool = False
  145. elif self.name == 'cb_show_dtg':
  146. if widget.get_active():self.gremlin.show_dtg = True
  147. else:self.gremlin.show_dtg = False
  148. self.gremlin._redraw()
  149.  
  150. def on_clear_live_plot_clicked(self, widget, data=None):
  151. self.gremlin.clear_live_plotter()
  152.  
  153. def error_check(self):
  154. self.error_text = self.error.poll()
  155. if self.error_text:
  156. print self.error_text
  157. kind, text = self.error_text
  158. if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):
  159. typus = "error"
  160. else:
  161. typus = "info"
  162. print typus, text
  163.  
  164. def on_main_window_destroy(self, widget, data=None):
  165. print 'quit with cancel'
  166. gtk.main_quit()
  167.  
  168. def postgui(self):
  169. inifile = linuxcnc.ini(self.ini_file_path)
  170. postgui_halfile = inifile.find("HAL", "POSTGUI_HALFILE")
  171. return postgui_halfile,sys.argv[2]
  172.  
  173. class jt_gremlin(gremlin.Gremlin):
  174. def __init__(self, inifile):
  175. gremlin.Gremlin.__init__(self, inifile)
  176.  
  177. def report_gcode_error(self, result, seq, filename):
  178. import gcode
  179. error_str = gcode.strerror(result)
  180. error_str = "\n\nG-Code error in " + os.path.basename(filename) + "\n" + "Near line " + str(seq) + " of\n" + filename + "\n" + error_str + "\n"
  181. print error_str
  182. # do something here with the error message in your UI
  183.  
  184. # run the program
  185. if __name__ == "__main__":
  186. if len(sys.argv) > 2 and sys.argv[1] == '-ini':
  187. hwg = jt_gui(sys.argv[2])
  188. else:
  189. hwg = jt_gui()
  190.  
  191. # load a postgui file if one is present in the INI file
  192. postgui_halfile,inifile = jt_gui.postgui(hwg)
  193.  
  194. if postgui_halfile:
  195. res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-i",inifile,"-f", postgui_halfile])
  196. if res: raise SystemExit, res
  197.  
  198. gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment