示例#1
0
    def modelChooserDlg(parent=None, selectables=None, host=None, asMimeData=False, singleModel=False, windowTitle='Model Chooser'):
        '''Static method that launches a modal dialog containing a TaurusModelChooser

        :param parent: (QObject) parent for the dialog
        :param selectables: (list<TaurusElementType>) if passed, only elements of the tree whose
                            type is in the list will be selectable.
        :param host: (QObject) Tango host to be explored by the chooser
        :param asMimeData: (bool) If False (default),  a list of models will be.
                           returned. If True, a `QMimeData` object will be
                           returned instead. See :meth:`getListedModels` for a
                           detailed description of this QMimeData object.
        :param singleModel: (bool) If True, the selection will be of just one
                            model. Otherwise (default) a list of models can be selected
        :param windowTitle: (str) Title of the dialog (default="Model Chooser")

        :return: (list,bool or QMimeData,bool) Returns a models,ok tuple. models can be
                 either a list of models or a QMimeData object, depending on
                 `asMimeData`. ok is True if the dialog was accepted (by
                 clicking on the "update" button) and False otherwise
        '''
        dlg = Qt.QDialog(parent)
        dlg.setWindowTitle(windowTitle)
        dlg.setWindowIcon(Qt.QIcon("logos:taurus.png"))
        layout = Qt.QVBoxLayout()
        w = TaurusModelChooser(
            parent=parent, selectables=selectables, host=host, singleModel=singleModel)
        layout.addWidget(w)
        dlg.setLayout(layout)
        w.updateModels.connect(dlg.accept)
        dlg.exec_()
        return w.getListedModels(asMimeData=asMimeData), (dlg.result() == dlg.Accepted)
示例#2
0
 def _showTaurusTree(self):
     if self._widget is None:
         self._widget = TaurusModelChooser()
         #self._adapter = TaurusPyMcaAdapter()
         Qt.QObject.connect(self._widget, 
                 Qt.SIGNAL("updateModels"),
                 self.onSelectionChanged)
     self._widget.show()
示例#3
0
 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()
示例#4
0
def main3():
    asMimeData = True
    app = Qt.QApplication([])
    dlg = Qt.QDialog()
    dlg.setWindowTitle('Archiving Tree')
    dlg.setWindowIcon(Qt.QIcon("logos:taurus.png"))
    layout = Qt.QVBoxLayout()
    w = TaurusModelChooser(
        parent=dlg) #, selectables=selectables, host=host, singleModel=singleModel)
    layout.addWidget(w)
    dlg.setLayout(layout)
    w.updateModels.connect(dlg.accept)
    dlg.exec_()
    return w.getListedModels(asMimeData=asMimeData), (dlg.result() == dlg.Accepted)    
    def _onTriggered(self):

        imageItem = None

        for item in self._plot_item.items:
            if isinstance(item, TaurusImageItem):
                imageItem = item
                break

        if imageItem is None:
            imageItem = TaurusImageItem()
        modelName = imageItem.getFullModelName()
        if modelName is None:
            listedModels = []
        else:
            listedModels = [modelName]

        res, ok = TaurusModelChooser.modelChooserDlg(
            selectables=[TaurusElementType.Attribute],
            singleModel=True,
            listedModels=listedModels,
        )
        if ok:
            if res:
                model = res[0]
            else:
                model = None
            imageItem.setModel(model)
示例#6
0
 def showModelChooser(self):
     models, ok = TaurusModelChooser.modelChooserDlg(parent=self,
                                                     asMimeData=True)
     if not ok:
         return
     self.models = str(models.data(TAURUS_MODEL_LIST_MIME_TYPE))
     self.modelLE.setText(models.text())
