#!/usr/bin/env python3 # # QTVcp Widget # Copyright (c) 2018 Chris Morley # # This program 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 2 of the License, or # (at your option) any later version. # # This program 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. ############################################################################### from qtpy.QtWidgets import QToolButton, QMenu, QAction from qtpy.QtGui import QIcon from qtvcp.widgets.widget_baseclass import _HalWidgetBase from qtvcp.widgets.dialog_widget import EntryDialog from qtvcp.core import Status, Action, Info from qtvcp import logger # Instiniate the libraries with global reference # STATUS gives us status messages from linuxcnc # AUX_PRGM holds helper program loader # INI holds ini details # ACTION gives commands to linuxcnc # LOG is for running code logging STATUS = Status() INFO = Info() ACTION = Action() LOG = logger.getLogger(__name__) # Force the log level for this module #LOG.setLevel(logger.DEBUG) # One of DEBUG, INFO, WARNING, ERROR, CRITICAL class SystemToolButton(QToolButton, _HalWidgetBase): def __init__(self, parent=None): super(SystemToolButton, self).__init__(parent) self._joint = 0 self._last = 0 self._block_signal = False self._auto_label_flag = True SettingMenu = QMenu(self) for system in('G54', 'G55', 'G56', 'G57', 'G58', 'G59', 'G59.1', 'G59.2', 'G59.3'): Button = QAction(QIcon('exit24.png'), system, self) Button.triggered.connect(self[system.replace('.','_')]) SettingMenu.addAction(Button) self.setMenu(SettingMenu) self.dialog = EntryDialog() #self.setPopupMode(QToolButton.DelayedPopup) def _hal_init(self): if not self.text() == '': self._auto_label_flag = False def homed_on_test(): return (STATUS.machine_is_on() and (STATUS.is_all_homed() or INFO.NO_HOME_REQUIRED)) STATUS.connect('state-off', lambda w: self.menu().setEnabled(False)) STATUS.connect('state-estop', lambda w: self.menu().setEnabled(False)) STATUS.connect('interp-idle', lambda w: self.menu().setEnabled(homed_on_test())) STATUS.connect('interp-run', lambda w: self.menu().setEnabled(False)) STATUS.connect('all-homed', lambda w: self.menu().setEnabled(True)) STATUS.connect('not-all-homed', lambda w, data: self.menu().setEnabled(False)) STATUS.connect('interp-paused', lambda w: self.menu().setEnabled(False)) STATUS.connect('user-system-changed', self._set_user_system_text) def G54(self): ACTION.SET_USER_SYSTEM('G54') def G55(self): ACTION.SET_USER_SYSTEM('G55') def G56(self): ACTION.SET_USER_SYSTEM('G56') def G57(self): ACTION.SET_USER_SYSTEM('G57') def G58(self): ACTION.SET_USER_SYSTEM('G58') def G59(self): ACTION.SET_USER_SYSTEM('G59') def G59_1(self): ACTION.SET_USER_SYSTEM('G59.1') def G59_2(self): ACTION.SET_USER_SYSTEM('G59.2') def G59_3(self): ACTION.SET_USER_SYSTEM('G59.3') def _set_user_system_text(self, w, data): convert = { 0:'None',1:"G54", 2:"G55", 3:"G56", 4:"G57", 5:"G58", 6:"G59", 7:"G59.1", 8:"G59.2", 9:"G59.3"} if self._auto_label_flag: self.setText(convert[int(data)]) def ChangeState(self, joint): if int(joint) != self._joint: self._block_signal = True self.setChecked(False) self._block_signal = False self.hal_pin.set(False) ############################## # required class boiler code # ############################## def __getitem__(self, item): return getattr(self, item) def __setitem__(self, item, value): return setattr(self, item, value) # for testing without editor: def main(): import sys from qtpy.QtWidgets import QApplication app = QApplication(sys.argv) widget = SystemToolButton() widget.show() sys.exit(app.exec()) if __name__ == "__main__": main()