Example #1
0
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()
Example #2
0
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()