Source code for taurus.qt.qtgui.input.taurusspinbox

#!/usr/bin/env python

#############################################################################
##
## 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 QAbstractSpinBox"""

__all__ = ["TaurusValueSpinBox", "TaurusValueSpinBoxEx" ]

__docformat__ = 'restructuredtext'

from taurus.external.qt import Qt

from taurus.qt.qtgui.base import TaurusBaseWritableWidget
from tauruslineedit import TaurusValueLineEdit
from taurus.qt.qtgui.resource import getStandardIcon

[docs]class TaurusValueSpinBox(Qt.QAbstractSpinBox): __pyqtSignals__ = ("modelChanged(const QString &)",) def __init__(self, qt_parent = None, designMode = False): Qt.QAbstractSpinBox.__init__(self, qt_parent) # Overwrite not to show quality by default self._showQuality = False self._singleStep = 1.0 lineEdit = TaurusValueLineEdit(designMode=designMode) self.setLineEdit(lineEdit) self.setAccelerated(True) self.connect(self, Qt.SIGNAL("editingFinished()"), self.writeValue) def __getattr__(self, name): return getattr(self.lineEdit(), name)
[docs] def setValue(self, v): self.lineEdit().setValue(v)
[docs] def getValue(self): return self.lineEdit().getValue()
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- # Mandatory overload from QAbstractSpinBox #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
[docs] def stepBy(self, steps): #validator = self.lineEdit().validator() self.setValue(self.getValue() + self.getSingleStep()*steps) if self.lineEdit().getAutoApply(): self.lineEdit().emit(Qt.SIGNAL('editingFinished()')) else: kmods = Qt.QCoreApplication.instance().keyboardModifiers() controlpressed = bool(kmods&Qt.Qt.ControlModifier) if controlpressed: self.lineEdit().writeValue(forceApply=True)
[docs] def stepEnabled(self): ret = Qt.QAbstractSpinBox.StepEnabled(Qt.QAbstractSpinBox.StepNone) if self.getModelObj() == None: return ret if self.getModelObj().getValueObj() == None: return ret le, curr_val, ss = self.lineEdit(), self.getValue(), self.getSingleStep() if curr_val == None: return ret if not le._outOfRange(curr_val + ss): ret |= Qt.QAbstractSpinBox.StepUpEnabled if not le._outOfRange(curr_val - ss): ret |= Qt.QAbstractSpinBox.StepDownEnabled return ret
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- # Model related methods #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
[docs] def setModel(self, model): self.lineEdit().setModel(model)
[docs] def getModel(self): return self.lineEdit().getModel()
[docs] def resetModel(self): return self.lineEdit().resetModel()
[docs] def setUseParentModel(self, model): self.lineEdit().setUseParentModel(model)
[docs] def getUseParentModel(self): return self.lineEdit().getUseParentModel()
[docs] def resetUseParentModel(self): return self.lineEdit().resetUseParentModel()
[docs] def setAutoApply(self, model): self.lineEdit().setAutoApply(model)
[docs] def getAutoApply(self): return self.lineEdit().getAutoApply()
[docs] def resetAutoApply(self): return self.lineEdit().resetAutoApply()
[docs] def setForcedApply(self, model): self.lineEdit().setForcedApply(model)
[docs] def getForcedApply(self): return self.lineEdit().getForcedApply()
[docs] def resetForcedApply(self): return self.lineEdit().resetForcedApply()
[docs] def getSingleStep(self): return self._singleStep
@Qt.pyqtSignature("setSingleStep(double)")
[docs] def setSingleStep(self, step): self._singleStep = step
[docs] def resetSingleStep(self): self.setSingleStep(1.0)
@classmethod
[docs] def getQtDesignerPluginInfo(cls): return { 'group' : 'Taurus Input', 'icon' : ':/designer/spinbox.png', 'module' : 'taurus.qt.qtgui.input', 'container' : False }
singleStep = Qt.pyqtProperty("double", getSingleStep, setSingleStep, resetSingleStep) model = Qt.pyqtProperty("QString", getModel, setModel, resetModel) useParentModel = Qt.pyqtProperty("bool", getUseParentModel, setUseParentModel, resetUseParentModel) autoApply = Qt.pyqtProperty("bool", getAutoApply, setAutoApply, resetAutoApply) forcedApply = Qt.pyqtProperty("bool", getForcedApply, setForcedApply, resetForcedApply)
_S = """ QSpinBox::up-button { border-width: 0px; } QPushButton { min-width: 6px; min-height: 10px; /*border-style: solid; border-width: 1px; border-color: black; border-top-right-radius: 2px; border-bottom-right-radius: 2px;*/ margin: 0px; padding: 0px; } """
[docs]class TaurusValueSpinBoxEx(Qt.QWidget): def __init__(self, qt_parent = None, designMode = False): Qt.QWidget.__init__(self, qt_parent) layout = Qt.QGridLayout() layout.setMargin(0) layout.setContentsMargins(0,0,0,0) layout.setSpacing(0) self.setLayout(layout) self.setStyleSheet(_S) self.__dict__['spinBox'] = spin = TaurusValueSpinBox(qt_parent=self, designMode=designMode) self.__dict__['sliderButton1'] = b1 = Qt.QToolButton(self) self.__dict__['sliderButton2'] = b2 = Qt.QToolButton(self) b1.setIcon(getStandardIcon(Qt.QStyle.SP_TitleBarShadeButton, b1)) b2.setIcon(getStandardIcon(Qt.QStyle.SP_TitleBarUnshadeButton, b2)) layout.addWidget(spin, 0, 0, 2, 1) layout.addWidget(b1, 0, 1, 1, 1, Qt.Qt.AlignBottom) layout.addWidget(b2, 1, 1, 1, 1, Qt.Qt.AlignTop) layout.setColumnStretch(0, 1) layout.setColumnStretch(1, 0) policy = self.sizePolicy() policy.setHorizontalPolicy(Qt.QSizePolicy.Minimum) policy.setVerticalPolicy(Qt.QSizePolicy.Fixed) self.setSizePolicy(policy) def __getattr__(self, name): return getattr(self.spinBox, name) def __setattr__(self, name, value): setattr(self.spinBox, name, value)