80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
from qtpy import QtCore, QtWidgets
|
|
|
|
from qtvcp.widgets.widget_baseclass import _HalWidgetBase
|
|
from qtvcp.core import Status, Action
|
|
from qtvcp import logger
|
|
|
|
# Instantiate the libraries with global reference
|
|
# STATUS gives us status messages from linuxcnc
|
|
# ACTION is for linuxcnc commands
|
|
# LOG is for running code logging
|
|
STATUS = Status()
|
|
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 RadioAxisSelector(QtWidgets.QRadioButton, _HalWidgetBase):
|
|
def __init__(self, parent=None):
|
|
super(RadioAxisSelector, self).__init__(parent)
|
|
self.toggled.connect(lambda:self.btnstate(self))
|
|
self.axis = ''
|
|
self.joint = -1
|
|
|
|
def _hal_init(self):
|
|
STATUS.connect('motion-mode-changed', lambda w,data: self.modeChanged(data))
|
|
|
|
def btnstate(self,b):
|
|
if b.isChecked() == True:
|
|
if STATUS.is_joint_mode():
|
|
ACTION.SET_SELECTED_JOINT(self.joint)
|
|
else:
|
|
ACTION.SET_SELECTED_AXIS(self.axis)
|
|
# set this without causing a STATUS message output
|
|
# in case we are selecting an axis to un/home
|
|
STATUS.selected_joint = self.joint
|
|
|
|
# change of joints mode / axis mode
|
|
def modeChanged(self, mode):
|
|
self.btnstate(self)
|
|
|
|
def setAxis(self, data):
|
|
if data.upper() in('X','Y','Z','A','B','C','U','V','W'):
|
|
self.axis = str(data.upper())
|
|
def getAxis(self):
|
|
return self.axis
|
|
def resetAxis(self):
|
|
self.axis = ''
|
|
|
|
def setJoint(self, data):
|
|
self.joint = data
|
|
def getJoint(self):
|
|
return self.joint
|
|
def resetJoint(self):
|
|
self.joint = -1
|
|
|
|
axis_selection = QtCore.Property(str, getAxis, setAxis, resetAxis)
|
|
joint_selection = QtCore.Property(int, getJoint, setJoint, resetJoint)
|
|
|
|
# for testing without editor:
|
|
def main():
|
|
import sys
|
|
from qtpy.QtWidgets import QApplication
|
|
app = QApplication(sys.argv)
|
|
widget = QtWidgets.QWidget()
|
|
layout = QtWidgets.QHBoxLayout()
|
|
widget.setLayout(layout)
|
|
|
|
cb = RadioAxisSelector()
|
|
layout.addWidget(cb)
|
|
cb2 = RadioAxisSelector()
|
|
layout.addWidget(cb2)
|
|
|
|
widget.show()
|
|
sys.exit(app.exec())
|
|
if __name__ == "__main__":
|
|
main()
|