Project/ProjectTranslationsBrowser.py

changeset 945
8cd4d08fa9f6
parent 791
9ec2ac20e54e
child 949
f888270da22e
equal deleted inserted replaced
944:1b59c4ba121e 945:8cd4d08fa9f6
24 from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog 24 from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog
25 25
26 import Preferences 26 import Preferences
27 import Utilities 27 import Utilities
28 28
29
29 class ProjectTranslationsBrowser(ProjectBaseBrowser): 30 class ProjectTranslationsBrowser(ProjectBaseBrowser):
30 """ 31 """
31 A class used to display the translations part of the project. 32 A class used to display the translations part of the project.
32 33
33 @signal linguistFile(str) emitted to open a translation file with 34 @signal linguistFile(str) emitted to open a translation file with
34 Qt-Linguist 35 Qt-Linguist
35 @signal appendStdout(str) emitted after something was received from 36 @signal appendStdout(str) emitted after something was received from
36 a QProcess on stdout 37 a QProcess on stdout
37 @signal appendStderr(str) emitted after something was received from 38 @signal appendStderr(str) emitted after something was received from
38 a QProcess on stderr 39 a QProcess on stderr
39 @signal sourceFile(str) emitted to open a translation file in an editor 40 @signal sourceFile(str) emitted to open a translation file in an editor
40 @signal closeSourceWindow(str) emitted after a file has been removed/deleted 41 @signal closeSourceWindow(str) emitted after a file has been removed/deleted
41 from the project 42 from the project
42 @signal trpreview(list of str, bool = False) emitted to preview translations in the 43 @signal trpreview(list of str, bool = False) emitted to preview translations in the
43 translations previewer 44 translations previewer
44 @signal showMenu(str, QMenu) emitted when a menu is about to be shown. The name 45 @signal showMenu(str, QMenu) emitted when a menu is about to be shown. The name
45 of the menu and a reference to the menu are given. 46 of the menu and a reference to the menu are given.
46 """ 47 """
47 sourceFile = pyqtSignal(str) 48 sourceFile = pyqtSignal(str)
104 self.qmprocBackMenuActions = [] 105 self.qmprocBackMenuActions = []
105 106
106 self.menu = QMenu(self) 107 self.menu = QMenu(self)
107 if self.project.getProjectType() in \ 108 if self.project.getProjectType() in \
108 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: 109 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]:
109 act = self.menu.addAction(self.trUtf8('Generate translation'), 110 act = self.menu.addAction(self.trUtf8('Generate translation'),
110 self.__generateSelected) 111 self.__generateSelected)
111 self.tsMenuActions.append(act) 112 self.tsMenuActions.append(act)
112 self.tsprocMenuActions.append(act) 113 self.tsprocMenuActions.append(act)
113 act = self.menu.addAction( 114 act = self.menu.addAction(
114 self.trUtf8('Generate translation (with obsolete)'), 115 self.trUtf8('Generate translation (with obsolete)'),
115 self.__generateObsoleteSelected) 116 self.__generateObsoleteSelected)
116 self.tsMenuActions.append(act) 117 self.tsMenuActions.append(act)
117 self.tsprocMenuActions.append(act) 118 self.tsprocMenuActions.append(act)
118 act = self.menu.addAction(self.trUtf8('Generate all translations'), 119 act = self.menu.addAction(self.trUtf8('Generate all translations'),
119 self.__generateAll) 120 self.__generateAll)
120 self.tsprocMenuActions.append(act) 121 self.tsprocMenuActions.append(act)
121 act = self.menu.addAction( 122 act = self.menu.addAction(
122 self.trUtf8('Generate all translations (with obsolete)'), 123 self.trUtf8('Generate all translations (with obsolete)'),
123 self.__generateObsoleteAll) 124 self.__generateObsoleteAll)
124 self.tsprocMenuActions.append(act) 125 self.tsprocMenuActions.append(act)
125 self.menu.addSeparator() 126 self.menu.addSeparator()
126 act = self.menu.addAction(self.trUtf8('Open in Qt-Linguist'), 127 act = self.menu.addAction(self.trUtf8('Open in Qt-Linguist'),
127 self._openItem) 128 self._openItem)
128 self.tsMenuActions.append(act) 129 self.tsMenuActions.append(act)
129 act = self.menu.addAction(self.trUtf8('Open in Editor'), 130 act = self.menu.addAction(self.trUtf8('Open in Editor'),
130 self.__openFileInEditor) 131 self.__openFileInEditor)
131 self.tsMenuActions.append(act) 132 self.tsMenuActions.append(act)
132 self.menu.addSeparator() 133 self.menu.addSeparator()
133 act = self.menu.addAction(self.trUtf8('Release translation'), 134 act = self.menu.addAction(self.trUtf8('Release translation'),
134 self.__releaseSelected) 135 self.__releaseSelected)
135 self.tsMenuActions.append(act) 136 self.tsMenuActions.append(act)
136 self.qmprocMenuActions.append(act) 137 self.qmprocMenuActions.append(act)
137 act = self.menu.addAction(self.trUtf8('Release all translations'), 138 act = self.menu.addAction(self.trUtf8('Release all translations'),
138 self.__releaseAll) 139 self.__releaseAll)
139 self.qmprocMenuActions.append(act) 140 self.qmprocMenuActions.append(act)
140 self.menu.addSeparator() 141 self.menu.addSeparator()
141 act = self.menu.addAction(self.trUtf8('Preview translation'), 142 act = self.menu.addAction(self.trUtf8('Preview translation'),
142 self.__TRPreview) 143 self.__TRPreview)
143 self.qmMenuActions.append(act) 144 self.qmMenuActions.append(act)
144 act = self.menu.addAction(self.trUtf8('Preview all translations'), 145 act = self.menu.addAction(self.trUtf8('Preview all translations'),
145 self.__TRPreviewAll) 146 self.__TRPreviewAll)
146 self.menu.addSeparator() 147 self.menu.addSeparator()
147 else: 148 else:
148 if self.hooks["extractMessages"] is not None: 149 if self.hooks["extractMessages"] is not None:
149 act = self.menu.addAction( 150 act = self.menu.addAction(
150 self.hooksMenuEntries.get("extractMessages", 151 self.hooksMenuEntries.get("extractMessages",
151 self.trUtf8('Extract messages')), 152 self.trUtf8('Extract messages')),
152 self.__extractMessages) 153 self.__extractMessages)
153 self.menuActions.append(act) 154 self.menuActions.append(act)
154 self.menu.addSeparator() 155 self.menu.addSeparator()
155 if self.hooks["generateSelected"] is not None: 156 if self.hooks["generateSelected"] is not None:
156 act = self.menu.addAction( 157 act = self.menu.addAction(
157 self.hooksMenuEntries.get("generateSelected", 158 self.hooksMenuEntries.get("generateSelected",
158 self.trUtf8('Generate translation')), 159 self.trUtf8('Generate translation')),
159 self.__generateSelected) 160 self.__generateSelected)
160 self.tsMenuActions.append(act) 161 self.tsMenuActions.append(act)
161 self.tsprocMenuActions.append(act) 162 self.tsprocMenuActions.append(act)
162 if self.hooks["generateSelectedWithObsolete"] is not None: 163 if self.hooks["generateSelectedWithObsolete"] is not None:
163 act = self.menu.addAction( 164 act = self.menu.addAction(
164 self.hooksMenuEntries.get("generateSelectedWithObsolete", 165 self.hooksMenuEntries.get("generateSelectedWithObsolete",
165 self.trUtf8('Generate translation (with obsolete)')), 166 self.trUtf8('Generate translation (with obsolete)')),
166 self.__generateObsoleteSelected) 167 self.__generateObsoleteSelected)
167 self.tsMenuActions.append(act) 168 self.tsMenuActions.append(act)
168 self.tsprocMenuActions.append(act) 169 self.tsprocMenuActions.append(act)
169 if self.hooks["generateAll"] is not None: 170 if self.hooks["generateAll"] is not None:
170 act = self.menu.addAction( 171 act = self.menu.addAction(
171 self.hooksMenuEntries.get("generateAll", 172 self.hooksMenuEntries.get("generateAll",
172 self.trUtf8('Generate all translations')), 173 self.trUtf8('Generate all translations')),
173 self.__generateAll) 174 self.__generateAll)
174 self.tsprocMenuActions.append(act) 175 self.tsprocMenuActions.append(act)
175 if self.hooks["generateAllWithObsolete"] is not None: 176 if self.hooks["generateAllWithObsolete"] is not None:
176 act = self.menu.addAction( 177 act = self.menu.addAction(
177 self.hooksMenuEntries.get("generateAllWithObsolete", 178 self.hooksMenuEntries.get("generateAllWithObsolete",
178 self.trUtf8('Generate all translations (with obsolete)')), 179 self.trUtf8('Generate all translations (with obsolete)')),
179 self.__generateObsoleteAll) 180 self.__generateObsoleteAll)
180 self.tsprocMenuActions.append(act) 181 self.tsprocMenuActions.append(act)
181 self.menu.addSeparator() 182 self.menu.addSeparator()
182 act = self.menu.addAction(self.trUtf8('Open in Editor'), 183 act = self.menu.addAction(self.trUtf8('Open in Editor'),
183 self.__openFileInEditor) 184 self.__openFileInEditor)
184 self.tsMenuActions.append(act) 185 self.tsMenuActions.append(act)
185 self.menu.addSeparator() 186 self.menu.addSeparator()
186 if self.hooks["releaseSelected"] is not None: 187 if self.hooks["releaseSelected"] is not None:
187 act = self.menu.addAction( 188 act = self.menu.addAction(
188 self.hooksMenuEntries.get("releaseSelected", 189 self.hooksMenuEntries.get("releaseSelected",
189 self.trUtf8('Release translation')), 190 self.trUtf8('Release translation')),
190 self.__releaseSelected) 191 self.__releaseSelected)
191 self.tsMenuActions.append(act) 192 self.tsMenuActions.append(act)
192 self.qmprocMenuActions.append(act) 193 self.qmprocMenuActions.append(act)
193 if self.hooks["releaseAll"] is not None: 194 if self.hooks["releaseAll"] is not None:
194 act = self.menu.addAction( 195 act = self.menu.addAction(
195 self.hooksMenuEntries.get("releaseAll", 196 self.hooksMenuEntries.get("releaseAll",
196 self.trUtf8('Release all translations')), 197 self.trUtf8('Release all translations')),
197 self.__releaseAll) 198 self.__releaseAll)
198 self.qmprocMenuActions.append(act) 199 self.qmprocMenuActions.append(act)
199 self.menu.addSeparator() 200 self.menu.addSeparator()
200 act = self.menu.addAction(self.trUtf8('Remove from project'), 201 act = self.menu.addAction(self.trUtf8('Remove from project'),
201 self.__removeLanguageFile) 202 self.__removeLanguageFile)
202 self.menuActions.append(act) 203 self.menuActions.append(act)
203 act = self.menu.addAction(self.trUtf8('Delete'), self.__deleteLanguageFile) 204 act = self.menu.addAction(self.trUtf8('Delete'), self.__deleteLanguageFile)
204 self.menuActions.append(act) 205 self.menuActions.append(act)
205 self.menu.addSeparator() 206 self.menu.addSeparator()
206 self.menu.addAction(self.trUtf8('Add translation...'), self.project.addLanguage) 207 self.menu.addAction(self.trUtf8('Add translation...'), self.project.addLanguage)
207 self.menu.addAction(self.trUtf8('Add translation files...'), 208 self.menu.addAction(self.trUtf8('Add translation files...'),
208 self.__addTranslationFiles) 209 self.__addTranslationFiles)
209 self.menu.addSeparator() 210 self.menu.addSeparator()
210 self.menu.addAction(self.trUtf8('Copy Path to Clipboard'), 211 self.menu.addAction(self.trUtf8('Copy Path to Clipboard'),
211 self._copyToClipboard) 212 self._copyToClipboard)
212 self.menu.addSeparator() 213 self.menu.addSeparator()
213 self.menu.addAction(self.trUtf8('Configure...'), self._configure) 214 self.menu.addAction(self.trUtf8('Configure...'), self._configure)
214 215
215 self.backMenu = QMenu(self) 216 self.backMenu = QMenu(self)
216 if self.project.getProjectType() in \ 217 if self.project.getProjectType() in \
217 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: 218 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]:
218 act = self.backMenu.addAction(self.trUtf8('Generate all translations'), 219 act = self.backMenu.addAction(self.trUtf8('Generate all translations'),
219 self.__generateAll) 220 self.__generateAll)
220 self.tsprocBackMenuActions.append(act) 221 self.tsprocBackMenuActions.append(act)
221 act = self.backMenu.addAction( 222 act = self.backMenu.addAction(
222 self.trUtf8('Generate all translations (with obsolete)'), 223 self.trUtf8('Generate all translations (with obsolete)'),
223 self.__generateObsoleteAll) 224 self.__generateObsoleteAll)
224 self.tsprocBackMenuActions.append(act) 225 self.tsprocBackMenuActions.append(act)
225 act = self.backMenu.addAction(self.trUtf8('Release all translations'), 226 act = self.backMenu.addAction(self.trUtf8('Release all translations'),
226 self.__releaseAll) 227 self.__releaseAll)
227 self.qmprocBackMenuActions.append(act) 228 self.qmprocBackMenuActions.append(act)
228 self.backMenu.addSeparator() 229 self.backMenu.addSeparator()
229 act = self.backMenu.addAction(self.trUtf8('Preview all translations'), 230 act = self.backMenu.addAction(self.trUtf8('Preview all translations'),
230 self.__TRPreview) 231 self.__TRPreview)
231 else: 232 else:
232 if self.hooks["extractMessages"] is not None: 233 if self.hooks["extractMessages"] is not None:
233 act = self.backMenu.addAction( 234 act = self.backMenu.addAction(
234 self.hooksMenuEntries.get("extractMessages", 235 self.hooksMenuEntries.get("extractMessages",
235 self.trUtf8('Extract messages')), 236 self.trUtf8('Extract messages')),
236 self.__extractMessages) 237 self.__extractMessages)
237 self.backMenu.addSeparator() 238 self.backMenu.addSeparator()
238 if self.hooks["generateAll"] is not None: 239 if self.hooks["generateAll"] is not None:
239 act = self.backMenu.addAction( 240 act = self.backMenu.addAction(
240 self.hooksMenuEntries.get("generateAll", 241 self.hooksMenuEntries.get("generateAll",
241 self.trUtf8('Generate all translations')), 242 self.trUtf8('Generate all translations')),
242 self.__generateAll) 243 self.__generateAll)
243 self.tsprocBackMenuActions.append(act) 244 self.tsprocBackMenuActions.append(act)
244 if self.hooks["generateAllWithObsolete"] is not None: 245 if self.hooks["generateAllWithObsolete"] is not None:
245 act = self.backMenu.addAction( 246 act = self.backMenu.addAction(
246 self.hooksMenuEntries.get("generateAllWithObsolete", 247 self.hooksMenuEntries.get("generateAllWithObsolete",
247 self.trUtf8('Generate all translations (with obsolete)')), 248 self.trUtf8('Generate all translations (with obsolete)')),
248 self.__generateObsoleteAll) 249 self.__generateObsoleteAll)
249 self.tsprocBackMenuActions.append(act) 250 self.tsprocBackMenuActions.append(act)
250 if self.hooks["releaseAll"] is not None: 251 if self.hooks["releaseAll"] is not None:
251 act = self.backMenu.addAction( 252 act = self.backMenu.addAction(
252 self.hooksMenuEntries.get("releaseAll", 253 self.hooksMenuEntries.get("releaseAll",
253 self.trUtf8('Release all translations')), 254 self.trUtf8('Release all translations')),
254 self.__releaseAll) 255 self.__releaseAll)
255 self.qmprocBackMenuActions.append(act) 256 self.qmprocBackMenuActions.append(act)
256 self.backMenu.addSeparator() 257 self.backMenu.addSeparator()
257 self.backMenu.addAction(self.trUtf8('Add translation...'), 258 self.backMenu.addAction(self.trUtf8('Add translation...'),
258 self.project.addLanguage) 259 self.project.addLanguage)
259 self.backMenu.addAction(self.trUtf8('Add translation files...'), 260 self.backMenu.addAction(self.trUtf8('Add translation files...'),
260 self.__addTranslationFiles) 261 self.__addTranslationFiles)
261 self.backMenu.addSeparator() 262 self.backMenu.addSeparator()
262 self.backMenu.addAction(self.trUtf8('Configure...'), self._configure) 263 self.backMenu.addAction(self.trUtf8('Configure...'), self._configure)
263 self.backMenu.setEnabled(False) 264 self.backMenu.setEnabled(False)
264 265
265 # create the menu for multiple selected files 266 # create the menu for multiple selected files
266 self.multiMenu = QMenu(self) 267 self.multiMenu = QMenu(self)
267 if self.project.getProjectType() in \ 268 if self.project.getProjectType() in \
268 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: 269 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]:
269 act = self.multiMenu.addAction(self.trUtf8('Generate translations'), 270 act = self.multiMenu.addAction(self.trUtf8('Generate translations'),
270 self.__generateSelected) 271 self.__generateSelected)
271 self.tsMultiMenuActions.append(act) 272 self.tsMultiMenuActions.append(act)
272 self.tsprocMultiMenuActions.append(act) 273 self.tsprocMultiMenuActions.append(act)
273 act = self.multiMenu.addAction( 274 act = self.multiMenu.addAction(
274 self.trUtf8('Generate translations (with obsolete)'), 275 self.trUtf8('Generate translations (with obsolete)'),
277 self.tsprocMultiMenuActions.append(act) 278 self.tsprocMultiMenuActions.append(act)
278 self.multiMenu.addSeparator() 279 self.multiMenu.addSeparator()
279 act = self.multiMenu.addAction( 280 act = self.multiMenu.addAction(
280 self.trUtf8('Open in Qt-Linguist'), self._openItem) 281 self.trUtf8('Open in Qt-Linguist'), self._openItem)
281 self.tsMultiMenuActions.append(act) 282 self.tsMultiMenuActions.append(act)
282 act = self.multiMenu.addAction(self.trUtf8('Open in Editor'), 283 act = self.multiMenu.addAction(self.trUtf8('Open in Editor'),
283 self.__openFileInEditor) 284 self.__openFileInEditor)
284 self.tsMultiMenuActions.append(act) 285 self.tsMultiMenuActions.append(act)
285 self.multiMenu.addSeparator() 286 self.multiMenu.addSeparator()
286 act = self.multiMenu.addAction(self.trUtf8('Release translations'), 287 act = self.multiMenu.addAction(self.trUtf8('Release translations'),
287 self.__releaseSelected) 288 self.__releaseSelected)
288 self.tsMultiMenuActions.append(act) 289 self.tsMultiMenuActions.append(act)
289 self.qmprocMultiMenuActions.append(act) 290 self.qmprocMultiMenuActions.append(act)
290 self.multiMenu.addSeparator() 291 self.multiMenu.addSeparator()
291 act = self.multiMenu.addAction(self.trUtf8('Preview translations'), 292 act = self.multiMenu.addAction(self.trUtf8('Preview translations'),
292 self.__TRPreview) 293 self.__TRPreview)
293 self.qmMultiMenuActions.append(act) 294 self.qmMultiMenuActions.append(act)
294 else: 295 else:
295 if self.hooks["extractMessages"] is not None: 296 if self.hooks["extractMessages"] is not None:
296 act = self.multiMenu.addAction( 297 act = self.multiMenu.addAction(
297 self.hooksMenuEntries.get("extractMessages", 298 self.hooksMenuEntries.get("extractMessages",
298 self.trUtf8('Extract messages')), 299 self.trUtf8('Extract messages')),
299 self.__extractMessages) 300 self.__extractMessages)
300 self.multiMenuActions.append(act) 301 self.multiMenuActions.append(act)
301 self.multiMenu.addSeparator() 302 self.multiMenu.addSeparator()
302 if self.hooks["generateSelected"] is not None: 303 if self.hooks["generateSelected"] is not None:
303 act = self.multiMenu.addAction( 304 act = self.multiMenu.addAction(
304 self.hooksMenuEntries.get("generateSelected", 305 self.hooksMenuEntries.get("generateSelected",
305 self.trUtf8('Generate translations')), 306 self.trUtf8('Generate translations')),
306 self.__generateSelected) 307 self.__generateSelected)
307 self.tsMultiMenuActions.append(act) 308 self.tsMultiMenuActions.append(act)
308 self.tsprocMultiMenuActions.append(act) 309 self.tsprocMultiMenuActions.append(act)
309 if self.hooks["generateSelectedWithObsolete"] is not None: 310 if self.hooks["generateSelectedWithObsolete"] is not None:
310 act = self.multiMenu.addAction( 311 act = self.multiMenu.addAction(
311 self.hooksMenuEntries.get("generateSelectedWithObsolete", 312 self.hooksMenuEntries.get("generateSelectedWithObsolete",
312 self.trUtf8('Generate translations (with obsolete)')), 313 self.trUtf8('Generate translations (with obsolete)')),
313 self.__generateObsoleteSelected) 314 self.__generateObsoleteSelected)
314 self.tsMultiMenuActions.append(act) 315 self.tsMultiMenuActions.append(act)
315 self.tsprocMultiMenuActions.append(act) 316 self.tsprocMultiMenuActions.append(act)
316 self.multiMenu.addSeparator() 317 self.multiMenu.addSeparator()
317 act = self.multiMenu.addAction(self.trUtf8('Open in Editor'), 318 act = self.multiMenu.addAction(self.trUtf8('Open in Editor'),
318 self.__openFileInEditor) 319 self.__openFileInEditor)
319 self.tsMultiMenuActions.append(act) 320 self.tsMultiMenuActions.append(act)
320 self.multiMenu.addSeparator() 321 self.multiMenu.addSeparator()
321 if self.hooks["releaseSelected"] is not None: 322 if self.hooks["releaseSelected"] is not None:
322 act = self.multiMenu.addAction( 323 act = self.multiMenu.addAction(
323 self.hooksMenuEntries.get("releaseSelected", 324 self.hooksMenuEntries.get("releaseSelected",
324 self.trUtf8('Release translations')), 325 self.trUtf8('Release translations')),
325 self.__releaseSelected) 326 self.__releaseSelected)
326 self.tsMultiMenuActions.append(act) 327 self.tsMultiMenuActions.append(act)
327 self.qmprocMultiMenuActions.append(act) 328 self.qmprocMultiMenuActions.append(act)
328 self.multiMenu.addSeparator() 329 self.multiMenu.addSeparator()
329 act = self.multiMenu.addAction(self.trUtf8('Remove from project'), 330 act = self.multiMenu.addAction(self.trUtf8('Remove from project'),
330 self.__removeLanguageFile) 331 self.__removeLanguageFile)
331 self.multiMenuActions.append(act) 332 self.multiMenuActions.append(act)
332 act = self.multiMenu.addAction(self.trUtf8('Delete'), self.__deleteLanguageFile) 333 act = self.multiMenu.addAction(self.trUtf8('Delete'), self.__deleteLanguageFile)
333 self.multiMenuActions.append(act) 334 self.multiMenuActions.append(act)
334 self.multiMenu.addSeparator() 335 self.multiMenu.addSeparator()
335 self.multiMenu.addAction(self.trUtf8('Configure...'), self._configure) 336 self.multiMenu.addAction(self.trUtf8('Configure...'), self._configure)
336 337
337 self.dirMenu = QMenu(self) 338 self.dirMenu = QMenu(self)
338 if self.project.getProjectType() in \ 339 if self.project.getProjectType() in \
339 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: 340 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]:
340 act = self.dirMenu.addAction(self.trUtf8('Generate all translations'), 341 act = self.dirMenu.addAction(self.trUtf8('Generate all translations'),
341 self.__generateAll) 342 self.__generateAll)
342 self.tsprocDirMenuActions.append(act) 343 self.tsprocDirMenuActions.append(act)
343 act = self.dirMenu.addAction( 344 act = self.dirMenu.addAction(
344 self.trUtf8('Generate all translations (with obsolete)'), 345 self.trUtf8('Generate all translations (with obsolete)'),
345 self.__generateObsoleteAll) 346 self.__generateObsoleteAll)
346 self.tsprocDirMenuActions.append(act) 347 self.tsprocDirMenuActions.append(act)
347 act = self.dirMenu.addAction(self.trUtf8('Release all translations'), 348 act = self.dirMenu.addAction(self.trUtf8('Release all translations'),
348 self.__releaseAll) 349 self.__releaseAll)
349 self.qmprocDirMenuActions.append(act) 350 self.qmprocDirMenuActions.append(act)
350 self.dirMenu.addSeparator() 351 self.dirMenu.addSeparator()
351 act = self.dirMenu.addAction(self.trUtf8('Preview all translations'), 352 act = self.dirMenu.addAction(self.trUtf8('Preview all translations'),
352 self.__TRPreview) 353 self.__TRPreview)
353 else: 354 else:
354 if self.hooks["extractMessages"] is not None: 355 if self.hooks["extractMessages"] is not None:
355 act = self.dirMenu.addAction( 356 act = self.dirMenu.addAction(
356 self.hooksMenuEntries.get("extractMessages", 357 self.hooksMenuEntries.get("extractMessages",
357 self.trUtf8('Extract messages')), 358 self.trUtf8('Extract messages')),
358 self.__extractMessages) 359 self.__extractMessages)
359 self.dirMenuActions.append(act) 360 self.dirMenuActions.append(act)
360 self.dirMenu.addSeparator() 361 self.dirMenu.addSeparator()
361 if self.hooks["generateAll"] is not None: 362 if self.hooks["generateAll"] is not None:
362 act = self.dirMenu.addAction( 363 act = self.dirMenu.addAction(
363 self.hooksMenuEntries.get("generateAll", 364 self.hooksMenuEntries.get("generateAll",
364 self.trUtf8('Generate all translations')), 365 self.trUtf8('Generate all translations')),
365 self.__generateAll) 366 self.__generateAll)
366 self.tsprocDirMenuActions.append(act) 367 self.tsprocDirMenuActions.append(act)
367 if self.hooks["generateAllWithObsolete"] is not None: 368 if self.hooks["generateAllWithObsolete"] is not None:
368 act = self.dirMenu.addAction( 369 act = self.dirMenu.addAction(
369 self.hooksMenuEntries.get("generateAllWithObsolete", 370 self.hooksMenuEntries.get("generateAllWithObsolete",
370 self.trUtf8('Generate all translations (with obsolete)')), 371 self.trUtf8('Generate all translations (with obsolete)')),
371 self.__generateObsoleteAll) 372 self.__generateObsoleteAll)
372 self.tsprocDirMenuActions.append(act) 373 self.tsprocDirMenuActions.append(act)
373 if self.hooks["releaseAll"] is not None: 374 if self.hooks["releaseAll"] is not None:
374 act = self.dirMenu.addAction( 375 act = self.dirMenu.addAction(
375 self.hooksMenuEntries.get("releaseAll", 376 self.hooksMenuEntries.get("releaseAll",
376 self.trUtf8('Release all translations')), 377 self.trUtf8('Release all translations')),
377 self.__releaseAll) 378 self.__releaseAll)
378 self.qmprocDirMenuActions.append(act) 379 self.qmprocDirMenuActions.append(act)
379 self.dirMenu.addSeparator() 380 self.dirMenu.addSeparator()
380 self.dirMenu.addAction(self.trUtf8('Add translation...'), 381 self.dirMenu.addAction(self.trUtf8('Add translation...'),
381 self.project.addLanguage) 382 self.project.addLanguage)
382 self.dirMenu.addAction(self.trUtf8('Add translation files...'), 383 self.dirMenu.addAction(self.trUtf8('Add translation files...'),
383 self.__addTranslationFiles) 384 self.__addTranslationFiles)
384 self.dirMenu.addSeparator() 385 self.dirMenu.addSeparator()
385 self.dirMenu.addAction(self.trUtf8('Copy Path to Clipboard'), 386 self.dirMenu.addAction(self.trUtf8('Copy Path to Clipboard'),
386 self._copyToClipboard) 387 self._copyToClipboard)
387 self.dirMenu.addSeparator() 388 self.dirMenu.addSeparator()
388 self.dirMenu.addAction(self.trUtf8('Configure...'), self._configure) 389 self.dirMenu.addAction(self.trUtf8('Configure...'), self._configure)
389 390
390 self.dirMultiMenu = None 391 self.dirMultiMenu = None
609 if dlg.exec_() == QDialog.Accepted: 610 if dlg.exec_() == QDialog.Accepted:
610 for fn in translationFiles: 611 for fn in translationFiles:
611 self.closeSourceWindow.emit(fn) 612 self.closeSourceWindow.emit(fn)
612 self.project.deleteLanguageFile(fn) 613 self.project.deleteLanguageFile(fn)
613 614
614 def __TRPreview(self, previewAll = False): 615 def __TRPreview(self, previewAll=False):
615 """ 616 """
616 Private slot to handle the Preview translations action. 617 Private slot to handle the Preview translations action.
617 618
618 @param previewAll flag indicating, that all translations 619 @param previewAll flag indicating, that all translations
619 should be previewed (boolean) 620 should be previewed (boolean)
653 def __writeTempProjectFile(self, langs, filter): 654 def __writeTempProjectFile(self, langs, filter):
654 """ 655 """
655 Private method to write a temporary project file suitable for pylupdate and 656 Private method to write a temporary project file suitable for pylupdate and
656 lrelease. 657 lrelease.
657 658
658 @param langs list of languages to include in the process. An empty list (default) 659 @param langs list of languages to include in the process. An empty list (default)
659 means that all translations should be included. 660 means that all translations should be included.
660 (list of ProjectBrowserFileItem) 661 (list of ProjectBrowserFileItem)
661 @param filter list of source file extension that should be considered 662 @param filter list of source file extension that should be considered
662 (list of strings) 663 (list of strings)
663 @return flag indicating success 664 @return flag indicating success
664 """ 665 """
709 self.trUtf8("Write temporary project file"), 710 self.trUtf8("Write temporary project file"),
710 self.trUtf8("""No translation files (*.ts) selected.""")) 711 self.trUtf8("""No translation files (*.ts) selected."""))
711 return False 712 return False
712 713
713 try: 714 try:
714 pf = open(pfile, "w", encoding = "utf-8") 715 pf = open(pfile, "w", encoding="utf-8")
715 for key, list in sections: 716 for key, list in sections:
716 if len(list) > 0: 717 if len(list) > 0:
717 pf.write('{0} = '.format(key)) 718 pf.write('{0} = '.format(key))
718 last = len(list) - 1 719 last = len(list) - 1
719 if last > 0: 720 if last > 0:
739 self.tmpProject = None 740 self.tmpProject = None
740 return False 741 return False
741 742
742 def __readStdoutLupdate(self): 743 def __readStdoutLupdate(self):
743 """ 744 """
744 Private slot to handle the readyReadStandardOutput signal of the 745 Private slot to handle the readyReadStandardOutput signal of the
745 pylupdate process. 746 pylupdate process.
746 """ 747 """
747 if self.pylupdateProc is not None: 748 if self.pylupdateProc is not None:
748 self.__readStdout(self.pylupdateProc, '{0}: '.format(self.pylupdate)) 749 self.__readStdout(self.pylupdateProc, '{0}: '.format(self.pylupdate))
749 else: 750 else:
750 return 751 return
751 752
752 def __readStdoutLrelease(self): 753 def __readStdoutLrelease(self):
753 """ 754 """
754 Private slot to handle the readyReadStandardOutput signal of the 755 Private slot to handle the readyReadStandardOutput signal of the
755 lrelease process. 756 lrelease process.
756 """ 757 """
757 if self.lreleaseProc is not None: 758 if self.lreleaseProc is not None:
758 self.__readStdout(self.lreleaseProc, 'lrelease: ') 759 self.__readStdout(self.lreleaseProc, 'lrelease: ')
759 else: 760 else:
775 s += output 776 s += output
776 self.appendStdout.emit(s) 777 self.appendStdout.emit(s)
777 778
778 def __readStderrLupdate(self): 779 def __readStderrLupdate(self):
779 """ 780 """
780 Private slot to handle the readyReadStandardError signal of the 781 Private slot to handle the readyReadStandardError signal of the
781 pylupdate process. 782 pylupdate process.
782 """ 783 """
783 if self.pylupdateProc is not None: 784 if self.pylupdateProc is not None:
784 self.__readStderr(self.pylupdateProc, '{0}: '.format(self.pylupdate)) 785 self.__readStderr(self.pylupdateProc, '{0}: '.format(self.pylupdate))
785 else: 786 else:
786 return 787 return
787 788
788 def __readStderrLrelease(self): 789 def __readStderrLrelease(self):
789 """ 790 """
790 Private slot to handle the readyReadStandardError signal of the 791 Private slot to handle the readyReadStandardError signal of the
791 lrelease process. 792 lrelease process.
792 """ 793 """
793 if self.lreleaseProc is not None: 794 if self.lreleaseProc is not None:
794 self.__readStderr(self.lreleaseProc, 'lrelease: ') 795 self.__readStderr(self.lreleaseProc, 'lrelease: ')
795 else: 796 else:
845 os.remove(self.tmpProject) 846 os.remove(self.tmpProject)
846 except EnvironmentError: 847 except EnvironmentError:
847 pass 848 pass
848 self.tmpProject = None 849 self.tmpProject = None
849 850
850 def __generateTSFile(self, noobsolete = False, generateAll = True): 851 def __generateTSFile(self, noobsolete=False, generateAll=True):
851 """ 852 """
852 Private method used to run pylupdate/pylupdate4 to generate the .ts files. 853 Private method used to run pylupdate/pylupdate4 to generate the .ts files.
853 854
854 @param noobsolete flag indicating whether obsolete entries should be 855 @param noobsolete flag indicating whether obsolete entries should be
855 kept (boolean) 856 kept (boolean)
856 @param generateAll flag indicating whether all translations should be 857 @param generateAll flag indicating whether all translations should be
857 generated (boolean) 858 generated (boolean)
858 """ 859 """
859 if generateAll: 860 if generateAll:
860 langs = [] 861 langs = []
861 else: 862 else:
932 """ 933 """
933 Private method to generate all translation files (.ts) for Qt Linguist. 934 Private method to generate all translation files (.ts) for Qt Linguist.
934 935
935 All obsolete strings are removed from the .ts file. 936 All obsolete strings are removed from the .ts file.
936 """ 937 """
937 self.__generateTSFile(noobsolete = True, generateAll = True) 938 self.__generateTSFile(noobsolete=True, generateAll=True)
938 939
939 def __generateObsoleteAll(self): 940 def __generateObsoleteAll(self):
940 """ 941 """
941 Private method to generate all translation files (.ts) for Qt Linguist. 942 Private method to generate all translation files (.ts) for Qt Linguist.
942 943
943 Obsolete strings are kept. 944 Obsolete strings are kept.
944 """ 945 """
945 self.__generateTSFile(noobsolete = False, generateAll = True) 946 self.__generateTSFile(noobsolete=False, generateAll=True)
946 947
947 def __generateSelected(self): 948 def __generateSelected(self):
948 """ 949 """
949 Private method to generate selected translation files (.ts) for Qt Linguist. 950 Private method to generate selected translation files (.ts) for Qt Linguist.
950 951
951 All obsolete strings are removed from the .ts file. 952 All obsolete strings are removed from the .ts file.
952 """ 953 """
953 self.__generateTSFile(noobsolete = True, generateAll = False) 954 self.__generateTSFile(noobsolete=True, generateAll=False)
954 955
955 def __generateObsoleteSelected(self): 956 def __generateObsoleteSelected(self):
956 """ 957 """
957 Private method to generate selected translation files (.ts) for Qt Linguist. 958 Private method to generate selected translation files (.ts) for Qt Linguist.
958 959
959 Obsolete strings are kept. 960 Obsolete strings are kept.
960 """ 961 """
961 self.__generateTSFile(noobsolete = False, generateAll = False) 962 self.__generateTSFile(noobsolete=False, generateAll=False)
962 963
963 ############################################################################ 964 ############################################################################
964 ## Methods for the release commands 965 ## Methods for the release commands
965 ############################################################################ 966 ############################################################################
966 967
973 E5MessageBox.information(self, 974 E5MessageBox.information(self,
974 self.trUtf8("Translation file release"), 975 self.trUtf8("Translation file release"),
975 self.trUtf8("The release of the translation files (*.qm)" 976 self.trUtf8("The release of the translation files (*.qm)"
976 " was successful.")) 977 " was successful."))
977 if self.project.pdata["TRANSLATIONSBINPATH"]: 978 if self.project.pdata["TRANSLATIONSBINPATH"]:
978 target = os.path.join(self.project.ppath, 979 target = os.path.join(self.project.ppath,
979 self.project.pdata["TRANSLATIONSBINPATH"][0]) 980 self.project.pdata["TRANSLATIONSBINPATH"][0])
980 for langFile in self.project.pdata["TRANSLATIONS"][:]: 981 for langFile in self.project.pdata["TRANSLATIONS"][:]:
981 if langFile.endswith('.ts'): 982 if langFile.endswith('.ts'):
982 qmFile = os.path.join(self.project.ppath, 983 qmFile = os.path.join(self.project.ppath,
983 langFile.replace('.ts', '.qm')) 984 langFile.replace('.ts', '.qm'))
993 except EnvironmentError: 994 except EnvironmentError:
994 pass 995 pass
995 self.tmpProject = None 996 self.tmpProject = None
996 self.project.checkLanguageFiles() 997 self.project.checkLanguageFiles()
997 998
998 def __releaseTSFile(self, generateAll = False): 999 def __releaseTSFile(self, generateAll=False):
999 """ 1000 """
1000 Private method to run lrelease to release the translation files (.qm). 1001 Private method to run lrelease to release the translation files (.qm).
1001 1002
1002 @param generateAll flag indicating whether all translations should be 1003 @param generateAll flag indicating whether all translations should be
1003 released (boolean) 1004 released (boolean)
1059 1060
1060 def __releaseSelected(self): 1061 def __releaseSelected(self):
1061 """ 1062 """
1062 Private method to release the translation files (.qm). 1063 Private method to release the translation files (.qm).
1063 """ 1064 """
1064 self.__releaseTSFile(generateAll = False) 1065 self.__releaseTSFile(generateAll=False)
1065 1066
1066 def __releaseAll(self): 1067 def __releaseAll(self):
1067 """ 1068 """
1068 Private method to release the translation files (.qm). 1069 Private method to release the translation files (.qm).
1069 """ 1070 """
1070 self.__releaseTSFile(generateAll = True) 1071 self.__releaseTSFile(generateAll=True)
1071 1072
1072 ############################################################################ 1073 ############################################################################
1073 ## Support for hooks below 1074 ## Support for hooks below
1074 ############################################################################ 1075 ############################################################################
1075 1076
1089 </ul> 1090 </ul>
1090 1091
1091 <b>Note</b>: Filenames are relative to the project directory. 1092 <b>Note</b>: Filenames are relative to the project directory.
1092 """ 1093 """
1093 self.hooks = { 1094 self.hooks = {
1094 "extractMessages" : None, 1095 "extractMessages": None,
1095 "generateAll" : None, 1096 "generateAll": None,
1096 "generateAllWithObsolete" : None, 1097 "generateAllWithObsolete": None,
1097 "generateSelected" : None, 1098 "generateSelected": None,
1098 "generateSelectedWithObsolete" : None, 1099 "generateSelectedWithObsolete": None,
1099 "releaseAll" : None, 1100 "releaseAll": None,
1100 "releaseSelected" : None, 1101 "releaseSelected": None,
1101 } 1102 }

eric ide

mercurial