#!/usr/bin/env python
# -*- coding: utf-8 -*-
#############################################################################
##
## This file is part of Taurus
##
## http://taurus-scada.org
##
## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
##
## Taurus is free software: you can redistribute it and/or modify
## it under the terms of the GNU Lesser General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## Taurus 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 Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with Taurus. If not, see <http://www.gnu.org/licenses/>.
##
#############################################################################
"""This module provides a set of basic Taurus widgets based on QLabel"""
__all__ = ["TaurusBoolLed"]
__docformat__ = 'restructuredtext'
from taurus.external.qt import Qt
# ugly
import PyTango
import taurus.core.util
from taurus.qt.qtgui.base import TaurusBaseWidget
from qled import LedStatus, LedColor, LedSize
from qled import QLedOld as QLed
[docs]class TaurusBoolLed(QLed, TaurusBaseWidget):
"""
A led widget displaying the boolean tango attribute value
.. deprecated:: 2.0
Use :class:`taurus.qt.qtgui.display.TaurusLed` instead.
"""
__pyqtSignals__ = ("modelChanged(const QString &)",)
def __init__(self, parent = None, designMode = False):
self._ledColor = 'GREEN'
self._ledColorOff = 'GREENOFF'
self._ledSize = 24
self._ledColorPixmap = None
self._ledColorOffPixmap = None
self._boolIndex = 0
self.call__init__wo_kw(QLed, parent)
self.call__init__(TaurusBaseWidget, str(self.objectName()), designMode=designMode)
self.setLedColor(self._ledColor)
self.setLedColorOff(self._ledColorOff)
self.setEventFilters([taurus.core.util.eventfilters.IGNORE_CONFIG]) #This widget does not need to attend to config events
[docs] def sizeHint(self):
return Qt.QSize(24, 24)
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
# TaurusBaseWidget overwritting
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
[docs] def getModelClass(self):
return taurus.core.taurusattribute.TaurusAttribute
[docs] def isReadOnly(self):
return True
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
# QT properties
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
[docs] def getLedColor(self):
return self._ledColor
@Qt.pyqtSignature("setLedColor(QString)")
[docs] def setLedColor(self, lc):
self._ledColor = str(lc)
status = LedStatus.ON
color = self._ledColor
if color.endswith('OFF'):
status = LedStatus.OFF
color = color[:-3]
color = LedColor[color]
file_name = self.toCompleteLedName(self.ledsize, status, color)
self._ledColorPixmap = Qt.QPixmap(file_name)
[docs] def resetLedColor(self,lc):
self.setLedColor('GREEN')
[docs] def getLedColorOff(self):
return self._ledColorOff
@Qt.pyqtSignature("setLedColorOff(QString)")
[docs] def setLedColorOff(self, lc):
self._ledColorOff = str(lc)
status = LedStatus.ON
color = self._ledColorOff
if color.endswith('OFF'):
status = LedStatus.OFF
color = color[:-3]
color = LedColor[color]
file_name = self.toCompleteLedName(self.ledsize, status, color)
self._ledColorOffPixmap = Qt.QPixmap(file_name)
[docs] def resetLedColorOff(self,lc):
self.setLedColorOff('GREENOFF')
[docs] def getLedSize(self):
return self._ledSize
@Qt.pyqtSignature("setLedSize(int)")
[docs] def setLedSize(self,size):
self._ledSize = size
try:
getattr(LedSize,str(self._ledSize))
self.changeSize(self._ledSize)
except:
pass
[docs] def resetLedSize(self,size):
self.setLedSize(24)
[docs] def getBoolIndex(self):
return self._boolIndex
@Qt.pyqtSignature("setBoolIndex(int)")
[docs] def setBoolIndex(self,i):
self._boolIndex = i
try:
getattr(BoolIndex,str(self._boolIndex))
self.changeSize(self._boolIndex)
except:
pass
[docs] def resetBoolIndex(self):
self.setBoolIndex(0)
@classmethod
[docs] def getQtDesignerPluginInfo(cls):
return None
# ret = TaurusBaseWidget.getQtDesignerPluginInfo()
# ret['module'] = 'taurus.qt.qtgui.display'
# ret['group'] = 'Taurus Widgets [Old]'
# ret['icon'] = ":/designer/ledgreen.png"
# return ret
model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel,
TaurusBaseWidget.setModel,
TaurusBaseWidget.resetModel)
useParentModel = Qt.pyqtProperty("bool", TaurusBaseWidget.getUseParentModel,
TaurusBaseWidget.setUseParentModel,
TaurusBaseWidget.resetUseParentModel)
ledColor = Qt.pyqtProperty("QString", getLedColor, setLedColor, resetLedColor,
doc='valid values are (case insensitive) "BLUE", "GREEN", "RED", "YELLOW", "ORANGE", "BLUEOFF", "GREENOFF", "REDOFF", "YELLOWOFF", "ORANGEOFF"')
ledColorOff = Qt.pyqtProperty("QString", getLedColorOff, setLedColorOff,
resetLedColorOff,
doc='valid values are (case insensitive) "BLUE", "GREEN", "RED", "YELLOW", "ORANGE", "BLUEOFF", "GREENOFF", "REDOFF", "YELLOWOFF", "ORANGEOFF"')
ledSize = Qt.pyqtProperty("int", getLedSize, setLedSize, resetLedSize,
doc='valid values as 24 and 48')
boolIndex = Qt.pyqtProperty("int", getBoolIndex, setBoolIndex, resetBoolIndex,)
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
# QT signal handlers
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
[docs] def handleEvent(self, evt_src, evt_type, evt_value):
if evt_value is None:
return
if evt_type == taurus.core.taurusbasetypes.TaurusEventType.Error:
self._setProblemsBackground(True)
self.updateStyle()
return
self._setProblemsBackground(False)
if evt_value.data_format == PyTango.AttrDataFormat.SCALAR:
v = evt_value.value
elif evt_value.data_format == PyTango.AttrDataFormat.SPECTRUM:
v = evt_value.value[self.boolIndex]
if v is True: #we know that evt_value will always be a DeviceAttribute because we filter out Config events
self.setPixmap(self._ledColorPixmap)
else:
self.setPixmap(self._ledColorOffPixmap)
self.updateStyle()
if __name__ == "__main__":
import sys
app = Qt.QApplication(sys.argv)
model = 'sys/tg_test/1/boolean_scalar'
if len(sys.argv)>1: model=sys.argv[1]
w = TaurusBoolLed()
w.setModel(model)
w.setVisible(True)
sys.exit(app.exec_())