Source code for taurus.qt.qtgui.panel.taurusconfigurationpanel

#!/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 QLineEdit"""

__all__ = ["TaurusConfigurationPanel", "TangoConfigLineEdit",
           "TaurusConfigLineEdit"]

__docformat__ = 'restructuredtext'

import sys

from taurus.external.qt import Qt
from taurus.qt.qtgui.util import getWidgetsOfType
from taurus.qt.qtgui.util.ui import UILoadable
from taurus.qt.qtgui.base import TaurusBaseWritableWidget
from taurus.core.taurusattribute import TaurusAttribute
from taurus.core.taurusoperation import WriteAttrOperation
from taurus.core.util.log import taurus4_deprecation


[docs]class TangoConfigLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget): def __init__(self, qt_parent=None, designMode=False): name = self.__class__.__name__ self.call__init__wo_kw(Qt.QLineEdit, qt_parent) self.call__init__(TaurusBaseWritableWidget, name, designMode=designMode) self.textChanged.connect(self.notifyValueChanged) self.returnPressed.connect(self.writeValue) self.editingFinished.connect(self._onEditingFinished) def _onEditingFinished(self): if self._autoApply: self.writeValue()
[docs] def handleEvent(self, evt_src, evt_type, evt_value): self.notifyValueChanged()
[docs] def getModelClass(self): return TaurusAttribute
[docs] def postAttach(self): if self.isAttached(): try: v = self._getAttrInfoExMember(self.modelFragmentName) except: v = None self.setValue(v)
[docs] def updatePendingOperations(self): model = self.getModelObj() try: model_value = self.text() wigdet_value = self.getValue() if model.areStrValuesEqual(model_value, wigdet_value): self._operations = [] else: operation = WriteAttrOperation(model, wigdet_value, self.getOperationCallbacks()) self._operations = [operation] except: self._operations = [] self.updateStyle()
[docs] def setValue(self, v): model = self.getModelObj() if model is None: v_str = str(v) else: v_str = str(self.getValue()) self.blockSignals(True) self.setText(v_str.strip()) self.blockSignals(False)
def _getAttrInfoExMember(self, member): model_obj = self.getModelObj() attrInfoEx = model_obj.getAttributeInfoEx() if '_alarm' in member or '_warning' in member: alarms = getattr(attrInfoEx, 'alarms') return getattr(alarms, member) else: return getattr(attrInfoEx, member) def _setAttrInfoExMember(self, member, value): model_obj = self.getModelObj() attrInfoEx = model_obj.getAttributeInfoEx() if '_alarm' in member or '_warning' in member: alarms = getattr(attrInfoEx, 'alarms') setattr(alarms, member, value) else: setattr(attrInfoEx, member, value) model_obj.setConfigEx(attrInfoEx)
[docs] def getValue(self): if self.modelFragmentName is None: return None return self._getAttrInfoExMember(self.modelFragmentName)
[docs] def notifyValueChanged(self): if str(self.text()) != str(self.getValue()): style = 'TangoConfigLineEdit {color: %s; font-weight: %s}' %\ ('blue', 'bold') self.setStyleSheet(style) else: style = 'TangoConfigLineEdit {color: %s; font-weight: %s}' %\ ('black', 'normal') self.setStyleSheet(style)
[docs] def writeValue(self): if self.modelFragmentName is not None: self._setAttrInfoExMember(self.modelFragmentName, str(self.text())) style = 'TangoConfigLineEdit {color: %s; font-weight: %s}' %\ ('black', 'normal') self.setStyleSheet(style)
[docs] def setModel(self, model): TaurusBaseWritableWidget.setModel(self, model) self.notifyValueChanged()
[docs] @classmethod def getQtDesignerPluginInfo(cls): ret = TaurusBaseWritableWidget.getQtDesignerPluginInfo() ret['module'] = 'taurus.qt.qtgui.input' ret['icon'] = "designer:lineedit.png" return ret
#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- # QT properties #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- model = Qt.pyqtProperty("QString", TaurusBaseWritableWidget.getModel, TaurusBaseWritableWidget.setModel, TaurusBaseWritableWidget.resetModel) autoApply = Qt.pyqtProperty("bool", TaurusBaseWritableWidget.getAutoApply, TaurusBaseWritableWidget.setAutoApply, TaurusBaseWritableWidget.resetAutoApply) forcedApply = Qt.pyqtProperty("bool", TaurusBaseWritableWidget.getForcedApply, TaurusBaseWritableWidget.setForcedApply, TaurusBaseWritableWidget.resetForcedApply)
[docs]class TaurusConfigLineEdit(TangoConfigLineEdit): @taurus4_deprecation(alt='TangoConfigLineEdit') def __init__(self, qt_parent=None, designMode=False): TangoConfigLineEdit.__init__(self, qt_parent=None, designMode=False)
[docs] @classmethod def getQtDesignerPluginInfo(cls): return None
[docs]@UILoadable(with_ui='_ui') class TaurusConfigurationPanel(Qt.QWidget): def __init__(self, parent=None, designMode=False): Qt.QWidget.__init__(self, parent) self.loadUi() self._ui.pushButtonOk.clicked.connect(self._onOk) self._ui.pushButtonApply.clicked.connect(self._onApply) self._ui.pushButtonCancel.clicked.connect(self._onCancel) self._ui.pushButtonRestore.clicked.connect(self._onRestore) def _onOk(self): self._onApply() self._onCancel() def _onApply(self): widgets = getWidgetsOfType(self, TangoConfigLineEdit) for w in widgets: param = str(w.text()) if w.getValue() != param: w.writeValue() def _onCancel(self): self.close() def _onRestore(self): widgets = getWidgetsOfType(self, TangoConfigLineEdit) for w in widgets: param = str(w.text()) if w.getValue() != param: w.setText(param)
[docs] def setModel(self, model): self._ui.fullNameLineEdit.setText(model) model += '#' self._ui.labelConfig.setModel(model + 'label') self._ui.unitConfig.setModel(model + 'unit') self._ui.displayUnitConfig.setModel(model + 'display_unit') self._ui.standardUnitConfig.setModel(model + 'standard_unit') self._ui.formatConfig.setModel(model + 'format') self._ui.descriptionConfig.setModel(model + 'description') self._ui.valueMinConfig.setModel(model + 'min_value') self._ui.valueMaxConfig.setModel(model + 'max_value') self._ui.alarmMinConfig.setModel(model + 'min_alarm') self._ui.alarmMaxConfig.setModel(model + 'max_alarm') self._ui.warningMinConfig.setModel(model + 'min_warning') self._ui.warningMaxConfig.setModel(model + 'max_warning')
def main(): import sys attr_name = sys.argv[1] a = Qt.QApplication([]) w1 = TaurusConfigurationPanel() w1._ui.pushButtonOk.setVisible(True) w1._ui.pushButtonCancel.setVisible(True) w1.setModel(attr_name) w1.show() return a.exec_() if __name__ == "__main__": sys.exit(main())