def showDataImportDlg(self, trend):
    '''Launches the data import dialog. This dialog lets the user manage
    which attributes are attached to the plot (using
    :class:`TaurusModelChooser`) and also to generate raw data or import it
    from files
    '''
    if self.DataImportDlg is None:
        from taurus.qt.qtgui.panel import TaurusModelChooser
        self.DataImportDlg = Qt.QDialog(self)
        self.DataImportDlg.setWindowTitle("%s - Import Data" %
                                          (str(trend.windowTitle())))
        self.DataImportDlg.modelChooser = TaurusModelChooser(selectables=[
            taurus.core.taurusbasetypes.TaurusElementType.Attribute
        ])
        from taurus.qt.qtgui.panel import QRawDataWidget
        self.DataImportDlg.rawDataChooser = QRawDataWidget()

        tabs = Qt.QTabWidget()
        tabs.addTab(self.DataImportDlg.modelChooser, "&Attributes")
        tabs.addTab(self.DataImportDlg.rawDataChooser, "&Raw Data")
        mainlayout = Qt.QVBoxLayout(self.DataImportDlg)
        mainlayout.addWidget(tabs)

        self.DataImportDlg.modelChooser.updateModels.connect(trend.setModel)
        self.DataImportDlg.rawDataChooser.ReadFromFiles.connect(
            trend.readFromFiles)
        self.DataImportDlg.rawDataChooser.AddCurve.connect(trend.attachRawData)

    models_and_display = [(m, trend.getCurveTitle(m.split('|')[-1]))
                          for m in trend._modelNames]

    self.DataImportDlg.modelChooser.setListedModels(models_and_display)
    self.DataImportDlg.show()
def main3():
    asMimeData = True
    app = Qt.QApplication([])
    dlg = Qt.QDialog()
    dlg.setWindowTitle('Archiving Tree')
    dlg.setWindowIcon(Qt.QIcon("logos:taurus.png"))
    layout = Qt.QVBoxLayout()
    w = TaurusModelChooser(
        parent=dlg
    )  #, selectables=selectables, host=host, singleModel=singleModel)
    layout.addWidget(w)
    dlg.setLayout(layout)
    w.updateModels.connect(dlg.accept)
    dlg.exec_()
    return w.getListedModels(
        asMimeData=asMimeData), (dlg.result() == dlg.Accepted)
示例#9
0
 def addChannel(self, channel=None):
     qmodel = self.getQModel()
     dataSource = qmodel.dataSource()
     if channel is None:
         shown = [n for n, d in getChannelConfigs(dataSource)]
         avail_channels = qmodel.getAvailableChannels()
         clist = [ch_info['name'] for ch_name, ch_info in avail_channels.items()
                  if ch_name not in shown]
         clist = sorted(clist) + ['(Other...)']
         chname, ok = Qt.QInputDialog.getItem(
             self, "New Channel", "Choose channel:", clist, 0, False)
         if not ok:
             return
     chname = str(chname)
     if chname == '(Other...)':
         models, ok = TaurusModelChooser.modelChooserDlg(parent=self, singleModel=False, windowTitle='Choose source of data',
                                                         selectables=[TaurusElementType.Attribute])
         if not ok:
             return
         for m in models:
             qmodel.addChannel(
                 chname=m, ctrlname='__tango__', external=True)
     else:
         for ch_info in avail_channels.values():
             if ch_info['name'] == chname:
                 qmodel.addChannel(chinfo=ch_info)
示例#10
0
 def addChannel(self, channel=None):
     qmodel = self.getQModel()
     dataSource = qmodel.dataSource()
     if channel is None:
         shown = [n for n, d in getChannelConfigs(dataSource)]
         avail_channels = qmodel.getAvailableChannels()
         clist = [
             ch_info['name'] for ch_name, ch_info in avail_channels.items()
             if ch_name not in shown
         ]
         clist = sorted(clist) + ['(Other...)']
         chname, ok = Qt.QInputDialog.getItem(self, "New Channel",
                                              "Choose channel:", clist, 0,
                                              False)
         if not ok:
             return
     chname = str(chname)
     if chname == '(Other...)':
         models, ok = TaurusModelChooser.modelChooserDlg(
             parent=self,
             singleModel=False,
             windowTitle='Choose source of data',
             selectables=[TaurusElementType.Attribute])
         if not ok:
             return
         for m in models:
             qmodel.addChannel(chname=m,
                               ctrlname='__tango__',
                               external=True)
     else:
         for ch_info in avail_channels.values():
             if ch_info['name'] == chname:
                 qmodel.addChannel(chinfo=ch_info)
示例#11
0
 def chooseModel(self):
     '''shows a model chooser'''
     from taurus.qt.qtgui.panel import TaurusModelChooser
     selectables = [TaurusElementType.Attribute]
     models, ok = TaurusModelChooser.modelChooserDlg(
         selectables=selectables, singleModel=True)
     if ok and len(models) == 1:
         self.setModel(models[0])
