13 from PyQt5.QtCore import pyqtSignal |
13 from PyQt5.QtCore import pyqtSignal |
14 from PyQt5.QtWidgets import QDialog, QInputDialog, QMenu |
14 from PyQt5.QtWidgets import QDialog, QInputDialog, QMenu |
15 |
15 |
16 from E5Gui import E5MessageBox |
16 from E5Gui import E5MessageBox |
17 |
17 |
18 from UI.BrowserModel import BrowserFileItem, BrowserClassItem, \ |
18 from UI.BrowserModel import ( |
19 BrowserMethodItem, BrowserClassAttributeItem, BrowserImportItem |
19 BrowserFileItem, BrowserClassItem, BrowserMethodItem, |
20 |
20 BrowserClassAttributeItem, BrowserImportItem |
21 from .ProjectBrowserModel import ProjectBrowserFileItem, \ |
21 ) |
22 ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem, \ |
22 |
23 ProjectBrowserSourceType |
23 from .ProjectBrowserModel import ( |
|
24 ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem, |
|
25 ProjectBrowserDirectoryItem, ProjectBrowserSourceType |
|
26 ) |
24 from .ProjectBaseBrowser import ProjectBaseBrowser |
27 from .ProjectBaseBrowser import ProjectBaseBrowser |
25 |
28 |
26 import Utilities |
29 import Utilities |
27 import UI.PixmapCache |
30 import UI.PixmapCache |
28 |
31 |
44 @param parent parent widget of this browser (QWidget) |
47 @param parent parent widget of this browser (QWidget) |
45 """ |
48 """ |
46 ProjectBaseBrowser.__init__(self, project, ProjectBrowserSourceType, |
49 ProjectBaseBrowser.__init__(self, project, ProjectBrowserSourceType, |
47 parent) |
50 parent) |
48 |
51 |
49 self.selectedItemsFilter = \ |
52 self.selectedItemsFilter = [ProjectBrowserFileItem, |
50 [ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem] |
53 ProjectBrowserSimpleDirectoryItem] |
51 |
54 |
52 self.setWindowTitle(self.tr('Sources')) |
55 self.setWindowTitle(self.tr('Sources')) |
53 |
56 |
54 self.setWhatsThis(self.tr( |
57 self.setWhatsThis(self.tr( |
55 """<b>Project Sources Browser</b>""" |
58 """<b>Project Sources Browser</b>""" |
593 BrowserMethodItem, ProjectBrowserSimpleDirectoryItem, |
596 BrowserMethodItem, ProjectBrowserSimpleDirectoryItem, |
594 BrowserClassAttributeItem, BrowserImportItem]) |
597 BrowserClassAttributeItem, BrowserImportItem]) |
595 cnt = categories["sum"] |
598 cnt = categories["sum"] |
596 |
599 |
597 bfcnt = categories[str(ProjectBrowserFileItem)] |
600 bfcnt = categories[str(ProjectBrowserFileItem)] |
598 cmcnt = categories[str(BrowserClassItem)] + \ |
601 cmcnt = ( |
599 categories[str(BrowserMethodItem)] + \ |
602 categories[str(BrowserClassItem)] + |
600 categories[str(BrowserClassAttributeItem)] + \ |
603 categories[str(BrowserMethodItem)] + |
|
604 categories[str(BrowserClassAttributeItem)] + |
601 categories[str(BrowserImportItem)] |
605 categories[str(BrowserImportItem)] |
|
606 ) |
602 sdcnt = categories[str(ProjectBrowserSimpleDirectoryItem)] |
607 sdcnt = categories[str(ProjectBrowserSimpleDirectoryItem)] |
603 if cnt > 1 and cnt == bfcnt: |
608 if cnt > 1 and cnt == bfcnt: |
604 self.multiMenu.popup(self.mapToGlobal(coord)) |
609 self.multiMenu.popup(self.mapToGlobal(coord)) |
605 elif cnt > 1 and cnt == sdcnt: |
610 elif cnt > 1 and cnt == sdcnt: |
606 self.dirMultiMenu.popup(self.mapToGlobal(coord)) |
611 self.dirMultiMenu.popup(self.mapToGlobal(coord)) |
646 self.importsDiagramAction.setEnabled(True) |
651 self.importsDiagramAction.setEnabled(True) |
647 self.unittestAction.setEnabled(True) |
652 self.unittestAction.setEnabled(True) |
648 self.checksMenu.menuAction().setEnabled( |
653 self.checksMenu.menuAction().setEnabled( |
649 True) |
654 True) |
650 self.sourceMenu.popup(self.mapToGlobal(coord)) |
655 self.sourceMenu.popup(self.mapToGlobal(coord)) |
651 elif isinstance(itm, BrowserClassItem) or \ |
656 elif isinstance( |
652 isinstance(itm, BrowserMethodItem) or \ |
657 itm, |
653 isinstance(itm, BrowserImportItem): |
658 (BrowserClassItem, BrowserMethodItem, |
|
659 BrowserImportItem) |
|
660 ): |
654 self.menu.popup(self.mapToGlobal(coord)) |
661 self.menu.popup(self.mapToGlobal(coord)) |
655 elif isinstance(itm, BrowserClassAttributeItem): |
662 elif isinstance(itm, BrowserClassAttributeItem): |
656 self.attributeMenu.popup(self.mapToGlobal(coord)) |
663 self.attributeMenu.popup(self.mapToGlobal(coord)) |
657 else: |
664 else: |
658 self.backMenu.popup(self.mapToGlobal(coord)) |
665 self.backMenu.popup(self.mapToGlobal(coord)) |
718 fn = self.project.getMainScript(True) |
725 fn = self.project.getMainScript(True) |
719 if fn is not None: |
726 if fn is not None: |
720 tfn = Utilities.getTestFileName(fn) |
727 tfn = Utilities.getTestFileName(fn) |
721 basename = os.path.splitext(fn)[0] |
728 basename = os.path.splitext(fn)[0] |
722 tbasename = os.path.splitext(tfn)[0] |
729 tbasename = os.path.splitext(tfn)[0] |
723 prEnable = prEnable or \ |
730 prEnable = ( |
724 os.path.isfile("{0}.profile".format(basename)) or \ |
731 prEnable or |
|
732 os.path.isfile("{0}.profile".format(basename)) or |
725 os.path.isfile("{0}.profile".format(tbasename)) |
733 os.path.isfile("{0}.profile".format(tbasename)) |
726 coEnable = (coEnable or |
734 ) |
727 os.path.isfile("{0}.coverage".format(basename)) or |
735 coEnable = ( |
728 os.path.isfile("{0}.coverage".format(tbasename))) and \ |
736 (coEnable or |
729 (self.project.isPy3Project() or self.project.isPy2Project()) |
737 os.path.isfile("{0}.coverage".format(basename)) or |
|
738 os.path.isfile("{0}.coverage".format(tbasename))) and |
|
739 (self.project.isPy3Project() or |
|
740 self.project.isPy2Project()) |
|
741 ) |
730 |
742 |
731 # now check the selected item |
743 # now check the selected item |
732 itm = self.model().item(self.currentIndex()) |
744 itm = self.model().item(self.currentIndex()) |
733 fn = itm.fileName() |
745 fn = itm.fileName() |
734 if fn is not None: |
746 if fn is not None: |
735 basename = os.path.splitext(fn)[0] |
747 basename = os.path.splitext(fn)[0] |
736 prEnable = prEnable or \ |
748 prEnable = ( |
|
749 prEnable or |
737 os.path.isfile("{0}.profile".format(basename)) |
750 os.path.isfile("{0}.profile".format(basename)) |
738 coEnable = (coEnable or |
751 ) |
739 os.path.isfile("{0}.coverage".format(basename))) and \ |
752 coEnable = ( |
|
753 (coEnable or |
|
754 os.path.isfile("{0}.coverage".format(basename))) and |
740 (itm.isPython3File() or itm.isPython2File()) |
755 (itm.isPython3File() or itm.isPython2File()) |
|
756 ) |
741 |
757 |
742 self.profileMenuAction.setEnabled(prEnable) |
758 self.profileMenuAction.setEnabled(prEnable) |
743 self.coverageMenuAction.setEnabled(coEnable) |
759 self.coverageMenuAction.setEnabled(coEnable) |
744 |
760 |
745 self.showMenu.emit("Show", self.menuShow) |
761 self.showMenu.emit("Show", self.menuShow) |
782 def __addNewPackage(self): |
798 def __addNewPackage(self): |
783 """ |
799 """ |
784 Private method to add a new package to the project. |
800 Private method to add a new package to the project. |
785 """ |
801 """ |
786 itm = self.model().item(self.currentIndex()) |
802 itm = self.model().item(self.currentIndex()) |
787 if isinstance(itm, ProjectBrowserFileItem) or \ |
803 if isinstance( |
788 isinstance(itm, BrowserClassItem) or \ |
804 itm, |
789 isinstance(itm, BrowserMethodItem): |
805 (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) |
|
806 ): |
790 dn = os.path.dirname(itm.fileName()) |
807 dn = os.path.dirname(itm.fileName()) |
791 elif isinstance(itm, ProjectBrowserSimpleDirectoryItem) or \ |
808 elif isinstance( |
792 isinstance(itm, ProjectBrowserDirectoryItem): |
809 itm, |
|
810 (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) |
|
811 ): |
793 dn = itm.dirName() |
812 dn = itm.dirName() |
794 else: |
813 else: |
795 dn = "" |
814 dn = "" |
796 |
815 |
797 dn = self.project.getRelativePath(dn) |
816 dn = self.project.getRelativePath(dn) |
841 def __addSourceFiles(self): |
860 def __addSourceFiles(self): |
842 """ |
861 """ |
843 Private method to add a source file to the project. |
862 Private method to add a source file to the project. |
844 """ |
863 """ |
845 itm = self.model().item(self.currentIndex()) |
864 itm = self.model().item(self.currentIndex()) |
846 if isinstance(itm, ProjectBrowserFileItem) or \ |
865 if isinstance( |
847 isinstance(itm, BrowserClassItem) or \ |
866 itm, |
848 isinstance(itm, BrowserMethodItem): |
867 (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) |
|
868 ): |
849 dn = os.path.dirname(itm.fileName()) |
869 dn = os.path.dirname(itm.fileName()) |
850 elif isinstance(itm, ProjectBrowserSimpleDirectoryItem) or \ |
870 elif isinstance( |
851 isinstance(itm, ProjectBrowserDirectoryItem): |
871 itm, |
|
872 (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) |
|
873 ): |
852 dn = itm.dirName() |
874 dn = itm.dirName() |
853 else: |
875 else: |
854 dn = None |
876 dn = None |
855 self.project.addFiles('source', dn) |
877 self.project.addFiles('source', dn) |
856 |
878 |
857 def __addSourceDirectory(self): |
879 def __addSourceDirectory(self): |
858 """ |
880 """ |
859 Private method to add source files of a directory to the project. |
881 Private method to add source files of a directory to the project. |
860 """ |
882 """ |
861 itm = self.model().item(self.currentIndex()) |
883 itm = self.model().item(self.currentIndex()) |
862 if isinstance(itm, ProjectBrowserFileItem) or \ |
884 if isinstance( |
863 isinstance(itm, BrowserClassItem) or \ |
885 itm, |
864 isinstance(itm, BrowserMethodItem): |
886 (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) |
|
887 ): |
865 dn = os.path.dirname(itm.fileName()) |
888 dn = os.path.dirname(itm.fileName()) |
866 elif isinstance(itm, ProjectBrowserSimpleDirectoryItem) or \ |
889 elif isinstance( |
867 isinstance(itm, ProjectBrowserDirectoryItem): |
890 itm, |
|
891 (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) |
|
892 ): |
868 dn = itm.dirName() |
893 dn = itm.dirName() |
869 else: |
894 else: |
870 dn = None |
895 dn = None |
871 self.project.addDirectory('source', dn) |
896 self.project.addDirectory('source', dn) |
872 |
897 |
882 fn2 = itm.fileName() |
907 fn2 = itm.fileName() |
883 fullNames.append(fn2) |
908 fullNames.append(fn2) |
884 fn = self.project.getRelativePath(fn2) |
909 fn = self.project.getRelativePath(fn2) |
885 files.append(fn) |
910 files.append(fn) |
886 |
911 |
887 from UI.DeleteFilesConfirmationDialog import \ |
912 from UI.DeleteFilesConfirmationDialog import ( |
888 DeleteFilesConfirmationDialog |
913 DeleteFilesConfirmationDialog |
|
914 ) |
889 dlg = DeleteFilesConfirmationDialog( |
915 dlg = DeleteFilesConfirmationDialog( |
890 self.parent(), |
916 self.parent(), |
891 self.tr("Delete files"), |
917 self.tr("Delete files"), |
892 self.tr( |
918 self.tr( |
893 "Do you really want to delete these files from the project?"), |
919 "Do you really want to delete these files from the project?"), |