ExtensionProtobuf/ProjectProtocolsBrowser.py

changeset 27
5e9a61e7d7d0
parent 23
7bfac64d06ff
child 34
41070d80eb1f
equal deleted inserted replaced
26:35f7cbb40a1f 27:5e9a61e7d7d0
16 from PyQt6.QtCore import QProcess, QThread, pyqtSignal 16 from PyQt6.QtCore import QProcess, QThread, pyqtSignal
17 from PyQt6.QtWidgets import QApplication, QDialog, QMenu 17 from PyQt6.QtWidgets import QApplication, QDialog, QMenu
18 18
19 from eric7 import Preferences 19 from eric7 import Preferences
20 from eric7.EricGui import EricPixmapCache 20 from eric7.EricGui import EricPixmapCache
21 from eric7.EricWidgets import EricMessageBox 21 from eric7.EricWidgets import EricMessageBox, EricPathPickerDialog
22 from eric7.EricWidgets.EricApplication import ericApp 22 from eric7.EricWidgets.EricApplication import ericApp
23 from eric7.EricWidgets.EricPathPickerDialog import EricPathPickerModes
23 from eric7.EricWidgets.EricProgressDialog import EricProgressDialog 24 from eric7.EricWidgets.EricProgressDialog import EricProgressDialog
24 from eric7.Project.FileCategoryRepositoryItem import FileCategoryRepositoryItem 25 from eric7.Project.FileCategoryRepositoryItem import FileCategoryRepositoryItem
25 from eric7.Project.ProjectBaseBrowser import ProjectBaseBrowser 26 from eric7.Project.ProjectBaseBrowser import ProjectBaseBrowser
26 from eric7.Project.ProjectBrowserModel import ( 27 from eric7.Project.ProjectBrowserModel import (
27 ProjectBrowserDirectoryItem, 28 ProjectBrowserDirectoryItem,
209 ) 210 )
210 self.menuActions.append(act) 211 self.menuActions.append(act)
211 act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile) 212 act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile)
212 self.menuActions.append(act) 213 self.menuActions.append(act)
213 self.sourceMenu.addSeparator() 214 self.sourceMenu.addSeparator()
215 self.sourceMenu.addAction(
216 self.tr("New protocol file..."), self.__addNewProtocolFile
217 )
218 self.sourceMenu.addSeparator()
214 self.sourceMenu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles) 219 self.sourceMenu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles)
215 self.sourceMenu.addAction( 220 self.sourceMenu.addAction(
216 self.tr("Add protocols directory..."), self.__addProtocolsDirectory 221 self.tr("Add protocols directory..."), self.__addProtocolsDirectory
217 ) 222 )
218 self.sourceMenu.addSeparator() 223 self.sourceMenu.addSeparator()
247 self.tr("Compile all protocols as gRPC"), 252 self.tr("Compile all protocols as gRPC"),
248 functools.partial(self.__compileAllProtocols, grpc=True), 253 functools.partial(self.__compileAllProtocols, grpc=True),
249 ) 254 )
250 self.menu.addSeparator() 255 self.menu.addSeparator()
251 self.menu.addAction(self.tr("Open"), self._openItem) 256 self.menu.addAction(self.tr("Open"), self._openItem)
257 self.menu.addSeparator()
258 self.menu.addAction(self.tr("New protocol file..."), self.__addNewProtocolFile)
252 self.menu.addSeparator() 259 self.menu.addSeparator()
253 self.menu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles) 260 self.menu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles)
254 self.menu.addAction( 261 self.menu.addAction(
255 self.tr("Add protocols directory..."), self.__addProtocolsDirectory 262 self.tr("Add protocols directory..."), self.__addProtocolsDirectory
256 ) 263 )
268 ) 275 )
269 self.backMenu.addSeparator() 276 self.backMenu.addSeparator()
270 self.backMenu.addAction( 277 self.backMenu.addAction(
271 self.tr("Compile all protocols as gRPC"), 278 self.tr("Compile all protocols as gRPC"),
272 functools.partial(self.__compileAllProtocols, grpc=True), 279 functools.partial(self.__compileAllProtocols, grpc=True),
280 )
281 self.backMenu.addSeparator()
282 self.backMenu.addAction(
283 self.tr("New protocol file..."), self.__addNewProtocolFile
273 ) 284 )
274 self.backMenu.addSeparator() 285 self.backMenu.addSeparator()
275 self.backMenu.addAction( 286 self.backMenu.addAction(
276 self.tr("Add protocols..."), lambda: self.project.addFiles("PROTOCOLS") 287 self.tr("Add protocols..."), lambda: self.project.addFiles("PROTOCOLS")
277 ) 288 )
332 ) 343 )
333 act = self.dirMenu.addAction(self.tr("Remove from project"), self._removeFile) 344 act = self.dirMenu.addAction(self.tr("Remove from project"), self._removeFile)
334 self.dirMenuActions.append(act) 345 self.dirMenuActions.append(act)
335 act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory) 346 act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory)
336 self.dirMenuActions.append(act) 347 self.dirMenuActions.append(act)
348 self.dirMenu.addSeparator()
349 self.dirMenu.addAction(
350 self.tr("New protocol file..."), self.__addNewProtocolFile
351 )
337 self.dirMenu.addSeparator() 352 self.dirMenu.addSeparator()
338 self.dirMenu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles) 353 self.dirMenu.addAction(self.tr("Add protocols..."), self.__addProtocolFiles)
339 self.dirMenu.addAction( 354 self.dirMenu.addAction(
340 self.tr("Add protocols directory..."), self.__addProtocolsDirectory 355 self.tr("Add protocols directory..."), self.__addProtocolsDirectory
341 ) 356 )
516 ) 531 )
517 elif isinstance(itm, BrowserClassAttributeItem): 532 elif isinstance(itm, BrowserClassAttributeItem):
518 self.sourceFile[str, int].emit( 533 self.sourceFile[str, int].emit(
519 itm.fileName(), itm.attributeObject().lineno 534 itm.fileName(), itm.attributeObject().lineno
520 ) 535 )
536
537 def __addNewProtocolFile(self):
538 """
539 Private method to add a new interface file to the project.
540 """
541 itm = self.model().item(self.currentIndex())
542 if isinstance(
543 itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem)
544 ):
545 dn = os.path.dirname(itm.fileName())
546 elif isinstance(
547 itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
548 ):
549 dn = itm.dirName()
550 else:
551 dn = ""
552
553 filename, ok = EricPathPickerDialog.getStrPath(
554 self,
555 self.tr("New protocol file"),
556 self.tr("Enter the path of the new protocol file:"),
557 mode=EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE,
558 strPath=dn,
559 defaultDirectory=dn,
560 filters=self.project.getFileCategoryFilters(
561 categories=["PROTOCOLS"], withAll=False
562 ),
563 )
564 if ok:
565 if not os.path.splitext(filename)[1]:
566 filename += ".proto"
567
568 if os.path.exists(filename):
569 EricMessageBox.critical(
570 self,
571 self.tr("New protocol file"),
572 self.tr(
573 "<p>The file <b>{0}</b> already exists. The action will be"
574 " aborted.</p>"
575 ).format(filename),
576 )
577 return
578
579 try:
580 with open(filename, "w") as f:
581 f.write("// {0}\n".format(self.project.getRelativePath(filename)))
582 f.write('syntax = "proto2";\n')
583 except OSError as err:
584 EricMessageBox.critical(
585 self,
586 self.tr("New protocol file"),
587 self.tr(
588 "<p>The file <b>{0}</b> could not be created. Aborting...</p>"
589 "<p>Reason: {1}</p>"
590 ).format(filename, str(err)),
591 )
592 return
593
594 self.project.appendFile(filename)
595 self.sourceFile[str].emit(filename)
521 596
522 def __addProtocolFiles(self): 597 def __addProtocolFiles(self):
523 """ 598 """
524 Private method to add protocol files to the project. 599 Private method to add protocol files to the project.
525 """ 600 """

eric ide

mercurial