Files
linuxcncAllWasm/share/qtvcp/panels/test_dial/test_dial_handler.py
2026-08-20 06:17:39 +08:00

157 lines
4.8 KiB
Python

############################
# **** IMPORT SECTION **** #
############################
import sys
from qtpy.QtCore import *
from qtpy.QtGui import *
from qtpy.QtWidgets import *
from qtvcp.core import Status
from qtvcp.widgets.simple_widgets import DoubleScale
from qtvcp.widgets.hal_selectionbox import HALSelectionBox
###########################################
# **** instantiate libraries section **** #
###########################################
STATUS = Status()
###################################
# **** HANDLER CLASS SECTION **** #
###################################
class HandlerClass:
########################
# **** INITIALIZE **** #
########################
# widgets allows access to widgets from the qtvcp files
# at this point the widgets and hal pins are not instantiated
def __init__(self, halcomp,widgets,paths):
self.w = widgets
self.h = halcomp
##########################################
# Special Functions called from QTVCP
##########################################
# at this point:
# the widgets are instantiated.
# the HAL pins are built but HAL is not set ready
def initialized__(self):
# containers
w = QWidget()
w.setContentsMargins(0,0,0,0)
hbox = QHBoxLayout(w)
hbox.setContentsMargins(0,0,0,0)
self.spinbox = DoubleScale()
self.spinbox.hal_init('scaled')
self.spinbox.setDecimals(4)
self.spinbox.floatOutput.connect(self.updateLabel)
hbox.addWidget(self.spinbox)
le = QLineEdit()
le.setMaximumWidth(80)
le.setText(self.h.comp.getprefix())
cb = HALSelectionBox()
cb.setShowTypes([cb.SIGNALS])
cb.setSignalTypes([cb.HAL_FLOAT], driven = [False,True])
cb.hal_init()
cb.currentTextChanged.connect(self.signalSelected)
hbox.addWidget(cb)
# add those to the corner of the right tab widget
self.w.menubar.setCornerWidget(w)
# make sure scalewidgets get proper starting values
self.w.dial_1.valueChanged.emit(self.w.dial_1.value())
self.w.setWindowFlags(Qt.WindowStaysOnTopHint)
self.w.setWindowTitle('{}'.format(self.h.comp.getprefix()))
########################
# callbacks from STATUS #
########################
#######################
# callbacks from form #
#######################
def actionTriggered(self, data):
if data == self.w.actionSet_50_50:
self.w.dial_1.setMinimum(-50)
self.w.dial_1.setMaximum(50)
self.w.setWindowTitle('(+-50)')
elif data == self.w.actionSet_100_100:
self.w.dial_1.setMinimum(-100)
self.w.dial_1.setMaximum(100)
self.w.setWindowTitle('(+-100)')
elif data == self.w.actionSet_1000_1000:
self.w.dial_1.setMinimum(-1000)
self.w.dial_1.setMaximum(1000)
self.w.setWindowTitle('(+-1000)')
elif data == self.w.actionSet_0_100:
self.w.dial_1.setMinimum(0)
self.w.dial_1.setMaximum(100)
self.w.setWindowTitle('(0-100)')
elif data == self.w.actionSet_0_360:
self.w.dial_1.setMinimum(0)
self.w.dial_1.setMaximum(360)
self.w.setWindowTitle('(0-360)')
elif data == self.w.actionSet_0_1000:
self.w.dial_1.setMinimum(0)
self.w.dial_1.setMaximum(1000)
self.w.setWindowTitle('(0-1000)')
def valueChanged(self, value):
self.spinbox.setInput(value)
#####################
# general functions #
#####################
def updateLabel(self,v):
self.w.hallabel.setDisplay(v)
def signalSelected(self, sig):
pname = self.spinbox.get_full_pinname(self.spinbox.hal_pin_f)
if sig == 'None':
self.h.hal.disconnect(pname)
else:
# suppress error messages
l = self.h.hal.get_msg_level()
self.h.hal.set_msg_level(0)
res = self.h.hal.connect(pname,sig)
if res:
self.h.hal.disconnect(pname)
self.h.hal.connect(pname,sig)
# restore error messages
self.h.hal.set_msg_level(l)
#####################
# KEY BINDING CALLS #
#####################
###########################
# **** closing event **** #
###########################
##############################
# required class boiler code #
##############################
def __getitem__(self, item):
return getattr(self, item)
def __setitem__(self, item, value):
return setattr(self, item, value)
################################
# required handler boiler code #
################################
def get_handlers(halcomp,widgets,paths):
return [HandlerClass(halcomp,widgets,paths)]