14 from PyQt6.QtWidgets import ( |
14 from PyQt6.QtWidgets import ( |
15 QDialog, QDialogButtonBox, QTreeWidgetItem, QListWidgetItem |
15 QDialog, QDialogButtonBox, QTreeWidgetItem, QListWidgetItem |
16 ) |
16 ) |
17 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply |
17 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply |
18 |
18 |
19 from E5Gui.E5Application import e5App |
19 from E5Gui.EricApplication import ericApp |
20 from E5Gui import E5MessageBox, E5FileDialog |
20 from E5Gui import EricMessageBox, EricFileDialog |
21 from E5Gui.E5Completers import E5DirCompleter |
21 from E5Gui.EricCompleters import EricDirCompleter |
22 from E5Gui.E5OverrideCursor import E5OverrideCursor |
22 from E5Gui.EricOverrideCursor import EricOverrideCursor |
23 |
23 |
24 from .Ui_SetupWizardDialog import Ui_SetupWizardDialog |
24 from .Ui_SetupWizardDialog import Ui_SetupWizardDialog |
25 |
25 |
26 import UI.PixmapCache |
26 import UI.PixmapCache |
27 import Utilities |
27 import Utilities |
31 class SetupWizardDialog(QDialog, Ui_SetupWizardDialog): |
31 class SetupWizardDialog(QDialog, Ui_SetupWizardDialog): |
32 """ |
32 """ |
33 Class implementing the setup.py wizard dialog. |
33 Class implementing the setup.py wizard dialog. |
34 |
34 |
35 It displays a dialog for entering the parameters |
35 It displays a dialog for entering the parameters |
36 for the E5MessageBox code generator. |
36 for the EricMessageBox code generator. |
37 """ |
37 """ |
38 ClassifiersUrl = "https://pypi.org/pypi?%3Aaction=list_classifiers" |
38 ClassifiersUrl = "https://pypi.org/pypi?%3Aaction=list_classifiers" |
39 |
39 |
40 def __init__(self, parent=None): |
40 def __init__(self, parent=None): |
41 """ |
41 """ |
48 |
48 |
49 self.__replies = [] |
49 self.__replies = [] |
50 |
50 |
51 self.dataTabWidget.setCurrentIndex(0) |
51 self.dataTabWidget.setCurrentIndex(0) |
52 |
52 |
53 self.__packageDirCompleter = E5DirCompleter(self.packageEdit) |
53 self.__packageDirCompleter = EricDirCompleter(self.packageEdit) |
54 self.__packageRootDirCompleter = E5DirCompleter(self.packageRootEdit) |
54 self.__packageRootDirCompleter = EricDirCompleter(self.packageRootEdit) |
55 self.__sourceDirCompleter = E5DirCompleter(self.sourceDirectoryEdit) |
55 self.__sourceDirCompleter = EricDirCompleter(self.sourceDirectoryEdit) |
56 |
56 |
57 self.packageRootDirButton.setIcon(UI.PixmapCache.getIcon("open")) |
57 self.packageRootDirButton.setIcon(UI.PixmapCache.getIcon("open")) |
58 self.packageDirButton.setIcon(UI.PixmapCache.getIcon("open")) |
58 self.packageDirButton.setIcon(UI.PixmapCache.getIcon("open")) |
59 self.sourceDirectoryButton.setIcon(UI.PixmapCache.getIcon("open")) |
59 self.sourceDirectoryButton.setIcon(UI.PixmapCache.getIcon("open")) |
60 |
60 |
73 |
73 |
74 self.__okButton = self.buttonBox.button( |
74 self.__okButton = self.buttonBox.button( |
75 QDialogButtonBox.StandardButton.Ok) |
75 QDialogButtonBox.StandardButton.Ok) |
76 self.__okButton.setEnabled(False) |
76 self.__okButton.setEnabled(False) |
77 |
77 |
78 projectOpen = e5App().getObject("Project").isOpen() |
78 projectOpen = ericApp().getObject("Project").isOpen() |
79 self.projectButton.setEnabled(projectOpen) |
79 self.projectButton.setEnabled(projectOpen) |
80 self.autodiscoverPackagesButton.setEnabled(projectOpen) |
80 self.autodiscoverPackagesButton.setEnabled(projectOpen) |
81 |
81 |
82 self.homePageUrlEdit.textChanged.connect(self.__enableOkButton) |
82 self.homePageUrlEdit.textChanged.connect(self.__enableOkButton) |
83 self.nameEdit.textChanged.connect(self.__enableOkButton) |
83 self.nameEdit.textChanged.connect(self.__enableOkButton) |
111 """ |
111 """ |
112 request = QNetworkRequest(QUrl(SetupWizardDialog.ClassifiersUrl)) |
112 request = QNetworkRequest(QUrl(SetupWizardDialog.ClassifiersUrl)) |
113 request.setAttribute( |
113 request.setAttribute( |
114 QNetworkRequest.Attribute.CacheLoadControlAttribute, |
114 QNetworkRequest.Attribute.CacheLoadControlAttribute, |
115 QNetworkRequest.CacheLoadControl.AlwaysNetwork) |
115 QNetworkRequest.CacheLoadControl.AlwaysNetwork) |
116 reply = e5App().getObject("UserInterface").networkAccessManager().get( |
116 reply = ericApp().getObject("UserInterface").networkAccessManager().get( |
117 request) |
117 request) |
118 reply.finished.connect(lambda: self.__classifiersDownloadDone(reply)) |
118 reply.finished.connect(lambda: self.__classifiersDownloadDone(reply)) |
119 self.__replies.append(reply) |
119 self.__replies.append(reply) |
120 |
120 |
121 @pyqtSlot() |
121 @pyqtSlot() |
150 "data", "trove_classifiers.txt") |
150 "data", "trove_classifiers.txt") |
151 try: |
151 try: |
152 with open(filename, "r") as f: |
152 with open(filename, "r") as f: |
153 lines = f.readlines() |
153 lines = f.readlines() |
154 except OSError as err: |
154 except OSError as err: |
155 E5MessageBox.warning( |
155 EricMessageBox.warning( |
156 self, |
156 self, |
157 self.tr("Reading Trove Classifiers"), |
157 self.tr("Reading Trove Classifiers"), |
158 self.tr("""<p>The Trove Classifiers file <b>{0}</b>""" |
158 self.tr("""<p>The Trove Classifiers file <b>{0}</b>""" |
159 """ could not be read.</p><p>Reason: {1}</p>""") |
159 """ could not be read.</p><p>Reason: {1}</p>""") |
160 .format(filename, str(err))) |
160 .format(filename, str(err))) |
465 def on_projectButton_clicked(self): |
465 def on_projectButton_clicked(self): |
466 """ |
466 """ |
467 Private slot to populate some fields with data retrieved from the |
467 Private slot to populate some fields with data retrieved from the |
468 current project. |
468 current project. |
469 """ |
469 """ |
470 project = e5App().getObject("Project") |
470 project = ericApp().getObject("Project") |
471 |
471 |
472 self.nameEdit.setText(project.getProjectName()) |
472 self.nameEdit.setText(project.getProjectName()) |
473 try: |
473 try: |
474 self.versionEdit.setText(project.getProjectVersion()) |
474 self.versionEdit.setText(project.getProjectVersion()) |
475 self.authorEdit.setText(project.getProjectAuthor()) |
475 self.authorEdit.setText(project.getProjectAuthor()) |
544 selection dialog. |
544 selection dialog. |
545 """ |
545 """ |
546 startDir = self.packageEdit.text() |
546 startDir = self.packageEdit.text() |
547 if not startDir: |
547 if not startDir: |
548 startDir = self.packageRootEdit.text() or self.__getStartDir() |
548 startDir = self.packageRootEdit.text() or self.__getStartDir() |
549 packageDir = E5FileDialog.getExistingDirectory( |
549 packageDir = EricFileDialog.getExistingDirectory( |
550 self, |
550 self, |
551 self.tr("Package Directory"), |
551 self.tr("Package Directory"), |
552 Utilities.fromNativeSeparators(startDir)) |
552 Utilities.fromNativeSeparators(startDir)) |
553 if packageDir: |
553 if packageDir: |
554 self.packageEdit.setText( |
554 self.packageEdit.setText( |
557 @pyqtSlot() |
557 @pyqtSlot() |
558 def on_autodiscoverPackagesButton_clicked(self): |
558 def on_autodiscoverPackagesButton_clicked(self): |
559 """ |
559 """ |
560 Private slot to discover packages automatically. |
560 Private slot to discover packages automatically. |
561 """ |
561 """ |
562 with E5OverrideCursor(): |
562 with EricOverrideCursor(): |
563 self.autodiscoverPackagesButton.setEnabled(False) |
563 self.autodiscoverPackagesButton.setEnabled(False) |
564 startDir = self.packageRootEdit.text() or self.__getStartDir() |
564 startDir = self.packageRootEdit.text() or self.__getStartDir() |
565 if startDir: |
565 if startDir: |
566 self.packagesList.clear() |
566 self.packagesList.clear() |
567 for dirpath, _dirnames, filenames in os.walk(startDir): |
567 for dirpath, _dirnames, filenames in os.walk(startDir): |
576 directory selection dialog. |
576 directory selection dialog. |
577 """ |
577 """ |
578 startDir = self.packageRootEdit.text() |
578 startDir = self.packageRootEdit.text() |
579 if not startDir: |
579 if not startDir: |
580 startDir = self.__getStartDir() |
580 startDir = self.__getStartDir() |
581 packagesRootDir = E5FileDialog.getExistingDirectory( |
581 packagesRootDir = EricFileDialog.getExistingDirectory( |
582 self, |
582 self, |
583 self.tr("Packages Root Directory"), |
583 self.tr("Packages Root Directory"), |
584 Utilities.fromNativeSeparators(startDir), |
584 Utilities.fromNativeSeparators(startDir), |
585 E5FileDialog.ShowDirsOnly) |
585 EricFileDialog.ShowDirsOnly) |
586 if packagesRootDir: |
586 if packagesRootDir: |
587 self.packageRootEdit.setText( |
587 self.packageRootEdit.setText( |
588 Utilities.toNativeSeparators(packagesRootDir)) |
588 Utilities.toNativeSeparators(packagesRootDir)) |
589 |
589 |
590 @pyqtSlot(str) |
590 @pyqtSlot(str) |
592 """ |
592 """ |
593 Private slot handling the entering of a packages root. |
593 Private slot handling the entering of a packages root. |
594 |
594 |
595 @param txt text of the line edit (string) |
595 @param txt text of the line edit (string) |
596 """ |
596 """ |
597 projectOpen = e5App().getObject("Project").isOpen() |
597 projectOpen = ericApp().getObject("Project").isOpen() |
598 validPackagesRoot = bool(txt) and os.path.exists(txt) |
598 validPackagesRoot = bool(txt) and os.path.exists(txt) |
599 self.autodiscoverPackagesButton.setEnabled( |
599 self.autodiscoverPackagesButton.setEnabled( |
600 projectOpen or validPackagesRoot) |
600 projectOpen or validPackagesRoot) |
601 |
601 |
602 def __addPackage(self, pkgDir): |
602 def __addPackage(self, pkgDir): |
615 initName = os.path.join( |
615 initName = os.path.join( |
616 prefix, |
616 prefix, |
617 Utilities.toNativeSeparators(pkgDir), |
617 Utilities.toNativeSeparators(pkgDir), |
618 "__init__.py") |
618 "__init__.py") |
619 if not os.path.exists(initName): |
619 if not os.path.exists(initName): |
620 res = E5MessageBox.information( |
620 res = EricMessageBox.information( |
621 self, |
621 self, |
622 self.tr("Add Package"), |
622 self.tr("Add Package"), |
623 self.tr("""<p>The directory <b>{0}</b> is not""" |
623 self.tr("""<p>The directory <b>{0}</b> is not""" |
624 """ a Python package.</p>""") |
624 """ a Python package.</p>""") |
625 .format(pkgDir), |
625 .format(pkgDir), |
626 E5MessageBox.Ignore | E5MessageBox.Ok) |
626 EricMessageBox.Ignore | EricMessageBox.Ok) |
627 if res == E5MessageBox.Ok: |
627 if res == EricMessageBox.Ok: |
628 return |
628 return |
629 |
629 |
630 pkg = pkgDir.replace( |
630 pkg = pkgDir.replace( |
631 Utilities.toNativeSeparators(self.packageRootEdit.text()), "") |
631 Utilities.toNativeSeparators(self.packageRootEdit.text()), "") |
632 if pkg.startswith(("\\", "/")): |
632 if pkg.startswith(("\\", "/")): |
669 def on_addScriptButton_clicked(self): |
669 def on_addScriptButton_clicked(self): |
670 """ |
670 """ |
671 Private slot to add scripts to the list. |
671 Private slot to add scripts to the list. |
672 """ |
672 """ |
673 startDir = self.packageRootEdit.text() or self.__getStartDir() |
673 startDir = self.packageRootEdit.text() or self.__getStartDir() |
674 scriptsList = E5FileDialog.getOpenFileNames( |
674 scriptsList = EricFileDialog.getOpenFileNames( |
675 self, |
675 self, |
676 self.tr("Add Scripts"), |
676 self.tr("Add Scripts"), |
677 startDir, |
677 startDir, |
678 self.tr("Python Files (*.py);;All Files(*)")) |
678 self.tr("Python Files (*.py);;All Files(*)")) |
679 for script in scriptsList: |
679 for script in scriptsList: |
708 def on_addModuleButton_clicked(self): |
708 def on_addModuleButton_clicked(self): |
709 """ |
709 """ |
710 Private slot to add Python modules to the list. |
710 Private slot to add Python modules to the list. |
711 """ |
711 """ |
712 startDir = self.packageRootEdit.text() or self.__getStartDir() |
712 startDir = self.packageRootEdit.text() or self.__getStartDir() |
713 modulesList = E5FileDialog.getOpenFileNames( |
713 modulesList = EricFileDialog.getOpenFileNames( |
714 self, |
714 self, |
715 self.tr("Add Python Modules"), |
715 self.tr("Add Python Modules"), |
716 startDir, |
716 startDir, |
717 self.tr("Python Files (*.py)")) |
717 self.tr("Python Files (*.py)")) |
718 for module in modulesList: |
718 for module in modulesList: |
789 """ |
789 """ |
790 Private slot to select the packages root directory via a |
790 Private slot to select the packages root directory via a |
791 directory selection dialog. |
791 directory selection dialog. |
792 """ |
792 """ |
793 startDir = self.sourceDirectoryEdit.text() or self.__getStartDir() |
793 startDir = self.sourceDirectoryEdit.text() or self.__getStartDir() |
794 sourceDirectory = E5FileDialog.getExistingDirectory( |
794 sourceDirectory = EricFileDialog.getExistingDirectory( |
795 self, |
795 self, |
796 self.tr("Source Directory"), |
796 self.tr("Source Directory"), |
797 Utilities.fromNativeSeparators(startDir), |
797 Utilities.fromNativeSeparators(startDir), |
798 E5FileDialog.ShowDirsOnly) |
798 EricFileDialog.ShowDirsOnly) |
799 if sourceDirectory: |
799 if sourceDirectory: |
800 self.sourceDirectoryEdit.setText( |
800 self.sourceDirectoryEdit.setText( |
801 Utilities.toNativeSeparators(sourceDirectory)) |
801 Utilities.toNativeSeparators(sourceDirectory)) |