src/eric7/PluginManager/PluginInfoDialog.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 8881
54e42bc2437a
child 9221
bf71ee032bb4
equal deleted inserted replaced
9208:3fc8dfeb6ebe 9209:b99e7fd55fd3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2007 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Plugin Info Dialog.
8 """
9
10 from PyQt6.QtCore import pyqtSlot, Qt
11 from PyQt6.QtGui import QBrush
12 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem, QHeaderView, QMenu
13
14 from .Ui_PluginInfoDialog import Ui_PluginInfoDialog
15
16
17 class PluginInfoDialog(QDialog, Ui_PluginInfoDialog):
18 """
19 Class implementing the Plugin Info Dialog.
20 """
21 def __init__(self, pluginManager, parent=None):
22 """
23 Constructor
24
25 @param pluginManager reference to the plugin manager object
26 @param parent parent of this dialog (QWidget)
27 """
28 super().__init__(parent)
29 self.setupUi(self)
30 self.setWindowFlags(Qt.WindowType.Window)
31
32 self.pm = pluginManager
33
34 self.__autoActivateColumn = 3
35 self.__activeColumn = 4
36
37 self.pluginList.headerItem().setText(self.pluginList.columnCount(), "")
38
39 # populate the list
40 self.__populateList()
41 self.pluginList.sortByColumn(0, Qt.SortOrder.AscendingOrder)
42
43 self.__menu = QMenu(self)
44 self.__menu.addAction(self.tr('Show details'), self.__showDetails)
45 self.__activateAct = self.__menu.addAction(
46 self.tr('Activate'), self.__activatePlugin)
47 self.__deactivateAct = self.__menu.addAction(
48 self.tr('Deactivate'), self.__deactivatePlugin)
49 self.pluginList.setContextMenuPolicy(
50 Qt.ContextMenuPolicy.CustomContextMenu)
51 self.pluginList.customContextMenuRequested.connect(
52 self.__showContextMenu)
53
54 def __populateList(self):
55 """
56 Private method to (re)populate the list of plugins.
57 """
58 self.pluginList.clear()
59 for info in self.pm.getPluginInfos():
60 self.__createEntry(info)
61 self.pluginList.sortItems(
62 self.pluginList.sortColumn(),
63 self.pluginList.header().sortIndicatorOrder())
64
65 def __createEntry(self, info):
66 """
67 Private method to create a list entry based on the provided info.
68
69 @param info dictionary giving the info for the entry (as returned by
70 PluginManager.getPluginInfos())
71 @type dict
72 """
73 infoList = [
74 info["module_name"],
75 info["plugin_name"],
76 info["version"],
77 (info["auto_activate"] and self.tr("Yes") or self.tr("On-Demand")),
78 (info["active"] and self.tr("Yes") or self.tr("No")),
79 info["short_desc"]
80 ]
81 itm = QTreeWidgetItem(self.pluginList, infoList)
82 if info["error"]:
83 # plugin error
84 for col in range(self.pluginList.columnCount()):
85 itm.setForeground(col, QBrush(Qt.GlobalColor.red))
86 itm.setTextAlignment(self.__autoActivateColumn,
87 Qt.AlignmentFlag.AlignHCenter)
88 itm.setTextAlignment(self.__activeColumn,
89 Qt.AlignmentFlag.AlignHCenter)
90
91 self.pluginList.header().resizeSections(
92 QHeaderView.ResizeMode.ResizeToContents)
93 self.pluginList.header().setStretchLastSection(True)
94
95 def __showContextMenu(self, coord):
96 """
97 Private slot to show the context menu of the listview.
98
99 @param coord the position of the mouse pointer (QPoint)
100 """
101 itm = self.pluginList.itemAt(coord)
102 if itm is not None:
103 autoactivate = (itm.text(self.__autoActivateColumn) ==
104 self.tr("Yes"))
105 if itm.text(self.__activeColumn) == self.tr("Yes"):
106 self.__activateAct.setEnabled(False)
107 self.__deactivateAct.setEnabled(autoactivate)
108 else:
109 self.__activateAct.setEnabled(autoactivate)
110 self.__deactivateAct.setEnabled(False)
111 self.__menu.popup(self.mapToGlobal(coord))
112
113 @pyqtSlot(QTreeWidgetItem, int)
114 def on_pluginList_itemActivated(self, item, column):
115 """
116 Private slot to show details about a plugin.
117
118 @param item reference to the selected item (QTreeWidgetItem)
119 @param column column number (integer)
120 """
121 moduleName = item.text(0)
122 details = self.pm.getPluginDetails(moduleName)
123 if details is None:
124 pass
125 else:
126 from .PluginDetailsDialog import PluginDetailsDialog
127 dlg = PluginDetailsDialog(details, self)
128 dlg.show()
129
130 def __showDetails(self):
131 """
132 Private slot to handle the "Show details" context menu action.
133 """
134 itm = self.pluginList.currentItem()
135 self.on_pluginList_itemActivated(itm, 0)
136
137 def __activatePlugin(self):
138 """
139 Private slot to handle the "Deactivate" context menu action.
140 """
141 itm = self.pluginList.currentItem()
142 moduleName = itm.text(0)
143 self.pm.activatePlugin(moduleName)
144 # repopulate the list
145 self.__populateList()
146
147 def __deactivatePlugin(self):
148 """
149 Private slot to handle the "Activate" context menu action.
150 """
151 itm = self.pluginList.currentItem()
152 moduleName = itm.text(0)
153 self.pm.deactivatePlugin(moduleName)
154 # repopulate the list
155 self.__populateList()

eric ide

mercurial