Added the context menu action "New protocol file..." to give a more concise way to create a new protocol file.

Wed, 25 Oct 2023 18:08:35 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 25 Oct 2023 18:08:35 +0200
changeset 27
5e9a61e7d7d0
parent 26
35f7cbb40a1f
child 28
ddee2e1e4198

Added the context menu action "New protocol file..." to give a more concise way to create a new protocol file.

ExtensionProtobuf/Documentation/source/Plugin_Extension_Protobuf.ExtensionProtobuf.ProjectProtocolsBrowser.html file | annotate | diff | comparison | revisions
ExtensionProtobuf/ProjectProtocolsBrowser.py file | annotate | diff | comparison | revisions
ExtensionProtobuf/i18n/protobuf_de.qm file | annotate | diff | comparison | revisions
ExtensionProtobuf/i18n/protobuf_de.ts file | annotate | diff | comparison | revisions
ExtensionProtobuf/i18n/protobuf_empty.ts file | annotate | diff | comparison | revisions
ExtensionProtobuf/i18n/protobuf_en.ts file | annotate | diff | comparison | revisions
ExtensionProtobuf/i18n/protobuf_es.ts file | annotate | diff | comparison | revisions
ExtensionProtobuf/i18n/protobuf_ru.ts file | annotate | diff | comparison | revisions
ExtensionProtobuf/protoclbr.py file | annotate | diff | comparison | revisions
PluginExtensionProtobuf.py file | annotate | diff | comparison | revisions
PluginProtobuf.epj file | annotate | diff | comparison | revisions
changelog.md file | annotate | diff | comparison | revisions
--- a/ExtensionProtobuf/Documentation/source/Plugin_Extension_Protobuf.ExtensionProtobuf.ProjectProtocolsBrowser.html	Tue Oct 17 11:30:08 2023 +0200
+++ b/ExtensionProtobuf/Documentation/source/Plugin_Extension_Protobuf.ExtensionProtobuf.ProjectProtocolsBrowser.html	Wed Oct 25 18:08:35 2023 +0200
@@ -79,6 +79,10 @@
 <td>Constructor</td>
 </tr>
 <tr>
+<td><a href="#ProjectProtocolsBrowser.__addNewProtocolFile">__addNewProtocolFile</a></td>
+<td>Private method to add a new interface file to the project.</td>
+</tr>
+<tr>
 <td><a href="#ProjectProtocolsBrowser.__addProtocolFiles">__addProtocolFiles</a></td>
 <td>Private method to add protocol files to the project.</td>
 </tr>
@@ -191,6 +195,13 @@
 parent widget of this browser
 </dd>
 </dl>
+<a NAME="ProjectProtocolsBrowser.__addNewProtocolFile" ID="ProjectProtocolsBrowser.__addNewProtocolFile"></a>
+<h4>ProjectProtocolsBrowser.__addNewProtocolFile</h4>
+<b>__addNewProtocolFile</b>(<i></i>)
+
+<p>
+        Private method to add a new interface file to the project.
+</p>
 <a NAME="ProjectProtocolsBrowser.__addProtocolFiles" ID="ProjectProtocolsBrowser.__addProtocolFiles"></a>
 <h4>ProjectProtocolsBrowser.__addProtocolFiles</h4>
 <b>__addProtocolFiles</b>(<i></i>)
--- a/ExtensionProtobuf/ProjectProtocolsBrowser.py	Tue Oct 17 11:30:08 2023 +0200
+++ b/ExtensionProtobuf/ProjectProtocolsBrowser.py	Wed Oct 25 18:08:35 2023 +0200
@@ -18,8 +18,9 @@
 
 from eric7 import Preferences
 from eric7.EricGui import EricPixmapCache
-from eric7.EricWidgets import EricMessageBox
+from eric7.EricWidgets import EricMessageBox, EricPathPickerDialog
 from eric7.EricWidgets.EricApplication import ericApp
+from eric7.EricWidgets.EricPathPickerDialog import EricPathPickerModes
 from eric7.EricWidgets.EricProgressDialog import EricProgressDialog
 from eric7.Project.FileCategoryRepositoryItem import FileCategoryRepositoryItem
 from eric7.Project.ProjectBaseBrowser import ProjectBaseBrowser
@@ -211,6 +212,10 @@
         act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile)
         self.menuActions.append(act)
         self.sourceMenu.addSeparator()
+        self.sourceMenu.addAction(
+            self.tr("New protocol file..."), self.__addNewProtocolFile
+        )
+        self.sourceMenu.addSeparator()
         self.sourceMenu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles)
         self.sourceMenu.addAction(
             self.tr("Add protocols directory..."), self.__addProtocolsDirectory
@@ -250,6 +255,8 @@
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Open"), self._openItem)
         self.menu.addSeparator()
+        self.menu.addAction(self.tr("New protocol file..."), self.__addNewProtocolFile)
+        self.menu.addSeparator()
         self.menu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles)
         self.menu.addAction(
             self.tr("Add protocols directory..."), self.__addProtocolsDirectory
@@ -273,6 +280,10 @@
         )
         self.backMenu.addSeparator()
         self.backMenu.addAction(
+            self.tr("New protocol file..."), self.__addNewProtocolFile
+        )
+        self.backMenu.addSeparator()
+        self.backMenu.addAction(
             self.tr("Add protocols..."), lambda: self.project.addFiles("PROTOCOLS")
         )
         self.backMenu.addAction(
@@ -335,6 +346,10 @@
         act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory)
         self.dirMenuActions.append(act)
         self.dirMenu.addSeparator()
+        self.dirMenu.addAction(
+            self.tr("New protocol file..."), self.__addNewProtocolFile
+        )
+        self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles)
         self.dirMenu.addAction(
             self.tr("Add protocols directory..."), self.__addProtocolsDirectory
@@ -519,6 +534,66 @@
                     itm.fileName(), itm.attributeObject().lineno
                 )
 
