84 header = self.programsList.header() |
84 header = self.programsList.header() |
85 header.setSortIndicator(0, Qt.AscendingOrder) |
85 header.setSortIndicator(0, Qt.AscendingOrder) |
86 header.setSortIndicatorShown(False) |
86 header.setSortIndicatorShown(False) |
87 |
87 |
88 with E5OverrideCursor(): |
88 with E5OverrideCursor(): |
89 # 1. do the Qt5 programs |
89 # 1. do the Qt programs |
90 # 1a. Translation Converter |
90 # 1a. Translation Converter |
91 exe = ( |
91 exe = ( |
92 Utilities.isWindowsPlatform() and |
92 Utilities.isWindowsPlatform() and |
93 "{0}.exe".format(Utilities.generateQtToolName("lrelease")) or |
93 "{0}.exe".format(Utilities.generateQtToolName("lrelease")) or |
94 Utilities.generateQtToolName("lrelease") |
94 Utilities.generateQtToolName("lrelease") |
153 # 2.1c. Resource Compiler PyQt5 |
153 # 2.1c. Resource Compiler PyQt5 |
154 self.__createProgramEntry( |
154 self.__createProgramEntry( |
155 self.tr("Resource Compiler (Python, PyQt5)"), |
155 self.tr("Resource Compiler (Python, PyQt5)"), |
156 Utilities.generatePyQtToolPath("pyrcc5"), |
156 Utilities.generatePyQtToolPath("pyrcc5"), |
157 '-version', '', -1, versionRe='Resource Compiler|pyrcc5') |
157 '-version', '', -1, versionRe='Resource Compiler|pyrcc5') |
|
158 |
|
159 # 2.2 do the PyQt6 programs |
|
160 # 2.2a. Translation Extractor PyQt6 |
|
161 self.__createProgramEntry( |
|
162 self.tr("Translation Extractor (Python, PyQt6)"), |
|
163 Utilities.generatePyQtToolPath("pylupdate6"), |
|
164 '--version', versionPosition=0) |
|
165 # 2.2b. Forms Compiler PyQt6 |
|
166 self.__createProgramEntry( |
|
167 self.tr("Forms Compiler (Python, PyQt6)"), |
|
168 Utilities.generatePyQtToolPath("pyuic6"), |
|
169 '--version', versionPosition=0) |
158 |
170 |
159 # 3. do the PySide programs |
171 # 3. do the PySide programs |
160 # 3.1 do the PySide2 programs |
172 # 3.1 do the PySide2 programs |
161 # 3.1a. Translation Extractor PySide2 |
173 # 3.1a. Translation Extractor PySide2 |
162 self.__createProgramEntry( |
174 self.__createProgramEntry( |
301 |
313 |
302 self.__hasSearched = True |
314 self.__hasSearched = True |
303 |
315 |
304 def __createProgramEntry(self, description, exe, |
316 def __createProgramEntry(self, description, exe, |
305 versionCommand="", versionStartsWith="", |
317 versionCommand="", versionStartsWith="", |
306 versionPosition=0, version="", |
318 versionPosition=None, version="", |
307 versionCleanup=None, versionRe=None, |
319 versionCleanup=None, versionRe=None, |
308 exeModule=None): |
320 exeModule=None): |
309 """ |
321 """ |
310 Private method to generate a program entry. |
322 Private method to generate a program entry. |
311 |
323 |
372 "ModuleNotFoundError:" in output or |
379 "ModuleNotFoundError:" in output or |
373 proc.exitCode() != 0) |
380 proc.exitCode() != 0) |
374 ): |
381 ): |
375 version = self.tr("(module not found)") |
382 version = self.tr("(module not found)") |
376 available = False |
383 available = False |
|
384 elif not versionStartsWith and not versionRe: |
|
385 # assume output is just one line |
|
386 try: |
|
387 version = ( |
|
388 output.strip().split()[versionPosition] |
|
389 ) |
|
390 if versionCleanup: |
|
391 version = version[ |
|
392 versionCleanup[0]: |
|
393 versionCleanup[1] |
|
394 ] |
|
395 except IndexError: |
|
396 version = self.tr("(unknown)") |
|
397 available = False |
377 else: |
398 else: |
378 if versionRe is None: |
399 if versionRe is None: |
379 versionRe = "^{0}".format( |
400 versionRe = "^{0}".format( |
380 re.escape(versionStartsWith)) |
401 re.escape(versionStartsWith)) |
381 versionRe = re.compile(versionRe, re.UNICODE) |
402 versionRe = re.compile(versionRe, re.UNICODE) |