Sat, 28 Jul 2018 12:03:33 +0200
Project, ProjectInterfacesBrowser: started to implement some configuration capabilities for the IDL compiler.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DTDs/Project-6.2.dtd Sat Jul 28 12:03:33 2018 +0200 @@ -0,0 +1,182 @@ +<!-- This is the DTD for eric5's project file version 6.0 --> + +<!-- This is a copy of the Basic DTD --> +<!ELEMENT int (#PCDATA)> +<!ELEMENT long (#PCDATA)> +<!ELEMENT float (#PCDATA)> +<!ELEMENT complex (#PCDATA)> +<!ELEMENT bool (#PCDATA)> +<!ELEMENT string (#PCDATA)> +<!ELEMENT bytes (#PCDATA)> +<!ELEMENT bytearray (#PCDATA)> +<!ELEMENT none EMPTY> + +<!ELEMENT pickle (#PCDATA)> +<!ATTLIST pickle + method CDATA #REQUIRED + encoding CDATA #REQUIRED> + +<!ELEMENT key (int | long | float | complex | string | bytes)> +<!ELEMENT value (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)> + +<!ELEMENT dict (key, value)*> + +<!ELEMENT tuple (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)*> + +<!ELEMENT list (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)*> + +<!ELEMENT set (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)*> + +<!ELEMENT frozenset (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)*> +<!-- End of the Basic DTD --> + +<!ELEMENT ProgLanguage (#PCDATA)> +<!ATTLIST ProgLanguage + mixed CDATA #REQUIRED> + +<!ELEMENT ProjectType (#PCDATA)> + +<!ELEMENT Description (#PCDATA)> + +<!ELEMENT Version (#PCDATA)> + +<!ELEMENT Author (#PCDATA)> + +<!ELEMENT Email (#PCDATA)> + +<!ELEMENT TranslationPattern (#PCDATA)> + +<!ELEMENT TranslationsBinPath (#PCDATA)> + +<!ELEMENT Source (#PCDATA)> + +<!ELEMENT Sources (Source*)> + +<!ELEMENT Form (#PCDATA)> + +<!ELEMENT Forms (Form*)> + +<!ELEMENT Translation (#PCDATA)> + +<!ELEMENT Translations (Translation*)> + +<!ELEMENT TranslationException (#PCDATA)> + +<!ELEMENT TranslationExceptions (TranslationException*)> + +<!ELEMENT Resource (#PCDATA)> + +<!ELEMENT Resources (Resource*)> + +<!ELEMENT Interface (#PCDATA)> + +<!ELEMENT Interfaces (Interface*)> + +<!ELEMENT Protocol (#PCDATA)> + +<!ELEMENT Protocols (Protocol*)> + +<!ELEMENT Other (#PCDATA)> + +<!ELEMENT Others (Other*)> + +<!ELEMENT MainScript (#PCDATA)> + +<!ELEMENT VcsType (#PCDATA)> +<!ELEMENT VcsOptions (dict)> +<!ELEMENT VcsOtherData (dict)> + +<!ELEMENT Vcs (VcsType?, + VcsOptions?, + VcsOtherData?)> + +<!ELEMENT FiletypeAssociation EMPTY> +<!ATTLIST FiletypeAssociation + pattern CDATA #REQUIRED + type CDATA #REQUIRED> + +<!ELEMENT FiletypeAssociations (FiletypeAssociation*)> + +<!ELEMENT LexerAssociation EMPTY> +<!ATTLIST LexerAssociation + pattern CDATA #REQUIRED + lexer CDATA #REQUIRED> + +<!ELEMENT LexerAssociations (LexerAssociation*)> + +<!ELEMENT MakeParameters (dict)> + +<!ELEMENT Make (MakeParameters?)> + +<!ELEMENT IdlCompiler (IdlCompilerParameters?)> + +<!ELEMENT ProjectTypeSpecificData (dict)> + +<!ELEMENT ProjectTypeSpecific (ProjectTypeSpecific?)> + +<!ELEMENT DocumentationParams (dict)> + +<!ELEMENT Documentation (DocumentationParams?)> + +<!ELEMENT PackagersParams (dict)> + +<!ELEMENT Packagers (PackagersParams?)> + +<!ELEMENT CheckersParams (dict)> + +<!ELEMENT Checkers (CheckersParams?)> + +<!ELEMENT OtherToolsParams (dict)> + +<!ELEMENT OtherTools (OtherToolsParams?)> + +<!ELEMENT Language (#PCDATA)> + +<!ELEMENT ProjectWordList (#PCDATA)> + +<!ELEMENT ProjectExcludeList (#PCDATA)> + +<!ELEMENT Hash (#PCDATA)> + +<!ELEMENT Eol EMPTY> +<!ATTLIST Eol + index CDATA #REQUIRED> + +<!ELEMENT Project (Language, + ProjectWordList?, + ProjectExcludeList?, + Hash, + ProgLanguage, + ProjectType, + Description?, + Version?, + Author?, + Email?, + TranslationPattern?, + TranslationsBinPath?, + Eol?, + Sources, + Forms, + Translations, + TranslationExceptions?, + Resources, + Interfaces, + Others, + MainScript?, + Vcs, + FiletypeAssociations, + LexerAssociations?, + Make?, + IdlCompiler?, + ProjectTypeSpecific?, + Documentation?, + Packagers?, + Checkers?, + OtherTools?)> +<!ATTLIST Project + version CDATA #REQUIRED>
--- a/E5XML/Config.py Sat Jul 28 11:49:00 2018 +0200 +++ b/E5XML/Config.py Sat Jul 28 12:03:33 2018 +0200 @@ -11,7 +11,8 @@ multiProjectFileFormatVersion = "5.1" # version numbers of the project file -projectFileFormatVersion = "6.1" +projectFileFormatVersion = "6.2" +projectFileFormatVersionMake = "6.1" projectFileFormatVersionProto = "6.0" projectFileFormatVersionAlt = "5.1"
--- a/E5XML/ProjectReader.py Sat Jul 28 11:49:00 2018 +0200 +++ b/E5XML/ProjectReader.py Sat Jul 28 12:03:33 2018 +0200 @@ -19,7 +19,7 @@ """ Class for reading an XML project file. """ - supportedVersions = ["4.6", "5.0", "5.1", "6.0", "6.1"] + supportedVersions = ["4.6", "5.0", "5.1", "6.0", "6.1", "6.2"] def __init__(self, device, project): """ @@ -115,6 +115,9 @@ elif self.name() == "Make": self.__readBasicDataField( "Make", "MakeParameters", "MAKEPARAMS") + elif self.name() == "IdlCompiler": + self.__readBasicDataField( + "IdlCompiler", "IdlCompilerParameters", "IDLPARAMS") elif self.name() == "ProjectTypeSpecific": self.__readBasicDataField( "ProjectTypeSpecific", "ProjectTypeSpecificData",
--- a/E5XML/ProjectWriter.py Sat Jul 28 11:49:00 2018 +0200 +++ b/E5XML/ProjectWriter.py Sat Jul 28 12:03:33 2018 +0200 @@ -14,8 +14,8 @@ from E5Gui.E5Application import e5App from .XMLStreamWriterBase import XMLStreamWriterBase -from .Config import projectFileFormatVersion, projectFileFormatVersionProto, \ - projectFileFormatVersionAlt +from .Config import projectFileFormatVersion, projectFileFormatVersionMake, \ + projectFileFormatVersionProto, projectFileFormatVersionAlt import Preferences import Utilities @@ -43,8 +43,10 @@ """ XMLStreamWriterBase.writeXML(self) - if not e5App().getObject("Project").hasDefaultMakeParameters(): + if not e5App().getObject("Project").hasDefaultIdlCompilerParameters(): fileFormatVersion = projectFileFormatVersion + elif not e5App().getObject("Project").hasDefaultMakeParameters(): + fileFormatVersion = projectFileFormatVersionMake elif self.pdata["PROTOCOLS"]: fileFormatVersion = projectFileFormatVersionProto else: @@ -223,6 +225,12 @@ self.writeBasics("MakeParameters", self.pdata["MAKEPARAMS"]) self.writeEndElement() + # do the 'IDL' parameters + if not e5App().getObject("Project").hasDefaultIdlCompilerParameters(): + self.writeStartElement("IdlCompiler") + self.writeBasics("IdlCompilerParameters", self.pdata["IDLPARAMS"]) + self.writeEndElement() + # do the extra project data stuff if len(self.pdata["PROJECTTYPESPECIFICDATA"]): self.writeStartElement("ProjectTypeSpecific")
--- a/Project/Project.py Sat Jul 28 11:49:00 2018 +0200 +++ b/Project/Project.py Sat Jul 28 12:03:33 2018 +0200 @@ -488,6 +488,11 @@ "MakeParameters": "", "MakeTestOnly": True, }, + "IDLPARAMS": { + "IncludeDirs": [], + "DefinedNames": [], + "UndefinedNames": [], + }, "EOL": -1, } @@ -5616,3 +5621,21 @@ self.__makeProcess.finished.disconnect() self.__makeProcess.deleteLater() self.__makeProcess = None + + ######################################################################### + ## Below are methods implementing the some 'IDL' support functions + ######################################################################### + + def hasDefaultIdlCompilerParameters(self): + """ + Public method to test, if the project contains the default IDL compiler + parameters. + + @return flag indicating default parameter set + @rtype bool + """ + return self.pdata["IDLPARAMS"] == { + "IncludeDirs": [], + "DefinedNames": [], + "UndefinedNames": [], + }
--- a/Project/ProjectInterfacesBrowser.py Sat Jul 28 11:49:00 2018 +0200 +++ b/Project/ProjectInterfacesBrowser.py Sat Jul 28 12:03:33 2018 +0200 @@ -100,6 +100,11 @@ self.sourceMenu.addAction( self.tr('Compile all interfaces'), self.__compileAllInterfaces) + self.sourceMenu.addSeparator() + self.sourceMenu.addAction( + self.tr('Configure IDL compiler'), + self.__configureIdlCompiler) + self.sourceMenu.addSeparator() self.sourceMenu.addAction(self.tr('Open'), self._openItem) self.sourceMenu.addSeparator() act = self.sourceMenu.addAction( @@ -137,6 +142,11 @@ self.menu.addAction( self.tr('Compile all interfaces'), self.__compileAllInterfaces) + self.menu.addSeparator() + self.menu.addAction( + self.tr('Configure IDL compiler'), + self.__configureIdlCompiler) + self.menu.addSeparator() self.menu.addAction(self.tr('Open'), self._openItem) self.menu.addSeparator() self.menu.addAction( @@ -160,6 +170,10 @@ self.tr('Compile all interfaces'), self.__compileAllInterfaces) self.backMenu.addSeparator() + self.backMenu.addAction( + self.tr('Configure IDL compiler'), + self.__configureIdlCompiler) + self.backMenu.addSeparator() self.backMenu.addAction( self.tr('Add interfaces...'), self.project.addIdlFiles) self.backMenu.addAction( @@ -181,6 +195,11 @@ self.multiMenu.addAction( self.tr('Compile interfaces'), self.__compileSelectedInterfaces) + self.multiMenu.addSeparator() + self.multiMenu.addAction( + self.tr('Configure IDL compiler'), + self.__configureIdlCompiler) + self.multiMenu.addSeparator() self.multiMenu.addAction(self.tr('Open'), self._openItem) self.multiMenu.addSeparator() act = self.multiMenu.addAction( @@ -205,6 +224,10 @@ self.tr('Compile all interfaces'), self.__compileAllInterfaces) self.dirMenu.addSeparator() + self.dirMenu.addAction( + self.tr('Configure IDL compiler'), + self.__configureIdlCompiler) + self.dirMenu.addSeparator() act = self.dirMenu.addAction( self.tr('Remove from project'), self._removeFile) self.dirMenuActions.append(act) @@ -236,6 +259,10 @@ self.tr('Compile all interfaces'), self.__compileAllInterfaces) self.dirMultiMenu.addSeparator() + self.dirMultiMenu.addAction( + self.tr('Configure IDL compiler'), + self.__configureIdlCompiler) + self.dirMultiMenu.addSeparator() self.dirMultiMenu.addAction( self.tr('Add interfaces...'), self.project.addIdlFiles) self.dirMultiMenu.addAction( @@ -525,11 +552,19 @@ @param progress reference to the progress dialog (E5ProgressDialog) @return reference to the compile process (QProcess) """ + params = self.project.pdata["IDLPARAMS"] + self.compileProc = QProcess() args = [] args.append("-bpython") args.append("-I.") + for directory in params["IncludeDirs"]: + args.append("-I{0}".format(directory)) + for name in params["DefinedNames"]: + args.append("-D{0}".format(name)) + for name in params["UndefinedNames"]: + args.append("-U{0}".format(name)) fn = os.path.join(self.project.ppath, fn) self.idlFile = fn @@ -640,3 +675,31 @@ Private method to open the configuration dialog. """ e5App().getObject("UserInterface").showPreferences("corbaPage") + + def __configureIdlCompiler(self): + """ + Private method to show a dialog to configure some options for the + IDL compiler. + """ + params = self.project.pdata["IDLPARAMS"] + + # TODO: remove this test code once done + print("__configureIdlCompiler") + return + + # TODO: implement IDL compiler options dialog + from .IdlCompilerOptionsDialog import IdlCompilerOptionsDialog + dlg = IdlCompilerOptionsDialog( + params["IncludeDirs"][:], params["DefinedNames"][:], + params["UndefinedNames"][:]) + if dlg.exec_() == QDialog.Accepted: + include, defined, undefined = dlg.getData() + if include != params["IncludeDirs"]: + params["IncludeDirs"] = include[:] + self.project.setDirty(True) + if defined != params["DefinedNames"]: + params["DefinedNames"] = defined[:] + self.project.setDirty(True) + if undefined != params["UndefinedNames"]: + params["UndefinedNames"] = undefined[:] + self.project.setDirty(True)