示例#12
0
 def chooseModel(self):
     '''shows a model chooser'''
     from taurus.qt.qtgui.panel import TaurusModelChooser
     selectables = [TaurusElementType.Attribute]
     models, ok = TaurusModelChooser.modelChooserDlg(
         selectables=selectables, singleModel=True)
     if ok and len(models) == 1:
         self.setModel(models[0])
示例#13
0
文件: tools.py 项目: cmft/taurus
 def activate_command(self, plot, checked):
     """Activate tool"""
     # show a dialog
     models, ok = TaurusModelChooser.modelChooserDlg(
         parent=plot, selectables=[TaurusElementType.Attribute])
     if ok:
         # create image items and add them to the plot
         for m in models:
             item = make.image(taurusmodel=m)
             plot.add_item(item)
示例#14
0
 def activate_command(self, plot, checked):
     """Activate tool"""
     # show a dialog
     models, ok = TaurusModelChooser.modelChooserDlg(
         parent=plot, selectables=[TaurusElementType.Attribute])
     if ok:
         # create image items and add them to the plot
         for m in models:
             item = make.image(taurusmodel=m)
             plot.add_item(item)
 def _onTriggered(self):
     currentModelNames = []
     for item in self.plot_item.items:
         if isinstance(item, self.itemClass):
             currentModelNames.append(item.getFullModelName())
     names, ok = TaurusModelChooser.modelChooserDlg(
                 selectables=[TaurusElementType.Attribute],
                 listedModels=currentModelNames)
     if ok:
         self.updateModels(names)
示例#16
0
 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()
    def modelChooserDlg(parent=None,
                        selectables=None,
                        host=None,
                        asMimeData=False,
                        singleModel=False,
                        windowTitle='Model Chooser'):
        '''Static method that launches a modal dialog containing a TaurusModelChooser

        :param parent: (QObject) parent for the dialog
        :param selectables: (list<TaurusElementType>) if passed, only elements of the tree whose
                            type is in the list will be selectable.
        :param host: (QObject) Tango host to be explored by the chooser
        :param asMimeData: (bool) If False (default),  a list of models will be.
                           returned. If True, a `QMimeData` object will be
                           returned instead. See :meth:`getListedModels` for a
                           detailed description of this QMimeData object.
        :param singleModel: (bool) If True, the selection will be of just one
                            model. Otherwise (default) a list of models can be selected
        :param windowTitle: (str) Title of the dialog (default="Model Chooser")

        :return: (list,bool or QMimeData,bool) Returns a models,ok tuple. models can be
                 either a list of models or a QMimeData object, depending on
                 `asMimeData`. ok is True if the dialog was accepted (by
                 clicking on the "update" button) and False otherwise
        '''
        dlg = Qt.QDialog(parent)
        dlg.setWindowTitle(windowTitle)
        dlg.setWindowIcon(Qt.QIcon("logos:taurus.png"))
        layout = Qt.QVBoxLayout()
        w = TaurusModelChooser(parent=parent,
                               selectables=selectables,
                               host=host,
                               singleModel=singleModel)
        layout.addWidget(w)
        dlg.setLayout(layout)
        w.updateModels.connect(dlg.accept)
        dlg.exec_()
        return w.getListedModels(
            asMimeData=asMimeData), (dlg.result() == dlg.Accepted)
示例#18
0
 def activate_command(self, plot, checked):
     """Activate tool"""
     # show a dialog
     models, ok = TaurusModelChooser.modelChooserDlg(
         parent=plot,
         selectables=[TaurusElementType.Attribute],
         singleModel=self.singleModel)
     if ok:
         if self.singleModel:
             if models:
                 self.manager.setModel(models[0])
             else:
                 self.manager.setModel('')
         else:
             self.manager.setModel(models)
示例#19
0
文件: tools.py 项目: cmft/taurus
 def activate_command(self, plot, checked):
     """Activate tool"""
     # show a dialog
     models, ok = TaurusModelChooser.modelChooserDlg(
             parent=plot,
             selectables=[TaurusElementType.Attribute],
             singleModel=self.singleModel
     )
     if ok:
         if self.singleModel:
             if models:
                 self.manager.setModel(models[0])
             else:
                 self.manager.setModel('')
         else:
             self.manager.setModel(models)
