src/eric7/Project/ProjectSourcesBrowser.py

branch
eric7-maintenance
changeset 10272
7ae72d1df070
parent 10148
31ba20629af4
parent 10256
1b728f26d1ae
child 10460
3b34efa2857c
equal deleted inserted replaced
10226:3a99ac054b39 10272:7ae72d1df070
17 from eric7.CodeFormatting.BlackFormattingAction import BlackFormattingAction 17 from eric7.CodeFormatting.BlackFormattingAction import BlackFormattingAction
18 from eric7.CodeFormatting.BlackUtilities import aboutBlack 18 from eric7.CodeFormatting.BlackUtilities import aboutBlack
19 from eric7.CodeFormatting.IsortFormattingAction import IsortFormattingAction 19 from eric7.CodeFormatting.IsortFormattingAction import IsortFormattingAction
20 from eric7.CodeFormatting.IsortUtilities import aboutIsort 20 from eric7.CodeFormatting.IsortUtilities import aboutIsort
21 from eric7.EricGui import EricPixmapCache 21 from eric7.EricGui import EricPixmapCache
22 from eric7.EricWidgets import EricMessageBox 22 from eric7.EricWidgets import EricMessageBox, EricPathPickerDialog
23 from eric7.EricWidgets.EricApplication import ericApp 23 from eric7.EricWidgets.EricApplication import ericApp
24 from eric7.EricWidgets.EricPathPickerDialog import EricPathPickerModes
24 from eric7.Graphics.UMLDialog import UMLDialog, UMLDialogType 25 from eric7.Graphics.UMLDialog import UMLDialog, UMLDialogType
25 from eric7.UI.BrowserModel import ( 26 from eric7.UI.BrowserModel import (
26 BrowserClassAttributeItem, 27 BrowserClassAttributeItem,
27 BrowserClassItem, 28 BrowserClassItem,
28 BrowserFileItem, 29 BrowserFileItem,
32 from eric7.UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog 33 from eric7.UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog
33 34
34 from .FileCategoryRepositoryItem import FileCategoryRepositoryItem 35 from .FileCategoryRepositoryItem import FileCategoryRepositoryItem
35 from .ProjectBaseBrowser import ProjectBaseBrowser 36 from .ProjectBaseBrowser import ProjectBaseBrowser
36 from .ProjectBrowserModel import ( 37 from .ProjectBrowserModel import (
37 ProjectBrowserDirectoryItem,
38 ProjectBrowserFileItem, 38 ProjectBrowserFileItem,
39 ProjectBrowserSimpleDirectoryItem, 39 ProjectBrowserSimpleDirectoryItem,
40 ) 40 )
41 from .ProjectBrowserRepositoryItem import ProjectBrowserRepositoryItem 41 from .ProjectBrowserRepositoryItem import ProjectBrowserRepositoryItem
42 42
304 self.menuActions.append(act) 304 self.menuActions.append(act)
305 act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile) 305 act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile)
306 self.menuActions.append(act) 306 self.menuActions.append(act)
307 self.sourceMenu.addSeparator() 307 self.sourceMenu.addSeparator()
308 self.sourceMenu.addAction(self.tr("New package..."), self.__addNewPackage) 308 self.sourceMenu.addAction(self.tr("New package..."), self.__addNewPackage)
309 self.sourceMenu.addAction(
310 self.tr("New source file..."), self.__addNewSourceFile
311 )
312 self.sourceMenu.addSeparator()
309 self.sourceMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles) 313 self.sourceMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles)
310 self.sourceMenu.addAction( 314 self.sourceMenu.addAction(
311 self.tr("Add source directory..."), self.__addSourceDirectory 315 self.tr("Add source directory..."), self.__addSourceDirectory
312 ) 316 )
313 self.sourceMenu.addSeparator() 317 self.sourceMenu.addSeparator()
332 self.sourceMenu.addSeparator() 336 self.sourceMenu.addSeparator()
333 self.sourceMenu.addAction(self.tr("Configure..."), self._configure) 337 self.sourceMenu.addAction(self.tr("Configure..."), self._configure)
334 338
335 self.menu.addSeparator() 339 self.menu.addSeparator()
336 self.menu.addAction(self.tr("New package..."), self.__addNewPackage) 340 self.menu.addAction(self.tr("New package..."), self.__addNewPackage)
341 self.menu.addAction(self.tr("New source file..."), self.__addNewSourceFile)
342 self.menu.addSeparator()
337 self.menu.addAction(self.tr("Add source files..."), self.__addSourceFiles) 343 self.menu.addAction(self.tr("Add source files..."), self.__addSourceFiles)
338 self.menu.addAction( 344 self.menu.addAction(
339 self.tr("Add source directory..."), self.__addSourceDirectory 345 self.tr("Add source directory..."), self.__addSourceDirectory
340 ) 346 )
341 self.menu.addSeparator() 347 self.menu.addSeparator()
353 self.attributeMenu = QMenu(self) 359 self.attributeMenu = QMenu(self)
354 self.attributeMenu.addMenu(self.gotoMenu) 360 self.attributeMenu.addMenu(self.gotoMenu)
355 self.attributeMenu.addSeparator() 361 self.attributeMenu.addSeparator()
356 self.attributeMenu.addAction(self.tr("New package..."), self.__addNewPackage) 362 self.attributeMenu.addAction(self.tr("New package..."), self.__addNewPackage)
357 self.attributeMenu.addAction( 363 self.attributeMenu.addAction(
364 self.tr("New source file..."), self.__addNewSourceFile
365 )
366 self.attributeMenu.addSeparator()
367 self.attributeMenu.addAction(
358 self.tr("Add source files..."), 368 self.tr("Add source files..."),
359 lambda: self.project.addFiles("SOURCES"), 369 lambda: self.project.addFiles("SOURCES"),
360 ) 370 )
361 self.attributeMenu.addAction( 371 self.attributeMenu.addAction(
362 self.tr("Add source directory..."), 372 self.tr("Add source directory..."),
375 self.attributeMenu.addSeparator() 385 self.attributeMenu.addSeparator()
376 self.attributeMenu.addAction(self.tr("Configure..."), self._configure) 386 self.attributeMenu.addAction(self.tr("Configure..."), self._configure)
377 387
378 self.backMenu = QMenu(self) 388 self.backMenu = QMenu(self)
379 self.backMenu.addAction(self.tr("New package..."), self.__addNewPackage) 389 self.backMenu.addAction(self.tr("New package..."), self.__addNewPackage)
390 self.backMenu.addAction(self.tr("New source file..."), self.__addNewSourceFile)
391 self.backMenu.addSeparator()
380 self.backMenu.addAction( 392 self.backMenu.addAction(
381 self.tr("Add source files..."), 393 self.tr("Add source files..."),
382 lambda: self.project.addFiles("SOURCES"), 394 lambda: self.project.addFiles("SOURCES"),
383 ) 395 )
384 self.backMenu.addAction( 396 self.backMenu.addAction(
417 self.dirMenuActions.append(act) 429 self.dirMenuActions.append(act)
418 act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory) 430 act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory)
419 self.dirMenuActions.append(act) 431 self.dirMenuActions.append(act)
420 self.dirMenu.addSeparator() 432 self.dirMenu.addSeparator()
421 self.dirMenu.addAction(self.tr("New package..."), self.__addNewPackage) 433 self.dirMenu.addAction(self.tr("New package..."), self.__addNewPackage)
434 self.dirMenu.addAction(self.tr("New source file..."), self.__addNewSourceFile)
435 self.dirMenu.addSeparator()
422 self.dirMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles) 436 self.dirMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles)
423 self.dirMenu.addAction( 437 self.dirMenu.addAction(
424 self.tr("Add source directory..."), self.__addSourceDirectory 438 self.tr("Add source directory..."), self.__addSourceDirectory
425 ) 439 )
426 self.dirMenu.addSeparator() 440 self.dirMenu.addSeparator()
1001 """ 1015 """
1002 Private method to add a new package to the project. 1016 Private method to add a new package to the project.
1003 """ 1017 """
1004 from .NewPythonPackageDialog import NewPythonPackageDialog 1018 from .NewPythonPackageDialog import NewPythonPackageDialog
1005 1019
1006 itm = self.model().item(self.currentIndex()) 1020 dn = self.currentDirectory(relative=True)
1007 if isinstance(
1008 itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem)
1009 ):
1010 dn = os.path.dirname(itm.fileName())
1011 elif isinstance(
1012 itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
1013 ):
1014 dn = itm.dirName()
1015 else:
1016 dn = ""
1017
1018 dn = self.project.getRelativePath(dn)
1019 if dn.startswith(os.sep): 1021 if dn.startswith(os.sep):
1020 dn = dn[1:] 1022 dn = dn[1:]
1021 dlg = NewPythonPackageDialog(dn, self) 1023 dlg = NewPythonPackageDialog(dn, self)
1022 if dlg.exec() == QDialog.DialogCode.Accepted: 1024 if dlg.exec() == QDialog.DialogCode.Accepted:
1023 packageName = dlg.getData() 1025 packageName = dlg.getData()
1058 return 1060 return
1059 self.project.appendFile(packageFile) 1061 self.project.appendFile(packageFile)
1060 if packageFile: 1062 if packageFile:
1061 self.sourceFile[str].emit(packageFile) 1063 self.sourceFile[str].emit(packageFile)
1062 1064
1065 def __addNewSourceFile(self):
1066 """
1067 Private method to add a new source file to the project.
1068 """
1069 dn = self.currentDirectory()
1070 filename, ok = EricPathPickerDialog.getStrPath(
1071 self,
1072 self.tr("New source file"),
1073 self.tr("Enter the path of the new source file:"),
1074 mode=EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE,
1075 strPath=dn,
1076 defaultDirectory=dn,
1077 filters=self.project.getFileCategoryFilters(
1078 categories=["SOURCES"], withAll=False
1079 ),
1080 )
1081 if ok:
1082 if os.path.exists(filename):
1083 EricMessageBox.critical(
1084 self,
1085 self.tr("New source file"),
1086 self.tr(
1087 "<p>The file <b>{0}</b> already exists. The action will be"
1088 " aborted.</p>"
1089 ).format(filename),
1090 )
1091 return
1092
1093 try:
1094 with open(filename, "w") as f:
1095 f.write("# -*- coding: utf-8 -*-\n")
1096 f.write("# {0}\n".format(self.project.getRelativePath(filename)))
1097 except OSError as err:
1098 EricMessageBox.critical(
1099 self,
1100 self.tr("New source file"),
1101 self.tr(
1102 "<p>The file <b>{0}</b> could not be created. Aborting...</p>"
1103 "<p>Reason: {1}</p>"
1104 ).format(filename, str(err)),
1105 )
1106 return
1107
1108 self.project.appendFile(filename)
1109 self.sourceFile[str].emit(filename)
1110
1063 def __addSourceFiles(self): 1111 def __addSourceFiles(self):
1064 """ 1112 """
1065 Private method to add a source file to the project. 1113 Private method to add a source file to the project.
1066 """ 1114 """
1067 itm = self.model().item(self.currentIndex()) 1115 self.project.addFiles("SOURCES", self.currentDirectory())
1068 if isinstance(
1069 itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem)
1070 ):
1071 dn = os.path.dirname(itm.fileName())
1072 elif isinstance(
1073 itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
1074 ):
1075 dn = itm.dirName()
1076 else:
1077 dn = None
1078 self.project.addFiles("SOURCES", dn)
1079 1116
1080 def __addSourceDirectory(self): 1117 def __addSourceDirectory(self):
1081 """ 1118 """
1082 Private method to add source files of a directory to the project. 1119 Private method to add source files of a directory to the project.
1083 """ 1120 """
1084 itm = self.model().item(self.currentIndex()) 1121 self.project.addDirectory("SOURCES", self.currentDirectory())
1085 if isinstance(
1086 itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem)
1087 ):
1088 dn = os.path.dirname(itm.fileName())
1089 elif isinstance(
1090 itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
1091 ):
1092 dn = itm.dirName()
1093 else:
1094 dn = None
1095 self.project.addDirectory("SOURCES", dn)
1096 1122
1097 def __deleteFile(self): 1123 def __deleteFile(self):
1098 """ 1124 """
1099 Private method to delete files from the project. 1125 Private method to delete files from the project.
1100 """ 1126 """

eric ide

mercurial