Project, ProjectInterfacesBrowser: started to implement some configuration capabilities for the IDL compiler. corba_options

Sat, 28 Jul 2018 12:03:33 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 28 Jul 2018 12:03:33 +0200
branch
corba_options
changeset 6439
86dd19e45d95
parent 6438
bb9ebc8b4ea6
child 6440
81a4bebbc028

Project, ProjectInterfacesBrowser: started to implement some configuration capabilities for the IDL compiler.

DTDs/Project-6.2.dtd file | annotate | diff | comparison | revisions
E5XML/Config.py file | annotate | diff | comparison | revisions
E5XML/ProjectReader.py file | annotate | diff | comparison | revisions
E5XML/ProjectWriter.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
Project/ProjectInterfacesBrowser.py file | annotate | diff | comparison | revisions
--- /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)

eric ide

mercurial