8 """ |
8 """ |
9 |
9 |
10 |
10 |
11 import os |
11 import os |
12 |
12 |
13 from PyQt5.QtCore import QModelIndex, pyqtSignal, QUrl, Qt, QCoreApplication, \ |
13 from PyQt5.QtCore import ( |
14 QItemSelectionModel, QElapsedTimer |
14 QModelIndex, pyqtSignal, QUrl, Qt, QCoreApplication, QItemSelectionModel, |
|
15 QElapsedTimer |
|
16 ) |
15 from PyQt5.QtGui import QDesktopServices |
17 from PyQt5.QtGui import QDesktopServices |
16 from PyQt5.QtWidgets import QTreeView, QApplication, QMenu, QAbstractItemView |
18 from PyQt5.QtWidgets import QTreeView, QApplication, QMenu, QAbstractItemView |
17 |
19 |
18 from E5Gui.E5Application import e5App |
20 from E5Gui.E5Application import e5App |
19 from E5Gui import E5FileDialog, E5MessageBox |
21 from E5Gui import E5FileDialog, E5MessageBox |
20 |
22 |
21 from Project.ProjectBrowserModel import ProjectBrowserSimpleDirectoryItem |
23 from Project.ProjectBrowserModel import ProjectBrowserSimpleDirectoryItem |
22 from .BrowserModel import BrowserModel, BrowserDirectoryItem, \ |
24 from .BrowserModel import ( |
23 BrowserFileItem, BrowserClassItem, BrowserMethodItem, \ |
25 BrowserModel, BrowserDirectoryItem, BrowserFileItem, BrowserClassItem, |
24 BrowserClassAttributeItem, BrowserImportItem, BrowserImportsItem, \ |
26 BrowserMethodItem, BrowserClassAttributeItem, BrowserImportItem, |
25 BrowserSysPathItem, BrowserGlobalsItem |
27 BrowserImportsItem, BrowserSysPathItem, BrowserGlobalsItem |
|
28 ) |
26 from .BrowserSortFilterProxyModel import BrowserSortFilterProxyModel |
29 from .BrowserSortFilterProxyModel import BrowserSortFilterProxyModel |
27 |
30 |
28 import UI.PixmapCache |
31 import UI.PixmapCache |
29 import Preferences |
32 import Preferences |
30 import Utilities |
33 import Utilities |
341 self.unittestAct.setEnabled(False) |
344 self.unittestAct.setEnabled(False) |
342 self.sourceMenu.popup(coord) |
345 self.sourceMenu.popup(coord) |
343 else: |
346 else: |
344 self.editPixmapAct.setVisible(itm.isPixmapFile()) |
347 self.editPixmapAct.setVisible(itm.isPixmapFile()) |
345 self.menu.popup(coord) |
348 self.menu.popup(coord) |
346 elif isinstance(itm, BrowserClassItem) or \ |
349 elif isinstance( |
347 isinstance(itm, BrowserMethodItem) or \ |
350 itm, |
348 isinstance(itm, BrowserImportItem): |
351 (BrowserClassItem, BrowserMethodItem, BrowserImportItem) |
|
352 ): |
349 self.editPixmapAct.setVisible(False) |
353 self.editPixmapAct.setVisible(False) |
350 self.menu.popup(coord) |
354 self.menu.popup(coord) |
351 elif isinstance(itm, BrowserClassAttributeItem): |
355 elif isinstance(itm, BrowserClassAttributeItem): |
352 self.attributeMenu.popup(coord) |
356 self.attributeMenu.popup(coord) |
353 elif isinstance(itm, BrowserDirectoryItem): |
357 elif isinstance(itm, BrowserDirectoryItem): |
603 Private slot to handle the Find in directory popup menu entry. |
607 Private slot to handle the Find in directory popup menu entry. |
604 """ |
608 """ |
605 index = self.currentIndex() |
609 index = self.currentIndex() |
606 searchDir = self.model().item(index).dirName() |
610 searchDir = self.model().item(index).dirName() |
607 |
611 |
608 e5App().getObject("UserInterface")\ |
612 e5App().getObject("UserInterface").showFindFilesDialog( |
609 .showFindFilesDialog(searchDir=searchDir) |
613 searchDir=searchDir) |
610 |
614 |
611 def __replaceInDirectory(self): |
615 def __replaceInDirectory(self): |
612 """ |
616 """ |
613 Private slot to handle the Find&Replace in directory popup menu entry. |
617 Private slot to handle the Find&Replace in directory popup menu entry. |
614 """ |
618 """ |
615 index = self.currentIndex() |
619 index = self.currentIndex() |
616 searchDir = self.model().item(index).dirName() |
620 searchDir = self.model().item(index).dirName() |
617 |
621 |
618 e5App().getObject("UserInterface")\ |
622 e5App().getObject("UserInterface").showReplaceFilesDialog( |
619 .showReplaceFilesDialog(searchDir=searchDir) |
623 searchDir=searchDir) |
620 |
624 |
621 def handleProgramChange(self, fn): |
625 def handleProgramChange(self, fn): |
622 """ |
626 """ |
623 Public slot to handle the programChange signal. |
627 Public slot to handle the programChange signal. |
624 |
628 |
732 else: |
736 else: |
733 startIndex = self.model().index(0, 0) |
737 startIndex = self.model().index(0, 0) |
734 |
738 |
735 keyboardSearchTimeWasValid = self._keyboardSearchTimer.isValid() |
739 keyboardSearchTimeWasValid = self._keyboardSearchTimer.isValid() |
736 keyboardSearchTimeElapsed = self._keyboardSearchTimer.restart() |
740 keyboardSearchTimeElapsed = self._keyboardSearchTimer.restart() |
737 if not search or not keyboardSearchTimeWasValid or \ |
741 if ( |
738 keyboardSearchTimeElapsed > \ |
742 not search or |
739 QApplication.keyboardInputInterval(): |
743 not keyboardSearchTimeWasValid or |
|
744 keyboardSearchTimeElapsed > |
|
745 QApplication.keyboardInputInterval() |
|
746 ): |
740 self._keyboardSearchString = search.lower() |
747 self._keyboardSearchString = search.lower() |
741 else: |
748 else: |
742 self._keyboardSearchString += search.lower() |
749 self._keyboardSearchString += search.lower() |
743 |
750 |
744 index = startIndex |
751 index = startIndex |
745 found = False |
752 found = False |
746 while True: |
753 while True: |
747 name = self.model().data(index) |
754 name = self.model().data(index) |
748 if name.lower().startswith(self._keyboardSearchString) and \ |
755 if ( |
749 self._keyboardSearchType(self.model().item(index)): |
756 name.lower().startswith(self._keyboardSearchString) and |
|
757 self._keyboardSearchType(self.model().item(index)) |
|
758 ): |
750 found = True |
759 found = True |
751 break |
760 break |
752 |
761 |
753 index = self.indexBelow(index) |
762 index = self.indexBelow(index) |
754 if not index.isValid(): |
763 if not index.isValid(): |