Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import sys, os
- BASE = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), ".."))
- libdir = os.path.join(BASE, "lib", "python")
- datadir = os.path.join(BASE, "share", "linuxcnc")
- sys.path.insert(0, libdir)
- xmlname = os.path.join(datadir,"gremlin.glade")
- # import libraries
- import pygtk
- pygtk.require("2.0")
- import gtk
- import linuxcnc, hal
- import gremlin
- import gladevcp.makepins
- # main class
- class jt_gui(object):
- def __init__(self, inifile):
- self.builder = gtk.Builder()
- self.builder.add_from_file(xmlname)
- self.builder.connect_signals(self)
- self.version = os.environ['LINUXCNCVERSION']
- self.ini_file_path = os.environ['INI_FILE_NAME']
- self.ini_file_object = linuxcnc.ini(self.ini_file_path)
- self.machine_name = self.ini_file_object.find('EMC', 'MACHINE')
- self.command = linuxcnc.command()
- self.status = linuxcnc.stat()
- self.error = linuxcnc.error_channel()
- self.statusbar = self.builder.get_object('statusbar')
- self.filechooser = self.builder.get_object('filechooser')
- self.filefilter = gtk.FileFilter()
- self.filefilter.set_name('Machinable Files')
- self.filefilter.add_pattern('*.ngc')
- self.filefilter.add_pattern('*.NGC')
- self.filechooser.add_filter(self.filefilter)
- self.filefilter = gtk.FileFilter()
- self.filefilter.set_name("All files")
- self.filefilter.add_pattern("*")
- self.filechooser.add_filter(self.filefilter)
- self.filechooser.set_current_folder('/home/john/linuxcnc/nc_files')
- self.gremlin = jt_gremlin(self.ini_file_object)
- self.use_commanded = self.builder.get_object('cb_use_commanded')
- if self.gremlin.use_commanded: self.use_commanded.set_active(True)
- self.show_limits = self.builder.get_object('cb_show_limits')
- if self.gremlin.show_limits: self.show_limits.set_active(True)
- self.show_extents = self.builder.get_object('cb_show_extents')
- if self.gremlin.show_extents: self.show_extents.set_active(True)
- self.show_live_plot = self.builder.get_object('cb_show_live_plot')
- if self.gremlin.show_live_plot: self.show_live_plot.set_active(True)
- self.metric_units = self.builder.get_object('cb_metric_units')
- if self.gremlin.metric_units: self.metric_units.set_active(True)
- self.show_program = self.builder.get_object('cb_show_program')
- if self.gremlin.show_program: self.show_program.set_active(True)
- self.show_rapids = self.builder.get_object('cb_show_rapids')
- if self.gremlin.show_rapids: self.show_rapids.set_active(True)
- self.use_relative = self.builder.get_object('cb_use_relative')
- if self.gremlin.use_relative: self.use_relative.set_active(True)
- self.show_tool = self.builder.get_object('cb_show_tool')
- if self.gremlin.show_tool: self.show_tool.set_active(True)
- self.show_dtg = self.builder.get_object('cb_show_dtg')
- if self.gremlin.show_dtg: self.show_dtg.set_active(True)
- self.gremlin.current_view = 'p'
- self.plot = self.builder.get_object('hbox1')
- self.plot.pack_start(self.gremlin)
- self.plot.reorder_child(self.gremlin, 1)
- self.window = self.builder.get_object('main_window')
- self.window.set_title(self.machine_name + ' Version ' + self.version)
- self.window.show_all()
- # menu functions
- def on_menu_file_open_activate(self, widget, data=None):
- response = self.filechooser.run()
- if response == gtk.RESPONSE_OK:
- self.file = self.filechooser.get_filename()
- self.command.reset_interpreter()
- self.command.program_open(self.file)
- self.command.wait_complete()
- self.error_check()
- self.gremlin.load(self.file)
- elif response == gtk.RESPONSE_CANCEL:
- print 'Closed, no files selected'
- self.filechooser.hide()
- def on_menu_view_activate(self, widget, data=None):
- self.name = gtk.Buildable.get_name(widget)
- if self.name == 'menu_view_p': self.gremlin.current_view = 'p'
- elif self.name == 'menu_view_x': self.gremlin.current_view = 'x'
- elif self.name == 'menu_view_y': self.gremlin.current_view = 'y'
- elif self.name == 'menu_view_z': self.gremlin.current_view = 'z'
- self.gremlin.set_current_view()
- def on_menu_file_quit_activate(self, widget, data=None):
- print 'file quit'
- gtk.main_quit()
- #buttonbox
- def on_btn_program_clicked(self, widget, data=None):
- pass
- def on_btn_jog_clicked(self, widget, data=None):
- pass
- def on_btn_touchoff_clicked(self, widget, data=None):
- pass
- #checkboxes
- def on_cb_toggled(self, widget, data=None):
- self.name = gtk.Buildable.get_name(widget)
- if self.name == 'cb_program_alpha': pass
- elif self.name == 'cb_use_commanded':
- if widget.get_active():self.gremlin.use_commanded = True
- else:self.gremlin.use_commanded = False
- elif self.name == 'cb_show_limits':
- if widget.get_active():self.gremlin.show_limits = True
- else:self.gremlin.show_limits = False
- elif self.name == 'cb_show_extents':
- if widget.get_active():self.gremlin.show_extents_option = True
- else:self.gremlin.show_extents_option = False
- elif self.name == 'cb_show_live_plot':
- if widget.get_active():self.gremlin.show_live_plot = True
- else:self.gremlin.show_live_plot = False
- elif self.name == 'cb_metric_units':
- if widget.get_active():self.gremlin.metric_units = True
- else:self.gremlin.metric_units = False
- elif self.name == 'cb_show_program':
- if widget.get_active():self.gremlin.show_program = True
- else:self.gremlin.show_program = False
- elif self.name == 'cb_show_rapids':
- if widget.get_active():self.gremlin.show_rapids = True
- else:self.gremlin.show_rapids = False
- elif self.name == 'cb_use_relative':
- if widget.get_active():self.gremlin.use_relative = True
- else:self.gremlin.use_relative = False
- elif self.name == 'cb_show_tool':
- if widget.get_active():self.gremlin.show_tool = True
- else:self.gremlin.show_tool = False
- elif self.name == 'cb_show_dtg':
- if widget.get_active():self.gremlin.show_dtg = True
- else:self.gremlin.show_dtg = False
- self.gremlin._redraw()
- def on_clear_live_plot_clicked(self, widget, data=None):
- self.gremlin.clear_live_plotter()
- def error_check(self):
- self.error_text = self.error.poll()
- if self.error_text:
- print self.error_text
- kind, text = self.error_text
- if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):
- typus = "error"
- else:
- typus = "info"
- print typus, text
- def on_main_window_destroy(self, widget, data=None):
- print 'quit with cancel'
- gtk.main_quit()
- def postgui(self):
- inifile = linuxcnc.ini(self.ini_file_path)
- postgui_halfile = inifile.find("HAL", "POSTGUI_HALFILE")
- return postgui_halfile,sys.argv[2]
- class jt_gremlin(gremlin.Gremlin):
- def __init__(self, inifile):
- gremlin.Gremlin.__init__(self, inifile)
- def report_gcode_error(self, result, seq, filename):
- import gcode
- error_str = gcode.strerror(result)
- error_str = "\n\nG-Code error in " + os.path.basename(filename) + "\n" + "Near line " + str(seq) + " of\n" + filename + "\n" + error_str + "\n"
- print error_str
- # do something here with the error message in your UI
- # run the program
- if __name__ == "__main__":
- if len(sys.argv) > 2 and sys.argv[1] == '-ini':
- hwg = jt_gui(sys.argv[2])
- else:
- hwg = jt_gui()
- # load a postgui file if one is present in the INI file
- postgui_halfile,inifile = jt_gui.postgui(hwg)
- if postgui_halfile:
- res = os.spawnvp(os.P_WAIT, "halcmd", ["halcmd", "-i",inifile,"-f", postgui_halfile])
- if res: raise SystemExit, res
- gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment