Ejemplo n.º 1
0
 def updateTree(self):
     """Updates the elements shown in the tree."""
     self.clearCacheTree()
     filterStr = self.valueFilter.text() or ''
     for key in self.client.keys():
         if filterStr not in key:
             continue
         # split the key into parts
         parts = key.split('/')
         # keys without category need a node too
         if len(parts) == 1:
             parts = ['<no category>'] + parts
         # add a node to the tree for each part of the key except the last
         prefix = ''
         parent = None
         for part in parts[:-1]:
             prefix = part if not prefix else prefix + '/' + part
             node = self._treeitems.get(prefix)
             if not node:
                 node = QTreeWidgetItem()
                 node.setText(0, part)
                 node.setData(0, 32, prefix)
                 if parent:
                     parent.addChild(node)
                 else:
                     self.treeCache.addTopLevelItem(node)
                     node.setExpanded(True)
                 self._treeitems[prefix] = node
             parent = node
Ejemplo n.º 2
0
    def _create_device_item(self, devname, add_cat=False, failure=None):
        ldevname = devname.lower()
        # get all cache keys pertaining to the device
        params = self.client.getDeviceParams(devname)
        if not params and not failure:
            return
        lowlevel_device = params.get('lowlevel') or False
        if lowlevel_device and not self._show_lowlevel:
            return
        if 'nicos.core.data.sink.DataSink' in params.get('classes', []) and \
           not self._show_lowlevel:
            return

        # remove still-existing previous item for the same device name
        if ldevname in self._devitems:
            self.on_client_device(('destroy', [devname]))

        cat = self._dev2setup.get(devname)
        if cat is None:  # device is not in any setup? reread setup info
            self._read_setup_info()
            cat = self._dev2setup.get(devname)
            if cat is None:  # still not there -> give up
                return

        if cat not in self._catitems:
            display_order = self._setupinfo[cat].get('display_order', 50)
            representative = self._setupinfo[cat].get('extended', {}).get(
                'representative', '').lower()
            catitem = SetupTreeWidgetItem(cat, display_order, representative)
            catitem.setToolTip(0, self._setupinfo[cat].get('description', ''))
            f = catitem.font(0)
            f.setBold(True)
            catitem.setFont(0, f)
            catitem.setIcon(0, self.groupIcon)
            self._catitems[cat] = catitem
            if add_cat:
                self.tree.addTopLevelItem(catitem)
                catitem.setExpanded(True)
        else:
            catitem = self._catitems[cat]

        # create a tree node for the device
        devitem = QTreeWidgetItem(catitem, [devname, '', ''], DEVICE_TYPE)

        devitem.setForeground(0, lowlevelBrush[lowlevel_device])
        devitem.setFont(0, lowlevelFont[lowlevel_device])

        if failure:
            short_failure = failure.split('\n')[0]
            devitem.setText(2, 'creating device failed: %s' % short_failure)
            if self.useicons:
                devitem.setIcon(0, self.statusIcon[ERROR])
        else:
            if self.useicons:
                devitem.setIcon(0, self.statusIcon[OK])

        devitem.setToolTip(0, params.get('description', ''))
        self._devitems[ldevname] = devitem
        # fill the device info with dummy values, will be populated below
        self._devinfo[ldevname] = DevInfo(devname, failure=failure)

        # let the cache handler process all properties
        for key, value in params.items():
            self.on_client_cache(
                (0, ldevname + '/' + key, OP_TELL, cache_dump(value)))