Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
equal deleted inserted replaced
-1:000000000000 0:de9c2efb9d02
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2004 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to enter the parameters for eric4-api.
8 """
9
10 import sys
11 import os
12 import copy
13
14 from PyQt4.QtCore import *
15 from PyQt4.QtGui import *
16
17 from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
18
19 from Ui_EricapiConfigDialog import Ui_EricapiConfigDialog
20 import Utilities
21 import DocumentationTools
22
23 from eric4config import getConfig
24
25 class EricapiConfigDialog(QDialog, Ui_EricapiConfigDialog):
26 """
27 Class implementing a dialog to enter the parameters for eric4-api.
28 """
29 def __init__(self, project, parms = None, parent = None):
30 """
31 Constructor
32
33 @param project reference to the project object (Project.Project)
34 @param parms parameters to set in the dialog
35 @param parent parent widget of this dialog
36 """
37 QDialog.__init__(self,parent)
38 self.setupUi(self)
39
40 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
41 for language in sorted(DocumentationTools.supportedExtensionsDictForApis.keys()):
42 self.languagesList.addItem(language)
43
44 self.ppath = project.getProjectPath()
45 self.project = project
46
47 self.__initializeDefaults()
48
49 # get a copy of the defaults to store the user settings
50 self.parameters = copy.deepcopy(self.defaults)
51
52 # combine it with the values of parms
53 if parms is not None:
54 for key, value in parms.items():
55 self.parameters[key] = parms[key]
56
57 self.outputFileCompleter = E4FileCompleter(self.outputFileEdit)
58 self.ignoreDirCompleter = E4DirCompleter(self.ignoreDirEdit)
59
60 self.recursionCheckBox.setChecked(self.parameters['useRecursion'])
61 self.oldStyleCheckBox.setChecked(not self.parameters['newStyle'])
62 self.includePrivateCheckBox.setChecked(self.parameters['includePrivate'])
63 self.outputFileEdit.setText(self.parameters['outputFile'])
64 self.baseEdit.setText(self.parameters['basePackage'])
65 self.ignoreDirsList.clear()
66 for d in self.parameters['ignoreDirectories']:
67 self.ignoreDirsList.addItem(d)
68 self.sourceExtEdit.setText(", ".join(self.parameters['sourceExtensions']))
69 self.excludeFilesEdit.setText(", ".join(self.parameters['ignoreFilePatterns']))
70 for language in self.parameters['languages']:
71 items = self.languagesList.findItems(language, Qt.MatchFlags(Qt.MatchExactly))
72 items[0].setSelected(True)
73
74 def __initializeDefaults(self):
75 """
76 Private method to set the default values.
77
78 These are needed later on to generate the commandline
79 parameters.
80 """
81 self.defaults = {
82 'useRecursion' : False,
83 'newStyle' : True,
84 'includePrivate' : False,
85 'outputFile' : '',
86 'basePackage' : '',
87 'ignoreDirectories' : [],
88 'ignoreFilePatterns' : [],
89 'sourceExtensions' : [],
90 }
91
92 lang = self.project.getProjectLanguage()
93 if lang in DocumentationTools.supportedExtensionsDictForApis:
94 self.defaults['languages'] = [lang]
95 else:
96 self.defaults['languages'] = ["Python"]
97
98 def generateParameters(self):
99 """
100 Public method that generates the commandline parameters.
101
102 It generates a list of strings to be used
103 to set the QProcess arguments for the ericapi call and
104 a dictionary containing the non default parameters. This
105 dictionary can be passed back upon object generation to overwrite
106 the default settings.
107
108 @return a tuple of the commandline parameters and non default parameters
109 (list of strings, dictionary)
110 """
111 parms = {}
112 args = []
113
114 # 1. the program name
115 args.append(sys.executable)
116 args.append(Utilities.normabsjoinpath(getConfig('ericDir'), "eric4-api.py"))
117
118 # 2. the commandline options
119 if self.parameters['outputFile'] != self.defaults['outputFile']:
120 parms['outputFile'] = self.parameters['outputFile']
121 args.append('-o')
122 if os.path.isabs(self.parameters['outputFile']):
123 args.append(self.parameters['outputFile'])
124 else:
125 args.append(os.path.join(self.ppath, self.parameters['outputFile']))
126 if self.parameters['basePackage'] != self.defaults['basePackage']:
127 parms['basePackage'] = self.parameters['basePackage']
128 args.append('-b')
129 args.append(self.parameters['basePackage'])
130 if self.parameters['ignoreDirectories'] != self.defaults['ignoreDirectories']:
131 parms['ignoreDirectories'] = self.parameters['ignoreDirectories'][:]
132 for d in self.parameters['ignoreDirectories']:
133 args.append('-x')
134 args.append(d)
135 if self.parameters['ignoreFilePatterns'] != self.defaults['ignoreFilePatterns']:
136 parms['ignoreFilePatterns'] = self.parameters['ignoreFilePatterns'][:]
137 for pattern in self.parameters['ignoreFilePatterns']:
138 args.append("--exclude-file=%s" % pattern)
139 if self.parameters['useRecursion'] != self.defaults['useRecursion']:
140 parms['useRecursion'] = self.parameters['useRecursion']
141 args.append('-r')
142 if self.parameters['sourceExtensions'] != self.defaults['sourceExtensions']:
143 parms['sourceExtensions'] = self.parameters['sourceExtensions'][:]
144 for ext in self.parameters['sourceExtensions']:
145 args.append('-t')
146 args.append(ext)
147 if self.parameters['newStyle'] != self.defaults['newStyle']:
148 parms['newStyle'] = self.parameters['newStyle']
149 args.append('--oldstyle')
150 if self.parameters['includePrivate'] != self.defaults['includePrivate']:
151 parms['includePrivate'] = self.parameters['includePrivate']
152 args.append('-p')
153 parms['languages'] = self.parameters['languages'][:]
154 for lang in self.parameters['languages']:
155 args.append('--language=%s' % lang)
156
157 return (args, parms)
158
159 @pyqtSlot()
160 def on_outputFileButton_clicked(self):
161 """
162 Private slot to select the output file.
163
164 It displays a file selection dialog to
165 select the file the api is written to.
166 """
167 filename = QFileDialog.getSaveFileName(\
168 self,
169 self.trUtf8("Select output file"),
170 self.outputFileEdit.text(),
171 self.trUtf8("API files (*.api);;All files (*)"))
172
173 if filename:
174 # make it relative, if it is in a subdirectory of the project path
175 fn = Utilities.toNativeSeparators(filename)
176 fn = fn.replace(self.ppath + os.sep, '')
177 self.outputFileEdit.setText(fn)
178
179 def on_outputFileEdit_textChanged(self, filename):
180 """
181 Private slot to enable/disable the "OK" button.
182
183 @param filename name of the file (string)
184 """
185 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(filename != "")
186
187 @pyqtSlot()
188 def on_ignoreDirButton_clicked(self):
189 """
190 Private slot to select a directory to be ignored.
191
192 It displays a directory selection dialog to
193 select a directory to be ignored.
194 """
195 startDir = self.ignoreDirEdit.text()
196 if not startDir:
197 startDir = self.ppath
198 directory = QFileDialog.getExistingDirectory(\
199 self,
200 self.trUtf8("Select directory to exclude"),
201 startDir,
202 QFileDialog.Options(QFileDialog.ShowDirsOnly))
203
204 if directory:
205 # make it relative, if it is a subdirectory of the project path
206 dn = Utilities.toNativeSeparators(directory)
207 dn = dn.replace(self.ppath + os.sep, '')
208 while dn.endswith(os.sep):
209 dn = dn[:-1]
210 self.ignoreDirEdit.setText(dn)
211
212 @pyqtSlot()
213 def on_addButton_clicked(self):
214 """
215 Private slot to add the directory displayed to the listview.
216
217 The directory in the ignore directories
218 line edit is moved to the listbox above and the edit is cleared.
219 """
220 self.ignoreDirsList.addItem(os.path.basename(self.ignoreDirEdit.text()))
221 self.ignoreDirEdit.clear()
222
223 @pyqtSlot()
224 def on_deleteButton_clicked(self):
225 """
226 Private slot to delete the currently selected directory of the listbox.
227 """
228 itm = self.ignoreDirsList.takeItem(self.ignoreDirsList.currentRow())
229 del itm
230
231 def accept(self):
232 """
233 Protected slot called by the Ok button.
234
235 It saves the values in the parameters dictionary.
236 """
237 self.parameters['useRecursion'] = self.recursionCheckBox.isChecked()
238 self.parameters['newStyle'] = not self.oldStyleCheckBox.isChecked()
239 self.parameters['includePrivate'] = self.includePrivateCheckBox.isChecked()
240 outfile = self.outputFileEdit.text()
241 if outfile != '':
242 outfile = os.path.normpath(outfile)
243 self.parameters['outputFile'] = outfile
244 self.parameters['basePackage'] = self.baseEdit.text()
245 self.parameters['ignoreDirectories'] = []
246 for row in range(0, self.ignoreDirsList.count()):
247 itm = self.ignoreDirsList.item(row)
248 self.parameters['ignoreDirectories'].append(\
249 os.path.normpath(itm.text()))
250 extensions = self.sourceExtEdit.text().split(',')
251 self.parameters['sourceExtensions'] = \
252 [ext.strip() for ext in extensions if len(ext) > 0]
253 patterns = self.excludeFilesEdit.text().split(',')
254 self.parameters['ignoreFilePatterns'] = \
255 [pattern.strip() for pattern in patterns]
256 self.parameters['languages'] = []
257 for itm in self.languagesList.selectedItems():
258 self.parameters['languages'].append(itm.text())
259
260 # call the accept slot of the base class
261 QDialog.accept(self)

eric ide

mercurial