286 mapped = bytes(type_).decode() |
286 mapped = bytes(type_).decode() |
287 |
287 |
288 # I. always check for * |
288 # I. always check for * |
289 mapped = mapped.replace("*", "") |
289 mapped = mapped.replace("*", "") |
290 |
290 |
291 if ( |
291 # 1. check for const |
292 self.project.getProjectLanguage() != "Python2" or |
292 mapped = mapped.replace("const ", "") |
293 self.project.getProjectType in ("PySide", "PySide2") |
293 |
294 ): |
294 # 2. replace QString and QStringList |
295 # 1. check for const |
295 mapped = ( |
296 mapped = mapped.replace("const ", "") |
296 mapped |
297 |
297 .replace("QStringList", "list") |
298 # 2. replace QString and QStringList |
298 .replace("QString", "str") |
299 mapped = ( |
299 ) |
300 mapped |
300 |
301 .replace("QStringList", "list") |
301 # 3. replace double by float |
302 .replace("QString", "str") |
302 mapped = mapped.replace("double", "float") |
303 ) |
|
304 |
|
305 # 3. replace double by float |
|
306 mapped = mapped.replace("double", "float") |
|
307 |
303 |
308 return mapped |
304 return mapped |
309 |
305 |
310 def __updateSlotsModel(self): |
306 def __updateSlotsModel(self): |
311 """ |
307 """ |
375 ): |
371 ): |
376 self.__generatePythonCode() |
372 self.__generatePythonCode() |
377 elif self.filenameEdit.text().endswith(".rb"): |
373 elif self.filenameEdit.text().endswith(".rb"): |
378 pass |
374 pass |
379 # second decide on project language |
375 # second decide on project language |
380 elif self.project.getProjectLanguage() in ["Python2", "Python3"]: |
376 elif self.project.getProjectLanguage() == "Python3": |
381 self.__generatePythonCode() |
377 self.__generatePythonCode() |
382 elif self.project.getProjectLanguage() == "Ruby": |
378 elif self.project.getProjectLanguage() == "Ruby": |
383 pass |
379 pass |
384 else: |
380 else: |
385 # assume Python (our global default) |
381 # assume Python (our global default) |
387 |
383 |
388 def __generatePythonCode(self): |
384 def __generatePythonCode(self): |
389 """ |
385 """ |
390 Private slot to generate Python code as requested by the user. |
386 Private slot to generate Python code as requested by the user. |
391 """ |
387 """ |
|
388 if self.project.getProjectLanguage() != "Python3": |
|
389 E5MessageBox.critical( |
|
390 self, |
|
391 self.tr("Code Generation"), |
|
392 self.tr( |
|
393 """<p>Code generation for project language""" |
|
394 """ "{0}" is not supported.</p>""") |
|
395 .format(self.project.getProjectLanguage())) |
|
396 return |
|
397 |
392 # init some variables |
398 # init some variables |
393 sourceImpl = [] |
399 sourceImpl = [] |
394 appendAtIndex = -1 |
400 appendAtIndex = -1 |
395 indentStr = " " |
401 indentStr = " " |
396 slotsCode = [] |
402 slotsCode = [] |
397 |
403 |
398 if self.__module is None: |
404 if self.__module is None: |
399 # new file |
405 # new file |
400 try: |
406 try: |
401 if self.project.getProjectLanguage() == "Python2": |
407 if self.project.getProjectType() == "PySide2": |
402 if self.project.getProjectType() == "PySide": |
408 tmplName = os.path.join( |
403 tmplName = os.path.join( |
409 getConfig('ericCodeTemplatesDir'), |
404 getConfig('ericCodeTemplatesDir'), |
410 "impl_pyside2.py.tmpl") |
405 "impl_pyside.py2.tmpl") |
411 elif self.project.getProjectType() in [ |
406 elif self.project.getProjectType() == "PySide2": |
412 "PyQt5", "E6Plugin"]: |
407 tmplName = os.path.join( |
413 tmplName = os.path.join( |
408 getConfig('ericCodeTemplatesDir'), |
414 getConfig('ericCodeTemplatesDir'), |
409 "impl_pyside2.py2.tmpl") |
415 "impl_pyqt5.py.tmpl") |
410 elif self.project.getProjectType() == "PyQt5": |
|
411 tmplName = os.path.join( |
|
412 getConfig('ericCodeTemplatesDir'), |
|
413 "impl_pyqt5.py2.tmpl") |
|
414 else: |
|
415 tmplName = os.path.join( |
|
416 getConfig('ericCodeTemplatesDir'), |
|
417 "impl_pyqt.py2.tmpl") |
|
418 else: |
416 else: |
419 if self.project.getProjectType() == "PySide": |
417 E5MessageBox.critical( |
420 tmplName = os.path.join( |
418 self, |
421 getConfig('ericCodeTemplatesDir'), |
419 self.tr("Code Generation"), |
422 "impl_pyside.py.tmpl") |
420 self.tr( |
423 elif self.project.getProjectType() == "PySide2": |
421 """<p>No code template file available for""" |
424 tmplName = os.path.join( |
422 """ project type "{0}".</p>""") |
425 getConfig('ericCodeTemplatesDir'), |
423 .format(self.project.getProjectType())) |
426 "impl_pyside2.py.tmpl") |
424 return |
427 elif self.project.getProjectType() in [ |
|
428 "PyQt5", "E6Plugin"]: |
|
429 tmplName = os.path.join( |
|
430 getConfig('ericCodeTemplatesDir'), |
|
431 "impl_pyqt5.py.tmpl") |
|
432 else: |
|
433 tmplName = os.path.join( |
|
434 getConfig('ericCodeTemplatesDir'), |
|
435 "impl_pyqt.py.tmpl") |
|
436 tmplFile = open(tmplName, 'r', encoding="utf-8") |
425 tmplFile = open(tmplName, 'r', encoding="utf-8") |
437 template = tmplFile.read() |
426 template = tmplFile.read() |
438 tmplFile.close() |
427 tmplFile.close() |
439 except IOError as why: |
428 except IOError as why: |
440 E5MessageBox.critical( |
429 E5MessageBox.critical( |
501 if line.lstrip().startswith("def __init__"): |
490 if line.lstrip().startswith("def __init__"): |
502 indentStr = line.replace(line.lstrip(), "") |
491 indentStr = line.replace(line.lstrip(), "") |
503 break |
492 break |
504 |
493 |
505 # do the coding stuff |
494 # do the coding stuff |
506 if self.project.getProjectLanguage() == "Python2": |
495 if self.project.getProjectType() in ("PySide2",): |
507 if self.project.getProjectType() in ("PySide", "PySide2"): |
496 pyqtSignatureFormat = '@Slot({0})' |
508 pyqtSignatureFormat = '@Slot({0})' |
|
509 elif self.project.getProjectType() == "PyQt5": |
|
510 pyqtSignatureFormat = '@pyqtSlot({0})' |
|
511 else: |
|
512 pyqtSignatureFormat = '@pyqtSignature("{0}")' |
|
513 else: |
497 else: |
514 if self.project.getProjectType() in ("PySide", "PySide2"): |
498 pyqtSignatureFormat = '@pyqtSlot({0})' |
515 pyqtSignatureFormat = '@Slot({0})' |
|
516 else: |
|
517 pyqtSignatureFormat = '@pyqtSlot({0})' |
|
518 for row in range(self.slotsModel.rowCount()): |
499 for row in range(self.slotsModel.rowCount()): |
519 topItem = self.slotsModel.item(row) |
500 topItem = self.slotsModel.item(row) |
520 for childRow in range(topItem.rowCount()): |
501 for childRow in range(topItem.rowCount()): |
521 child = topItem.child(childRow) |
502 child = topItem.child(childRow) |
522 if ( |
503 if ( |