def __init__(self, parent):
     super(listPluginsWidget, self).__init__(parent)
     self.ui = Ui_Plugins()
     self.ui.setupUi(self)
     
     self.p_info = self.get_plugin_info()
     
     self.create_plugin_view(False)
     self.ui.pluginView.setCurrentRow(0) 
     
     get_notification_center().connectPluginActivated(self.update_plugin_view)  
     get_notification_center().connectPluginDeactivated(self.update_plugin_view)  
class listPluginsWidget(QWidget):
    def __init__(self, parent):
        super(listPluginsWidget, self).__init__(parent)
        self.ui = Ui_Plugins()
        self.ui.setupUi(self)
        
        self.p_info = self.get_plugin_info()
        
        self.create_plugin_view(False)
        self.ui.pluginView.setCurrentRow(0) 
        
        get_notification_center().connectPluginActivated(self.update_plugin_view)  
        get_notification_center().connectPluginDeactivated(self.update_plugin_view)  
        
    def finish(self):
        get_notification_center().disconnectPluginActivated(self.update_plugin_view)  
        get_notification_center().disconnectPluginDeactivated(self.update_plugin_view) 
    
    def get_plugin_info(self):
        info = {}
        for pluginInfo in get_plugin_manager().getAllPlugins(): 
            short_name = pluginInfo.plugin_object.get_displayed_name()  
            p = {}
            p["name"] = pluginInfo.name if not short_name else short_name
            p["full_name"] = pluginInfo.name
            p["categories"] = pluginInfo.categories
            p["author"] = pluginInfo.author
#            txt+=pluginInfo.path +" "
#            txt+=pluginInfo.version +" "
#            txt+=pluginInfo.copyright +" "
#            txt+=pluginInfo.website +" "
            p["description"] = pluginInfo.description
            p["requirements"] = []
            if pluginInfo.details.has_option("Requirements", "pip"):
                p["requirements"] = [req.strip() for req in pluginInfo.details.get("Requirements", "pip").split(";;")]
            p["forced"] = pluginInfo.plugin_object.force_activation
            p["activated"] = pluginInfo.plugin_object.is_activated
            info[pluginInfo.name] = p
        return info
        
    def create_plugin_view(self, showAll = True):
        for p_name, p_info in self.p_info.iteritems():
            item = QListWidgetItem(p_info["name"], self.ui.pluginView)
            item.setToolTip(p_name)
            item.setCheckState(Qt.Checked if p_info["activated"] else Qt.Unchecked)
            if p_info["forced"]:
                item.setForeground(Qt.gray)
                flags = item.flags()
                flags &= ~Qt.ItemIsUserCheckable
                item.setFlags(flags)
            
            item.setHidden(not showAll and p_info["forced"])
            self.ui.pluginView.addItem(item)
            
    @loggingSlot(object, object)
    def update_plugin_view(self, _pn, _pc):
        self.p_info = self.get_plugin_info()
        r = self.ui.pluginView.currentRow()
        self.ui.pluginView.clear()
        self.create_plugin_view(self.ui.showAllCheckBox.checkState()==Qt.Checked)
        self.ui.pluginView.setCurrentRow(r)        
            
    @loggingSlot(QListWidgetItem, QListWidgetItem)
    def plugin_selected(self, current, _old):
        if current == None:
            return
        p = self.p_info[str(current.toolTip())]
        self.ui.authorLabel.setText("Author: "+p["author"])
        self.ui.descriptionlabel.setText(p["description"])
        self.ui.requirementsView.clear()
        if len(p["requirements"])==0:
            self.ui.requirementsView.addItem("None")
            self.ui.requirementsView.setDisabled(True)
            self.ui.installReqButton.setDisabled(True)
#             self.ui.requirementsView.setVisible(False)
        else:
#             self.ui.requirementsView.setVisible(True)
            for req in p["requirements"]:
                self.ui.requirementsView.addItem(req)
            self.ui.requirementsView.setDisabled(False)
            self.ui.installReqButton.setDisabled(False)
            
    @loggingSlot()
    def install_req_clicked(self):
        plug = self.ui.pluginView.currentItem()
        reqs = self.p_info[str(plug.toolTip())]["requirements"]
        from utilities import installDependencies
        installDependencies(reqs)
        
    @loggingSlot(bool)
    def show_all_toggled(self, value):
        r = self.ui.pluginView.currentRow()
        self.ui.pluginView.clear()
        self.create_plugin_view(value)
        self.ui.pluginView.setCurrentRow(r)
        
    @loggingSlot(QListWidgetItem)
    def activate_plugin_toggled(self, item):
        p_name = str(item.toolTip())
        if item.checkState()==Qt.Checked and not self.p_info[p_name]["activated"]:
            get_plugin_manager().activatePluginByName(\
                          self.p_info[p_name]["full_name"], self.p_info[p_name]["categories"][0])
            
            self.p_info[p_name]["activated"]=True
        elif item.checkState()==Qt.Unchecked and self.p_info[p_name]["activated"]:
            pluginInfo = get_plugin_manager().getPluginByName(self.p_info[p_name]["full_name"], self.p_info[p_name]["categories"][0])
            get_plugin_manager().deactivatePlugins([pluginInfo])
            
            self.p_info[p_name]["activated"]=False