157 lines
4.8 KiB
Python
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)]
|