diff options
Diffstat (limited to 'src/sardana/taurus/qt/qtcore/tango/sardana')
-rw-r--r-- | src/sardana/taurus/qt/qtcore/tango/sardana/__init__.py | 38 | ||||
-rw-r--r-- | src/sardana/taurus/qt/qtcore/tango/sardana/macroserver.py | 175 | ||||
-rw-r--r-- | src/sardana/taurus/qt/qtcore/tango/sardana/model.py | 461 | ||||
-rw-r--r-- | src/sardana/taurus/qt/qtcore/tango/sardana/pool.py | 93 |
4 files changed, 0 insertions, 767 deletions
diff --git a/src/sardana/taurus/qt/qtcore/tango/sardana/__init__.py b/src/sardana/taurus/qt/qtcore/tango/sardana/__init__.py deleted file mode 100644 index dea81f3f..00000000 --- a/src/sardana/taurus/qt/qtcore/tango/sardana/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python - -############################################################################## -## -## This file is part of Sardana -## -## http://www.sardana-controls.org/ -## -## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain -## -## Sardana 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. -## -## Sardana 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 Sardana. If not, see <http://www.gnu.org/licenses/>. -## -############################################################################## - -""" -Sardana extension for taurus Qt -""" - -__docformat__ = 'restructuredtext' - - -def registerExtensions(): - from . import pool - from . import macroserver - - pool.registerExtensions() - macroserver.registerExtensions() diff --git a/src/sardana/taurus/qt/qtcore/tango/sardana/macroserver.py b/src/sardana/taurus/qt/qtcore/tango/sardana/macroserver.py deleted file mode 100644 index b0a780f0..00000000 --- a/src/sardana/taurus/qt/qtcore/tango/sardana/macroserver.py +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/env python - -############################################################################## -## -## This file is part of Sardana -## -## http://www.sardana-controls.org/ -## -## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain -## -## Sardana 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. -## -## Sardana 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 Sardana. If not, see <http://www.gnu.org/licenses/>. -## -############################################################################## - -"""MacroServer extension for taurus Qt""" - -__all__ = ["QDoor", "QMacroServer", "MacroServerMessageErrorHandler", "registerExtensions"] - -from taurus.core.taurusbasetypes import TaurusEventType -from taurus.external.qt import Qt - -from sardana.taurus.core.tango.sardana.macroserver import BaseMacroServer, BaseDoor - -CHANGE_EVTS = TaurusEventType.Change, TaurusEventType.Periodic - - -class QDoor(BaseDoor, Qt.QObject): - - __pyqtSignals__ = ["resultUpdated", "recordDataUpdated", "macroStatusUpdated"] - __pyqtSignals__ += [ "%sUpdated" % l.lower() for l in BaseDoor.log_streams ] - - def __init__(self, name, qt_parent=None, **kw): - self.call__init__wo_kw(Qt.QObject, qt_parent) - self.call__init__(BaseDoor, name, **kw) - - def resultReceived(self, log_name, result): - res = BaseDoor.resultReceived(self, log_name, result) - self.emit(Qt.SIGNAL("resultUpdated"), res) - return res - - def recordDataReceived(self, s, t, v): - if t not in CHANGE_EVTS: return - res = BaseDoor.recordDataReceived(self, s, t, v) - self.emit(Qt.SIGNAL("recordDataUpdated"), res) - return res - - def macroStatusReceived(self, s, t, v): - res = BaseDoor.macroStatusReceived(self, s, t, v) - if t == TaurusEventType.Error: - macro = None - else: - macro = self.getRunningMacro() - if macro is None: return - self.emit(Qt.SIGNAL("macroStatusUpdated"), (macro, res)) - return res - - def logReceived(self, log_name, output): - res = BaseDoor.logReceived(self, log_name, output) - self.emit(Qt.SIGNAL("%sUpdated" % log_name.lower()), output) - return res - - -class QMacroServer(BaseMacroServer, Qt.QObject): - - def __init__(self, name, qt_parent=None, **kw): - self.call__init__wo_kw(Qt.QObject, qt_parent) - self.call__init__(BaseMacroServer, name, **kw) - - def typesChanged(self, s, t, v): - res = BaseMacroServer.typesChanged(self, s, t, v) - self.emit(Qt.SIGNAL("typesUpdated")) - return res - - def elementsChanged(self, s, t, v): - res = BaseMacroServer.elementsChanged(self, s, t, v) - self.emit(Qt.SIGNAL("elementsUpdated")) - return res - - def macrosChanged(self, s, t, v): - res = BaseMacroServer.macrosChanged(self, s, t, v) - self.emit(Qt.SIGNAL("macrosUpdated")) - return res - - def on_elements_changed(self, s, t, v): - ret = added, removed, changed = \ - BaseMacroServer.on_elements_changed(self, s, t, v) - - macros, elements = 0, 0 - for element in set.union(added, removed, changed): - if "MacroCode" in element.interfaces: - macros += 1 - elements += 1 - if elements and macros: - break - if elements: - self.emit(Qt.SIGNAL("elementsChanged")) - if macros: - self.emit(Qt.SIGNAL("macrosUpdated")) - return ret - - def on_environment_changed(self, s, t, v): - ret = added, removed, changed = \ - BaseMacroServer.on_environment_changed(self, s, t, v) - - if added or removed or changed: - self.emit(Qt.SIGNAL("environmentChanged"), ret) - return ret - - -# ugly access to qtgui level: in future find a better way to register error -# handlers, maybe in TangoFactory & TaurusManager - -from taurus.qt.qtgui.panel import TaurusMessageErrorHandler - -class MacroServerMessageErrorHandler(TaurusMessageErrorHandler): - - def setError(self, err_type=None, err_value=None, err_traceback=None): - """Translates the given error object into an HTML string and places it - in the message panel - - :param error: an error object (typically an exception object) - :type error: object""" - - msgbox = self._msgbox - msgbox.setText(err_value) - msg = "<html><body><pre>%s</pre></body></html>" % err_value - msgbox.setDetailedHtml(msg) - - html_orig = """<html><head><style type="text/css">{style}</style></head><body>""" - exc_info = "".join(err_traceback) - style = "" - try: - import pygments.formatters - import pygments.lexers - except: - pygments = None - if pygments is not None: - formatter = pygments.formatters.HtmlFormatter() - style = formatter.get_style_defs() - html = html_orig.format(style=style) - if pygments is None: - html += "<pre>%s</pre>" % exc_info - else: - formatter = pygments.formatters.HtmlFormatter() - html += pygments.highlight(exc_info, pygments.lexers.PythonTracebackLexer(), formatter) - html += "</body></html>" - msgbox.setOriginHtml(html) - - -def registerExtensions(): - """Registers the macroserver extensions in the :class:`taurus.core.tango.TangoFactory`""" - import taurus - factory = taurus.Factory() - factory.registerDeviceClass('MacroServer', QMacroServer) - factory.registerDeviceClass('Door', QDoor) - - # ugly access to qtgui level: in future find a better way to register error - # handlers, maybe in TangoFactory & TaurusManager - import sardana.taurus.core.tango.sardana.macro - import taurus.qt.qtgui.panel - MacroRunException = sardana.taurus.core.tango.sardana.macro.MacroRunException - TaurusMessagePanel = taurus.qt.qtgui.panel.TaurusMessagePanel - - TaurusMessagePanel.registerErrorHandler(MacroRunException, MacroServerMessageErrorHandler) diff --git a/src/sardana/taurus/qt/qtcore/tango/sardana/model.py b/src/sardana/taurus/qt/qtcore/tango/sardana/model.py deleted file mode 100644 index 376f44ee..00000000 --- a/src/sardana/taurus/qt/qtcore/tango/sardana/model.py +++ /dev/null @@ -1,461 +0,0 @@ -#!/usr/bin/env python - -############################################################################## -## -## This file is part of Sardana -## -## http://www.sardana-controls.org/ -## -## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain -## -## Sardana 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. -## -## Sardana 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 Sardana. If not, see <http://www.gnu.org/licenses/>. -## -############################################################################## - -"""This module contains a taurus text editor widget.""" - -__all__ = ["SardanaBaseElementModel", "SardanaElementTypeModel", - "SardanaElementPlainModel", "SardanaBaseProxyModel", - "SardanaTypeProxyModel", - "SardanaBaseTreeItem", "SardanaRootTreeItem", - "SardanaElementTreeItem", "SardanaTypeTreeItem", - "SardanaEnvironmentModel"] - -__docformat__ = 'restructuredtext' - -try: - import pygments - from pygments import highlight - from pygments.formatters import HtmlFormatter - from pygments.lexers import PythonLexer, PythonTracebackLexer -except: - pygments = None - -from taurus.core.taurusdevice import TaurusDevice -from taurus.external.qt import Qt -from taurus.core.util.enumeration import Enumeration -from taurus.qt.qtcore.model import TaurusBaseTreeItem, TaurusBaseModel, \ - TaurusBaseProxyModel -from taurus.qt.qtcore.mimetypes import TAURUS_MODEL_LIST_MIME_TYPE, \ - TAURUS_MODEL_MIME_TYPE - -_MOD, _CLS, _FNC, _TNG = ":/python-module.png", ":/class.png", ":/function.png", ":/tango.png" - -TYPE_MAP = { - "ControllerLibrary" : ("Controller libraries", _MOD, "Controller library",), - "ControllerClass" : ("Controller classes", _CLS, "Controller class",), - "Controller" : ("Controllers", _TNG, "Controller",), - "Motor" : ("Motors", _TNG, "Motor",), - "PseudoMotor" : ("Pseudo motors", _TNG, "Pseudo Motor",), - "CTExpChannel" : ("Counter/Timers", _TNG, "Counter/Timer experiment channel",), - "CounterTimer" : ("Counter/Timers", _TNG, "Counter/Timer experiment channel",), - "ZeroDExpChannel" : ("0D channels", _TNG, "0D experiment channel",), - "OneDExpChannel" : ("1D channels", _TNG, "1D experiment channel",), - "TwoDExpChannel" : ("2D channels", _TNG, "2D experiment channel",), - "MotorGroup" : ("Motor groups", _TNG, "Motor group",), - "MeasurementGroup" : ("Measurement groups", _TNG, "Measurement group",), - "CommunicationChannel" : ("Communication channels", _TNG, "Communication channel",), - "MacroLibrary" : ("Macro libraries", _MOD, "Macro library",), - "MacroClass" : ("Macro classes", _CLS, "Macro class",), - "Instrument" : ("Instruments", _TNG, "Instrument",), - "MacroFunction" : ("Macro functions", _FNC, "Macro function",), -} - -def getElementTypeLabel(t): - return TYPE_MAP.get(t, (t,))[0] - -def getElementTypeIcon(t): - import taurus.qt.qtgui.resource - try: - return taurus.qt.qtgui.resource.getIcon(TYPE_MAP.get(t, (None, _TNG))[1]) - except: - return None - -def getElementTypeSize(t): - return Qt.QSize(200, 24) - -def getElementTypeToolTip(t): - return TYPE_MAP.get(t, (None, None, 'no information'))[2] - - -class SardanaBaseTreeItem(TaurusBaseTreeItem): - """A generic node""" - - def data(self, index): - """Returns the data of this node for the given index - - :return: (object) the data for the given index - """ - if index.column() > 0: - return None - return getElementTypeLabel(self._itemData) - - def role(self): - """Returns the prefered role for the item. - This implementation returns taurus.core.taurusbasetypes.TaurusElementType.Unknown - - This method should be able to return any kind of python object as long - as the model that is used is compatible. - - :return: the role in form of element type""" - return 'type' - - -class SardanaRootTreeItem(SardanaBaseTreeItem): - pass - - -class SardanaTypeTreeItem(SardanaBaseTreeItem): - pass - - -class SardanaElementTreeItem(SardanaBaseTreeItem): - - def role(self): - return self.itemData().type - - def data(self, index): - column, model = index.column(), index.model() - role = model.role(column, self.depth()) - obj = self.itemData() - if role == "parent": - if hasattr(obj, "klass"): - return obj.klass - if hasattr(obj, "module"): - return obj.module - if hasattr(obj, "controller"): - return obj.controller - if hasattr(obj, "parent"): - return obj.parent - return None - return getattr(obj, role) - - def toolTip(self, index): - if index.column() > 0: - return self.data(index) - obj = self.itemData() - if hasattr(obj, "exc_info") and obj.exc_info is not None: - html_orig = '<html><head><style type="text/css">{style}' \ - '</style></head><body>' - formatter, style = None, "" - if pygments is not None: - formatter = HtmlFormatter() - style = formatter.get_style_defs() - txt = html_orig.format(style=style) - if formatter is None: - txt += "<pre>%s</pre>" % obj.exc_info - else: - txt += highlight(obj.exc_info, PythonTracebackLexer(), - formatter) - txt += "</body></html>" - else: - txt = "{0} {1}".format(getElementTypeToolTip(obj.type), obj.name) - return txt - - def icon(self, index): - if index.column() > 0: - return None - return getElementTypeIcon(self.itemData().type) - - -class SardanaBaseElementModel(TaurusBaseModel): - - ColumnNames = ["Elements", "Controller/Module/Parent"] - ColumnRoles = ('Root', 'type', 'name', 'name'), "parent" - - def __init__(self, parent=None, data=None): - TaurusBaseModel.__init__(self, parent=parent, data=data) - self.setSelectables(self.ColumnRoles[0]) - - def setDataSource(self, data_source): - old_ds = self.dataSource() - if old_ds is not None: - Qt.QObject.disconnect(old_ds, Qt.SIGNAL('elementsChanged'), - self.on_elements_changed) - if data_source is not None: - Qt.QObject.connect(data_source, Qt.SIGNAL('elementsChanged'), - self.on_elements_changed) - TaurusBaseModel.setDataSource(self, data_source) - - def on_elements_changed(self): - self.refresh() - - def createNewRootItem(self): - return SardanaRootTreeItem(self, self.ColumnNames) - - def roleIcon(self, role): - return getElementTypeIcon(role) - - def columnIcon(self, column): - return self.roleIcon(self.role(column)) - - def roleToolTip(self, role): - return getElementTypeToolTip(role) - - def columnToolTip(self, column): - return self.roleToolTip(self.role(column)) - - def roleSize(self, role): - return getElementTypeSize(role) - - def columnSize(self, column): - role = self.role(column) - s = self.roleSize(role) - return s - - def mimeTypes(self): - return "text/plain", TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_MODEL_MIME_TYPE - - def mimeData(self, indexes): - ret = Qt.QMimeData() - data = [] - for index in indexes: - if not index.isValid(): continue - tree_item = index.internalPointer() - mime_data_item = tree_item.mimeData(index) - if mime_data_item is None: - continue - data.append(mime_data_item) - ret.setData(TAURUS_MODEL_LIST_MIME_TYPE, "\r\n".join(data)) - ret.setText(", ".join(data)) - if len(data) == 1: - ret.setData(TAURUS_MODEL_MIME_TYPE, str(data[0])) - return ret - - def accept(self, element): - return True - - def setupModelData(self, data): - dev = self.dataSource() - if dev is None: - return - self.ColumnNames[0] = dev.getSimpleName() - info = dev.getElementsInfo() - elements = info.getElements() - root = self._rootItem - type_nodes = {} - parent_elements = {} - child_elements = set() - parent_types = "ControllerLibrary", "MacroLibrary", "Controller" - child_types = "ControllerClass", "MacroClass", "MacroFunction", \ - "Motor", "CounterTimer", "PseudoMotor", "PseudoCounter", \ - "ZeroDExpChannel", "OneDExpChannel", "TwoDExpChannel" - - for element in elements: - if not self.accept(element): - continue - element_type = element.type - type_item = type_nodes.get(element_type) - if type_item is None: - type_item = SardanaTypeTreeItem(self, element_type, root) - type_nodes[element_type] = type_item - root.appendChild(type_item) - element_item = SardanaElementTreeItem(self, element, type_item) - type_item.appendChild(element_item) - if element_type in parent_types: - parent_elements[element.name] = element_item - elif element_type in child_types: - child_elements.add(element) - - for element in child_elements: - try: - parent_item = parent_elements[element.parent] - except KeyError: - self.warning("Error adding %s to parent %s (parent unknown)", - element.name, element.parent) - element_item = SardanaElementTreeItem(self, element, parent_item) - parent_item.appendChild(element_item) - - -class SardanaElementTypeModel(SardanaBaseElementModel): - pass - - -class SardanaElementPlainModel(SardanaBaseElementModel): - - ColumnNames = "Elements", - ColumnRoles = ('Root', 'name',), - - def setupModelData(self, data): - dev = self.dataSource() - if dev is None: - return - info = dev.getElementsInfo() - elements = info.getElements() - root = self._rootItem - skip_types = "ControllerLibrary", "MacroLibrary" - - for element in elements: - element_type = element.type - if element_type in skip_types: - continue - element_item = SardanaElementTreeItem(self, element, root) - root.appendChild(element_item) - - -class SardanaBaseProxyModel(TaurusBaseProxyModel): - - def filterAcceptsRow(self, sourceRow, sourceParent): - sourceModel = self.sourceModel() - idx = sourceModel.index(sourceRow, 0, sourceParent) - treeItem = idx.internalPointer() - - if isinstance(treeItem, SardanaElementTreeItem): - expr = self.filterRegExp() - element = treeItem.itemData() - return self.elementMatches(element, expr) - return True - - def elementMatches(self, element, expr): - name = element.name - if Qt.QString(name).contains(expr): - return True - name = element.full_name - if name is None: - return False - return Qt.QString(name).contains(expr) - - -class SardanaTypeProxyModel(TaurusBaseProxyModel): - """Sardana filter by element type""" - - def __init__(self, types=None, parent=None): - TaurusBaseProxyModel.__init__(self, parent=parent) - if types is None: - types = () - self._types = types - - def filterAcceptsRow(self, sourceRow, sourceParent): - sourceModel = self.sourceModel() - idx = sourceModel.index(sourceRow, 0, sourceParent) - treeItem = idx.internalPointer() - - if isinstance(treeItem, SardanaElementTreeItem): - return treeItem.itemData().type in self._types - return False - - -class EnvironmentTreeItem(TaurusBaseTreeItem): - """An environment node""" - - def role(self): - return self.itemData().type - - def data(self, index): - column, model = index.column(), index.model() - role = model.role(column, self.depth()) - obj = self.itemData() - if role == "key": - return obj[0] - elif role == "value": - return obj[1] - elif role == "datatype": - return type(obj[1]).__name__ - - def toolTip(self, index): - return "environment '%s'" % self.itemData()[0] - - def icon(self, index): - if index.column() > 0: - return None - return ":/class.png" - - -class SardanaEnvironmentModel(TaurusBaseModel): - - ColumnNames = ["Environment", "Value", "Data Type"] - ColumnRoles = ('Root', 'key'), 'value', 'datatype' - - def __init__(self, parent=None, data=None): - TaurusBaseModel.__init__(self, parent=parent, data=data) - self.setSelectables(self.ColumnRoles[0]) - - def setDataSource(self, data_source): - old_ds = self.dataSource() - if old_ds is not None: - Qt.QObject.disconnect(old_ds, Qt.SIGNAL('environmentChanged'), - self.on_environment_changed) - if data_source is not None: - Qt.QObject.connect(data_source, Qt.SIGNAL('environmentChanged'), - self.on_environment_changed) - TaurusBaseModel.setDataSource(self, data_source) - - def on_environment_changed(self): - self.refresh() - - def createNewRootItem(self): - return SardanaRootTreeItem(self, self.ColumnNames) - - def roleIcon(self, role): - return ":/tango.png" - # return getElementTypeIcon(role) - - #def columnIcon(self, column): - # return self.roleIcon(self.role(column)) - - def roleToolTip(self, role): - cr = self.ColumnRoles - if role == cr[0][1]: - return "Environment name" - elif role == cr[1]: - return "Environment value" - elif role == cr[2]: - return "Environment value data type" - - #def columnToolTip(self, column): - # return self.roleToolTip(self.role(column)) - - def roleSize(self, role): - return Qt.QSize(200, 24) - - def columnSize(self, column): - role = self.role(column) - s = self.roleSize(role) - return s - - def mimeTypes(self): - return "text/plain", TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_MODEL_MIME_TYPE - - def mimeData(self, indexes): - ret = Qt.QMimeData() - data = [] - for index in indexes: - if not index.isValid(): continue - tree_item = index.internalPointer() - mime_data_item = tree_item.mimeData(index) - if mime_data_item is None: - continue - data.append(mime_data_item) - ret.setData(TAURUS_MODEL_LIST_MIME_TYPE, "\r\n".join(data)) - ret.setText(", ".join(data)) - if len(data) == 1: - ret.setData(TAURUS_MODEL_MIME_TYPE, str(data[0])) - return ret - - def accept(self, environment): - return True - - def setupModelData(self, data): - dev = self.dataSource() - if dev is None: - return - - env = dev.getEnvironment() - root = self._rootItem - - for key, value in env.items(): - if not self.accept(key): - continue - env_item = EnvironmentTreeItem(self, (key, value), root) - root.appendChild(env_item) diff --git a/src/sardana/taurus/qt/qtcore/tango/sardana/pool.py b/src/sardana/taurus/qt/qtcore/tango/sardana/pool.py deleted file mode 100644 index f53bab1d..00000000 --- a/src/sardana/taurus/qt/qtcore/tango/sardana/pool.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python - -############################################################################## -## -## This file is part of Sardana -## -## http://www.sardana-controls.org/ -## -## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain -## -## Sardana 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. -## -## Sardana 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 Sardana. If not, see <http://www.gnu.org/licenses/>. -## -############################################################################## - -"""Device pool extension for taurus Qt""" - -__all__ = ["QPool", "QMeasurementGroup", - "registerExtensions"] - -import json - -from taurus.external.qt import Qt - -from taurus.core.taurusbasetypes import TaurusEventType -from taurus.core.tango import TangoDevice - -CHANGE_EVTS = TaurusEventType.Change, TaurusEventType.Periodic - - -class QPool(Qt.QObject, TangoDevice): - - def __init__(self, name, qt_parent=None, **kw): - self.call__init__wo_kw(Qt.QObject, qt_parent) - self.call__init__(TangoDevice, name, **kw) - - -class QMeasurementGroup(Qt.QObject, TangoDevice): - - def __init__(self, name, qt_parent=None, **kw): - self.call__init__wo_kw(Qt.QObject, qt_parent) - self.call__init__(TangoDevice, name, **kw) - - self._config = None - configuration = self.getAttribute("Configuration") - configuration.addListener(self._configurationChanged) - - def __getattr__(self, name): - try: - return Qt.QObject.__getattr__(self, name) - except AttributeError: - return TangoDevice.__getattr__(self, name) - - def _configurationChanged(self, s, t, v): - if t == TaurusEventType.Config: - return - if TaurusEventType.Error: - self._config = None - else: - self._config = json.loads(v.value) - self.emit(Qt.SIGNAL("configurationChanged")) - - def getConfiguration(self, cache=True): - if self._config is None or not cache: - try: - v = self.read_attribute("configuration") - self._config = json.loads(v.value) - except: - self._config = None - return self._config - - def setConfiguration(self, config): - self.write_attribute("configuration", json.dumps(config)) - - -def registerExtensions(): - """Registers the pool extensions in the :class:`taurus.core.tango.TangoFactory`""" - import taurus - #import sardana.taurus.core.tango.sardana.pool - #sardana.taurus.core.tango.sardana.pool.registerExtensions() - factory = taurus.Factory() - #factory.registerDeviceClass('Pool', QPool) - factory.registerDeviceClass('MeasurementGroup', QMeasurementGroup) |