src/eric7/Plugins/WizardPlugins/SetupWizard/AddEntryPointDialog.py

Thu, 07 Jul 2022 11:23:56 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 07 Jul 2022 11:23:56 +0200
branch
eric7
changeset 9209
b99e7fd55fd3
parent 9201
eric7/Plugins/WizardPlugins/SetupWizard/AddEntryPointDialog.py@2f1ccadee231
child 9221
bf71ee032bb4
permissions
-rw-r--r--

Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".

9201
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to enter the data for an entry point.
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import pathlib
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtCore import pyqtSlot
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from EricWidgets import EricFileDialog
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from .Ui_AddEntryPointDialog import Ui_AddEntryPointDialog
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 import UI.PixmapCache
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 class AddEntryPointDialog(QDialog, Ui_AddEntryPointDialog):
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Class implementing a dialog to enter the data for an entry point.
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 def __init__(self, rootDirectory, epType="", name="", script="", parent=None):
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Constructor
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param rootDirectory root directory for selecting script modules via
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 a file selection dialog
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @type str
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @param epType type of the entry point (defaults to "")
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @type str (optional)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @param name name of the entry point (defaults to "")
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @type str (optional)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @param script script function of the entry point (defaults to "")
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @type str (optional)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @param parent reference to the parent widget (defaults to None)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @type QWidget (optional)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 super().__init__(parent)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.setupUi(self)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 for typeStr, category in (
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 ("", ""),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 (self.tr("Console"), "console_scripts"),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 (self.tr("GUI"), "gui_scripts"),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 ):
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.typeComboBox.addItem(typeStr, category)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.scriptButton.setIcon(UI.PixmapCache.getIcon("open"))
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(False)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.__rootDirectory = rootDirectory
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.typeComboBox.currentTextChanged.connect(self.__updateOK)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.nameEdit.textChanged.connect(self.__updateOK)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 self.scriptEdit.textChanged.connect(self.__updateOK)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.typeComboBox.setCurrentText(epType)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.nameEdit.setText(name)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.scriptEdit.setText(script)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 msh = self.minimumSizeHint()
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.resize(max(self.width(), msh.width()), msh.height())
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @pyqtSlot()
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 def __updateOK(self):
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 Private slot to update the enabled state of the OK button.
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 bool(self.typeComboBox.currentText()) and
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 bool(self.nameEdit.text()) and
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 bool(self.scriptEdit.text())
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 )
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 @pyqtSlot()
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 def on_scriptButton_clicked(self):
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 Private slot to select a script via a file selection dialog.
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 script = self.scriptEdit.text()
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 if script:
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 if ":" in script:
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 scriptFile, scriptFunction = script.rsplit(":", 1)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 else:
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 scriptFile, scriptFunction = script, "main"
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 scriptFile = scriptFile.replace(".", "/") + ".py"
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 root = str(pathlib.Path(self.__rootDirectory) / scriptFile)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 else:
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 root = self.__rootDirectory
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 scriptFunction = "main"
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 script = EricFileDialog.getOpenFileName(
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self,
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 self.tr("Select Script File"),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 root,
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.tr("Python Files (*.py);;All Files (*)")
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 )
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 if script:
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 scriptPath = pathlib.Path(script)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 try:
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 relativeScriptPath = scriptPath.relative_to(self.__rootDirectory)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 except ValueError:
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 relativeScriptPath = scriptPath
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.scriptEdit.setText("{0}:{1}".format(
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 str(relativeScriptPath.with_suffix(""))
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 .replace("/", ".")
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 .replace("\\", "."),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 scriptFunction
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 ))
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 def getEntryPoint(self):
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 Public method to get the data for the entry point.
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 @return tuple containing the entry point type, category, name and
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 script function
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 @rtype tuple of (str, str, str)
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 """
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 return (
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 self.typeComboBox.currentText(),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 self.typeComboBox.currentData(),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 self.nameEdit.text(),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 self.scriptEdit.text(),
2f1ccadee231 setup Wizard
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 )

eric ide

mercurial