# -*- coding: utf-8 -*- """ $Id$ Copyright 2011 Lars Kruse <devel@sumpfralle.de> This file is part of PyCAM. PyCAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PyCAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PyCAM. If not, see <http://www.gnu.org/licenses/>. """ import pycam.Plugins class GCodeTouchOff(pycam.Plugins.PluginBase): DEPENDS = ["GCodePreferences"] CATEGORIES = ["GCode"] UI_FILE = "gcode_touch_off.ui" def setup(self): if self.gui: box = self.gui.get_object("TouchOffBox") box.unparent() self.core.register_ui("gcode_preferences", "Touch Off", box, weight=70) self._gtk_handlers = [] for objname, setting in ( ("GCodeTouchOffOnStartup", "touch_off_on_startup"), ("GCodeTouchOffOnToolChange", "touch_off_on_tool_change")): obj = self.gui.get_object(objname) self._gtk_handlers.append((obj, "toggled", self.update_widgets)) self.core.add_item(setting, obj.get_active, obj.set_active) selector = self.gui.get_object("TouchOffLocationSelector") self._gtk_handlers.append((selector, "changed", self.update_widgets)) selector.set_active(0) self.register_gtk_handlers(self._gtk_handlers) self.update_widgets() return True def teardown(self): if self.gui: self.core.unregister_ui("gcode_preferences", self.gui.get_object("TouchOffBox")) self.unregister_gtk_handlers(self._gtk_handlers) for setting in ("touch_off_on_startup", "touch_off_on_tool_change"): del self.core[setting] def update_widgets(self, widget=None): # tool change controls pos_control = self.gui.get_object("TouchOffLocationSelector") tool_change_pos_model = pos_control.get_model() active_pos_index = pos_control.get_active() if active_pos_index < 0: pos_key = None else: pos_key = tool_change_pos_model[active_pos_index][0] # disable/enable the touch off position controls position_controls_table = self.gui.get_object("TouchOffLocationTable") touch_off_enabled = any([self.gui.get_object(objname).get_active() for objname in ("GCodeTouchOffOnStartup", "GCodeTouchOffOnToolChange")]) position_controls_table.set_sensitive(touch_off_enabled) # show or hide the vbox containing the absolute tool change location absolute_pos_box = self.gui.get_object("AbsoluteToolChangePositionBox") if (pos_key == "absolute") and touch_off_enabled: absolute_pos_box.show() else: absolute_pos_box.hide() # disable/enable touch probe height if self.gui.get_object("GCodeTouchOffOnStartup").get_active(): update_func = "show" else: update_func = "hide" for objname in ("TouchOffHeight", "TouchOffHeightLabel", "LengthUnitTouchOffHeight"): getattr(self.gui.get_object(objname), update_func)()