src/eric7/MicroPython/ShowModulesDialog.py

Wed, 29 Mar 2023 19:10:30 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 29 Mar 2023 19:10:30 +0200
branch
eric7
changeset 9949
9e2fcf4efa37
parent 9768
e2b622afb5ff
child 10439
21c28b0f9e41
permissions
-rw-r--r--

Changed the modules install dialog for CircuitPython slightly to enable searching by pressing 'Return' in the filter edit.

9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to show the available modules of all bundles.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import Qt, pyqtSlot
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from eric7.EricGui import EricPixmapCache
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from .Ui_ShowModulesDialog import Ui_ShowModulesDialog
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 class ShowModulesDialog(QDialog, Ui_ShowModulesDialog):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 Class implementing a dialog to show the available modules of all bundles.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
9748
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
23 def __init__(self, modulesList, selectionMode=False, info="", parent=None):
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Constructor
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
9748
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
27 @param modulesList list of module names to be shown
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
28 @type list of str
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @param selectionMode flag indicating the activation of the selection mode
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 (defaults to False)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type bool (optional)
9748
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
32 @param info string containing some informational data (defaults to "")
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
33 @type str (optional)
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @param parent reference to the parent widget (defaults to None)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @type QWidget (optional)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 super().__init__(parent)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 self.setupUi(self)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 self.filterButton.setIcon(EricPixmapCache.getIcon("check"))
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.filterButton.clicked.connect(self.__applyFilter)
9949
9e2fcf4efa37 Changed the modules install dialog for CircuitPython slightly to enable searching by pressing 'Return' in the filter edit.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9768
diff changeset
42 self.filterEdit.returnPressed.connect(self.__applyFilter)
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.__checkCount = 0
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.__selectionMode = selectionMode
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 if self.__selectionMode:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.buttonBox.setStandardButtons(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 QDialogButtonBox.StandardButton.Ok
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 | QDialogButtonBox.StandardButton.Cancel
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 else:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Close)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 if self.__selectionMode:
9748
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
55 for moduleName in modulesList:
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 itm = QListWidgetItem(moduleName)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsUserCheckable)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 itm.setCheckState(Qt.CheckState.Unchecked)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.modulesList.addItem(itm)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 else:
9748
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
61 self.modulesList.addItems(modulesList)
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.modulesList.sortItems(Qt.SortOrder.AscendingOrder)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
9748
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
64 if info:
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
65 self.infoLabel.setText(info)
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
66 else:
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
67 self.infoLabel.hide()
df9520c864f2 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
68
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__applyFilter()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.__checkCountUpdated()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 def __applyFilter(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 Private slot to apply the filter to the list of available modules.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 filterStr = self.filterEdit.text()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 counter = 0
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 for row in range(self.modulesList.count()):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 itm = self.modulesList.item(row)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 visible = filterStr in itm.text() if filterStr else True
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 itm.setHidden(not visible)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 if visible:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 counter += 1
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.statusLabel.setText(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.tr("Showing {0} of {1} modules/packages").format(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 counter, self.modulesList.count()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 self.filterEdit.selectAll()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.filterEdit.setFocus(Qt.FocusReason.OtherFocusReason)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 @pyqtSlot(QListWidgetItem)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 def on_modulesList_itemChanged(self, item):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 Private slot to handle a change of the check state of an item.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @param item reference to the changed item
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @type QTreeWidgetItem
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 if self.__selectionMode:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 if item.checkState() == Qt.CheckState.Checked:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 self.__checkCount += 1
9768
e2b622afb5ff Fixed an issue causing the selection count of checkable selection lists going negative.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9748
diff changeset
106 elif self.__checkCount > 0:
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 self.__checkCount -= 1
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.__checkCountUpdated()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 def __checkCountUpdated(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 Private method to handle an update of the check count.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 if self.__selectionMode:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.__checkCount > 0
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 def getSelection(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 Public method to get the list of selected modules.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 @return list of selected modules
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @rtype circup.Module
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 results = []
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 if self.__selectionMode:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 for row in range(self.modulesList.count()):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 itm = self.modulesList.item(row)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 if itm.checkState() == Qt.CheckState.Checked:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 results.append(itm.text())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 return results

eric ide

mercurial