eric6/UI/FindFileDialog.py

changeset 7992
0d1e35a10a0b
parent 7945
76daafe10009
child 8043
0acf98cd089a
child 8143
2c730d5fd177
equal deleted inserted replaced
7990:3b865f4b7dff 7992:0d1e35a10a0b
99 "FindFileDialog/DirectoryHistory")) 99 "FindFileDialog/DirectoryHistory"))
100 self.findtextCombo.addItems(self.searchHistory) 100 self.findtextCombo.addItems(self.searchHistory)
101 self.replacetextCombo.addItems(self.replaceHistory) 101 self.replacetextCombo.addItems(self.replaceHistory)
102 self.dirPicker.addItems(self.dirHistory) 102 self.dirPicker.addItems(self.dirHistory)
103 103
104 self.excludeHiddenCheckBox.setChecked(Preferences.toBool(
105 Preferences.Prefs.settings.value(
106 "FindFileDialog/ExcludeHidden", True)
107 ))
108
104 self.project = project 109 self.project = project
105 110
106 self.findList.headerItem().setText(self.findList.columnCount(), "") 111 self.findList.headerItem().setText(self.findList.columnCount(), "")
107 self.findList.header().setSortIndicator(0, Qt.AscendingOrder) 112 self.findList.header().setSortIndicator(0, Qt.AscendingOrder)
108 self.__section0Size = self.findList.header().sectionSize(0) 113 self.__section0Size = self.findList.header().sectionSize(0)
321 ] 326 ]
322 filterRe = re.compile("|".join(fileFilterList)) 327 filterRe = re.compile("|".join(fileFilterList))
323 328
324 if self.projectButton.isChecked(): 329 if self.projectButton.isChecked():
325 if self.filterCheckBox.isChecked(): 330 if self.filterCheckBox.isChecked():
326 files = [self.project.getRelativePath(file) 331 files = [
327 for file in 332 self.project.getRelativePath(file)
328 self.__getFileList( 333 for file in
329 self.project.getProjectPath(), filterRe)] 334 self.__getFileList(
335 self.project.getProjectPath(),
336 filterRe,
337 excludeHiddenDirs=self.excludeHiddenCheckBox
338 .isChecked(),
339 )
340 ]
330 else: 341 else:
331 files = [] 342 files = []
332 if self.sourcesCheckBox.isChecked(): 343 if self.sourcesCheckBox.isChecked():
333 files += self.project.pdata["SOURCES"] 344 files += self.project.pdata["SOURCES"]
334 if self.formsCheckBox.isChecked(): 345 if self.formsCheckBox.isChecked():
340 if self.resourcesCheckBox.isChecked(): 351 if self.resourcesCheckBox.isChecked():
341 files += self.project.pdata["RESOURCES"] 352 files += self.project.pdata["RESOURCES"]
342 elif self.dirButton.isChecked(): 353 elif self.dirButton.isChecked():
343 if not self.filterCheckBox.isChecked(): 354 if not self.filterCheckBox.isChecked():
344 filters = [] 355 filters = []
345 if self.sourcesCheckBox.isChecked(): 356 if (
346 filters.extend( 357 self.project.isOpen() and
347 ["^{0}$".format( 358 os.path.abspath(self.dirPicker.currentText()).startswith(
348 assoc.replace(".", r"\.").replace("*", ".*")) 359 self.project.getProjectPath())
349 for assoc in list( 360 ):
350 Preferences.getEditorLexerAssocs().keys()) 361 if self.sourcesCheckBox.isChecked():
351 if assoc not in self.formsExt + self.interfacesExt + 362 filters.extend([
352 self.protocolsExt]) 363 "^{0}$".format(
353 if self.formsCheckBox.isChecked(): 364 assoc.replace(".", r"\.").replace("*", ".*")
354 filters.append(self.filterForms) 365 ) for assoc in
355 if self.interfacesCheckBox.isChecked(): 366 self.project.getFiletypeAssociations("SOURCES")
356 filters.append(self.filterInterfaces) 367 ])
357 if self.protocolsCheckBox.isChecked(): 368 if self.formsCheckBox.isChecked():
358 filters.append(self.filterProtocols) 369 filters.extend([
359 if self.resourcesCheckBox.isChecked(): 370 "^{0}$".format(
360 filters.append(self.filterResources) 371 assoc.replace(".", r"\.").replace("*", ".*")
372 ) for assoc in
373 self.project.getFiletypeAssociations("FORMS")
374 ])
375 if self.interfacesCheckBox.isChecked():
376 filters.extend([
377 "^{0}$".format(
378 assoc.replace(".", r"\.").replace("*", ".*")
379 ) for assoc in
380 self.project.getFiletypeAssociations("INTERFACES")
381 ])
382 if self.protocolsCheckBox.isChecked():
383 filters.extend([
384 "^{0}$".format(
385 assoc.replace(".", r"\.").replace("*", ".*")
386 ) for assoc in
387 self.project.getFiletypeAssociations("PROTOCOLS")
388 ])
389 if self.resourcesCheckBox.isChecked():
390 filters.extend([
391 "^{0}$".format(
392 assoc.replace(".", r"\.").replace("*", ".*")
393 ) for assoc in
394 self.project.getFiletypeAssociations("RESOURCES")
395 ])
396 else:
397 if self.sourcesCheckBox.isChecked():
398 filters.extend([
399 "^{0}$".format(
400 assoc.replace(".", r"\.").replace("*", ".*"))
401 for assoc in list(
402 Preferences.getEditorLexerAssocs().keys())
403 if assoc not in
404 self.formsExt + self.interfacesExt +
405 self.protocolsExt + self.resourcesExt
406 ])
407 if self.formsCheckBox.isChecked():
408 filters.append(self.filterForms)
409 if self.interfacesCheckBox.isChecked():
410 filters.append(self.filterInterfaces)
411 if self.protocolsCheckBox.isChecked():
412 filters.append(self.filterProtocols)
413 if self.resourcesCheckBox.isChecked():
414 filters.append(self.filterResources)
361 filterString = "|".join(filters) 415 filterString = "|".join(filters)
362 filterRe = re.compile(filterString) 416 filterRe = re.compile(filterString)
363 files = self.__getFileList( 417 files = self.__getFileList(
364 os.path.abspath(self.dirPicker.currentText()), 418 os.path.abspath(self.dirPicker.currentText()),
365 filterRe) 419 filterRe,
420 excludeHiddenDirs=self.excludeHiddenCheckBox.isChecked(),
421 excludeHiddenFiles=self.excludeHiddenCheckBox.isChecked(),
422 )
366 elif self.openFilesButton.isChecked(): 423 elif self.openFilesButton.isChecked():
367 vm = e5App().getObject("ViewManager") 424 vm = e5App().getObject("ViewManager")
368 vm.checkAllDirty() 425 vm.checkAllDirty()
369 files = vm.getOpenFilenames() 426 files = vm.getOpenFilenames()
370 427
406 self.findtextCombo.clear() 463 self.findtextCombo.clear()
407 self.findtextCombo.addItems(self.searchHistory) 464 self.findtextCombo.addItems(self.searchHistory)
408 Preferences.Prefs.settings.setValue( 465 Preferences.Prefs.settings.setValue(
409 "FindFileDialog/SearchHistory", 466 "FindFileDialog/SearchHistory",
410 self.searchHistory[:30]) 467 self.searchHistory[:30])
468 Preferences.Prefs.settings.setValue(
469 "FindFileDialog/ExcludeHidden",
470 self.excludeHiddenCheckBox.isChecked())
411 471
412 if self.__replaceMode: 472 if self.__replaceMode:
413 replTxt = self.replacetextCombo.currentText() 473 replTxt = self.replacetextCombo.currentText()
414 if replTxt in self.replaceHistory: 474 if replTxt in self.replaceHistory:
415 self.replaceHistory.remove(replTxt) 475 self.replaceHistory.remove(replTxt)
559 if fn.endswith('.ui'): 619 if fn.endswith('.ui'):
560 self.designerFile.emit(fn) 620 self.designerFile.emit(fn)
561 else: 621 else:
562 self.sourceFile.emit(fn, line, "", start, end) 622 self.sourceFile.emit(fn, line, "", start, end)
563 623
564 def __getFileList(self, path, filterRe): 624 def __getFileList(self, path, filterRe, excludeHiddenDirs=False,
625 excludeHiddenFiles=False):
565 """ 626 """
566 Private method to get a list of files to search. 627 Private method to get a list of files to search.
567 628
568 @param path the root directory to search in (string) 629 @param path the root directory to search in
630 @type str
569 @param filterRe regular expression defining the filter 631 @param filterRe regular expression defining the filter
570 criteria (regexp object) 632 criteria
571 @return list of files to be processed (list of strings) 633 @type regexp object
634 @param excludeHiddenDirs flag indicating to exclude hidden directories
635 @type bool
636 @param excludeHiddenFiles flag indicating to exclude hidden files
637 @type bool
638 @return list of files to be processed
639 @rtype list of str
572 """ 640 """
573 path = os.path.abspath(path) 641 path = os.path.abspath(path)
574 files = [] 642 files = []
575 for dirname, _, names in os.walk(path): 643 for dirname, dirs, filenames in os.walk(path):
576 files.extend([os.path.join(dirname, f) 644 files.extend([
577 for f in names 645 os.path.join(dirname, f) for f in filenames
578 if re.match(filterRe, f)] 646 if (not (excludeHiddenFiles and f.startswith(".")) and
579 ) 647 re.match(filterRe, f))
648 ])
649 if excludeHiddenDirs:
650 for d in dirs[:]:
651 if d .startswith("."):
652 dirs.remove(d)
580 return files 653 return files
581 654
582 def setSearchDirectory(self, searchDir): 655 def setSearchDirectory(self, searchDir):
583 """ 656 """
584 Public slot to set the name of the directory to search in. 657 Public slot to set the name of the directory to search in.

eric ide

mercurial