src/eric7/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9212
1c5cf2022c7e
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
26 26
27 class EricapiConfigDialog(QDialog, Ui_EricapiConfigDialog): 27 class EricapiConfigDialog(QDialog, Ui_EricapiConfigDialog):
28 """ 28 """
29 Class implementing a dialog to enter the parameters for eric7_api. 29 Class implementing a dialog to enter the parameters for eric7_api.
30 """ 30 """
31
31 def __init__(self, project, parms=None, parent=None): 32 def __init__(self, project, parms=None, parent=None):
32 """ 33 """
33 Constructor 34 Constructor
34 35
35 @param project reference to the project object (Project.Project) 36 @param project reference to the project object (Project.Project)
36 @param parms parameters to set in the dialog 37 @param parms parameters to set in the dialog
37 @param parent parent widget of this dialog 38 @param parent parent widget of this dialog
38 """ 39 """
39 super().__init__(parent) 40 super().__init__(parent)
40 self.setupUi(self) 41 self.setupUi(self)
41 42
42 self.startDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) 43 self.startDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE)
43 self.startDirPicker.setDefaultDirectory(project.getProjectPath()) 44 self.startDirPicker.setDefaultDirectory(project.getProjectPath())
44 45
45 self.outputFilePicker.setMode(EricPathPickerModes.SAVE_FILE_MODE) 46 self.outputFilePicker.setMode(EricPathPickerModes.SAVE_FILE_MODE)
46 self.outputFilePicker.setDefaultDirectory(project.getProjectPath()) 47 self.outputFilePicker.setDefaultDirectory(project.getProjectPath())
47 self.outputFilePicker.setFilters(self.tr( 48 self.outputFilePicker.setFilters(self.tr("API files (*.api);;All files (*)"))
48 "API files (*.api);;All files (*)")) 49
49
50 self.ignoreDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) 50 self.ignoreDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE)
51 self.ignoreDirPicker.setDefaultDirectory(project.getProjectPath()) 51 self.ignoreDirPicker.setDefaultDirectory(project.getProjectPath())
52 52
53 self.buttonBox.button( 53 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(False)
54 QDialogButtonBox.StandardButton.Ok).setEnabled(False)
55 for language in sorted( 54 for language in sorted(
56 DocumentationTools.supportedExtensionsDictForApis.keys()): 55 DocumentationTools.supportedExtensionsDictForApis.keys()
56 ):
57 self.languagesList.addItem(language) 57 self.languagesList.addItem(language)
58 58
59 self.ppath = project.getProjectPath() 59 self.ppath = project.getProjectPath()
60 self.project = project 60 self.project = project
61 61
62 self.__initializeDefaults() 62 self.__initializeDefaults()
63 63
64 # get a copy of the defaults to store the user settings 64 # get a copy of the defaults to store the user settings
65 self.parameters = copy.deepcopy(self.defaults) 65 self.parameters = copy.deepcopy(self.defaults)
66 66
67 # combine it with the values of parms 67 # combine it with the values of parms
68 if parms is not None: 68 if parms is not None:
69 self.parameters.update(parms) 69 self.parameters.update(parms)
70 self.parameters["startDirectory"] = Utilities.toNativeSeparators( 70 self.parameters["startDirectory"] = Utilities.toNativeSeparators(
71 self.parameters['startDirectory'] 71 self.parameters["startDirectory"]
72 ) 72 )
73 self.parameters['outputFile'] = Utilities.toNativeSeparators( 73 self.parameters["outputFile"] = Utilities.toNativeSeparators(
74 self.parameters['outputFile']) 74 self.parameters["outputFile"]
75 75 )
76 self.recursionCheckBox.setChecked(self.parameters['useRecursion']) 76
77 self.includePrivateCheckBox.setChecked( 77 self.recursionCheckBox.setChecked(self.parameters["useRecursion"])
78 self.parameters['includePrivate']) 78 self.includePrivateCheckBox.setChecked(self.parameters["includePrivate"])
79 self.startDirPicker.setText(self.parameters['startDirectory']) 79 self.startDirPicker.setText(self.parameters["startDirectory"])
80 self.outputFilePicker.setText(self.parameters['outputFile']) 80 self.outputFilePicker.setText(self.parameters["outputFile"])
81 self.baseEdit.setText(self.parameters['basePackage']) 81 self.baseEdit.setText(self.parameters["basePackage"])
82 self.ignoreDirsList.clear() 82 self.ignoreDirsList.clear()
83 for d in self.parameters['ignoreDirectories']: 83 for d in self.parameters["ignoreDirectories"]:
84 self.ignoreDirsList.addItem(d) 84 self.ignoreDirsList.addItem(d)
85 self.sourceExtEdit.setText( 85 self.sourceExtEdit.setText(", ".join(self.parameters["sourceExtensions"]))
86 ", ".join(self.parameters['sourceExtensions'])) 86 self.excludeFilesEdit.setText(", ".join(self.parameters["ignoreFilePatterns"]))
87 self.excludeFilesEdit.setText( 87 for language in self.parameters["languages"]:
88 ", ".join(self.parameters['ignoreFilePatterns']))
89 for language in self.parameters['languages']:
90 if language == "Python": 88 if language == "Python":
91 # convert Python to the more specific Python3 89 # convert Python to the more specific Python3
92 language = "Python3" 90 language = "Python3"
93 items = self.languagesList.findItems( 91 items = self.languagesList.findItems(language, Qt.MatchFlag.MatchExactly)
94 language, Qt.MatchFlag.MatchExactly)
95 items and items[0].setSelected(True) 92 items and items[0].setSelected(True)
96 93
97 def __initializeDefaults(self): 94 def __initializeDefaults(self):
98 """ 95 """
99 Private method to set the default values. 96 Private method to set the default values.
100 97
101 These are needed later on to generate the commandline 98 These are needed later on to generate the commandline
102 parameters. 99 parameters.
103 """ 100 """
104 self.defaults = { 101 self.defaults = {
105 'useRecursion': False, 102 "useRecursion": False,
106 'includePrivate': False, 103 "includePrivate": False,
107 'startDirectory': '', 104 "startDirectory": "",
108 'outputFile': '', 105 "outputFile": "",
109 'basePackage': '', 106 "basePackage": "",
110 'ignoreDirectories': [], 107 "ignoreDirectories": [],
111 'ignoreFilePatterns': [], 108 "ignoreFilePatterns": [],
112 'sourceExtensions': [], 109 "sourceExtensions": [],
113 } 110 }
114 111
115 lang = self.project.getProjectLanguage() 112 lang = self.project.getProjectLanguage()
116 if lang in DocumentationTools.supportedExtensionsDictForApis: 113 if lang in DocumentationTools.supportedExtensionsDictForApis:
117 self.defaults['languages'] = [lang] 114 self.defaults["languages"] = [lang]
118 else: 115 else:
119 self.defaults['languages'] = ["Python3"] 116 self.defaults["languages"] = ["Python3"]
120 117
121 def generateParameters(self): 118 def generateParameters(self):
122 """ 119 """
123 Public method that generates the command line parameters. 120 Public method that generates the command line parameters.
124 121
125 It generates a list of strings to be used 122 It generates a list of strings to be used
126 to set the QProcess arguments for the ericapi call and 123 to set the QProcess arguments for the ericapi call and
127 a dictionary containing the non default parameters. This 124 a dictionary containing the non default parameters. This
128 dictionary can be passed back upon object generation to overwrite 125 dictionary can be passed back upon object generation to overwrite
129 the default settings. 126 the default settings.
130 127
131 @return a tuple containing the commandline parameters, non default 128 @return a tuple containing the commandline parameters, non default
132 parameters and the start directory 129 parameters and the start directory
133 @rtype tuple of (list of str, dict, str) 130 @rtype tuple of (list of str, dict, str)
134 """ 131 """
135 parms = {} 132 parms = {}
136 args = [] 133 args = []
137 134
138 # 1. the program name 135 # 1. the program name
139 args.append(Globals.getPythonExecutable()) 136 args.append(Globals.getPythonExecutable())
140 args.append( 137 args.append(Utilities.normabsjoinpath(getConfig("ericDir"), "eric7_api.py"))
141 Utilities.normabsjoinpath(getConfig('ericDir'), "eric7_api.py")) 138
142
143 # 2. the commandline options 139 # 2. the commandline options
144 if self.parameters['startDirectory'] != self.defaults['startDirectory']: 140 if self.parameters["startDirectory"] != self.defaults["startDirectory"]:
145 parms['startDirectory'] = self.project.getRelativeUniversalPath( 141 parms["startDirectory"] = self.project.getRelativeUniversalPath(
146 self.parameters['startDirectory'] 142 self.parameters["startDirectory"]
147 ) 143 )
148 else: 144 else:
149 self.parameters['startDirectory'] = self.defaults['startDirectory'] 145 self.parameters["startDirectory"] = self.defaults["startDirectory"]
150 parms['startDirectory'] = self.parameters['startDirectory'] 146 parms["startDirectory"] = self.parameters["startDirectory"]
151 if self.parameters['outputFile'] != self.defaults['outputFile']: 147 if self.parameters["outputFile"] != self.defaults["outputFile"]:
152 parms['outputFile'] = self.project.getRelativeUniversalPath( 148 parms["outputFile"] = self.project.getRelativeUniversalPath(
153 self.parameters['outputFile'] 149 self.parameters["outputFile"]
154 ) 150 )
155 args.append('-o') 151 args.append("-o")
156 args.append( 152 args.append(self.project.getAbsolutePath(self.parameters["outputFile"]))
157 self.project.getAbsolutePath(self.parameters['outputFile'])
158 )
159 else: 153 else:
160 self.parameters['outputFile'] = self.defaults['outputFile'] 154 self.parameters["outputFile"] = self.defaults["outputFile"]
161 if self.parameters['basePackage'] != self.defaults['basePackage']: 155 if self.parameters["basePackage"] != self.defaults["basePackage"]:
162 parms['basePackage'] = self.parameters['basePackage'] 156 parms["basePackage"] = self.parameters["basePackage"]
163 args.append('-b') 157 args.append("-b")
164 args.append(self.parameters['basePackage']) 158 args.append(self.parameters["basePackage"])
165 if ( 159 if self.parameters["ignoreDirectories"] != self.defaults["ignoreDirectories"]:
166 self.parameters['ignoreDirectories'] != 160 parms["ignoreDirectories"] = self.parameters["ignoreDirectories"][:]
167 self.defaults['ignoreDirectories'] 161 for d in self.parameters["ignoreDirectories"]:
168 ): 162 args.append("-x")
169 parms['ignoreDirectories'] = (
170 self.parameters['ignoreDirectories'][:]
171 )
172 for d in self.parameters['ignoreDirectories']:
173 args.append('-x')
174 args.append(d) 163 args.append(d)
175 if ( 164 if self.parameters["ignoreFilePatterns"] != self.defaults["ignoreFilePatterns"]:
176 self.parameters['ignoreFilePatterns'] != 165 parms["ignoreFilePatterns"] = self.parameters["ignoreFilePatterns"][:]
177 self.defaults['ignoreFilePatterns'] 166 for pattern in self.parameters["ignoreFilePatterns"]:
178 ):
179 parms['ignoreFilePatterns'] = (
180 self.parameters['ignoreFilePatterns'][:]
181 )
182 for pattern in self.parameters['ignoreFilePatterns']:
183 args.append("--exclude-file={0}".format(pattern)) 167 args.append("--exclude-file={0}".format(pattern))
184 if self.parameters['useRecursion'] != self.defaults['useRecursion']: 168 if self.parameters["useRecursion"] != self.defaults["useRecursion"]:
185 parms['useRecursion'] = self.parameters['useRecursion'] 169 parms["useRecursion"] = self.parameters["useRecursion"]
186 args.append('-r') 170 args.append("-r")
187 if ( 171 if self.parameters["sourceExtensions"] != self.defaults["sourceExtensions"]:
188 self.parameters['sourceExtensions'] != 172 parms["sourceExtensions"] = self.parameters["sourceExtensions"][:]
189 self.defaults['sourceExtensions'] 173 for ext in self.parameters["sourceExtensions"]:
190 ): 174 args.append("-t")
191 parms['sourceExtensions'] = self.parameters['sourceExtensions'][:]
192 for ext in self.parameters['sourceExtensions']:
193 args.append('-t')
194 args.append(ext) 175 args.append(ext)
195 if ( 176 if self.parameters["includePrivate"] != self.defaults["includePrivate"]:
196 self.parameters['includePrivate'] != 177 parms["includePrivate"] = self.parameters["includePrivate"]
197 self.defaults['includePrivate'] 178 args.append("-p")
198 ): 179 parms["languages"] = self.parameters["languages"][:]
199 parms['includePrivate'] = self.parameters['includePrivate'] 180 for lang in self.parameters["languages"]:
200 args.append('-p') 181 args.append("--language={0}".format(lang))
201 parms['languages'] = self.parameters['languages'][:] 182
202 for lang in self.parameters['languages']:
203 args.append('--language={0}'.format(lang))
204
205 startDir = ( 183 startDir = (
206 self.project.getAbsolutePath(self.parameters['startDirectory']) 184 self.project.getAbsolutePath(self.parameters["startDirectory"])
207 if self.parameters['startDirectory'] else 185 if self.parameters["startDirectory"]
208 "" 186 else ""
209 ) 187 )
210 return args, parms, startDir 188 return args, parms, startDir
211 189
212 @pyqtSlot(str) 190 @pyqtSlot(str)
213 def on_startDirPicker_pathSelected(self, path): 191 def on_startDirPicker_pathSelected(self, path):
214 """ 192 """
215 Private slot handling the selection of a start directory. 193 Private slot handling the selection of a start directory.
216 194
217 @param path path of the start directory 195 @param path path of the start directory
218 @type str 196 @type str
219 """ 197 """
220 # make it relative, if it is in a subdirectory of the project path 198 # make it relative, if it is in a subdirectory of the project path
221 dn = self.project.getRelativePath(path) 199 dn = self.project.getRelativePath(path)
222 while dn.endswith(os.sep): 200 while dn.endswith(os.sep):
223 dn = dn[:-1] 201 dn = dn[:-1]
224 self.startDirPicker.setText(dn) 202 self.startDirPicker.setText(dn)
225 203
226 @pyqtSlot() 204 @pyqtSlot()
227 def on_outputFilePicker_aboutToShowPathPickerDialog(self): 205 def on_outputFilePicker_aboutToShowPathPickerDialog(self):
228 """ 206 """
229 Private slot called before the file selection dialog is shown. 207 Private slot called before the file selection dialog is shown.
230 """ 208 """
231 startFile = self.outputFilePicker.text() 209 startFile = self.outputFilePicker.text()
232 if not startFile: 210 if not startFile:
233 self.outputFilePicker.setText( 211 self.outputFilePicker.setText(self.project.getProjectName() + ".api")
234 self.project.getProjectName() + ".api") 212
235
236 @pyqtSlot(str) 213 @pyqtSlot(str)
237 def on_outputFilePicker_pathSelected(self, path): 214 def on_outputFilePicker_pathSelected(self, path):
238 """ 215 """
239 Private slot handling the selection of an output file. 216 Private slot handling the selection of an output file.
240 217
241 @param path path of the output file 218 @param path path of the output file
242 @type str 219 @type str
243 """ 220 """
244 # make it relative, if it is in a subdirectory of the project path 221 # make it relative, if it is in a subdirectory of the project path
245 fn = self.project.getRelativePath(path) 222 fn = self.project.getRelativePath(path)
246 self.outputFilePicker.setText(fn) 223 self.outputFilePicker.setText(fn)
247 224
248 def on_outputFilePicker_textChanged(self, filename): 225 def on_outputFilePicker_textChanged(self, filename):
249 """ 226 """
250 Private slot to enable/disable the "OK" button. 227 Private slot to enable/disable the "OK" button.
251 228
252 @param filename name of the file (string) 229 @param filename name of the file (string)
253 """ 230 """
254 self.buttonBox.button( 231 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
255 QDialogButtonBox.StandardButton.Ok).setEnabled(filename != "") 232 filename != ""
256 233 )
234
257 @pyqtSlot(str) 235 @pyqtSlot(str)
258 def on_ignoreDirPicker_pathSelected(self, path): 236 def on_ignoreDirPicker_pathSelected(self, path):
259 """ 237 """
260 Private slot handling the selection of a directory to be ignored. 238 Private slot handling the selection of a directory to be ignored.
261 239
262 @param path path of the directory to be ignored 240 @param path path of the directory to be ignored
263 @type str 241 @type str
264 """ 242 """
265 # make it relative, if it is in a subdirectory of the project path 243 # make it relative, if it is in a subdirectory of the project path
266 dn = self.project.getRelativePath(path) 244 dn = self.project.getRelativePath(path)
267 while dn.endswith(os.sep): 245 while dn.endswith(os.sep):
268 dn = dn[:-1] 246 dn = dn[:-1]
269 self.ignoreDirPicker.setText(dn) 247 self.ignoreDirPicker.setText(dn)
270 248
271 @pyqtSlot() 249 @pyqtSlot()
272 def on_addButton_clicked(self): 250 def on_addButton_clicked(self):
273 """ 251 """
274 Private slot to add the directory displayed to the listview. 252 Private slot to add the directory displayed to the listview.
275 253
276 The directory in the ignore directories 254 The directory in the ignore directories
277 line edit is moved to the listbox above and the edit is cleared. 255 line edit is moved to the listbox above and the edit is cleared.
278 """ 256 """
279 basename = os.path.basename(self.ignoreDirPicker.text()) 257 basename = os.path.basename(self.ignoreDirPicker.text())
280 if basename: 258 if basename:
290 del itm 268 del itm
291 269
292 def accept(self): 270 def accept(self):
293 """ 271 """
294 Public slot called by the Ok button. 272 Public slot called by the Ok button.
295 273
296 It saves the values in the parameters dictionary. 274 It saves the values in the parameters dictionary.
297 """ 275 """
298 self.parameters['useRecursion'] = self.recursionCheckBox.isChecked() 276 self.parameters["useRecursion"] = self.recursionCheckBox.isChecked()
299 self.parameters['includePrivate'] = ( 277 self.parameters["includePrivate"] = self.includePrivateCheckBox.isChecked()
300 self.includePrivateCheckBox.isChecked() 278
301 )
302
303 startdir = self.startDirPicker.text() 279 startdir = self.startDirPicker.text()
304 if startdir: 280 if startdir:
305 startdir = os.path.normpath(startdir) 281 startdir = os.path.normpath(startdir)
306 if startdir.endswith(os.sep): 282 if startdir.endswith(os.sep):
307 startdir = startdir[:-1] 283 startdir = startdir[:-1]
308 self.parameters["startDirectory"] = startdir 284 self.parameters["startDirectory"] = startdir
309 285
310 outfile = self.outputFilePicker.text() 286 outfile = self.outputFilePicker.text()
311 if outfile != '': 287 if outfile != "":
312 outfile = os.path.normpath(outfile) 288 outfile = os.path.normpath(outfile)
313 self.parameters['outputFile'] = outfile 289 self.parameters["outputFile"] = outfile
314 290
315 self.parameters['basePackage'] = self.baseEdit.text() 291 self.parameters["basePackage"] = self.baseEdit.text()
316 self.parameters['ignoreDirectories'] = [] 292 self.parameters["ignoreDirectories"] = []
317 for row in range(0, self.ignoreDirsList.count()): 293 for row in range(0, self.ignoreDirsList.count()):
318 itm = self.ignoreDirsList.item(row) 294 itm = self.ignoreDirsList.item(row)
319 self.parameters['ignoreDirectories'].append( 295 self.parameters["ignoreDirectories"].append(os.path.normpath(itm.text()))
320 os.path.normpath(itm.text())) 296 extensions = self.sourceExtEdit.text().split(",")
321 extensions = self.sourceExtEdit.text().split(',') 297 self.parameters["sourceExtensions"] = [
322 self.parameters['sourceExtensions'] = [
323 ext.strip() for ext in extensions if len(ext) > 0 298 ext.strip() for ext in extensions if len(ext) > 0
324 ] 299 ]
325 patterns = self.excludeFilesEdit.text().split(',') 300 patterns = self.excludeFilesEdit.text().split(",")
326 self.parameters['ignoreFilePatterns'] = [ 301 self.parameters["ignoreFilePatterns"] = [
327 pattern.strip() for pattern in patterns 302 pattern.strip() for pattern in patterns
328 ] 303 ]
329 self.parameters['languages'] = [] 304 self.parameters["languages"] = []
330 for itm in self.languagesList.selectedItems(): 305 for itm in self.languagesList.selectedItems():
331 self.parameters['languages'].append(itm.text()) 306 self.parameters["languages"].append(itm.text())
332 307
333 # call the accept slot of the base class 308 # call the accept slot of the base class
334 super().accept() 309 super().accept()

eric ide

mercurial