11 import enum |
11 import enum |
12 import os |
12 import os |
13 |
13 |
14 from packaging.specifiers import InvalidSpecifier, SpecifierSet |
14 from packaging.specifiers import InvalidSpecifier, SpecifierSet |
15 from PyQt6.QtCore import Qt, QUrl, QUrlQuery, pyqtSlot |
15 from PyQt6.QtCore import Qt, QUrl, QUrlQuery, pyqtSlot |
16 from PyQt6.QtGui import QDesktopServices, QIcon |
16 from PyQt6.QtGui import QBrush, QDesktopServices, QIcon |
17 from PyQt6.QtWidgets import ( |
17 from PyQt6.QtWidgets import ( |
18 QDialog, |
18 QDialog, |
19 QHeaderView, |
19 QHeaderView, |
20 QMenu, |
20 QMenu, |
21 QToolButton, |
21 QToolButton, |
412 ) |
412 ) |
413 else: |
413 else: |
414 self.environmentPathLabel.setPath("") |
414 self.environmentPathLabel.setPath("") |
415 if self.__packageDetailsDialog is not None: |
415 if self.__packageDetailsDialog is not None: |
416 self.__packageDetailsDialog.close() |
416 self.__packageDetailsDialog.close() |
|
417 |
|
418 self.packageSearchEdit.clear() |
417 |
419 |
418 if self.viewToggleButton.isChecked(): |
420 if self.viewToggleButton.isChecked(): |
419 self.__refreshDependencyTree() |
421 self.__refreshDependencyTree() |
420 else: |
422 else: |
421 self.__refreshPackagesList() |
423 self.__refreshPackagesList() |
1528 self.dependenciesList.resizeColumnToContents(col) |
1530 self.dependenciesList.resizeColumnToContents(col) |
1529 self.dependenciesList.setUpdatesEnabled(True) |
1531 self.dependenciesList.setUpdatesEnabled(True) |
1530 |
1532 |
1531 self.__updateDepActionButtons() |
1533 self.__updateDepActionButtons() |
1532 |
1534 |
|
1535 self.packageSearchEdit.setEnabled( |
|
1536 bool(self.dependenciesList.topLevelItemCount()) |
|
1537 ) |
|
1538 self.on_packageSearchEdit_textChanged(self.packageSearchEdit.text()) |
|
1539 |
1533 def __addDependency(self, dependency, parent): |
1540 def __addDependency(self, dependency, parent): |
1534 """ |
1541 """ |
1535 Private method to add a dependency branch to a given parent. |
1542 Private method to add a dependency branch to a given parent. |
1536 |
1543 |
1537 @param dependency dependency to be added |
1544 @param dependency dependency to be added |
1734 venvName=venvName, |
1741 venvName=venvName, |
1735 userSite=self.userDepCheckBox.isChecked(), |
1742 userSite=self.userDepCheckBox.isChecked(), |
1736 ) |
1743 ) |
1737 self.on_refreshDependenciesButton_clicked() |
1744 self.on_refreshDependenciesButton_clicked() |
1738 |
1745 |
|
1746 @pyqtSlot(str) |
|
1747 def on_packageSearchEdit_textChanged(self, package): |
|
1748 """ |
|
1749 Private slot to search packages in the dependencies tree. |
|
1750 |
|
1751 @param package package text to search for |
|
1752 @type str |
|
1753 """ |
|
1754 self.__resetPackageSearchHighlights() |
|
1755 |
|
1756 foundItems = ( |
|
1757 self.dependenciesList.findItems( |
|
1758 package, |
|
1759 Qt.MatchFlag.MatchContains |
|
1760 | Qt.MatchFlag.MatchRecursive |
|
1761 | Qt.MatchFlag.MatchWrap, |
|
1762 ) |
|
1763 if package |
|
1764 else [] |
|
1765 ) |
|
1766 self.__setPackageSearchHighlights(foundItems) |
|
1767 |
|
1768 def __resetPackageSearchHighlights(self, parent=None): |
|
1769 """ |
|
1770 Private method to reset the package search markers. |
|
1771 |
|
1772 @param parent reference to the parent item (defaults to None) |
|
1773 @type QTreeWidgetItem (optional) |
|
1774 """ |
|
1775 if parent is None: |
|
1776 for index in range(self.dependenciesList.topLevelItemCount()): |
|
1777 itm = self.dependenciesList.topLevelItem(index) |
|
1778 self.__resetPackageSearchHighlight(itm) |
|
1779 else: |
|
1780 for index in range(parent.childCount()): |
|
1781 itm = parent.child(index) |
|
1782 self.__resetPackageSearchHighlight(itm) |
|
1783 |
|
1784 def __resetPackageSearchHighlight(self, packageItem): |
|
1785 """ |
|
1786 Private method to reset the package search marker of an individual item. |
|
1787 |
|
1788 @param packageItem reference to the package item |
|
1789 @type QTreeWidgetItem |
|
1790 """ |
|
1791 for column in range(self.dependenciesList.columnCount()): |
|
1792 packageItem.setBackground(column, QBrush()) |
|
1793 if packageItem.childCount(): |
|
1794 self.__resetPackageSearchHighlights(parent=packageItem) |
|
1795 |
|
1796 def __setPackageSearchHighlights(self, packageItems): |
|
1797 """ |
|
1798 Private method to highlight the given package items. |
|
1799 |
|
1800 @param packageItems list of package dependency items to be highlighted |
|
1801 @type list of QTreeWidgetItem |
|
1802 """ |
|
1803 for packageItem in packageItems: |
|
1804 for column in range(self.dependenciesList.columnCount()): |
|
1805 packageItem.setBackground( |
|
1806 column, QBrush(Preferences.getPip("DependencyHighlightColor")) |
|
1807 ) |
|
1808 |
1739 ################################################################## |
1809 ################################################################## |
1740 ## Interface to show the licenses dialog below |
1810 ## Interface to show the licenses dialog below |
1741 ################################################################## |
1811 ################################################################## |
1742 |
1812 |
1743 @pyqtSlot() |
1813 @pyqtSlot() |