91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
from qtpy.QtWidgets import (QToolButton, QMenu, QAction,
|
|
QComboBox, QWidgetAction, QSizePolicy)
|
|
from qtpy.QtCore import Property, Signal
|
|
from qtpy.QtGui import QIcon
|
|
|
|
from qtvcp.widgets.widget_baseclass import _HalWidgetBase
|
|
from qtvcp.widgets.indicatorMixIn import IndicatedMixIn
|
|
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 AxisPickToolButton(QToolButton, IndicatedMixIn):
|
|
AxisSelected = Signal(str)
|
|
CurrentAxisPosition = Signal(str,float)
|
|
|
|
def __init__(self, parent=None):
|
|
super(AxisPickToolButton, self).__init__(parent)
|
|
self._textTemplate = 'Axis: %s'
|
|
self._currentAxis = 'X'
|
|
|
|
|
|
def _hal_init(self):
|
|
self.createAxisButton(self._currentAxis)
|
|
self.axisTriggered(self._currentAxis)
|
|
|
|
def createAxisButton(self, text):
|
|
tmpl = lambda s: self._textTemplate % s
|
|
self.setText(tmpl(text))
|
|
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
|
|
self.setMinimumSize(70, 40)
|
|
self.clicked.connect(self.axisClicked)
|
|
SettingMenu = QMenu()
|
|
self.settingMenu = SettingMenu
|
|
for i in INFO.AVAILABLE_AXES:
|
|
axisButton = QAction(QIcon('exit24.png'), i, self)
|
|
# weird lambda i=i to work around 'function closure'
|
|
axisButton.triggered.connect(lambda state, i=i: self.axisTriggered(i))
|
|
SettingMenu.addAction(axisButton)
|
|
self.setMenu(SettingMenu)
|
|
|
|
def axisTriggered(self, data):
|
|
tmpl = lambda s: self._textTemplate % s
|
|
self.setText(tmpl(data))
|
|
self.AxisSelected.emit(data)
|
|
|
|
def axisClicked(self):
|
|
conversion = {'X':0, 'Y':1, "Z":2, 'A':3, "B":4, "C":5, 'U':6, 'V':7, 'W':8}
|
|
digitValue = 0.0
|
|
try:
|
|
p,relp,dtg = STATUS.get_position()
|
|
text = self.text()
|
|
for let in INFO.AVAILABLE_AXES:
|
|
if let == text[-1]:
|
|
digitValue = round(p[conversion[let]],5)
|
|
break
|
|
except Exception as e:
|
|
print(e)
|
|
return
|
|
print(let, digitValue)
|
|
self.AxisSelected.emit(let)
|
|
self.CurrentAxisPosition.emit(let, digitValue)
|
|
|
|
def setTextTemplate(self, data):
|
|
self._textTemplate = data
|
|
def getTextTemplate(self):
|
|
return self._textTemplate
|
|
def resetTextTemplate(self):
|
|
self._textTemplate = 'Axis: %s'
|
|
textTemplate = Property(str, getTextTemplate, setTextTemplate, resetTextTemplate)
|
|
|
|
def setCurrentAxis(self, data):
|
|
self._currentAxis = data
|
|
def getCurrentAxis(self):
|
|
return self._currentAxis
|
|
def resetCurrentAxis(self):
|
|
self._currentAxis = 'X'
|
|
currentAxis = Property(str, getCurrentAxis, setCurrentAxis, resetCurrentAxis)
|
|
|