--- 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.