diff -r 35f7cbb40a1f -r 5e9a61e7d7d0 ExtensionProtobuf/ProjectProtocolsBrowser.py --- 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.