示例#20
0
def TaurusDevicePanelMain():
    '''A launcher for TaurusDevicePanel.'''
    import sys
    from taurus.qt.qtgui.application import TaurusApplication
    from taurus.core.util import argparse

    parser = argparse.get_taurus_parser()
    parser.set_usage("%prog [options] [devname [attrs]]")
    parser.set_description("Taurus Application inspired in Jive and Atk Panel")
    parser.add_option("",
                      "--config-file",
                      dest="config_file",
                      default=None,
                      help="load a config file (TODO: document this option)")

    app = TaurusApplication(cmd_line_parser=parser,
                            app_name="TaurusDevicePanel",
                            app_version=taurus.Release.version)
    args = app.get_command_line_args()
    options = app.get_command_line_options()

    w = TaurusDevicePanel()
    w.show()

    if len(args) == 0:
        from taurus.qt.qtgui.panel import TaurusModelChooser
        models, ok = TaurusModelChooser.modelChooserDlg(
            w, selectables=[TaurusElementType.Member], singleModel=True)
        model = models[0] if ok and models else None
        filters = ''
    else:
        model = args[0]
        filters = args[1:]

    if options.config_file is not None:
        w.loadConfigFile(options.config_file)
    elif model and filters:
        w.setAttributeFilters({model: filters})

    w.setModel(model)

    sys.exit(app.exec_())
示例#21
0
def TaurusDevicePanelMain():
    '''A launcher for TaurusDevicePanel.'''
    import sys
    from taurus.qt.qtgui.application import TaurusApplication
    from taurus.core.util import argparse

    parser = argparse.get_taurus_parser()
    parser.set_usage("%prog [options] [devname [attrs]]")
    parser.set_description("Taurus Application inspired in Jive and Atk Panel")
    parser.add_option("", "--config-file", dest="config_file", default=None,
                      help="load a config file (TODO: document this option)")

    app = TaurusApplication(cmd_line_parser=parser, app_name="TaurusDevicePanel",
                            app_version=taurus.Release.version)
    args = app.get_command_line_args()
    options = app.get_command_line_options()

    w = TaurusDevicePanel()
    w.show()

    if len(args) == 0:
        from taurus.qt.qtgui.panel import TaurusModelChooser
        models, ok = TaurusModelChooser.modelChooserDlg(w,
                                                        selectables=[
                                                            TaurusElementType.Member],
                                                        singleModel=True)
        model = models[0] if ok and models else None
        filters = ''
    else:
        model = args[0]
        filters = args[1:]

    if options.config_file is not None:
        w.loadConfigFile(options.config_file)
    elif model and filters:
        w.setAttributeFilters({model: filters})

    w.setModel(model)

    sys.exit(app.exec_())
示例#22
0
def main():
    import sys
    import taurus.core.tango.img
    taurus.core.tango.img.registerExtensions()

    app = Qt.QApplication(sys.argv)
    models = sys.argv[1:]
    panel = Qt.QWidget()
    l = Qt.QHBoxLayout()
    panel.setLayout(l)
    if not models:
        from taurus.qt.qtgui.panel import TaurusModelChooser
        models, ok = TaurusModelChooser.modelChooserDlg(
            panel, [taurus.core.taurusbasetypes.TaurusElementType.Attribute])
        if not ok:
            models = []
    for model in models:
        w = TaurusQubDataImageDisplay()
        w.setModel(model)
        l.addWidget(w)

    panel.setVisible(True)
    sys.exit(app.exec_())
示例#23
0
def device_cmd(dev, filter, config_file):
    """Show a Device Panel"""
    import sys
    from taurus.qt.qtgui.application import TaurusApplication

    app = TaurusApplication(cmd_line_parser=None, app_name="TaurusDevicePanel")

    w = TaurusDevicePanel()
    w.show()

    if dev is None:
        from taurus.qt.qtgui.panel import TaurusModelChooser
        models, ok = TaurusModelChooser.modelChooserDlg(
            w, selectables=[TaurusElementType.Member], singleModel=True)
        dev = models[0] if ok and models else None

    if config_file is not None:
        w.loadConfigFile(config_file)
    elif dev and filter:
        w.setAttributeFilters({dev: list(filter)})

    w.setModel(dev)

    sys.exit(app.exec_())
示例#24
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()
示例#25
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()