src/eric7/Project/ProjectBrowserModel.py

branch
eric7
changeset 9527
8601253e7633
parent 9524
6a730f4d0080
child 9624
b47dfa7a137d
equal deleted inserted replaced
9526:c2fe17f95b56 9527:8601253e7633
26 26
27 ProjectBrowserItemSimpleDirectory = 100 27 ProjectBrowserItemSimpleDirectory = 100
28 ProjectBrowserItemDirectory = 101 28 ProjectBrowserItemDirectory = 101
29 ProjectBrowserItemFile = 102 29 ProjectBrowserItemFile = 102
30 30
31 # TODO: move these definitions to the project browser repository
32 ProjectBrowserNoType = "none"
33 ProjectBrowserSourceType = "source"
34 ProjectBrowserFormType = "form"
35 ProjectBrowserInterfaceType = "interface"
36 ProjectBrowserTranslationType = "translation"
37 ProjectBrowserOthersType = "other"
38 ProjectBrowserResourceType = "resource"
39 ProjectBrowserProtocolsType = "protocol"
40
41 31
42 class ProjectBrowserItemMixin: 32 class ProjectBrowserItemMixin:
43 """ 33 """
44 Class implementing common methods of project browser items. 34 Class implementing common methods of project browser items.
45 35
247 self.rootItem = BrowserItem(None, rootData) 237 self.rootItem = BrowserItem(None, rootData)
248 self.rootItem.itemData.append(self.tr("VCS Status")) 238 self.rootItem.itemData.append(self.tr("VCS Status"))
249 239
250 self.progDir = None 240 self.progDir = None
251 self.project = parent 241 self.project = parent
242 self.__projectBrowser = None
252 243
253 self.watchedItems = {} 244 self.watchedItems = {}
254 self.__watcherActive = True 245 self.__watcherActive = True
255 self.watcher = QFileSystemWatcher(self) 246 self.watcher = QFileSystemWatcher(self)
256 self.watcher.directoryChanged.connect(self.directoryChanged) 247 self.watcher.directoryChanged.connect(self.directoryChanged)
257 248
258 self.inRefresh = False 249 self.inRefresh = False
259
260 # TODO: move this to ProjectBrowser (ProjectBrowserRepository)
261 # mapping of file category to project browser type
262 self.projectBrowserTypes = {
263 "SOURCES": ProjectBrowserSourceType,
264 "FORMS": ProjectBrowserFormType,
265 "RESOURCES": ProjectBrowserResourceType,
266 "INTERFACES": ProjectBrowserInterfaceType,
267 "PROTOCOLS": ProjectBrowserProtocolsType,
268 "TRANSLATIONS": ProjectBrowserTranslationType,
269 "OTHERS": ProjectBrowserOthersType,
270 }
271 250
272 self.colorNames = { 251 self.colorNames = {
273 "A": "VcsAdded", 252 "A": "VcsAdded",
274 "M": "VcsModified", 253 "M": "VcsModified",
275 "O": "VcsRemoved", 254 "O": "VcsRemoved",
289 268
290 self.highLightColor = Preferences.getProjectBrowserColour("Highlighted") 269 self.highLightColor = Preferences.getProjectBrowserColour("Highlighted")
291 # needed by preferencesChanged() 270 # needed by preferencesChanged()
292 271
293 self.vcsStatusReport = {} 272 self.vcsStatusReport = {}
273
274 def setProjectBrowserReference(self, projectBrowser):
275 """
276 Public method to set a reference to the project browser instance.
277
278 @param projectBrowser reference to the project browser instance
279 @type ProjectBrowser
280 """
281 self.__projectBrowser = projectBrowser
294 282
295 def data(self, index, role): 283 def data(self, index, role):
296 """ 284 """
297 Public method to get data of an item. 285 Public method to get data of an item.
298 286
427 Public method used to populate the model after a project has been 415 Public method used to populate the model after a project has been
428 opened. 416 opened.
429 """ 417 """
430 self.__vcsStatus = {} 418 self.__vcsStatus = {}
431 states = {} 419 states = {}
432 keys = list(self.projectBrowserTypes.keys())[:] 420 fileCategories = self.project.getFileCategories()
433 421
434 if self.project.vcs is not None: 422 if self.project.vcs is not None:
435 for key in keys: 423 for fileCategory in fileCategories:
436 for fn in self.project.getProjectData(dataKey=key): 424 for fn in self.project.getProjectData(dataKey=fileCategory):
437 states[os.path.normcase(os.path.join(self.project.ppath, fn))] = 0 425 states[os.path.normcase(os.path.join(self.project.ppath, fn))] = 0
438 426
439 self.project.vcs.clearStatusCache() 427 self.project.vcs.clearStatusCache()
440 states = self.project.vcs.vcsAllRegisteredStates(states, self.project.ppath) 428 states = self.project.vcs.vcsAllRegisteredStates(states, self.project.ppath)
441 429
442 self.inRefresh = True 430 self.inRefresh = True
443 for key in keys: 431 for fileCategory in fileCategories:
444 # Show the entry in bold in the others browser to make it more 432 # Show the entry in bold in the others browser to make it more
445 # distinguishable 433 # distinguishable
446 bold = key == "OTHERS" 434 bold = fileCategory == "OTHERS"
447 sourceLanguage = ( 435 sourceLanguage = (
448 self.project.getProjectLanguage() if key == "SOURCES" else "" 436 self.project.getProjectLanguage() if fileCategory == "SOURCES" else ""
449 ) 437 )
450 438
451 for fn in self.project.getProjectData(dataKey=key): 439 for fn in self.project.getProjectData(dataKey=fileCategory):
452 fname = os.path.join(self.project.ppath, fn) 440 fname = os.path.join(self.project.ppath, fn)
453 parentItem, dt = self.findParentItemByName( 441 parentItem, dt = self.findParentItemByName(
454 self.projectBrowserTypes[key], fn 442 self.__projectBrowser.getProjectBrowserFilter(fileCategory), fn
455 ) 443 )
456 itm = ( 444 itm = (
457 ProjectBrowserDirectoryItem( 445 ProjectBrowserDirectoryItem(
458 parentItem, fname, self.projectBrowserTypes[key], False, bold 446 parentItem,
447 fname,
448 self.__projectBrowser.getProjectBrowserFilter(fileCategory),
449 False,
450 bold,
459 ) 451 )
460 if os.path.isdir(fname) 452 if os.path.isdir(fname)
461 else ProjectBrowserFileItem( 453 else ProjectBrowserFileItem(
462 parentItem, 454 parentItem,
463 fname, 455 fname,
464 self.projectBrowserTypes[key], 456 self.__projectBrowser.getProjectBrowserFilter(fileCategory),
465 False, 457 False,
466 bold, 458 bold,
467 sourceLanguage=sourceLanguage, 459 sourceLanguage=sourceLanguage,
468 ) 460 )
469 ) 461 )
556 # distinguishable 548 # distinguishable
557 bold = typeString == "OTHERS" 549 bold = typeString == "OTHERS"
558 550
559 fname = os.path.join(self.project.ppath, name) 551 fname = os.path.join(self.project.ppath, name)
560 parentItem, dt = self.findParentItemByName( 552 parentItem, dt = self.findParentItemByName(
561 self.projectBrowserTypes[typeString], name 553 self.__projectBrowser.getProjectBrowserFilter(typeString), name
562 ) 554 )
563 parentIndex = ( 555 parentIndex = (
564 QModelIndex() 556 QModelIndex()
565 if parentItem == self.rootItem 557 if parentItem == self.rootItem
566 else self.createIndex(parentItem.row(), 0, parentItem) 558 else self.createIndex(parentItem.row(), 0, parentItem)
567 ) 559 )
568 if os.path.isdir(fname): 560 if os.path.isdir(fname):
569 itm = ProjectBrowserDirectoryItem( 561 itm = ProjectBrowserDirectoryItem(
570 parentItem, fname, self.projectBrowserTypes[typeString], False, bold 562 parentItem,
563 fname,
564 self.__projectBrowser.getProjectBrowserFilter(typeString),
565 False,
566 bold,
571 ) 567 )
572 else: 568 else:
573 if typeString == "SOURCES": 569 if typeString == "SOURCES":
574 sourceLanguage = self.project.getProjectLanguage() 570 sourceLanguage = self.project.getProjectLanguage()
575 else: 571 else:
576 sourceLanguage = "" 572 sourceLanguage = ""
577 itm = ProjectBrowserFileItem( 573 itm = ProjectBrowserFileItem(
578 parentItem, 574 parentItem,
579 fname, 575 fname,
580 self.projectBrowserTypes[typeString], 576 self.__projectBrowser.getProjectBrowserFilter(typeString),
581 False, 577 False,
582 bold, 578 bold,
583 sourceLanguage=sourceLanguage, 579 sourceLanguage=sourceLanguage,
584 ) 580 )
585 self.__addVCSStatus(itm, fname) 581 self.__addVCSStatus(itm, fname)
586 if additionalTypeStrings: 582 if additionalTypeStrings:
587 for additionalTypeString in additionalTypeStrings: 583 for additionalTypeString in additionalTypeStrings:
588 type_ = self.projectBrowserTypes[additionalTypeString] 584 browserType = self.__projectBrowser.getProjectBrowserFilter(
589 itm.addProjectType(type_) 585 additionalTypeString
586 )
587 itm.addProjectType(browserType)
590 self.addItem(itm, parentIndex) 588 self.addItem(itm, parentIndex)
591 589
592 def renameItem(self, name, newFilename): 590 def renameItem(self, name, newFilename):
593 """ 591 """
594 Public method to rename an item. 592 Public method to rename an item.

eric ide

mercurial