+    def __addNewProtocolFile(self):
+        """
+        Private method to add a new interface file to the project.
+        """
+        itm = self.model().item(self.currentIndex())
+        if isinstance(
+            itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem)
+        ):
+            dn = os.path.dirname(itm.fileName())
+        elif isinstance(
+            itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
+        ):
+            dn = itm.dirName()
+        else:
+            dn = ""
+
+        filename, ok = EricPathPickerDialog.getStrPath(
+            self,
+            self.tr("New protocol file"),
+            self.tr("Enter the path of the new protocol file:"),
+            mode=EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE,
+            strPath=dn,
+            defaultDirectory=dn,
+            filters=self.project.getFileCategoryFilters(
+                categories=["PROTOCOLS"], withAll=False
+            ),
+        )
+        if ok:
+            if not os.path.splitext(filename)[1]:
+                filename += ".proto"
+
+            if os.path.exists(filename):
+                EricMessageBox.critical(
+                    self,
+                    self.tr("New protocol file"),
+                    self.tr(
+                        "<p>The file <b>{0}</b> already exists. The action will be"
+                        " aborted.</p>"
+                    ).format(filename),
+                )
+                return
+
+            try:
+                with open(filename, "w") as f:
+                    f.write("// {0}\n".format(self.project.getRelativePath(filename)))
+                    f.write('syntax = "proto2";\n')
+            except OSError as err:
+                EricMessageBox.critical(
+                    self,
+                    self.tr("New protocol file"),
+                    self.tr(
+                        "<p>The file <b>{0}</b> could not be created. Aborting...</p>"
+                        "<p>Reason: {1}</p>"
+                    ).format(filename, str(err)),
+                )
+                return
+
+            self.project.appendFile(filename)
+            self.sourceFile[str].emit(filename)
+
     def __addProtocolFiles(self):
         """
         Private method to add protocol files to the project.
Binary file ExtensionProtobuf/i18n/protobuf_de.qm has changed
--- a/ExtensionProtobuf/i18n/protobuf_de.ts	Tue Oct 17 11:30:08 2023 +0200
+++ b/ExtensionProtobuf/i18n/protobuf_de.ts	Wed Oct 25 18:08:35 2023 +0200
@@ -4,238 +4,268 @@
   <context>
     <name>ProjectProtocolsBrowser</name>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="79" />
+      <location filename="../ProjectProtocolsBrowser.py" line="81" />
       <source>Protocols (protobuf)</source>
       <translation>Protokolle (protobuf)</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="82" />
+      <location filename="../ProjectProtocolsBrowser.py" line="84" />
       <source>&lt;b&gt;Project Protocols Browser&lt;/b&gt;&lt;p&gt;This allows to easily see all protocols (protobuf files) contained in the current project. Several actions can be executed via the context menu.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Projektprotokollebrowser&lt;/b&gt;&lt;p&gt;Dies bietet eine Übersicht aller im Projekt enthaltenen Protokolle (protobuf Dateien) an. Verschieden Aktionen können über das Kontextmenü ausgeführt werden.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="96" />
+      <location filename="../ProjectProtocolsBrowser.py" line="98" />
       <source>Protobuf Files ({0})</source>
       <translation>Protobuf Dateien ({0})</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="98" />
-      <location filename="../ProjectProtocolsBrowser.py" line="97" />
+      <location filename="../ProjectProtocolsBrowser.py" line="100" />
+      <location filename="../ProjectProtocolsBrowser.py" line="99" />
       <source>Protobuf Files</source>
       <translation>Protobuf Dateien</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="108" />
+      <location filename="../ProjectProtocolsBrowser.py" line="110" />
       <source>Protocols (protobuf) Browser</source>
       <translation>Protokollebrowser (protobuf)</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="236" />
-      <location filename="../ProjectProtocolsBrowser.py" line="188" />
+      <location filename="../ProjectProtocolsBrowser.py" line="242" />
+      <location filename="../ProjectProtocolsBrowser.py" line="190" />
       <source>Compile protocol</source>
       <translation>Protokoll übersetzen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="357" />
-      <location filename="../ProjectProtocolsBrowser.py" line="325" />
-      <location filename="../ProjectProtocolsBrowser.py" line="266" />
-      <location filename="../ProjectProtocolsBrowser.py" line="238" />
-      <location filename="../ProjectProtocolsBrowser.py" line="190" />
+      <location filename="../ProjectProtocolsBrowser.py" line="373" />
+      <location filename="../ProjectProtocolsBrowser.py" line="337" />
+      <location filename="../ProjectProtocolsBrowser.py" line="274" />
+      <location filename="../ProjectProtocolsBrowser.py" line="244" />
+      <location filename="../ProjectProtocolsBrowser.py" line="192" />
       <source>Compile all protocols</source>
       <translation>Alle Protokolle übersetzen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="242" />
-      <location filename="../ProjectProtocolsBrowser.py" line="194" />
+      <location filename="../ProjectProtocolsBrowser.py" line="248" />
+      <location filename="../ProjectProtocolsBrowser.py" line="196" />
       <source>Compile protocol as gRPC</source>
       <translation>Protokoll als gRPC übersetzen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="361" />
-      <location filename="../ProjectProtocolsBrowser.py" line="329" />
-      <location filename="../ProjectProtocolsBrowser.py" line="270" />
-      <location filename="../ProjectProtocolsBrowser.py" line="246" />
-      <location filename="../ProjectProtocolsBrowser.py" line="198" />
+      <location filename="../ProjectProtocolsBrowser.py" line="377" />
+      <location filename="../ProjectProtocolsBrowser.py" line="341" />
+      <location filename="../ProjectProtocolsBrowser.py" line="278" />
+      <location filename="../ProjectProtocolsBrowser.py" line="252" />
+      <location filename="../ProjectProtocolsBrowser.py" line="200" />
       <source>Compile all protocols as gRPC</source>
       <translation>Alle Protokolle als gRPC übersetzen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="305" />
-      <location filename="../ProjectProtocolsBrowser.py" line="250" />
-      <location filename="../ProjectProtocolsBrowser.py" line="202" />
+      <location filename="../ProjectProtocolsBrowser.py" line="317" />
+      <location filename="../ProjectProtocolsBrowser.py" line="256" />
+      <location filename="../ProjectProtocolsBrowser.py" line="204" />
       <source>Open</source>
       <translation>Öffnen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="204" />
+      <location filename="../ProjectProtocolsBrowser.py" line="206" />
       <source>Rename file</source>
       <translation>Datei umbenennen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="332" />
-      <location filename="../ProjectProtocolsBrowser.py" line="307" />
-      <location filename="../ProjectProtocolsBrowser.py" line="207" />
+      <location filename="../ProjectProtocolsBrowser.py" line="344" />
+      <location filename="../ProjectProtocolsBrowser.py" line="319" />
+      <location filename="../ProjectProtocolsBrowser.py" line="209" />
       <source>Remove from project</source>
       <translation>Aus dem Projekt entfernen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="334" />
-      <location filename="../ProjectProtocolsBrowser.py" line="309" />
-      <location filename="../ProjectProtocolsBrowser.py" line="210" />
+      <location filename="../ProjectProtocolsBrowser.py" line="346" />
+      <location filename="../ProjectProtocolsBrowser.py" line="321" />
+      <location filename="../ProjectProtocolsBrowser.py" line="212" />
       <source>Delete</source>
       <translation>Löschen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="365" />
-      <location filename="../ProjectProtocolsBrowser.py" line="337" />
-      <location filename="../ProjectProtocolsBrowser.py" line="275" />
-      <location filename="../ProjectProtocolsBrowser.py" line="252" />
-      <location filename="../ProjectProtocolsBrowser.py" line="213" />
+      <location filename="../ProjectProtocolsBrowser.py" line="350" />
+      <location filename="../ProjectProtocolsBrowser.py" line="283" />
+      <location filename="../ProjectProtocolsBrowser.py" line="258" />
+      <location filename="../ProjectProtocolsBrowser.py" line="216" />
+      <source>New protocol file...</source>
+      <translation>Neue Protokolldatei...</translation>
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="381" />
+      <location filename="../ProjectProtocolsBrowser.py" line="353" />
+      <location filename="../ProjectProtocolsBrowser.py" line="287" />
+      <location filename="../ProjectProtocolsBrowser.py" line="260" />
+      <location filename="../ProjectProtocolsBrowser.py" line="219" />
       <source>Add protocols...</source>
       <translation>Protokolle hinzufügen...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="368" />
-      <location filename="../ProjectProtocolsBrowser.py" line="339" />
-      <location filename="../ProjectProtocolsBrowser.py" line="278" />
-      <location filename="../ProjectProtocolsBrowser.py" line="254" />
-      <location filename="../ProjectProtocolsBrowser.py" line="215" />
+      <location filename="../ProjectProtocolsBrowser.py" line="384" />
+      <location filename="../ProjectProtocolsBrowser.py" line="355" />
+      <location filename="../ProjectProtocolsBrowser.py" line="290" />
+      <location filename="../ProjectProtocolsBrowser.py" line="262" />
+      <location filename="../ProjectProtocolsBrowser.py" line="221" />
       <source>Add protocols directory...</source>
       <translation>Protokolleverzeichnis hinzufügen...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="342" />
-      <location filename="../ProjectProtocolsBrowser.py" line="219" />
+      <location filename="../ProjectProtocolsBrowser.py" line="358" />
+      <location filename="../ProjectProtocolsBrowser.py" line="225" />
       <source>Copy Path to Clipboard</source>
       <translation>Pfad in die Zwischenablage kopieren</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="373" />
-      <location filename="../ProjectProtocolsBrowser.py" line="344" />
-      <location filename="../ProjectProtocolsBrowser.py" line="312" />
-      <location filename="../ProjectProtocolsBrowser.py" line="282" />
-      <location filename="../ProjectProtocolsBrowser.py" line="257" />
-      <location filename="../ProjectProtocolsBrowser.py" line="223" />
+      <location filename="../ProjectProtocolsBrowser.py" line="389" />
+      <location filename="../ProjectProtocolsBrowser.py" line="360" />
+      <location filename="../ProjectProtocolsBrowser.py" line="324" />
+      <location filename="../ProjectProtocolsBrowser.py" line="294" />
+      <location filename="../ProjectProtocolsBrowser.py" line="265" />
+      <location filename="../ProjectProtocolsBrowser.py" line="229" />
       <source>Expand all directories</source>
       <translation>Alle Verzeichnisse aufklappen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="376" />
-      <location filename="../ProjectProtocolsBrowser.py" line="346" />
-      <location filename="../ProjectProtocolsBrowser.py" line="314" />
-      <location filename="../ProjectProtocolsBrowser.py" line="284" />
-      <location filename="../ProjectProtocolsBrowser.py" line="258" />
-      <location filename="../ProjectProtocolsBrowser.py" line="226" />
+      <location filename="../ProjectProtocolsBrowser.py" line="392" />
+      <location filename="../ProjectProtocolsBrowser.py" line="362" />
+      <location filename="../ProjectProtocolsBrowser.py" line="326" />
+      <location filename="../ProjectProtocolsBrowser.py" line="296" />
+      <location filename="../ProjectProtocolsBrowser.py" line="266" />
+      <location filename="../ProjectProtocolsBrowser.py" line="232" />
       <source>Collapse all directories</source>
       <translation>Alle Verzeichnisse einklappen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="379" />
-      <location filename="../ProjectProtocolsBrowser.py" line="348" />
-      <location filename="../ProjectProtocolsBrowser.py" line="316" />
-      <location filename="../ProjectProtocolsBrowser.py" line="286" />
-      <location filename="../ProjectProtocolsBrowser.py" line="259" />
-      <location filename="../ProjectProtocolsBrowser.py" line="228" />
+      <location filename="../ProjectProtocolsBrowser.py" line="395" />
+      <location filename="../ProjectProtocolsBrowser.py" line="364" />
+      <location filename="../ProjectProtocolsBrowser.py" line="328" />
+      <location filename="../ProjectProtocolsBrowser.py" line="298" />
+      <location filename="../ProjectProtocolsBrowser.py" line="267" />
+      <location filename="../ProjectProtocolsBrowser.py" line="234" />
       <source>Collapse all files</source>
       <translation>Alle Dateien einklappen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="382" />
-      <location filename="../ProjectProtocolsBrowser.py" line="350" />
-      <location filename="../ProjectProtocolsBrowser.py" line="318" />
-      <location filename="../ProjectProtocolsBrowser.py" line="288" />
-      <location filename="../ProjectProtocolsBrowser.py" line="261" />
-      <location filename="../ProjectProtocolsBrowser.py" line="230" />
+      <location filename="../ProjectProtocolsBrowser.py" line="398" />
+      <location filename="../ProjectProtocolsBrowser.py" line="366" />
+      <location filename="../ProjectProtocolsBrowser.py" line="330" />
+      <location filename="../ProjectProtocolsBrowser.py" line="300" />
+      <location filename="../ProjectProtocolsBrowser.py" line="269" />
+      <location filename="../ProjectProtocolsBrowser.py" line="236" />
       <source>Configure...</source>
       <translation>Einstellungen...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="384" />
-      <location filename="../ProjectProtocolsBrowser.py" line="352" />
-      <location filename="../ProjectProtocolsBrowser.py" line="320" />
-      <location filename="../ProjectProtocolsBrowser.py" line="290" />
-      <location filename="../ProjectProtocolsBrowser.py" line="262" />
-      <location filename="../ProjectProtocolsBrowser.py" line="232" />
+      <location filename="../ProjectProtocolsBrowser.py" line="400" />
+      <location filename="../ProjectProtocolsBrowser.py" line="368" />
+      <location filename="../ProjectProtocolsBrowser.py" line="332" />
+      <location filename="../ProjectProtocolsBrowser.py" line="302" />
+      <location filename="../ProjectProtocolsBrowser.py" line="270" />
+      <location filename="../ProjectProtocolsBrowser.py" line="238" />
       <source>Configure Protobuf...</source>
       <translation>Protobuf-Einstellungen...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="297" />
+      <location filename="../ProjectProtocolsBrowser.py" line="309" />
       <source>Compile protocols</source>
       <translation>Protokolle übersetzen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="301" />
+      <location filename="../ProjectProtocolsBrowser.py" line="313" />
       <source>Compile protocols as gRPC</source>
       <translation>Protokolle als gRPC übersetzen</translation>
     </message>
     <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="586" />
       <location filename="../ProjectProtocolsBrowser.py" line="571" />
+      <location filename="../ProjectProtocolsBrowser.py" line="555" />
+      <source>New protocol file</source>
+      <translation>Neue Protokolldatei</translation>
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="556" />
+      <source>Enter the path of the new protocol file:</source>
+      <translation>Gib den Pfad für die neue Protokolldatei ein:</translation>
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="572" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. The action will be aborted.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Die Aktion wird abgebrochen?&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="587" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be created. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; konnte nicht erzeugt werden. Abbruch...&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="647" />
       <source>Delete Protocols</source>
       <translation>Protokolle löschen</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="572" />
+      <location filename="../ProjectProtocolsBrowser.py" line="648" />
       <source>Do you really want to delete these protocol files from the project?</source>
       <translation>Wollen Sie wirklich diese Protokolldateien aus dem Projekt löschen?</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="688" />
-      <location filename="../ProjectProtocolsBrowser.py" line="674" />
+      <location filename="../ProjectProtocolsBrowser.py" line="764" />
+      <location filename="../ProjectProtocolsBrowser.py" line="750" />
       <source>Protocol Compilation</source>
       <translation>Protokollübersetzung</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="675" />
+      <location filename="../ProjectProtocolsBrowser.py" line="751" />
       <source>The compilation of the protocol file was successful.</source>
       <translation>Die Übersetzung der Protokolldatei war erfolgreich.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="689" />
+      <location filename="../ProjectProtocolsBrowser.py" line="765" />
       <source>The compilation of the protocol file failed.</source>
       <translation>Die Übersetzung der Protokolldatei ist fehlgeschlagen.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="743" />
+      <location filename="../ProjectProtocolsBrowser.py" line="819" />
       <source>Process Generation Error</source>
       <translation>Fehler beim Prozessstart</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="744" />
+      <location filename="../ProjectProtocolsBrowser.py" line="820" />
       <source>&lt;p&gt;Could not start {0}.&lt;br&gt;Ensure that it is in the search path.&lt;/p&gt;</source>
       <translation>&lt;p&gt;{0} konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass es über den Suchpfad verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="753" />
+      <location filename="../ProjectProtocolsBrowser.py" line="829" />
       <source>Compiler Invalid</source>
       <translation>Compiler ungültig</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="754" />
+      <location filename="../ProjectProtocolsBrowser.py" line="830" />
       <source>The configured compiler is invalid.</source>
       <translation>Der konfigurierte Compiler ist ungültig.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="818" />
-      <location filename="../ProjectProtocolsBrowser.py" line="781" />
+      <location filename="../ProjectProtocolsBrowser.py" line="894" />
+      <location filename="../ProjectProtocolsBrowser.py" line="857" />
       <source>Compiling Protocols...</source>
       <translation>Protokolle übersetzen...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="819" />
-      <location filename="../ProjectProtocolsBrowser.py" line="782" />
+      <location filename="../ProjectProtocolsBrowser.py" line="895" />
+      <location filename="../ProjectProtocolsBrowser.py" line="858" />
       <source>Abort</source>
       <translation>Abbruch</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="822" />
-      <location filename="../ProjectProtocolsBrowser.py" line="785" />
+      <location filename="../ProjectProtocolsBrowser.py" line="898" />
+      <location filename="../ProjectProtocolsBrowser.py" line="861" />
       <source>%v/%m Protocols</source>
       <translation>%v/%m Protokolle</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="827" />
-      <location filename="../ProjectProtocolsBrowser.py" line="790" />
+      <location filename="../ProjectProtocolsBrowser.py" line="903" />
+      <location filename="../ProjectProtocolsBrowser.py" line="866" />
       <source>Protocols</source>
       <translation>Protokolle</translation>
     </message>
@@ -243,53 +273,53 @@
   <context>
     <name>ProtobufExtensionPlugin</name>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="74" />
-      <location filename="../../PluginExtensionProtobuf.py" line="56" />
+      <location filename="../../PluginExtensionProtobuf.py" line="75" />
+      <location filename="../../PluginExtensionProtobuf.py" line="57" />
       <source>Protobuf Compiler</source>
       <translation>Protobuf Compiler</translation>
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="94" />
-      <location filename="../../PluginExtensionProtobuf.py" line="59" />
+      <location filename="../../PluginExtensionProtobuf.py" line="95" />
+      <location filename="../../PluginExtensionProtobuf.py" line="60" />
       <source>Protobuf and gRPC Support plugin is not activated</source>
       <translation>Das Protobuf und gRPC Plugin ist nicht aktiviert</translation>
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="98" />
-      <location filename="../../PluginExtensionProtobuf.py" line="63" />
+      <location filename="../../PluginExtensionProtobuf.py" line="99" />
+      <location filename="../../PluginExtensionProtobuf.py" line="64" />
       <source>(inactive)</source>
       <translation>(inaktiv)</translation>
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="112" />
-      <location filename="../../PluginExtensionProtobuf.py" line="91" />
+      <location filename="../../PluginExtensionProtobuf.py" line="113" />
+      <location filename="../../PluginExtensionProtobuf.py" line="92" />
       <source>gRPC Compiler</source>
       <translation>gRPC Compiler</translation>
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="137" />
+      <location filename="../../PluginExtensionProtobuf.py" line="138" />
       <source>Protobuf and gRPC</source>
       <translation>Protobuf und gRPC</translation>
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="227" />
+      <location filename="../../PluginExtensionProtobuf.py" line="228" />
       <source>Protocol Buffer (protobuf)</source>
       <translation>Protokoll-Puffer (protobuf)</translation>
     </message>
     <message>
+      <location filename="../../PluginExtensionProtobuf.py" line="232" />
       <location filename="../../PluginExtensionProtobuf.py" line="231" />
-      <location filename="../../PluginExtensionProtobuf.py" line="230" />
       <source>Protocol Buffer Files (*.proto)</source>
       <translation>Protokoll-Puffer Dateien (*.proto)</translation>
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="248" />
+      <location filename="../../PluginExtensionProtobuf.py" line="249" />
       <source>Protobuf and gRPC Extension</source>
       <translation>Protobuf und gRPC Erweiterung</translation>
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="254" />
-      <location filename="../../PluginExtensionProtobuf.py" line="249" />
+      <location filename="../../PluginExtensionProtobuf.py" line="255" />
+      <location filename="../../PluginExtensionProtobuf.py" line="250" />
       <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source>
       <translation>Die Protobuf und gRPC Erweiterung kann nicht aktiviert werden, da sie eric7 23.1 oder neuer benötigt.</translation>
     </message>
--- a/ExtensionProtobuf/i18n/protobuf_empty.ts	Tue Oct 17 11:30:08 2023 +0200
+++ b/ExtensionProtobuf/i18n/protobuf_empty.ts	Wed Oct 25 18:08:35 2023 +0200
@@ -4,238 +4,268 @@
   <context>
     <name>ProjectProtocolsBrowser</name>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="79" />
+      <location filename="../ProjectProtocolsBrowser.py" line="81" />
       <source>Protocols (protobuf)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="82" />
+      <location filename="../ProjectProtocolsBrowser.py" line="84" />
       <source>&lt;b&gt;Project Protocols Browser&lt;/b&gt;&lt;p&gt;This allows to easily see all protocols (protobuf files) contained in the current project. Several actions can be executed via the context menu.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="96" />
+      <location filename="../ProjectProtocolsBrowser.py" line="98" />
       <source>Protobuf Files ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="98" />
-      <location filename="../ProjectProtocolsBrowser.py" line="97" />
+      <location filename="../ProjectProtocolsBrowser.py" line="100" />
+      <location filename="../ProjectProtocolsBrowser.py" line="99" />
       <source>Protobuf Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="108" />
+      <location filename="../ProjectProtocolsBrowser.py" line="110" />
       <source>Protocols (protobuf) Browser</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="236" />
-      <location filename="../ProjectProtocolsBrowser.py" line="188" />
+      <location filename="../ProjectProtocolsBrowser.py" line="242" />
+      <location filename="../ProjectProtocolsBrowser.py" line="190" />
       <source>Compile protocol</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="357" />
-      <location filename="../ProjectProtocolsBrowser.py" line="325" />
-      <location filename="../ProjectProtocolsBrowser.py" line="266" />
-      <location filename="../ProjectProtocolsBrowser.py" line="238" />
-      <location filename="../ProjectProtocolsBrowser.py" line="190" />
+      <location filename="../ProjectProtocolsBrowser.py" line="373" />
+      <location filename="../ProjectProtocolsBrowser.py" line="337" />
+      <location filename="../ProjectProtocolsBrowser.py" line="274" />
+      <location filename="../ProjectProtocolsBrowser.py" line="244" />
+      <location filename="../ProjectProtocolsBrowser.py" line="192" />
       <source>Compile all protocols</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="242" />
-      <location filename="../ProjectProtocolsBrowser.py" line="194" />
+      <location filename="../ProjectProtocolsBrowser.py" line="248" />
+      <location filename="../ProjectProtocolsBrowser.py" line="196" />
       <source>Compile protocol as gRPC</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="361" />
-      <location filename="../ProjectProtocolsBrowser.py" line="329" />
-      <location filename="../ProjectProtocolsBrowser.py" line="270" />
-      <location filename="../ProjectProtocolsBrowser.py" line="246" />
-      <location filename="../ProjectProtocolsBrowser.py" line="198" />
+      <location filename="../ProjectProtocolsBrowser.py" line="377" />
+      <location filename="../ProjectProtocolsBrowser.py" line="341" />
+      <location filename="../ProjectProtocolsBrowser.py" line="278" />
+      <location filename="../ProjectProtocolsBrowser.py" line="252" />
+      <location filename="../ProjectProtocolsBrowser.py" line="200" />
       <source>Compile all protocols as gRPC</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="305" />
-      <location filename="../ProjectProtocolsBrowser.py" line="250" />
-      <location filename="../ProjectProtocolsBrowser.py" line="202" />
+      <location filename="../ProjectProtocolsBrowser.py" line="317" />
+      <location filename="../ProjectProtocolsBrowser.py" line="256" />
+      <location filename="../ProjectProtocolsBrowser.py" line="204" />
       <source>Open</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="204" />
+      <location filename="../ProjectProtocolsBrowser.py" line="206" />
       <source>Rename file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="332" />
-      <location filename="../ProjectProtocolsBrowser.py" line="307" />
-      <location filename="../ProjectProtocolsBrowser.py" line="207" />
+      <location filename="../ProjectProtocolsBrowser.py" line="344" />
+      <location filename="../ProjectProtocolsBrowser.py" line="319" />
+      <location filename="../ProjectProtocolsBrowser.py" line="209" />
       <source>Remove from project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="334" />
-      <location filename="../ProjectProtocolsBrowser.py" line="309" />
-      <location filename="../ProjectProtocolsBrowser.py" line="210" />
+      <location filename="../ProjectProtocolsBrowser.py" line="346" />
+      <location filename="../ProjectProtocolsBrowser.py" line="321" />
+      <location filename="../ProjectProtocolsBrowser.py" line="212" />
       <source>Delete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="365" />
-      <location filename="../ProjectProtocolsBrowser.py" line="337" />
-      <location filename="../ProjectProtocolsBrowser.py" line="275" />
-      <location filename="../ProjectProtocolsBrowser.py" line="252" />
-      <location filename="../ProjectProtocolsBrowser.py" line="213" />
+      <location filename="../ProjectProtocolsBrowser.py" line="350" />
+      <location filename="../ProjectProtocolsBrowser.py" line="283" />
+      <location filename="../ProjectProtocolsBrowser.py" line="258" />
+      <location filename="../ProjectProtocolsBrowser.py" line="216" />
+      <source>New protocol file...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="381" />
+      <location filename="../ProjectProtocolsBrowser.py" line="353" />
+      <location filename="../ProjectProtocolsBrowser.py" line="287" />
+      <location filename="../ProjectProtocolsBrowser.py" line="260" />
+      <location filename="../ProjectProtocolsBrowser.py" line="219" />
       <source>Add protocols...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="368" />
-      <location filename="../ProjectProtocolsBrowser.py" line="339" />
-      <location filename="../ProjectProtocolsBrowser.py" line="278" />
-      <location filename="../ProjectProtocolsBrowser.py" line="254" />
-      <location filename="../ProjectProtocolsBrowser.py" line="215" />
+      <location filename="../ProjectProtocolsBrowser.py" line="384" />
+      <location filename="../ProjectProtocolsBrowser.py" line="355" />
+      <location filename="../ProjectProtocolsBrowser.py" line="290" />
+      <location filename="../ProjectProtocolsBrowser.py" line="262" />
+      <location filename="../ProjectProtocolsBrowser.py" line="221" />
       <source>Add protocols directory...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="342" />
-      <location filename="../ProjectProtocolsBrowser.py" line="219" />
+      <location filename="../ProjectProtocolsBrowser.py" line="358" />
+      <location filename="../ProjectProtocolsBrowser.py" line="225" />
       <source>Copy Path to Clipboard</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="373" />
-      <location filename="../ProjectProtocolsBrowser.py" line="344" />
-      <location filename="../ProjectProtocolsBrowser.py" line="312" />
-      <location filename="../ProjectProtocolsBrowser.py" line="282" />
-      <location filename="../ProjectProtocolsBrowser.py" line="257" />
-      <location filename="../ProjectProtocolsBrowser.py" line="223" />
+      <location filename="../ProjectProtocolsBrowser.py" line="389" />
+      <location filename="../ProjectProtocolsBrowser.py" line="360" />
+      <location filename="../ProjectProtocolsBrowser.py" line="324" />
+      <location filename="../ProjectProtocolsBrowser.py" line="294" />
+      <location filename="../ProjectProtocolsBrowser.py" line="265" />
+      <location filename="../ProjectProtocolsBrowser.py" line="229" />
       <source>Expand all directories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="376" />
-      <location filename="../ProjectProtocolsBrowser.py" line="346" />
-      <location filename="../ProjectProtocolsBrowser.py" line="314" />
-      <location filename="../ProjectProtocolsBrowser.py" line="284" />
-      <location filename="../ProjectProtocolsBrowser.py" line="258" />
-      <location filename="../ProjectProtocolsBrowser.py" line="226" />
+      <location filename="../ProjectProtocolsBrowser.py" line="392" />
+      <location filename="../ProjectProtocolsBrowser.py" line="362" />
+      <location filename="../ProjectProtocolsBrowser.py" line="326" />
+      <location filename="../ProjectProtocolsBrowser.py" line="296" />
+      <location filename="../ProjectProtocolsBrowser.py" line="266" />
+      <location filename="../ProjectProtocolsBrowser.py" line="232" />
       <source>Collapse all directories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="379" />
-      <location filename="../ProjectProtocolsBrowser.py" line="348" />
-      <location filename="../ProjectProtocolsBrowser.py" line="316" />
-      <location filename="../ProjectProtocolsBrowser.py" line="286" />
-      <location filename="../ProjectProtocolsBrowser.py" line="259" />
-      <location filename="../ProjectProtocolsBrowser.py" line="228" />
+      <location filename="../ProjectProtocolsBrowser.py" line="395" />
+      <location filename="../ProjectProtocolsBrowser.py" line="364" />
+      <location filename="../ProjectProtocolsBrowser.py" line="328" />
+      <location filename="../ProjectProtocolsBrowser.py" line="298" />
+      <location filename="../ProjectProtocolsBrowser.py" line="267" />
+      <location filename="../ProjectProtocolsBrowser.py" line="234" />
       <source>Collapse all files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="382" />
-      <location filename="../ProjectProtocolsBrowser.py" line="350" />
-      <location filename="../ProjectProtocolsBrowser.py" line="318" />
-      <location filename="../ProjectProtocolsBrowser.py" line="288" />
-      <location filename="../ProjectProtocolsBrowser.py" line="261" />
-      <location filename="../ProjectProtocolsBrowser.py" line="230" />
+      <location filename="../ProjectProtocolsBrowser.py" line="398" />
+      <location filename="../ProjectProtocolsBrowser.py" line="366" />
+      <location filename="../ProjectProtocolsBrowser.py" line="330" />
+      <location filename="../ProjectProtocolsBrowser.py" line="300" />
+      <location filename="../ProjectProtocolsBrowser.py" line="269" />
+      <location filename="../ProjectProtocolsBrowser.py" line="236" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="384" />
-      <location filename="../ProjectProtocolsBrowser.py" line="352" />
-      <location filename="../ProjectProtocolsBrowser.py" line="320" />
-      <location filename="../ProjectProtocolsBrowser.py" line="290" />
-      <location filename="../ProjectProtocolsBrowser.py" line="262" />
-      <location filename="../ProjectProtocolsBrowser.py" line="232" />
+      <location filename="../ProjectProtocolsBrowser.py" line="400" />
+      <location filename="../ProjectProtocolsBrowser.py" line="368" />
+      <location filename="../ProjectProtocolsBrowser.py" line="332" />
+      <location filename="../ProjectProtocolsBrowser.py" line="302" />
+      <location filename="../ProjectProtocolsBrowser.py" line="270" />
+      <location filename="../ProjectProtocolsBrowser.py" line="238" />
       <source>Configure Protobuf...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="297" />
+      <location filename="../ProjectProtocolsBrowser.py" line="309" />
       <source>Compile protocols</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="301" />
+      <location filename="../ProjectProtocolsBrowser.py" line="313" />
       <source>Compile protocols as gRPC</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="586" />
       <location filename="../ProjectProtocolsBrowser.py" line="571" />
-      <source>Delete Protocols</source>
+      <location filename="../ProjectProtocolsBrowser.py" line="555" />
+      <source>New protocol file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="556" />
+      <source>Enter the path of the new protocol file:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ProjectProtocolsBrowser.py" line="572" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. The action will be aborted.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="587" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be created. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="647" />
+      <source>Delete Protocols</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="648" />
       <source>Do you really want to delete these protocol files from the project?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="688" />
-      <location filename="../ProjectProtocolsBrowser.py" line="674" />
+      <location filename="../ProjectProtocolsBrowser.py" line="764" />
+      <location filename="../ProjectProtocolsBrowser.py" line="750" />
       <source>Protocol Compilation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="675" />
+      <location filename="../ProjectProtocolsBrowser.py" line="751" />
       <source>The compilation of the protocol file was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="689" />
+      <location filename="../ProjectProtocolsBrowser.py" line="765" />
       <source>The compilation of the protocol file failed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="743" />
+      <location filename="../ProjectProtocolsBrowser.py" line="819" />
       <source>Process Generation Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="744" />
+      <location filename="../ProjectProtocolsBrowser.py" line="820" />
       <source>&lt;p&gt;Could not start {0}.&lt;br&gt;Ensure that it is in the search path.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="753" />
+      <location filename="../ProjectProtocolsBrowser.py" line="829" />
       <source>Compiler Invalid</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="754" />
+      <location filename="../ProjectProtocolsBrowser.py" line="830" />
       <source>The configured compiler is invalid.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="818" />
-      <location filename="../ProjectProtocolsBrowser.py" line="781" />
+      <location filename="../ProjectProtocolsBrowser.py" line="894" />
+      <location filename="../ProjectProtocolsBrowser.py" line="857" />
       <source>Compiling Protocols...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="819" />
-      <location filename="../ProjectProtocolsBrowser.py" line="782" />
+      <location filename="../ProjectProtocolsBrowser.py" line="895" />
+      <location filename="../ProjectProtocolsBrowser.py" line="858" />
       <source>Abort</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="822" />
-      <location filename="../ProjectProtocolsBrowser.py" line="785" />
+      <location filename="../ProjectProtocolsBrowser.py" line="898" />
+      <location filename="../ProjectProtocolsBrowser.py" line="861" />
       <source>%v/%m Protocols</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="827" />
-      <location filename="../ProjectProtocolsBrowser.py" line="790" />
+      <location filename="../ProjectProtocolsBrowser.py" line="903" />
+      <location filename="../ProjectProtocolsBrowser.py" line="866" />
       <source>Protocols</source>
       <translation type="unfinished" />
     </message>
@@ -243,53 +273,53 @@
   <context>
     <name>ProtobufExtensionPlugin</name>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="74" />
-      <location filename="../../PluginExtensionProtobuf.py" line="56" />
+      <location filename="../../PluginExtensionProtobuf.py" line="75" />
+      <location filename="../../PluginExtensionProtobuf.py" line="57" />
       <source>Protobuf Compiler</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="94" />
-      <location filename="../../PluginExtensionProtobuf.py" line="59" />
+      <location filename="../../PluginExtensionProtobuf.py" line="95" />
+      <location filename="../../PluginExtensionProtobuf.py" line="60" />
       <source>Protobuf and gRPC Support plugin is not activated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="98" />
-      <location filename="../../PluginExtensionProtobuf.py" line="63" />
+      <location filename="../../PluginExtensionProtobuf.py" line="99" />
+      <location filename="../../PluginExtensionProtobuf.py" line="64" />
       <source>(inactive)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="112" />
-      <location filename="../../PluginExtensionProtobuf.py" line="91" />
+      <location filename="../../PluginExtensionProtobuf.py" line="113" />
+      <location filename="../../PluginExtensionProtobuf.py" line="92" />
       <source>gRPC Compiler</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="137" />
+      <location filename="../../PluginExtensionProtobuf.py" line="138" />
       <source>Protobuf and gRPC</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="227" />
+      <location filename="../../PluginExtensionProtobuf.py" line="228" />
       <source>Protocol Buffer (protobuf)</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../../PluginExtensionProtobuf.py" line="232" />
       <location filename="../../PluginExtensionProtobuf.py" line="231" />
-      <location filename="../../PluginExtensionProtobuf.py" line="230" />
       <source>Protocol Buffer Files (*.proto)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="248" />
+      <location filename="../../PluginExtensionProtobuf.py" line="249" />
       <source>Protobuf and gRPC Extension</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="254" />
-      <location filename="../../PluginExtensionProtobuf.py" line="249" />
+      <location filename="../../PluginExtensionProtobuf.py" line="255" />
+      <location filename="../../PluginExtensionProtobuf.py" line="250" />
       <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source>
       <translation type="unfinished" />
     </message>
--- a/ExtensionProtobuf/i18n/protobuf_en.ts	Tue Oct 17 11:30:08 2023 +0200
+++ b/ExtensionProtobuf/i18n/protobuf_en.ts	Wed Oct 25 18:08:35 2023 +0200
@@ -4,238 +4,268 @@
   <context>
     <name>ProjectProtocolsBrowser</name>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="79" />
+      <location filename="../ProjectProtocolsBrowser.py" line="81" />
       <source>Protocols (protobuf)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="82" />
+      <location filename="../ProjectProtocolsBrowser.py" line="84" />
       <source>&lt;b&gt;Project Protocols Browser&lt;/b&gt;&lt;p&gt;This allows to easily see all protocols (protobuf files) contained in the current project. Several actions can be executed via the context menu.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="96" />
+      <location filename="../ProjectProtocolsBrowser.py" line="98" />
       <source>Protobuf Files ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="98" />
-      <location filename="../ProjectProtocolsBrowser.py" line="97" />
+      <location filename="../ProjectProtocolsBrowser.py" line="100" />
+      <location filename="../ProjectProtocolsBrowser.py" line="99" />
       <source>Protobuf Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="108" />
+      <location filename="../ProjectProtocolsBrowser.py" line="110" />
       <source>Protocols (protobuf) Browser</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="236" />
-      <location filename="../ProjectProtocolsBrowser.py" line="188" />
+      <location filename="../ProjectProtocolsBrowser.py" line="242" />
+      <location filename="../ProjectProtocolsBrowser.py" line="190" />
       <source>Compile protocol</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="357" />
-      <location filename="../ProjectProtocolsBrowser.py" line="325" />
-      <location filename="../ProjectProtocolsBrowser.py" line="266" />
-      <location filename="../ProjectProtocolsBrowser.py" line="238" />
-      <location filename="../ProjectProtocolsBrowser.py" line="190" />
+      <location filename="../ProjectProtocolsBrowser.py" line="373" />
+      <location filename="../ProjectProtocolsBrowser.py" line="337" />
+      <location filename="../ProjectProtocolsBrowser.py" line="274" />
+      <location filename="../ProjectProtocolsBrowser.py" line="244" />
+      <location filename="../ProjectProtocolsBrowser.py" line="192" />
       <source>Compile all protocols</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="242" />
-      <location filename="../ProjectProtocolsBrowser.py" line="194" />
+      <location filename="../ProjectProtocolsBrowser.py" line="248" />
+      <location filename="../ProjectProtocolsBrowser.py" line="196" />
       <source>Compile protocol as gRPC</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="361" />
-      <location filename="../ProjectProtocolsBrowser.py" line="329" />
-      <location filename="../ProjectProtocolsBrowser.py" line="270" />
-      <location filename="../ProjectProtocolsBrowser.py" line="246" />
-      <location filename="../ProjectProtocolsBrowser.py" line="198" />
+      <location filename="../ProjectProtocolsBrowser.py" line="377" />
+      <location filename="../ProjectProtocolsBrowser.py" line="341" />
+      <location filename="../ProjectProtocolsBrowser.py" line="278" />
+      <location filename="../ProjectProtocolsBrowser.py" line="252" />
+      <location filename="../ProjectProtocolsBrowser.py" line="200" />
       <source>Compile all protocols as gRPC</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="305" />
-      <location filename="../ProjectProtocolsBrowser.py" line="250" />
-      <location filename="../ProjectProtocolsBrowser.py" line="202" />
+      <location filename="../ProjectProtocolsBrowser.py" line="317" />
+      <location filename="../ProjectProtocolsBrowser.py" line="256" />
+      <location filename="../ProjectProtocolsBrowser.py" line="204" />
       <source>Open</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="204" />
+      <location filename="../ProjectProtocolsBrowser.py" line="206" />
       <source>Rename file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="332" />
-      <location filename="../ProjectProtocolsBrowser.py" line="307" />
-      <location filename="../ProjectProtocolsBrowser.py" line="207" />
+      <location filename="../ProjectProtocolsBrowser.py" line="344" />
+      <location filename="../ProjectProtocolsBrowser.py" line="319" />
+      <location filename="../ProjectProtocolsBrowser.py" line="209" />
       <source>Remove from project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="334" />
-      <location filename="../ProjectProtocolsBrowser.py" line="309" />
-      <location filename="../ProjectProtocolsBrowser.py" line="210" />
+      <location filename="../ProjectProtocolsBrowser.py" line="346" />
+      <location filename="../ProjectProtocolsBrowser.py" line="321" />
+      <location filename="../ProjectProtocolsBrowser.py" line="212" />
       <source>Delete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="365" />
-      <location filename="../ProjectProtocolsBrowser.py" line="337" />
-      <location filename="../ProjectProtocolsBrowser.py" line="275" />
-      <location filename="../ProjectProtocolsBrowser.py" line="252" />
-      <location filename="../ProjectProtocolsBrowser.py" line="213" />
+      <location filename="../ProjectProtocolsBrowser.py" line="350" />
+      <location filename="../ProjectProtocolsBrowser.py" line="283" />
+      <location filename="../ProjectProtocolsBrowser.py" line="258" />
+      <location filename="../ProjectProtocolsBrowser.py" line="216" />
+      <source>New protocol file...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="381" />
+      <location filename="../ProjectProtocolsBrowser.py" line="353" />
+      <location filename="../ProjectProtocolsBrowser.py" line="287" />
+      <location filename="../ProjectProtocolsBrowser.py" line="260" />
+      <location filename="../ProjectProtocolsBrowser.py" line="219" />
       <source>Add protocols...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="368" />
-      <location filename="../ProjectProtocolsBrowser.py" line="339" />
-      <location filename="../ProjectProtocolsBrowser.py" line="278" />
-      <location filename="../ProjectProtocolsBrowser.py" line="254" />
-      <location filename="../ProjectProtocolsBrowser.py" line="215" />
+      <location filename="../ProjectProtocolsBrowser.py" line="384" />
+      <location filename="../ProjectProtocolsBrowser.py" line="355" />
+      <location filename="../ProjectProtocolsBrowser.py" line="290" />
+      <location filename="../ProjectProtocolsBrowser.py" line="262" />
+      <location filename="../ProjectProtocolsBrowser.py" line="221" />
       <source>Add protocols directory...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="342" />
-      <location filename="../ProjectProtocolsBrowser.py" line="219" />
+      <location filename="../ProjectProtocolsBrowser.py" line="358" />
+      <location filename="../ProjectProtocolsBrowser.py" line="225" />
       <source>Copy Path to Clipboard</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="373" />
-      <location filename="../ProjectProtocolsBrowser.py" line="344" />
-      <location filename="../ProjectProtocolsBrowser.py" line="312" />
-      <location filename="../ProjectProtocolsBrowser.py" line="282" />
-      <location filename="../ProjectProtocolsBrowser.py" line="257" />
-      <location filename="../ProjectProtocolsBrowser.py" line="223" />
+      <location filename="../ProjectProtocolsBrowser.py" line="389" />
+      <location filename="../ProjectProtocolsBrowser.py" line="360" />
+      <location filename="../ProjectProtocolsBrowser.py" line="324" />
+      <location filename="../ProjectProtocolsBrowser.py" line="294" />
+      <location filename="../ProjectProtocolsBrowser.py" line="265" />
+      <location filename="../ProjectProtocolsBrowser.py" line="229" />
       <source>Expand all directories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="376" />
-      <location filename="../ProjectProtocolsBrowser.py" line="346" />
-      <location filename="../ProjectProtocolsBrowser.py" line="314" />
-      <location filename="../ProjectProtocolsBrowser.py" line="284" />
-      <location filename="../ProjectProtocolsBrowser.py" line="258" />
-      <location filename="../ProjectProtocolsBrowser.py" line="226" />
+      <location filename="../ProjectProtocolsBrowser.py" line="392" />
+      <location filename="../ProjectProtocolsBrowser.py" line="362" />
+      <location filename="../ProjectProtocolsBrowser.py" line="326" />
+      <location filename="../ProjectProtocolsBrowser.py" line="296" />
+      <location filename="../ProjectProtocolsBrowser.py" line="266" />
+      <location filename="../ProjectProtocolsBrowser.py" line="232" />
       <source>Collapse all directories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="379" />
-      <location filename="../ProjectProtocolsBrowser.py" line="348" />
-      <location filename="../ProjectProtocolsBrowser.py" line="316" />
-      <location filename="../ProjectProtocolsBrowser.py" line="286" />
-      <location filename="../ProjectProtocolsBrowser.py" line="259" />
-      <location filename="../ProjectProtocolsBrowser.py" line="228" />
+      <location filename="../ProjectProtocolsBrowser.py" line="395" />
+      <location filename="../ProjectProtocolsBrowser.py" line="364" />
+      <location filename="../ProjectProtocolsBrowser.py" line="328" />
+      <location filename="../ProjectProtocolsBrowser.py" line="298" />
+      <location filename="../ProjectProtocolsBrowser.py" line="267" />
+      <location filename="../ProjectProtocolsBrowser.py" line="234" />
       <source>Collapse all files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="382" />
-      <location filename="../ProjectProtocolsBrowser.py" line="350" />
-      <location filename="../ProjectProtocolsBrowser.py" line="318" />
-      <location filename="../ProjectProtocolsBrowser.py" line="288" />
-      <location filename="../ProjectProtocolsBrowser.py" line="261" />
-      <location filename="../ProjectProtocolsBrowser.py" line="230" />
+      <location filename="../ProjectProtocolsBrowser.py" line="398" />
+      <location filename="../ProjectProtocolsBrowser.py" line="366" />
+      <location filename="../ProjectProtocolsBrowser.py" line="330" />
+      <location filename="../ProjectProtocolsBrowser.py" line="300" />
+      <location filename="../ProjectProtocolsBrowser.py" line="269" />
+      <location filename="../ProjectProtocolsBrowser.py" line="236" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="384" />
-      <location filename="../ProjectProtocolsBrowser.py" line="352" />
-      <location filename="../ProjectProtocolsBrowser.py" line="320" />
-      <location filename="../ProjectProtocolsBrowser.py" line="290" />
-      <location filename="../ProjectProtocolsBrowser.py" line="262" />
-      <location filename="../ProjectProtocolsBrowser.py" line="232" />
+      <location filename="../ProjectProtocolsBrowser.py" line="400" />
+      <location filename="../ProjectProtocolsBrowser.py" line="368" />
+      <location filename="../ProjectProtocolsBrowser.py" line="332" />
+      <location filename="../ProjectProtocolsBrowser.py" line="302" />
+      <location filename="../ProjectProtocolsBrowser.py" line="270" />
+      <location filename="../ProjectProtocolsBrowser.py" line="238" />
       <source>Configure Protobuf...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="297" />
+      <location filename="../ProjectProtocolsBrowser.py" line="309" />
       <source>Compile protocols</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="301" />
+      <location filename="../ProjectProtocolsBrowser.py" line="313" />
       <source>Compile protocols as gRPC</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="586" />
       <location filename="../ProjectProtocolsBrowser.py" line="571" />
-      <source>Delete Protocols</source>
+      <location filename="../ProjectProtocolsBrowser.py" line="555" />
+      <source>New protocol file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="556" />
+      <source>Enter the path of the new protocol file:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ProjectProtocolsBrowser.py" line="572" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. The action will be aborted.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="587" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be created. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="647" />
+      <source>Delete Protocols</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="648" />
       <source>Do you really want to delete these protocol files from the project?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="688" />
-      <location filename="../ProjectProtocolsBrowser.py" line="674" />
+      <location filename="../ProjectProtocolsBrowser.py" line="764" />
+      <location filename="../ProjectProtocolsBrowser.py" line="750" />
       <source>Protocol Compilation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="675" />
+      <location filename="../ProjectProtocolsBrowser.py" line="751" />
       <source>The compilation of the protocol file was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="689" />
+      <location filename="../ProjectProtocolsBrowser.py" line="765" />
       <source>The compilation of the protocol file failed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="743" />
+      <location filename="../ProjectProtocolsBrowser.py" line="819" />
       <source>Process Generation Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="744" />
+      <location filename="../ProjectProtocolsBrowser.py" line="820" />
       <source>&lt;p&gt;Could not start {0}.&lt;br&gt;Ensure that it is in the search path.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="753" />
+      <location filename="../ProjectProtocolsBrowser.py" line="829" />
       <source>Compiler Invalid</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="754" />
+      <location filename="../ProjectProtocolsBrowser.py" line="830" />
       <source>The configured compiler is invalid.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="818" />
-      <location filename="../ProjectProtocolsBrowser.py" line="781" />
+      <location filename="../ProjectProtocolsBrowser.py" line="894" />
+      <location filename="../ProjectProtocolsBrowser.py" line="857" />
       <source>Compiling Protocols...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="819" />
-      <location filename="../ProjectProtocolsBrowser.py" line="782" />
+      <location filename="../ProjectProtocolsBrowser.py" line="895" />
+      <location filename="../ProjectProtocolsBrowser.py" line="858" />
       <source>Abort</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="822" />
-      <location filename="../ProjectProtocolsBrowser.py" line="785" />
+      <location filename="../ProjectProtocolsBrowser.py" line="898" />
+      <location filename="../ProjectProtocolsBrowser.py" line="861" />
       <source>%v/%m Protocols</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="827" />
-      <location filename="../ProjectProtocolsBrowser.py" line="790" />
+      <location filename="../ProjectProtocolsBrowser.py" line="903" />
+      <location filename="../ProjectProtocolsBrowser.py" line="866" />
       <source>Protocols</source>
       <translation type="unfinished" />
     </message>
@@ -243,53 +273,53 @@
   <context>
     <name>ProtobufExtensionPlugin</name>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="74" />
-      <location filename="../../PluginExtensionProtobuf.py" line="56" />
+      <location filename="../../PluginExtensionProtobuf.py" line="75" />
+      <location filename="../../PluginExtensionProtobuf.py" line="57" />
       <source>Protobuf Compiler</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="94" />
-      <location filename="../../PluginExtensionProtobuf.py" line="59" />
+      <location filename="../../PluginExtensionProtobuf.py" line="95" />
+      <location filename="../../PluginExtensionProtobuf.py" line="60" />
       <source>Protobuf and gRPC Support plugin is not activated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="98" />
-      <location filename="../../PluginExtensionProtobuf.py" line="63" />
+      <location filename="../../PluginExtensionProtobuf.py" line="99" />
+      <location filename="../../PluginExtensionProtobuf.py" line="64" />
       <source>(inactive)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="112" />
-      <location filename="../../PluginExtensionProtobuf.py" line="91" />
+      <location filename="../../PluginExtensionProtobuf.py" line="113" />
+      <location filename="../../PluginExtensionProtobuf.py" line="92" />
       <source>gRPC Compiler</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="137" />
+      <location filename="../../PluginExtensionProtobuf.py" line="138" />
       <source>Protobuf and gRPC</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="227" />
+      <location filename="../../PluginExtensionProtobuf.py" line="228" />
       <source>Protocol Buffer (protobuf)</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../../PluginExtensionProtobuf.py" line="232" />
       <location filename="../../PluginExtensionProtobuf.py" line="231" />
-      <location filename="../../PluginExtensionProtobuf.py" line="230" />
       <source>Protocol Buffer Files (*.proto)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="248" />
+      <location filename="../../PluginExtensionProtobuf.py" line="249" />
       <source>Protobuf and gRPC Extension</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginExtensionProtobuf.py" line="254" />
-      <location filename="../../PluginExtensionProtobuf.py" line="249" />
+      <location filename="../../PluginExtensionProtobuf.py" line="255" />
+      <location filename="../../PluginExtensionProtobuf.py" line="250" />
       <source>The Protobuf and gRPC extension cannot be activated because it requires eric7 23.1 or newer.</source>
       <translation type="unfinished" />
     </message>
--- a/ExtensionProtobuf/i18n/protobuf_es.ts	Tue Oct 17 11:30:08 2023 +0200
+++ b/ExtensionProtobuf/i18n/protobuf_es.ts	Wed Oct 25 18:08:35 2023 +0200
@@ -4,238 +4,268 @@
   <context>
     <name>ProjectProtocolsBrowser</name>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="80" />
+      <location filename="../ProjectProtocolsBrowser.py" line="81" />
       <source>Protocols (protobuf)</source>
       <translation>Protocolos (protobuf)</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="83" />
+      <location filename="../ProjectProtocolsBrowser.py" line="84" />
       <source>&lt;b&gt;Project Protocols Browser&lt;/b&gt;&lt;p&gt;This allows to easily see all protocols (protobuf files) contained in the current project. Several actions can be executed via the context menu.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Navegador de Protocolos del Proyecto&lt;/b&gt;&lt;p&gt;Permite visualizar facilmente todas los protocolos (archivos protobuf) que contiene el proyecto actual. A través del menú de contexto se pueden ejecutar varias acciones.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="97" />
+      <location filename="../ProjectProtocolsBrowser.py" line="98" />
       <source>Protobuf Files ({0})</source>
       <translation>Archivos Protobuf ({0})</translation>
     </message>
     <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="100" />
       <location filename="../ProjectProtocolsBrowser.py" line="99" />
-      <location filename="../ProjectProtocolsBrowser.py" line="98" />
       <source>Protobuf Files</source>
       <translation>Archivos Protobuf</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="109" />
+      <location filename="../ProjectProtocolsBrowser.py" line="110" />
       <source>Protocols (protobuf) Browser</source>
       <translation>Navegador de Protocolos (protobuf)</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="237" />
-      <location filename="../ProjectProtocolsBrowser.py" line="189" />
+      <location filename="../ProjectProtocolsBrowser.py" line="242" />
+      <location filename="../ProjectProtocolsBrowser.py" line="190" />
       <source>Compile protocol</source>
       <translation>Compilar protocolo</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="358" />
-      <location filename="../ProjectProtocolsBrowser.py" line="326" />
-      <location filename="../ProjectProtocolsBrowser.py" line="267" />
-      <location filename="../ProjectProtocolsBrowser.py" line="239" />
-      <location filename="../ProjectProtocolsBrowser.py" line="191" />
+      <location filename="../ProjectProtocolsBrowser.py" line="373" />
+      <location filename="../ProjectProtocolsBrowser.py" line="337" />
+      <location filename="../ProjectProtocolsBrowser.py" line="274" />
+      <location filename="../ProjectProtocolsBrowser.py" line="244" />
+      <location filename="../ProjectProtocolsBrowser.py" line="192" />
       <source>Compile all protocols</source>
       <translation>Compilar todos los protocolos</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="243" />
-      <location filename="../ProjectProtocolsBrowser.py" line="195" />
+      <location filename="../ProjectProtocolsBrowser.py" line="248" />
+      <location filename="../ProjectProtocolsBrowser.py" line="196" />
       <source>Compile protocol as gRPC</source>
       <translation>Compilar protocolo como gRPC</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="362" />
-      <location filename="../ProjectProtocolsBrowser.py" line="330" />
-      <location filename="../ProjectProtocolsBrowser.py" line="271" />
-      <location filename="../ProjectProtocolsBrowser.py" line="247" />
-      <location filename="../ProjectProtocolsBrowser.py" line="199" />
+      <location filename="../ProjectProtocolsBrowser.py" line="377" />
+      <location filename="../ProjectProtocolsBrowser.py" line="341" />
+      <location filename="../ProjectProtocolsBrowser.py" line="278" />
+      <location filename="../ProjectProtocolsBrowser.py" line="252" />
+      <location filename="../ProjectProtocolsBrowser.py" line="200" />
       <source>Compile all protocols as gRPC</source>
       <translation>Compilar todos los protocolos como gRPC</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="306" />
-      <location filename="../ProjectProtocolsBrowser.py" line="251" />
-      <location filename="../ProjectProtocolsBrowser.py" line="203" />
+      <location filename="../ProjectProtocolsBrowser.py" line="317" />
+      <location filename="../ProjectProtocolsBrowser.py" line="256" />
+      <location filename="../ProjectProtocolsBrowser.py" line="204" />
       <source>Open</source>
       <translation>Abrir</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="205" />
+      <location filename="../ProjectProtocolsBrowser.py" line="206" />
       <source>Rename file</source>
       <translation>Renombrar archivo</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="333" />
-      <location filename="../ProjectProtocolsBrowser.py" line="308" />
-      <location filename="../ProjectProtocolsBrowser.py" line="208" />
+      <location filename="../ProjectProtocolsBrowser.py" line="344" />
+      <location filename="../ProjectProtocolsBrowser.py" line="319" />
+      <location filename="../ProjectProtocolsBrowser.py" line="209" />
       <source>Remove from project</source>
       <translation>Quitar del proyecto</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="335" />
-      <location filename="../ProjectProtocolsBrowser.py" line="310" />
-      <location filename="../ProjectProtocolsBrowser.py" line="211" />
+      <location filename="../ProjectProtocolsBrowser.py" line="346" />
+      <location filename="../ProjectProtocolsBrowser.py" line="321" />
+      <location filename="../ProjectProtocolsBrowser.py" line="212" />
       <source>Delete</source>
       <translation>Borrar</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="366" />
-      <location filename="../ProjectProtocolsBrowser.py" line="338" />
-      <location filename="../ProjectProtocolsBrowser.py" line="276" />
-      <location filename="../ProjectProtocolsBrowser.py" line="253" />
-      <location filename="../ProjectProtocolsBrowser.py" line="214" />
+      <location filename="../ProjectProtocolsBrowser.py" line="350" />
+      <location filename="../ProjectProtocolsBrowser.py" line="283" />
+      <location filename="../ProjectProtocolsBrowser.py" line="258" />
+      <location filename="../ProjectProtocolsBrowser.py" line="216" />
+      <source>New protocol file...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="381" />
+      <location filename="../ProjectProtocolsBrowser.py" line="353" />
+      <location filename="../ProjectProtocolsBrowser.py" line="287" />
+      <location filename="../ProjectProtocolsBrowser.py" line="260" />
+      <location filename="../ProjectProtocolsBrowser.py" line="219" />
       <source>Add protocols...</source>
       <translation>Añadir protocolos...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="369" />
-      <location filename="../ProjectProtocolsBrowser.py" line="340" />
-      <location filename="../ProjectProtocolsBrowser.py" line="279" />
-      <location filename="../ProjectProtocolsBrowser.py" line="255" />
-      <location filename="../ProjectProtocolsBrowser.py" line="216" />
+      <location filename="../ProjectProtocolsBrowser.py" line="384" />
+      <location filename="../ProjectProtocolsBrowser.py" line="355" />
+      <location filename="../ProjectProtocolsBrowser.py" line="290" />
+      <location filename="../ProjectProtocolsBrowser.py" line="262" />
+      <location filename="../ProjectProtocolsBrowser.py" line="221" />
       <source>Add protocols directory...</source>
       <translation>Añadir directorio de protocolos...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="343" />
-      <location filename="../ProjectProtocolsBrowser.py" line="220" />
+      <location filename="../ProjectProtocolsBrowser.py" line="358" />
+      <location filename="../ProjectProtocolsBrowser.py" line="225" />
       <source>Copy Path to Clipboard</source>
       <translation>Copiar Ruta al Portapapeles</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="374" />
-      <location filename="../ProjectProtocolsBrowser.py" line="345" />
-      <location filename="../ProjectProtocolsBrowser.py" line="313" />
-      <location filename="../ProjectProtocolsBrowser.py" line="283" />
-      <location filename="../ProjectProtocolsBrowser.py" line="258" />
-      <location filename="../ProjectProtocolsBrowser.py" line="224" />
+      <location filename="../ProjectProtocolsBrowser.py" line="389" />
+      <location filename="../ProjectProtocolsBrowser.py" line="360" />
+      <location filename="../ProjectProtocolsBrowser.py" line="324" />
+      <location filename="../ProjectProtocolsBrowser.py" line="294" />
+      <location filename="../ProjectProtocolsBrowser.py" line="265" />
+      <location filename="../ProjectProtocolsBrowser.py" line="229" />
       <source>Expand all directories</source>
       <translation>Expandir todos los directorios</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="377" />
-      <location filename="../ProjectProtocolsBrowser.py" line="347" />
-      <location filename="../ProjectProtocolsBrowser.py" line="315" />
-      <location filename="../ProjectProtocolsBrowser.py" line="285" />
-      <location filename="../ProjectProtocolsBrowser.py" line="259" />
-      <location filename="../ProjectProtocolsBrowser.py" line="227" />
+      <location filename="../ProjectProtocolsBrowser.py" line="392" />
+      <location filename="../ProjectProtocolsBrowser.py" line="362" />
+      <location filename="../ProjectProtocolsBrowser.py" line="326" />
+      <location filename="../ProjectProtocolsBrowser.py" line="296" />
+      <location filename="../ProjectProtocolsBrowser.py" line="266" />
+      <location filename="../ProjectProtocolsBrowser.py" line="232" />
       <source>Collapse all directories</source>
       <translation>Contraer todos los directorios</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="380" />
-      <location filename="../ProjectProtocolsBrowser.py" line="349" />
-      <location filename="../ProjectProtocolsBrowser.py" line="317" />
-      <location filename="../ProjectProtocolsBrowser.py" line="287" />
-      <location filename="../ProjectProtocolsBrowser.py" line="260" />
-      <location filename="../ProjectProtocolsBrowser.py" line="229" />
+      <location filename="../ProjectProtocolsBrowser.py" line="395" />
+      <location filename="../ProjectProtocolsBrowser.py" line="364" />
+      <location filename="../ProjectProtocolsBrowser.py" line="328" />
+      <location filename="../ProjectProtocolsBrowser.py" line="298" />
+      <location filename="../ProjectProtocolsBrowser.py" line="267" />
+      <location filename="../ProjectProtocolsBrowser.py" line="234" />
       <source>Collapse all files</source>
       <translation>Colapsar todos los archivos</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="383" />
-      <location filename="../ProjectProtocolsBrowser.py" line="351" />
-      <location filename="../ProjectProtocolsBrowser.py" line="319" />
-      <location filename="../ProjectProtocolsBrowser.py" line="289" />
-      <location filename="../ProjectProtocolsBrowser.py" line="262" />
-      <location filename="../ProjectProtocolsBrowser.py" line="231" />
+      <location filename="../ProjectProtocolsBrowser.py" line="398" />
+      <location filename="../ProjectProtocolsBrowser.py" line="366" />
+      <location filename="../ProjectProtocolsBrowser.py" line="330" />
+      <location filename="../ProjectProtocolsBrowser.py" line="300" />
+      <location filename="../ProjectProtocolsBrowser.py" line="269" />
+      <location filename="../ProjectProtocolsBrowser.py" line="236" />
       <source>Configure...</source>
       <translation>Configurar...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="385" />
-      <location filename="../ProjectProtocolsBrowser.py" line="353" />
-      <location filename="../ProjectProtocolsBrowser.py" line="321" />
-      <location filename="../ProjectProtocolsBrowser.py" line="291" />
-      <location filename="../ProjectProtocolsBrowser.py" line="263" />
-      <location filename="../ProjectProtocolsBrowser.py" line="233" />
+      <location filename="../ProjectProtocolsBrowser.py" line="400" />
+      <location filename="../ProjectProtocolsBrowser.py" line="368" />
+      <location filename="../ProjectProtocolsBrowser.py" line="332" />
+      <location filename="../ProjectProtocolsBrowser.py" line="302" />
+      <location filename="../ProjectProtocolsBrowser.py" line="270" />
+      <location filename="../ProjectProtocolsBrowser.py" line="238" />
       <source>Configure Protobuf...</source>
       <translation>Configurar Protobuf...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="298" />
+      <location filename="../ProjectProtocolsBrowser.py" line="309" />
       <source>Compile protocols</source>
       <translation>Compilar protocolos</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="302" />
+      <location filename="../ProjectProtocolsBrowser.py" line="313" />
       <source>Compile protocols as gRPC</source>
       <translation>Compilar protocolos como gRPC</translation>
     </message>
     <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="586" />
+      <location filename="../ProjectProtocolsBrowser.py" line="571" />
+      <location filename="../ProjectProtocolsBrowser.py" line="555" />
+      <source>New protocol file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="556" />
+      <source>Enter the path of the new protocol file:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../ProjectProtocolsBrowser.py" line="572" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. The action will be aborted.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="587" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be created. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="647" />
       <source>Delete Protocols</source>
       <translation>Borrar Protocolos</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="573" />
+      <location filename="../ProjectProtocolsBrowser.py" line="648" />
       <source>Do you really want to delete these protocol files from the project?</source>
       <translation>¿Realmente quiere borrar estos archivos de protocolo del proyecto?</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="689" />
-      <location filename="../ProjectProtocolsBrowser.py" line="675" />
+      <location filename="../ProjectProtocolsBrowser.py" line="764" />
+      <location filename="../ProjectProtocolsBrowser.py" line="750" />
       <source>Protocol Compilation</source>
       <translation>Compilación de Protocolo</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="676" />
+      <location filename="../ProjectProtocolsBrowser.py" line="751" />
       <source>The compilation of the protocol file was successful.</source>
       <translation>Se ha compilado satisfactoriamente el archivo de protocolo.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="690" />
+      <location filename="../ProjectProtocolsBrowser.py" line="765" />
       <source>The compilation of the protocol file failed.</source>
       <translation>La compilación del archivo de protocolo ha fallado.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="744" />
+      <location filename="../ProjectProtocolsBrowser.py" line="819" />
       <source>Process Generation Error</source>
       <translation>Error de Generación de Proceso</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="745" />
+      <location filename="../ProjectProtocolsBrowser.py" line="820" />
       <source>&lt;p&gt;Could not start {0}.&lt;br&gt;Ensure that it is in the search path.&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se ha podido ejecutar {0}.&lt;br&gt;Verifique que está en la ruta de búsqueda (search path).&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="754" />
+      <location filename="../ProjectProtocolsBrowser.py" line="829" />
       <source>Compiler Invalid</source>
       <translation>Compilador No Válido</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="755" />
+      <location filename="../ProjectProtocolsBrowser.py" line="830" />
       <source>The configured compiler is invalid.</source>
       <translation>El compilador configurado no es válido.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="819" />
-      <location filename="../ProjectProtocolsBrowser.py" line="782" />
+      <location filename="../ProjectProtocolsBrowser.py" line="894" />
+      <location filename="../ProjectProtocolsBrowser.py" line="857" />
       <source>Compiling Protocols...</source>
       <translation>Compilando Protocolos...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="820" />
-      <location filename="../ProjectProtocolsBrowser.py" line="783" />
+      <location filename="../ProjectProtocolsBrowser.py" line="895" />
+      <location filename="../ProjectProtocolsBrowser.py" line="858" />
       <source>Abort</source>
       <translation>Abortar</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="823" />
-      <location filename="../ProjectProtocolsBrowser.py" line="786" />
+      <location filename="../ProjectProtocolsBrowser.py" line="898" />
+      <location filename="../ProjectProtocolsBrowser.py" line="861" />
       <source>%v/%m Protocols</source>
       <translation>%v/%m Protocolos</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="828" />
-      <location filename="../ProjectProtocolsBrowser.py" line="791" />
+      <location filename="../ProjectProtocolsBrowser.py" line="903" />
+      <location filename="../ProjectProtocolsBrowser.py" line="866" />
       <source>Protocols</source>
       <translation>Protocolos</translation>
     </message>
--- a/ExtensionProtobuf/i18n/protobuf_ru.ts	Tue Oct 17 11:30:08 2023 +0200
+++ b/ExtensionProtobuf/i18n/protobuf_ru.ts	Wed Oct 25 18:08:35 2023 +0200
@@ -4,238 +4,268 @@
   <context>
     <name>ProjectProtocolsBrowser</name>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="80" />
+      <location filename="../ProjectProtocolsBrowser.py" line="81" />
       <source>Protocols (protobuf)</source>
       <translation>Протоколы (protobuf)</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="83" />
+      <location filename="../ProjectProtocolsBrowser.py" line="84" />
       <source>&lt;b&gt;Project Protocols Browser&lt;/b&gt;&lt;p&gt;This allows to easily see all protocols (protobuf files) contained in the current project. Several actions can be executed via the context menu.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Просмотр протоколов проекта&lt;/b&gt;&lt;p&gt;Позволяет легко просмотреть все протоколы (файлы protobuf), содержащиеся в текущем проекте. Посредством контекстного меню можно выполнить некоторые действия.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="97" />
+      <location filename="../ProjectProtocolsBrowser.py" line="98" />
       <source>Protobuf Files ({0})</source>
       <translation>Файлы Protobuf ({0})</translation>
     </message>
     <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="100" />
       <location filename="../ProjectProtocolsBrowser.py" line="99" />
-      <location filename="../ProjectProtocolsBrowser.py" line="98" />
       <source>Protobuf Files</source>
       <translation>Файлы Protobuf</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="109" />
+      <location filename="../ProjectProtocolsBrowser.py" line="110" />
       <source>Protocols (protobuf) Browser</source>
       <translation>Браузер протоколов (protobuf)</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="237" />
-      <location filename="../ProjectProtocolsBrowser.py" line="189" />
+      <location filename="../ProjectProtocolsBrowser.py" line="242" />
+      <location filename="../ProjectProtocolsBrowser.py" line="190" />
       <source>Compile protocol</source>
       <translation>Компилировать протокол</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="358" />
-      <location filename="../ProjectProtocolsBrowser.py" line="326" />
-      <location filename="../ProjectProtocolsBrowser.py" line="267" />
-      <location filename="../ProjectProtocolsBrowser.py" line="239" />
-      <location filename="../ProjectProtocolsBrowser.py" line="191" />
+      <location filename="../ProjectProtocolsBrowser.py" line="373" />
+      <location filename="../ProjectProtocolsBrowser.py" line="337" />
+      <location filename="../ProjectProtocolsBrowser.py" line="274" />
+      <location filename="../ProjectProtocolsBrowser.py" line="244" />
+      <location filename="../ProjectProtocolsBrowser.py" line="192" />
       <source>Compile all protocols</source>
       <translation>Компилировать все протоколы</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="243" />
-      <location filename="../ProjectProtocolsBrowser.py" line="195" />
+      <location filename="../ProjectProtocolsBrowser.py" line="248" />
+      <location filename="../ProjectProtocolsBrowser.py" line="196" />
       <source>Compile protocol as gRPC</source>
       <translation>Компилировать протокол в виде gRPC</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="362" />
-      <location filename="../ProjectProtocolsBrowser.py" line="330" />
-      <location filename="../ProjectProtocolsBrowser.py" line="271" />
-      <location filename="../ProjectProtocolsBrowser.py" line="247" />
-      <location filename="../ProjectProtocolsBrowser.py" line="199" />
+      <location filename="../ProjectProtocolsBrowser.py" line="377" />
+      <location filename="../ProjectProtocolsBrowser.py" line="341" />
+      <location filename="../ProjectProtocolsBrowser.py" line="278" />
+      <location filename="../ProjectProtocolsBrowser.py" line="252" />
+      <location filename="../ProjectProtocolsBrowser.py" line="200" />
       <source>Compile all protocols as gRPC</source>
       <translation>Компилировать все протоколы в виде gRPC</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="306" />
-      <location filename="../ProjectProtocolsBrowser.py" line="251" />
-      <location filename="../ProjectProtocolsBrowser.py" line="203" />
+      <location filename="../ProjectProtocolsBrowser.py" line="317" />
+      <location filename="../ProjectProtocolsBrowser.py" line="256" />
+      <location filename="../ProjectProtocolsBrowser.py" line="204" />
       <source>Open</source>
       <translation>Открыть</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="205" />
+      <location filename="../ProjectProtocolsBrowser.py" line="206" />
       <source>Rename file</source>
       <translation>Переименовать файл</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="333" />
-      <location filename="../ProjectProtocolsBrowser.py" line="308" />
-      <location filename="../ProjectProtocolsBrowser.py" line="208" />
+      <location filename="../ProjectProtocolsBrowser.py" line="344" />
+      <location filename="../ProjectProtocolsBrowser.py" line="319" />
+      <location filename="../ProjectProtocolsBrowser.py" line="209" />
       <source>Remove from project</source>
       <translation>Удалить из проекта</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="335" />
-      <location filename="../ProjectProtocolsBrowser.py" line="310" />
-      <location filename="../ProjectProtocolsBrowser.py" line="211" />
+      <location filename="../ProjectProtocolsBrowser.py" line="346" />
+      <location filename="../ProjectProtocolsBrowser.py" line="321" />
+      <location filename="../ProjectProtocolsBrowser.py" line="212" />
       <source>Delete</source>
       <translation>Удалить</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="366" />
-      <location filename="../ProjectProtocolsBrowser.py" line="338" />
-      <location filename="../ProjectProtocolsBrowser.py" line="276" />
-      <location filename="../ProjectProtocolsBrowser.py" line="253" />
-      <location filename="../ProjectProtocolsBrowser.py" line="214" />
+      <location filename="../ProjectProtocolsBrowser.py" line="350" />
+      <location filename="../ProjectProtocolsBrowser.py" line="283" />
+      <location filename="../ProjectProtocolsBrowser.py" line="258" />
+      <location filename="../ProjectProtocolsBrowser.py" line="216" />
+      <source>New protocol file...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="381" />
+      <location filename="../ProjectProtocolsBrowser.py" line="353" />
+      <location filename="../ProjectProtocolsBrowser.py" line="287" />
+      <location filename="../ProjectProtocolsBrowser.py" line="260" />
+      <location filename="../ProjectProtocolsBrowser.py" line="219" />
       <source>Add protocols...</source>
       <translation>Добавить протоколы...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="369" />
-      <location filename="../ProjectProtocolsBrowser.py" line="340" />
-      <location filename="../ProjectProtocolsBrowser.py" line="279" />
-      <location filename="../ProjectProtocolsBrowser.py" line="255" />
-      <location filename="../ProjectProtocolsBrowser.py" line="216" />
+      <location filename="../ProjectProtocolsBrowser.py" line="384" />
+      <location filename="../ProjectProtocolsBrowser.py" line="355" />
+      <location filename="../ProjectProtocolsBrowser.py" line="290" />
+      <location filename="../ProjectProtocolsBrowser.py" line="262" />
+      <location filename="../ProjectProtocolsBrowser.py" line="221" />
       <source>Add protocols directory...</source>
       <translation>Добавить директорию протоколов...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="343" />
-      <location filename="../ProjectProtocolsBrowser.py" line="220" />
+      <location filename="../ProjectProtocolsBrowser.py" line="358" />
+      <location filename="../ProjectProtocolsBrowser.py" line="225" />
       <source>Copy Path to Clipboard</source>
       <translation>Копировать маршрут в буфер обмена</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="374" />
-      <location filename="../ProjectProtocolsBrowser.py" line="345" />
-      <location filename="../ProjectProtocolsBrowser.py" line="313" />
-      <location filename="../ProjectProtocolsBrowser.py" line="283" />
-      <location filename="../ProjectProtocolsBrowser.py" line="258" />
-      <location filename="../ProjectProtocolsBrowser.py" line="224" />
+      <location filename="../ProjectProtocolsBrowser.py" line="389" />
+      <location filename="../ProjectProtocolsBrowser.py" line="360" />
+      <location filename="../ProjectProtocolsBrowser.py" line="324" />
+      <location filename="../ProjectProtocolsBrowser.py" line="294" />
+      <location filename="../ProjectProtocolsBrowser.py" line="265" />
+      <location filename="../ProjectProtocolsBrowser.py" line="229" />
       <source>Expand all directories</source>
       <translation>Открыть все директории</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="377" />
-      <location filename="../ProjectProtocolsBrowser.py" line="347" />
-      <location filename="../ProjectProtocolsBrowser.py" line="315" />
-      <location filename="../ProjectProtocolsBrowser.py" line="285" />
-      <location filename="../ProjectProtocolsBrowser.py" line="259" />
-      <location filename="../ProjectProtocolsBrowser.py" line="227" />
+      <location filename="../ProjectProtocolsBrowser.py" line="392" />
+      <location filename="../ProjectProtocolsBrowser.py" line="362" />
+      <location filename="../ProjectProtocolsBrowser.py" line="326" />
+      <location filename="../ProjectProtocolsBrowser.py" line="296" />
+      <location filename="../ProjectProtocolsBrowser.py" line="266" />
+      <location filename="../ProjectProtocolsBrowser.py" line="232" />
       <source>Collapse all directories</source>
       <translation>Свернуть все директории</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="380" />
-      <location filename="../ProjectProtocolsBrowser.py" line="349" />
-      <location filename="../ProjectProtocolsBrowser.py" line="317" />
-      <location filename="../ProjectProtocolsBrowser.py" line="287" />
-      <location filename="../ProjectProtocolsBrowser.py" line="260" />
-      <location filename="../ProjectProtocolsBrowser.py" line="229" />
+      <location filename="../ProjectProtocolsBrowser.py" line="395" />
+      <location filename="../ProjectProtocolsBrowser.py" line="364" />
+      <location filename="../ProjectProtocolsBrowser.py" line="328" />
+      <location filename="../ProjectProtocolsBrowser.py" line="298" />
+      <location filename="../ProjectProtocolsBrowser.py" line="267" />
+      <location filename="../ProjectProtocolsBrowser.py" line="234" />
       <source>Collapse all files</source>
       <translation>Свернуть все файлы</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="383" />
-      <location filename="../ProjectProtocolsBrowser.py" line="351" />
-      <location filename="../ProjectProtocolsBrowser.py" line="319" />
-      <location filename="../ProjectProtocolsBrowser.py" line="289" />
-      <location filename="../ProjectProtocolsBrowser.py" line="262" />
-      <location filename="../ProjectProtocolsBrowser.py" line="231" />
+      <location filename="../ProjectProtocolsBrowser.py" line="398" />
+      <location filename="../ProjectProtocolsBrowser.py" line="366" />
+      <location filename="../ProjectProtocolsBrowser.py" line="330" />
+      <location filename="../ProjectProtocolsBrowser.py" line="300" />
+      <location filename="../ProjectProtocolsBrowser.py" line="269" />
+      <location filename="../ProjectProtocolsBrowser.py" line="236" />
       <source>Configure...</source>
       <translation>Настроить...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="385" />
-      <location filename="../ProjectProtocolsBrowser.py" line="353" />
-      <location filename="../ProjectProtocolsBrowser.py" line="321" />
-      <location filename="../ProjectProtocolsBrowser.py" line="291" />
-      <location filename="../ProjectProtocolsBrowser.py" line="263" />
-      <location filename="../ProjectProtocolsBrowser.py" line="233" />
+      <location filename="../ProjectProtocolsBrowser.py" line="400" />
+      <location filename="../ProjectProtocolsBrowser.py" line="368" />
+      <location filename="../ProjectProtocolsBrowser.py" line="332" />
+      <location filename="../ProjectProtocolsBrowser.py" line="302" />
+      <location filename="../ProjectProtocolsBrowser.py" line="270" />
+      <location filename="../ProjectProtocolsBrowser.py" line="238" />
       <source>Configure Protobuf...</source>
       <translation>Конфигурация Protobuf...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="298" />
+      <location filename="../ProjectProtocolsBrowser.py" line="309" />
       <source>Compile protocols</source>
       <translation>Компилировать протоколы</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="302" />
+      <location filename="../ProjectProtocolsBrowser.py" line="313" />
       <source>Compile protocols as gRPC</source>
       <translation>Компилировать протоколы в виде gRPC</translation>
     </message>
     <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="586" />
+      <location filename="../ProjectProtocolsBrowser.py" line="571" />
+      <location filename="../ProjectProtocolsBrowser.py" line="555" />
+      <source>New protocol file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="556" />
+      <source>Enter the path of the new protocol file:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../ProjectProtocolsBrowser.py" line="572" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. The action will be aborted.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="587" />
+      <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be created. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ProjectProtocolsBrowser.py" line="647" />
       <source>Delete Protocols</source>
       <translation>Удалить протоколы</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="573" />
+      <location filename="../ProjectProtocolsBrowser.py" line="648" />
       <source>Do you really want to delete these protocol files from the project?</source>
       <translation>Вы действительно хотите удалить эти файлы протоколов из проекта?</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="689" />
-      <location filename="../ProjectProtocolsBrowser.py" line="675" />
+      <location filename="../ProjectProtocolsBrowser.py" line="764" />
+      <location filename="../ProjectProtocolsBrowser.py" line="750" />
       <source>Protocol Compilation</source>
       <translation>Компиляция протокола</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="676" />
+      <location filename="../ProjectProtocolsBrowser.py" line="751" />
       <source>The compilation of the protocol file was successful.</source>
       <translation>Компиляция файла протокола выполнена успешно.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="690" />
+      <location filename="../ProjectProtocolsBrowser.py" line="765" />
       <source>The compilation of the protocol file failed.</source>
       <translation>Сбой компиляции файла протокола.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="744" />
+      <location filename="../ProjectProtocolsBrowser.py" line="819" />
       <source>Process Generation Error</source>
       <translation>Ошибка при запуске процесса</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="745" />
+      <location filename="../ProjectProtocolsBrowser.py" line="820" />
       <source>&lt;p&gt;Could not start {0}.&lt;br&gt;Ensure that it is in the search path.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Невозможно запустить {0}.&lt;br&gt;Убедитесь, что он находится в путях поиска.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="754" />
+      <location filename="../ProjectProtocolsBrowser.py" line="829" />
       <source>Compiler Invalid</source>
       <translation>Недопустимый компилятор</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="755" />
+      <location filename="../ProjectProtocolsBrowser.py" line="830" />
       <source>The configured compiler is invalid.</source>
       <translation>Недопустимая конфигурация компилятора.</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="819" />
-      <location filename="../ProjectProtocolsBrowser.py" line="782" />
+      <location filename="../ProjectProtocolsBrowser.py" line="894" />
+      <location filename="../ProjectProtocolsBrowser.py" line="857" />
       <source>Compiling Protocols...</source>
       <translation>Компиляция протоколов...</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="820" />
-      <location filename="../ProjectProtocolsBrowser.py" line="783" />
+      <location filename="../ProjectProtocolsBrowser.py" line="895" />
+      <location filename="../ProjectProtocolsBrowser.py" line="858" />
       <source>Abort</source>
       <translation>Прервать</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="823" />
-      <location filename="../ProjectProtocolsBrowser.py" line="786" />
+      <location filename="../ProjectProtocolsBrowser.py" line="898" />
+      <location filename="../ProjectProtocolsBrowser.py" line="861" />
       <source>%v/%m Protocols</source>
       <translation>%v из %m протокола(ов)</translation>
     </message>
     <message>
-      <location filename="../ProjectProtocolsBrowser.py" line="828" />
-      <location filename="../ProjectProtocolsBrowser.py" line="791" />
+      <location filename="../ProjectProtocolsBrowser.py" line="903" />
+      <location filename="../ProjectProtocolsBrowser.py" line="866" />
       <source>Protocols</source>
       <translation>Протоколы</translation>
     </message>
--- a/ExtensionProtobuf/protoclbr.py	Tue Oct 17 11:30:08 2023 +0200
+++ b/ExtensionProtobuf/protoclbr.py	Wed Oct 25 18:08:35 2023 +0200
@@ -215,7 +215,7 @@
             filename = pathname
             try:
                 src = Utilities.readEncodedFile(filename)[0]
-            except (UnicodeError, OSError):
+            except (OSError, UnicodeError):
                 # can't do anything with this module
                 return {}
 
--- a/PluginExtensionProtobuf.py	Tue Oct 17 11:30:08 2023 +0200
+++ b/PluginExtensionProtobuf.py	Wed Oct 25 18:08:35 2023 +0200
@@ -23,7 +23,7 @@
 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
 autoactivate = True
 deactivateable = True
-version = "10.1.6"
+version = "10.1.7"
 className = "ProtobufExtensionPlugin"
 packageName = "ExtensionProtobuf"
 shortDescription = "Support for the development of Protobuf and gRPC projects"
--- a/PluginProtobuf.epj	Tue Oct 17 11:30:08 2023 +0200
+++ b/PluginProtobuf.epj	Wed Oct 25 18:08:35 2023 +0200
@@ -1,7 +1,7 @@
 {
   "header": {
     "comment": "eric project file for project PluginProtobuf",
-    "copyright": "Copyright (C) 2022 Detlev Offenbach, detlev@die-offenbachs.de"
+    "copyright": "Copyright (C) 2023 Detlev Offenbach, detlev@die-offenbachs.de"
   },
   "project": {
     "AUTHOR": "Detlev Offenbach",
@@ -11,10 +11,14 @@
           "AllowStarArgAny": false,
           "AllowUntypedDefs": false,
           "AllowUntypedNested": false,
+          "CheckFutureAnnotations": false,
           "DispatchDecorators": [
             "singledispatch",
             "singledispatchmethod"
           ],
+          "ExemptedTypingSymbols": [
+            ""
+          ],
           "ForceFutureAnnotations": false,
           "MaximumComplexity": 3,
           "MaximumLength": 7,
@@ -62,7 +66,7 @@
         "CopyrightAuthor": "",
         "CopyrightMinFileSize": 0,
         "DocstringType": "eric_black",
-        "EnabledCheckerCategories": "C, D, E, I, M, N, Y, W",
+        "EnabledCheckerCategories": "C, D, E, I, M, NO, N, Y, W",
         "ExcludeFiles": "*/ThirdParty/*, */coverage/*, */Ui_*.py, */Examples/*, */pycodestyle.py,*/pyflakes/checker.py,*/mccabe.py,*/eradicate.py,*/ast_unparse.py,*/piplicenses.py,*/pipdeptree.py",
         "ExcludeMessages": "C101,E203,E265,E266,E305,E402,M201,M301,M302,M303,M304,M305,M306,M307,M308,M311,M312,M313,M314,M315,M321,M701,M702,M811,M834,N802,N803,N807,N808,N821,W293,W503,Y119,Y401,Y402",
         "FixCodes": "",
@@ -75,12 +79,7 @@
             "eric7"
           ],
           "BanRelativeImports": "",
-          "BannedModules": [],
-          "CombinedAsImports": true,
-          "SortCaseSensitive": false,
-          "SortFromFirst": false,
-          "SortIgnoringStyle": false,
-          "SortOrder": "natural"
+          "BannedModules": []
         },
         "IncludeMessages": "",
         "LineComplexity": 25,
@@ -88,6 +87,17 @@
         "MaxCodeComplexity": 10,
         "MaxDocLineLength": 88,
         "MaxLineLength": 88,
+        "NameOrderChecker": {
+          "ApplicationPackageNames": [
+            "ExtensionProtobuf",
+            "eric7"
+          ],
+          "CombinedAsImports": false,
+          "SortCaseSensitive": false,
+          "SortFromFirst": false,
+          "SortIgnoringStyle": false,
+          "SortOrder": "natural"
+        },
         "NoFixCodes": "E501",
         "RepeatMessages": true,
         "SecurityChecker": {
@@ -121,6 +131,19 @@
           "WeakKeySizeRsaMedium": "2048"
         },
         "ShowIgnored": false,
+        "UnusedChecker": {
+          "IgnoreAbstract": true,
+          "IgnoreDunderGlobals": true,
+          "IgnoreDunderMethods": true,
+          "IgnoreEventHandlerMethods": false,
+          "IgnoreLambdas": false,
+          "IgnoreNestedFunctions": false,
+          "IgnoreOverload": true,
+          "IgnoreOverride": true,
+          "IgnoreSlotMethods": false,
+          "IgnoreStubs": true,
+          "IgnoreVariadicNames": false
+        },
         "ValidEncodings": "latin-1, utf-8"
       }
     },
@@ -204,7 +227,7 @@
     ],
     "OTHERTOOLSPARMS": {
       "Black": {
-        "exclude": "/(\\.direnv|\\.eggs|\\.git|\\.hg|\\.mypy_cache|\\.nox|\\.tox|\\.venv|venv|\\.svn|\\.ipynb_checkpoints|_build|buck-out|build|dist|__pypackages__)/",
+        "exclude": "/(\\.direnv|\\.eggs|\\.git|\\.hg|\\.ipynb_checkpoints|\\.mypy_cache|\\.nox|\\.pytest_cache|\\.ruff_cache|\\.tox|\\.svn|\\.venv|\\.vscode|__pypackages__|_build|buck-out|build|dist|venv)/",
         "extend-exclude": "Ui_.*\\.py",
         "force-exclude": "",
         "line-length": 88,
@@ -212,6 +235,7 @@
         "skip-string-normalization": false,
         "source": "project",
         "target-version": [
+          "py312",
           "py311",
           "py310",
           "py39",
@@ -258,6 +282,7 @@
       "PluginExtensionProtobuf.py",
       "__init__.py"
     ],
+    "SOURCESDIR": "",
     "SPELLEXCLUDES": "",
     "SPELLLANGUAGE": "en_US",
     "SPELLWORDS": "",
--- a/changelog.md	Tue Oct 17 11:30:08 2023 +0200
+++ b/changelog.md	Wed Oct 25 18:08:35 2023 +0200
@@ -1,6 +1,12 @@
 ChangeLog
 ---------
 
+__Version 10.1.7__
+
+- bug fixes
+- Added the context menu action "New protocol file..." to give a more concise way
+  to create a new protocol file.
+
 __Version 10.1.6__
 
 - bug fixes

eric ide

mercurial