ExtensionCorba/ProjectInterfacesBrowser.py

changeset 37
79e453012ab9
parent 33
782792ab98fb
child 38
aefce8f68439
diff -r 5244b7fecc4d -r 79e453012ab9 ExtensionCorba/ProjectInterfacesBrowser.py
--- a/ExtensionCorba/ProjectInterfacesBrowser.py	Tue Oct 17 11:34:52 2023 +0200
+++ b/ExtensionCorba/ProjectInterfacesBrowser.py	Wed Oct 25 17:56:14 2023 +0200
@@ -17,8 +17,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
@@ -219,6 +220,10 @@
         self.menuActions.append(act)
         self.sourceMenu.addSeparator()
         self.sourceMenu.addAction(
+            self.tr("New interface file..."), self.__addNewInterfaceFile
+        )
+        self.sourceMenu.addSeparator()
+        self.sourceMenu.addAction(
             self.tr("Add interfaces..."), self.__addInterfaceFiles
         )
         self.sourceMenu.addAction(
@@ -253,6 +258,10 @@
             self.menu.addSeparator()
         self.menu.addAction(self.tr("Open"), self._openItem)
         self.menu.addSeparator()
+        self.menu.addAction(
+            self.tr("New interface file..."), self.__addNewInterfaceFile
+        )
+        self.menu.addSeparator()
         self.menu.addAction(self.tr("Add interfaces..."), self.__addInterfaceFiles)
         self.menu.addAction(
             self.tr("Add interfaces directory..."), self.__addInterfacesDirectory
@@ -276,6 +285,10 @@
             )
             self.backMenu.addSeparator()
         self.backMenu.addAction(
+            self.tr("New interface file..."), self.__addNewInterfaceFile
+        )
+        self.backMenu.addSeparator()
+        self.backMenu.addAction(
             self.tr("Add interfaces..."), lambda: self.project.addFiles("INTERFACES")
         )
         self.backMenu.addAction(
@@ -335,6 +348,10 @@
         act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory)
         self.dirMenuActions.append(act)
         self.dirMenu.addSeparator()
+        self.dirMenu.addAction(
+            self.tr("New interface file..."), self.__addNewInterfaceFile
+        )
+        self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Add interfaces..."), self.__addInterfaceFiles)
         self.dirMenu.addAction(
             self.tr("Add interfaces directory..."), self.__addInterfacesDirectory
@@ -518,6 +535,65 @@
                     itm.fileName(), itm.attributeObject().lineno
                 )
 
+    def __addNewInterfaceFile(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 interface file"),
+            self.tr("Enter the path of the new interface file:"),
+            mode=EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE,
+            strPath=dn,
+            defaultDirectory=dn,
+            filters=self.project.getFileCategoryFilters(
+                categories=["INTERFACES"], withAll=False
+            ),
+        )
+        if ok:
+            if not os.path.splitext(filename)[1]:
+                filename = filename + ".idl"
+
+            if os.path.exists(filename):
+                EricMessageBox.critical(
+                    self,
+                    self.tr("New interface 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)))
+            except OSError as err:
+                EricMessageBox.critical(
+                    self,
+                    self.tr("New interface 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 __addInterfaceFiles(self):
         """
         Private method to add interface files to the project.

eric ide

mercurial