Example #1
0
    def updateList(self):
        self.ui.categoryWidget.itemChanged.connect(self.updatePluginSettings)
        defaultCollection = None
        for pluginCollection in self.private.manager.pluginCollections().values():
            if not pluginCollection.name:
                defaultCollection = pluginCollection
                continue
            collectionItem = QTreeWidgetItem([pluginCollection.name(), "", "", "", ""])
            self.items.append(collectionItem)

            state, groupState = self.parsePluginSpecs(collectionItem, pluginCollection.plugins())

            collectionItem.setIcon(0, self.iconForState(state))
            collectionItem.setData(C_LOAD, Qt.CheckStateRole, groupState)
            collectionItem.setToolTip(C_LOAD, "Load on Startup")
            collectionItem.setData(0, Qt.UserRole, pluginCollection)
        # add all non-categorized plugins into utilities. could also be added as root items
        # but that makes the tree ugly
        defaultCollectionItem = QTreeWidgetItem(["Utilities", "", "", "", ""])
        self.items.append(defaultCollectionItem)
        state, groupState = self.parsePluginSpecs(defaultCollectionItem, defaultCollection.plugins)
        defaultCollectionItem.setIcon(0, self.iconForState(state))
        defaultCollectionItem.setData(C_LOAD, Qt.CheckStateRole, groupState)
        defaultCollectionItem.setToolTip(C_LOAD, "Load on Startup")
        defaultCollectionItem.setData(0, Qt.UserRole, defaultCollection)

        self.updatePluginDependencies()
        self.ui.categoryWidget.clear()
        if self.items:
            self.ui.categoryWidget.addTopLevelItems(self.items)
            self.ui.categoryWidget.expandAll()
        self.ui.categoryWidget.sortItems(0, Qt.AscendingOrder)
        if self.ui.categoryWidget.topLevelItemCount():
            self.ui.categoryWidget.setCurrentItem(self.ui.categoryWidget.topLevelItem(0))
Example #2
0
    def parsePluginSpecs(self, parentItem, plugins):
        ret = 0
        loadCount = 0

        for i in range(len(plugins)):
            spec = plugins[i]
            if spec.hasError():
                ret |= ParsedState.ParsedWithErrors
            pluginItem = QTreeWidgetItem([spec.name(), "",
                                         "{0} ({1})".format(spec.version(), spec.compatVersion()),
                                         spec.vendor()])
            pluginItem.setToolTip(0, QDir.toNativeSeparators(spec.filePath()))
            ok = not spec.hasError()
            icon = self.okIcon if ok else self.errorIcon
            if ok and spec.state() is not PluginState.Running:
                icon = self.notLoadedIcon
            pluginItem.setIcon(0, icon)
            pluginItem.setData(0, Qt.UserRole, spec)

            state = Qt.Unchecked
            if spec.isEnabled():
                state = Qt.Checked
                loadCount += 1

            if spec.name() not in self.whitelist:
                pluginItem.setData(C_LOAD, Qt.CheckStateRole, state)
            else:
                pluginItem.setData(C_LOAD, Qt.CheckStateRole, Qt.Checked)
                pluginItem.setFlags(Qt.ItemIsSelectable)
            pluginItem.setToolTip(C_LOAD, "Load on Startup")

            self.specToItem[spec] = pluginItem

            if parentItem:
                parentItem.addChild(pluginItem)
            else:
                self.items.append(pluginItem)

        if loadCount == len(plugins):
            groupState = Qt.Checked
            ret |= ParsedState.ParsedAll
        elif loadCount == 0:
            groupState = Qt.Unchecked
            ret |= ParsedState.ParsedNone
        else:
            groupState = Qt.PartiallyChecked
            ret |= ParsedState.ParsedPartial

        return ret, groupState