28 |
28 |
29 from .Pip import Pip |
29 from .Pip import Pip |
30 |
30 |
31 |
31 |
32 # TODO: use icons for action buttons |
32 # TODO: use icons for action buttons |
33 # TODO: show package details for installed packages |
|
34 class PipPackagesWidget(QWidget, Ui_PipPackagesWidget): |
33 class PipPackagesWidget(QWidget, Ui_PipPackagesWidget): |
35 """ |
34 """ |
36 Class implementing the pip packages management widget. |
35 Class implementing the pip packages management widget. |
37 """ |
36 """ |
38 ShowProcessGeneralMode = 0 |
37 ShowProcessGeneralMode = 0 |
185 bool(self.__selectedUpdateableItems())) |
184 bool(self.__selectedUpdateableItems())) |
186 self.uninstallButton.setEnabled( |
185 self.uninstallButton.setEnabled( |
187 bool(self.packagesList.selectedItems())) |
186 bool(self.packagesList.selectedItems())) |
188 self.upgradeAllButton.setEnabled( |
187 self.upgradeAllButton.setEnabled( |
189 bool(self.__allUpdateableItems())) |
188 bool(self.__allUpdateableItems())) |
|
189 self.showPackageDetailsButton.setEnabled( |
|
190 len(self.packagesList.selectedItems()) == 1) |
190 else: |
191 else: |
191 self.upgradeButton.setEnabled(False) |
192 self.upgradeButton.setEnabled(False) |
192 self.uninstallButton.setEnabled(False) |
193 self.uninstallButton.setEnabled(False) |
193 self.upgradeAllButton.setEnabled(False) |
194 self.upgradeAllButton.setEnabled(False) |
|
195 self.showPackageDetailsButton.setEnabled(False) |
194 |
196 |
195 def __refreshPackagesList(self): |
197 def __refreshPackagesList(self): |
196 """ |
198 """ |
197 Private method to referesh the packages list. |
199 Private method to referesh the packages list. |
198 """ |
200 """ |
352 |
354 |
353 QApplication.restoreOverrideCursor() |
355 QApplication.restoreOverrideCursor() |
354 |
356 |
355 self.__updateActionButtons() |
357 self.__updateActionButtons() |
356 |
358 |
|
359 @pyqtSlot(QTreeWidgetItem, int) |
|
360 def on_packagesList_itemActivated(self, item, column): |
|
361 """ |
|
362 Private slot reacting on a package item activation. |
|
363 |
|
364 @param item reference to the activated item |
|
365 @type QTreeWidgetItem |
|
366 @param column activated column |
|
367 @type int |
|
368 """ |
|
369 packageName = item.text(0) |
|
370 if column == 1: |
|
371 # show details for installed version |
|
372 packageVersion = item.text(1) |
|
373 else: |
|
374 # show details for available version or installed one |
|
375 if item.text(2): |
|
376 packageVersion = item.text(2) |
|
377 else: |
|
378 packageVersion = item.text(1) |
|
379 |
|
380 self.__showPackageDetails(packageName, packageVersion) |
|
381 |
357 @pyqtSlot(bool) |
382 @pyqtSlot(bool) |
358 def on_verboseCheckBox_clicked(self, checked): |
383 def on_verboseCheckBox_clicked(self, checked): |
359 """ |
384 """ |
360 Private slot to handle a change of the verbose package information |
385 Private slot to handle a change of the verbose package information |
361 checkbox. |
386 checkbox. |
444 """ |
469 """ |
445 ok = self.__pip.upgradePackages( |
470 ok = self.__pip.upgradePackages( |
446 packages, venvName=self.environmentsComboBox.currentText(), |
471 packages, venvName=self.environmentsComboBox.currentText(), |
447 userSite=self.userCheckBox.isChecked()) |
472 userSite=self.userCheckBox.isChecked()) |
448 return ok |
473 return ok |
|
474 |
|
475 @pyqtSlot() |
|
476 def on_showPackageDetailsButton_clicked(self): |
|
477 """ |
|
478 Private slot to show information for the selected package. |
|
479 """ |
|
480 item = self.packagesList.selectedItems()[0] |
|
481 if item: |
|
482 packageName = item.text(0) |
|
483 # show details for available version or installed one |
|
484 if item.text(2): |
|
485 packageVersion = item.text(2) |
|
486 else: |
|
487 packageVersion = item.text(1) |
|
488 |
|
489 self.__showPackageDetails(packageName, packageVersion) |
449 |
490 |
450 ####################################################################### |
491 ####################################################################### |
451 ## Search widget related methods below |
492 ## Search widget related methods below |
452 ####################################################################### |
493 ####################################################################### |
453 |
494 |
760 @pyqtSlot() |
801 @pyqtSlot() |
761 def on_showDetailsButton_clicked(self): |
802 def on_showDetailsButton_clicked(self): |
762 """ |
803 """ |
763 Private slot to handle pressing the Show Details button. |
804 Private slot to handle pressing the Show Details button. |
764 """ |
805 """ |
765 self.__showDetails() |
806 self.__showSearchedDetails() |
766 |
807 |
767 @pyqtSlot(QTreeWidgetItem, int) |
808 @pyqtSlot(QTreeWidgetItem, int) |
768 def on_searchResultList_itemActivated(self, item, column): |
809 def on_searchResultList_itemActivated(self, item, column): |
769 """ |
810 """ |
770 Private slot reacting on an search result item activation. |
811 Private slot reacting on an search result item activation. |
774 @param column activated column |
815 @param column activated column |
775 @type int |
816 @type int |
776 """ |
817 """ |
777 self.__showDetails(item) |
818 self.__showDetails(item) |
778 |
819 |
779 def __showDetails(self, item=None): |
820 def __showSearchedDetails(self, item=None): |
780 """ |
821 """ |
781 Private slot to show details about the selected package. |
822 Private slot to show details about the selected search result package. |
782 |
823 |
783 @param item reference to the search result item to show details for |
824 @param item reference to the search result item to show details for |
784 @type QTreeWidgetItem |
825 @type QTreeWidgetItem |
785 """ |
826 """ |
786 self.showDetailsButton.setEnabled(False) |
827 self.showDetailsButton.setEnabled(False) |
787 QApplication.setOverrideCursor(Qt.WaitCursor) |
|
788 QApplication.processEvents(QEventLoop.ExcludeUserInputEvents) |
|
789 |
828 |
790 if not item: |
829 if not item: |
791 item = self.searchResultList.selectedItems()[0] |
830 item = self.searchResultList.selectedItems()[0] |
792 |
831 |
793 packageVersions = item.data(0, self.SearchVersionRole) |
832 packageVersions = item.data(0, self.SearchVersionRole) |
803 packageVersions, |
842 packageVersions, |
804 0, False) |
843 0, False) |
805 if not ok: |
844 if not ok: |
806 return |
845 return |
807 packageName = item.text(0) |
846 packageName = item.text(0) |
|
847 |
|
848 self.__showPackageDetails(packageName, packageVersion) |
|
849 |
|
850 def __showPackageDetails(self, packageName, packageVersion): |
|
851 """ |
|
852 Private method to populate the package details dialog. |
|
853 |
|
854 @param packageName name of the package to show details for |
|
855 @type str |
|
856 @param packageVersion version of the package |
|
857 @type str |
|
858 """ |
|
859 QApplication.setOverrideCursor(Qt.WaitCursor) |
|
860 QApplication.processEvents(QEventLoop.ExcludeUserInputEvents) |
|
861 |
808 packageData = self.__pip.getPackageDetails(packageName, packageVersion) |
862 packageData = self.__pip.getPackageDetails(packageName, packageVersion) |
809 |
863 |
810 QApplication.restoreOverrideCursor() |
864 QApplication.restoreOverrideCursor() |
811 if packageData: |
865 if packageData: |
812 from .PipPackageDetailsDialog import PipPackageDetailsDialog |
866 from .PipPackageDetailsDialog import PipPackageDetailsDialog |