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