class TaurusPlugin1D(Plugin1DBase.Plugin1DBase, QObjectTaurusListener): def __init__(self, plotWindow, **kw): Plugin1DBase.Plugin1DBase.__init__(self, plotWindow, **kw) QObjectTaurusListener.__init__(self) # "standard" way to handle multiple calls self.methodDict = {} text = "Show the device selector.\n" text += "Make sure your TANGO_HOST\n" text += "environment variable is set" function = self._showTaurusTree info = text icon = None self.methodDict["Show"] =[function, info, icon] self._oldModels = [] self._newModels = [] self._widget = None def handleEvent(self, evt_src, evt_type, evt_value): if evt_type not in (TaurusEventType.Change, TaurusEventType.Periodic): return y = evt_value.value x = numpy.arange(y.shape[0]) self.addCurve(x, y, legend=evt_src.getNormalName()) def onSelectionChanged(self, models): if self._oldModels in [None, []]: self._attrDict = {} for model in models: try: attr = Attribute(model) except: # old PyTango versions do not handle unicode attr = Attribute(str(model)) #force a read -> attr.read() attr.addListener(self) legend = qt.safe_str(attr.getNormalName()) self._attrDict[legend] = attr self._oldModels = models else: keptModels = [] newModels = [] for model in models: if model in self._oldModels: keptModels.append(model) else: newModels.append(model) for model in self._oldModels: if model not in keptModels: attr = Attribute(model) attr.removeListener(self) legend = qt.safe_str(attr.getNormalName()) if legend in self._attrDict: del self._attrDict[legend] print("Trying to remove ", legend) self.removeCurve(legend, replot=False) for model in newModels: attr = Attribute(model) # attr.read() attr.addListener(self) legend = qt.safe_str(attr.getNormalName()) self._attrDict[legend] = attr self._oldModels = keptModels + newModels #Methods to be implemented by the plugin # I should put this mechanism in the base class ... def getMethods(self, plottype=None): """ A list with the NAMES associated to the callable methods that are applicable to the specified plot. Plot type can be "SCAN", "MCA", None, ... """ # visualize everywhere, therefore ignore MCA or SCAN # if plottype in ["MCA"]: # return [] names = list(self.methodDict.keys()) names.sort() return names def getMethodToolTip(self, name): """ Returns the help associated to the particular method name or None. """ return self.methodDict[name][1] def getMethodPixmap(self, name): """ Returns the pixmap associated to the particular method name or None. """ return self.methodDict[name][2] def applyMethod(self, name): """ The plugin is asked to apply the method associated to name. """ self.methodDict[name][0]() return def _showTaurusTree(self): if self._widget is None: self._widget = TaurusModelChooser() #self._adapter = TaurusPyMcaAdapter() if Release.version_info >= (4,): self._widget.updateModels.connect(self.onSelectionChanged) else: Qt.QObject.connect(self._widget, Qt.SIGNAL("updateModels"), self.onSelectionChanged) self._widget.show()