Mon, 24 Jun 2013 19:12:10 +0200
Started implementation of support for PyQt5 projects.
--- a/Preferences/ConfigurationPages/HelpDocumentationPage.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Preferences/ConfigurationPages/HelpDocumentationPage.py Mon Jun 24 19:12:10 2013 +0200 @@ -35,8 +35,14 @@ self.pythonDocDirCompleter = E5FileCompleter(self.pythonDocDirEdit) self.qt4DocDirCompleter = E5FileCompleter(self.qt4DocDirEdit) self.pyqt4DocDirCompleter = E5FileCompleter(self.pyqt4DocDirEdit) + self.pyqt5DocDirCompleter = E5FileCompleter(self.pyqt5DocDirEdit) self.pysideDocDirCompleter = E5FileCompleter(self.pysideDocDirEdit) + try: + import PyQt5 # __IGNORE_WARNING__ + except ImportError: + self.pyqt5Group.setEnabled(False) + pyside2, pyside3 = Utilities.checkPyside() if pyside2 or pyside3: self.pysideGroup.setEnabled(True) @@ -54,6 +60,8 @@ Preferences.getHelp("Qt5DocDir")) self.pyqt4DocDirEdit.setText( Preferences.getHelp("PyQt4DocDir")) + self.pyqt5DocDirEdit.setText( + Preferences.getHelp("PyQt5DocDir")) self.pysideDocDirEdit.setText( Preferences.getHelp("PySideDocDir")) @@ -71,6 +79,8 @@ self.qt5DocDirEdit.text()) Preferences.setHelp("PyQt4DocDir", self.pyqt4DocDirEdit.text()) + Preferences.setHelp("PyQt5DocDir", + self.pyqt5DocDirEdit.text()) Preferences.setHelp("PySideDocDir", self.pysideDocDirEdit.text()) @@ -149,6 +159,20 @@ self.pyqt4DocDirEdit.setText(Utilities.toNativeSeparators(entry)) @pyqtSlot() + def on_pyqt5DocDirButton_clicked(self): + """ + Private slot to select the PyQt5 documentation directory. + """ + entry = E5FileDialog.getOpenFileName( + self, + self.trUtf8("Select PyQt5 documentation entry"), + QUrl(self.pyqt4DocDirEdit.text()).path(), + self.trUtf8("HTML Files (*.html *.htm);;All Files (*)")) + + if entry: + self.pyqt5DocDirEdit.setText(Utilities.toNativeSeparators(entry)) + + @pyqtSlot() def on_pysideDocDirButton_clicked(self): """ Private slot to select the PySide documentation directory.
--- a/Preferences/ConfigurationPages/HelpDocumentationPage.ui Sun Jun 23 13:12:38 2013 +0200 +++ b/Preferences/ConfigurationPages/HelpDocumentationPage.ui Mon Jun 24 19:12:10 2013 +0200 @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>526</width> - <height>674</height> + <height>842</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout"> @@ -212,6 +212,42 @@ </widget> </item> <item> + <widget class="QGroupBox" name="pyqt5Group"> + <property name="title"> + <string>PyQt5 Documentation</string> + </property> + <layout class="QGridLayout" name="_4"> + <item row="0" column="1"> + <widget class="QPushButton" name="pyqt5DocDirButton"> + <property name="toolTip"> + <string>Press to select the PyQt5 documentation directory via a dialog</string> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLineEdit" name="pyqt5DocDirEdit"> + <property name="toolTip"> + <string>Enter the PyQt5 documentation directory</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2"> + <widget class="QLabel" name="textLabel1_8_2_2_5"> + <property name="text"> + <string><b>Note</b>: Leave empty to use the PYQT5DOCDIR environment variable, if set.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> <widget class="QGroupBox" name="pysideGroup"> <property name="title"> <string>PySide Documentation</string> @@ -273,6 +309,8 @@ <tabstop>qt5DocDirButton</tabstop> <tabstop>pyqt4DocDirEdit</tabstop> <tabstop>pyqt4DocDirButton</tabstop> + <tabstop>pyqt5DocDirEdit</tabstop> + <tabstop>pyqt5DocDirButton</tabstop> <tabstop>pysideDocDirEdit</tabstop> <tabstop>pysideDocDirButton</tabstop> </tabstops>
--- a/Preferences/ProgramsDialog.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Preferences/ProgramsDialog.py Mon Jun 24 19:12:10 2013 +0200 @@ -115,17 +115,29 @@ # 2. do the PyQt programs # 2a. Translation Extractor PyQt4 - self.__createProgramEntry(self.trUtf8("Translation Extractor (Python, Qt)"), + self.__createProgramEntry(self.trUtf8("Translation Extractor (Python, PyQt4)"), Utilities.isWindowsPlatform() and "pylupdate4.exe" or "pylupdate4", '-version', 'pylupdate', -1) # 2b. Forms Compiler PyQt4 - self.__createProgramEntry(self.trUtf8("Forms Compiler (Python, Qt)"), + self.__createProgramEntry(self.trUtf8("Forms Compiler (Python, PyQt4)"), Utilities.isWindowsPlatform() and "pyuic4.bat" or "pyuic4", '--version', 'Python User', 4) # 2c. Resource Compiler PyQt4 - self.__createProgramEntry(self.trUtf8("Resource Compiler (Python, Qt)"), + self.__createProgramEntry(self.trUtf8("Resource Compiler (Python, PyQt4)"), Utilities.isWindowsPlatform() and "pyrcc4.exe" or "pyrcc4", '-version', 'Resource Compiler', -1) + # 2d. Translation Extractor PyQt5 + self.__createProgramEntry(self.trUtf8("Translation Extractor (Python, PyQt5)"), + Utilities.isWindowsPlatform() and "pylupdate5.exe" or "pylupdate5", + '-version', 'pylupdate', -1) + # 2e. Forms Compiler PyQt4 + self.__createProgramEntry(self.trUtf8("Forms Compiler (Python, PyQt5)"), + Utilities.isWindowsPlatform() and "pyuic5.bat" or "pyuic5", + '--version', 'Python User', 4) + # 2f. Resource Compiler PyQt4 + self.__createProgramEntry(self.trUtf8("Resource Compiler (Python, PyQt5)"), + Utilities.isWindowsPlatform() and "pyrcc5.exe" or "pyrcc5", + '-version', 'Resource Compiler', -1) # 3. do the PySide programs # 3a. Translation Extractor PySide
--- a/Preferences/__init__.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Preferences/__init__.py Mon Jun 24 19:12:10 2013 +0200 @@ -630,6 +630,19 @@ TranslationsBrowserFlag | \ InterfacesBrowserFlag | \ OthersBrowserFlag, + "PyQt5": + SourcesBrowserFlag | \ + FormsBrowserFlag | \ + ResourcesBrowserFlag | \ + TranslationsBrowserFlag | \ + InterfacesBrowserFlag | \ + OthersBrowserFlag, + "PyQt5C": + SourcesBrowserFlag | \ + ResourcesBrowserFlag | \ + TranslationsBrowserFlag | \ + InterfacesBrowserFlag | \ + OthersBrowserFlag, "E4Plugin": SourcesBrowserFlag | \ FormsBrowserFlag | \ @@ -682,6 +695,7 @@ "Qt4DocDir": "", "Qt5DocDir": "", "PyQt4DocDir": "", + "PyQt5DocDir": "", "PySideDocDir": "", "SingleHelpWindow": True, "SaveGeometry": True,
--- a/Project/CreateDialogCodeDialog.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Project/CreateDialogCodeDialog.py Mon Jun 24 19:12:10 2013 +0200 @@ -344,6 +344,7 @@ if self.project.getProjectType() == "PySide": tmplName = os.path.join(getConfig('ericCodeTemplatesDir'), "impl_pyside.py2.tmpl") + # TODO: add PyQt5 else: tmplName = os.path.join(getConfig('ericCodeTemplatesDir'), "impl_pyqt.py2.tmpl") @@ -351,6 +352,7 @@ if self.project.getProjectType() == "PySide": tmplName = os.path.join(getConfig('ericCodeTemplatesDir'), "impl_pyside.py.tmpl") + # TODO: add PyQt5 else: tmplName = os.path.join(getConfig('ericCodeTemplatesDir'), "impl_pyqt.py.tmpl") @@ -420,6 +422,7 @@ if self.project.getProjectLanguage() == "Python2": if self.project.getProjectType() == "PySide": pyqtSignatureFormat = '@Slot({0})' + # TODO: add PyQt5 (pyqtSlot) else: pyqtSignatureFormat = '@pyqtSignature("{0}")' else:
--- a/Project/Project.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Project/Project.py Mon Jun 24 19:12:10 2013 +0200 @@ -227,11 +227,13 @@ self.__projectTypes["Qt4"] = self.trUtf8("Qt GUI") self.__projectTypes["Qt4C"] = self.trUtf8("Qt Console") + # TODO: add PyQt5 self.__projectTypes["E4Plugin"] = self.trUtf8("Eric Plugin") self.__projectTypes["Console"] = self.trUtf8("Console") self.__projectTypes["Other"] = self.trUtf8("Other") self.__projectProgLanguages = { + # TODO: add PyQt5 "Python2": ["Qt4", "Qt4C", "E4Plugin", "Console", "Other"], "Python3": ["Qt4", "Qt4C", "E4Plugin", "Console", "Other"], "Ruby": ["Qt4", "Qt4C", "Console", "Other"], @@ -471,13 +473,16 @@ self.pdata["FILETYPES"]["*{0}".format(ext)] = "SOURCES" self.pdata["FILETYPES"]["*.idl"] = "INTERFACES" if self.pdata["PROJECTTYPE"][0] in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.pdata["FILETYPES"]["*.ui"] = "FORMS" self.pdata["FILETYPES"]["*.ui.h"] = "FORMS" if self.pdata["PROJECTTYPE"][0] in ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 self.pdata["FILETYPES"]["*.qrc"] = "RESOURCES" if self.pdata["PROJECTTYPE"][0] in ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 self.pdata["FILETYPES"]["*.ts"] = "TRANSLATIONS" self.pdata["FILETYPES"]["*.qm"] = "TRANSLATIONS" try: @@ -494,6 +499,7 @@ """ if self.pdata["PROJECTTYPE"][0] in ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 if "*.ts" not in self.pdata["FILETYPES"]: self.pdata["FILETYPES"]["*.ts"] = "TRANSLATIONS" if "*.qm" not in self.pdata["FILETYPES"]: @@ -1135,6 +1141,7 @@ lang = dlg.getSelectedLanguage() if self.pdata["PROJECTTYPE"][0] in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 langFile = self.pdata["TRANSLATIONPATTERN"][0].replace("%language%", lang) self.appendFile(langFile) self.projectLanguageAddedByCode.emit(lang)
--- a/Project/ProjectFormsBrowser.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Project/ProjectFormsBrowser.py Mon Jun 24 19:12:10 2013 +0200 @@ -118,6 +118,7 @@ self.menu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.menu.addAction(self.trUtf8('Compile form'), self.__compileForm) self.menu.addAction(self.trUtf8('Compile all forms'), self.__compileAllForms) @@ -162,6 +163,7 @@ self.menuActions.append(act) self.menu.addSeparator() if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.menu.addAction(self.trUtf8('New form...'), self.__newForm) else: if self.hooks["newForm"] is not None: @@ -183,6 +185,7 @@ self.menu.addAction(self.trUtf8('Configure...'), self._configure) self.backMenu = QMenu(self) + # TODO: add PyQt5 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"] or \ self.hooks["compileAllForms"] is not None: self.backMenu.addAction(self.trUtf8('Compile all forms'), @@ -209,6 +212,7 @@ # create the menu for multiple selected files self.multiMenu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 act = self.multiMenu.addAction(self.trUtf8('Compile forms'), self.__compileSelectedForms) self.multiMenu.addSeparator() @@ -247,6 +251,7 @@ self.dirMenu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.dirMenu.addAction(self.trUtf8('Compile all forms'), self.__compileAllForms) self.dirMenu.addSeparator() @@ -263,6 +268,7 @@ self.dirMenuActions.append(act) self.dirMenu.addSeparator() if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.dirMenu.addAction(self.trUtf8('New form...'), self.__newForm) else: if self.hooks["newForm"] is not None: @@ -285,6 +291,7 @@ self.dirMultiMenu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.dirMultiMenu.addAction(self.trUtf8('Compile all forms'), self.__compileAllForms) self.dirMultiMenu.addSeparator() @@ -499,6 +506,7 @@ self.hooks["newForm"](path) else: if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.__newUiForm(path) def __newUiForm(self, path): @@ -697,6 +705,7 @@ uic = self.uicompiler + '.bat' else: uic = self.uicompiler + # TODO: add PyQt5 elif self.project.getProjectType() == "PySide": self.uicompiler = 'pyside-uic' uic = Utilities.generatePySideToolPath(self.uicompiler) @@ -861,6 +870,7 @@ else: if self.project.getProjectType() not in \ ["Qt4", "Qt4C", "E4Plugin", "PySide"]: + # TODO: add PyQt5 # ignore the request for non Qt projects return
--- a/Project/ProjectResourcesBrowser.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Project/ProjectResourcesBrowser.py Mon Jun 24 19:12:10 2013 +0200 @@ -77,6 +77,7 @@ self.menu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.menu.addAction(self.trUtf8('Compile resource'), self.__compileResource) self.menu.addAction(self.trUtf8('Compile all resources'), @@ -106,6 +107,7 @@ self.menuActions.append(act) self.menu.addSeparator() if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.menu.addAction(self.trUtf8('New resource...'), self.__newResource) else: if self.hooks["newResource"] is not None: @@ -128,6 +130,7 @@ self.backMenu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.backMenu.addAction(self.trUtf8('Compile all resources'), self.__compileAllResources) self.backMenu.addSeparator() @@ -159,6 +162,7 @@ # create the menu for multiple selected files self.multiMenu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 act = self.multiMenu.addAction(self.trUtf8('Compile resources'), self.__compileSelectedResources) self.multiMenu.addSeparator() @@ -186,6 +190,7 @@ self.dirMenu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.dirMenu.addAction(self.trUtf8('Compile all resources'), self.__compileAllResources) self.dirMenu.addSeparator() @@ -218,6 +223,7 @@ self.dirMultiMenu = QMenu(self) if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: + # TODO: add PyQt5 self.dirMultiMenu.addAction(self.trUtf8('Compile all resources'), self.__compileAllResources) self.dirMultiMenu.addSeparator() @@ -575,6 +581,7 @@ args.append("-py2") else: args.append("-py3") + # TODO: add PyQt5 elif self.project.getProjectType() == "PySide": self.rccCompiler = Utilities.generatePySideToolPath('pyside-rcc') if self.project.pdata["PROGLANGUAGE"][0] in ["Python", "Python2"]:
--- a/Project/ProjectTranslationsBrowser.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Project/ProjectTranslationsBrowser.py Mon Jun 24 19:12:10 2013 +0200 @@ -104,6 +104,7 @@ self.menu = QMenu(self) if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 act = self.menu.addAction(self.trUtf8('Generate translation'), self.__generateSelected) self.tsMenuActions.append(act) @@ -220,6 +221,7 @@ self.backMenu = QMenu(self) if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 act = self.backMenu.addAction(self.trUtf8('Generate all translations'), self.__generateAll) self.tsprocBackMenuActions.append(act) @@ -271,6 +273,7 @@ self.multiMenu = QMenu(self) if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 act = self.multiMenu.addAction(self.trUtf8('Generate translations'), self.__generateSelected) self.tsMultiMenuActions.append(act) @@ -348,6 +351,7 @@ self.dirMenu = QMenu(self) if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 act = self.dirMenu.addAction(self.trUtf8('Generate all translations'), self.__generateAll) self.tsprocDirMenuActions.append(act) @@ -454,6 +458,7 @@ """ if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 tsFiles = 0 qmFiles = 0 itmList = self.getSelectedItems() @@ -494,6 +499,7 @@ """ if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 tsFiles = 0 qmFiles = 0 itmList = self.getSelectedItems() @@ -533,6 +539,7 @@ """ if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 if self.pylupdateProcRunning: for act in self.tsprocDirMenuActions: act.setEnabled(False) @@ -551,6 +558,7 @@ """ if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 if self.pylupdateProcRunning: for act in self.tsprocBackMenuActions: act.setEnabled(False) @@ -930,6 +938,7 @@ self.pylupdate = 'pylupdate4' if Utilities.isWindowsPlatform(): self.pylupdate = self.pylupdate + '.exe' + # TODO: add PyQt5 elif self.project.getProjectType() in ["PySide", "PySideC"]: self.pylupdate = Utilities.generatePySideToolPath('pyside-lupdate') else: @@ -1068,6 +1077,7 @@ if self.project.getProjectType() in \ ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]: + # TODO: add PyQt5 lrelease = os.path.join( Utilities.getQtBinariesPath(), Utilities.generateQtToolName("lrelease"))
--- a/UI/UserInterface.py Sun Jun 23 13:12:38 2013 +0200 +++ b/UI/UserInterface.py Mon Jun 24 19:12:10 2013 +0200 @@ -2028,6 +2028,8 @@ self.pyqt4DocAct.triggered[()].connect(self.__showPyQt4Doc) self.actions.append(self.pyqt4DocAct) + # TODO: add PyQt5 + def __initPythonDocActions(self): """ Private slot to initialize the actions to show the Python documentation.
--- a/Utilities/__init__.py Sun Jun 23 13:12:38 2013 +0200 +++ b/Utilities/__init__.py Mon Jun 24 19:12:10 2013 +0200 @@ -1499,7 +1499,7 @@ # Qt utility functions below ################################################################################ - +# TODO: add PyQt5 (both) def generatePySideToolPath(toolname): """ Module function to generate the executable path for a PySide tool.