src/eric7/UI/UserInterface.py

branch
eric7-maintenance
changeset 10349
df7edc29cbfb
parent 10222
1146cc8fbf5d
parent 10339
446d22fa1aea
child 10460
3b34efa2857c
equal deleted inserted replaced
10273:e075c8fe07fd 10349:df7edc29cbfb
351 SpellChecker.setDefaultLanguage( 351 SpellChecker.setDefaultLanguage(
352 Preferences.getEditor("SpellCheckingDefaultLanguage") 352 Preferences.getEditor("SpellCheckingDefaultLanguage")
353 ) 353 )
354 354
355 with contextlib.suppress(ImportError, AttributeError): 355 with contextlib.suppress(ImportError, AttributeError):
356 from eric7.EricWidgets.EricSpellCheckedTextEdit import ( # __IGNORE_WARNING__ 356 from eric7.EricWidgets.EricSpellCheckedTextEdit import ( # noqa: I101
357 SpellCheckMixin, 357 SpellCheckMixin,
358 ) 358 )
359 359
360 pwl = SpellChecker.getUserDictionaryPath(isException=False) 360 pwl = SpellChecker.getUserDictionaryPath(isException=False)
361 pel = SpellChecker.getUserDictionaryPath(isException=True) 361 pel = SpellChecker.getUserDictionaryPath(isException=True)
577 self.preferencesChanged.connect(self.pipWidget.preferencesChanged) 577 self.preferencesChanged.connect(self.pipWidget.preferencesChanged)
578 578
579 # create the toolbar manager object 579 # create the toolbar manager object
580 self.toolbarManager = EricToolBarManager(self, self) 580 self.toolbarManager = EricToolBarManager(self, self)
581 self.toolbarManager.setMainWindow(self) 581 self.toolbarManager.setMainWindow(self)
582 self.preferencesChanged.connect(self.toolbarManager.preferencesChanged)
582 583
583 # Initialize the tool groups and list of started tools 584 # Initialize the tool groups and list of started tools
584 splash.showMessage(self.tr("Initializing Tools...")) 585 splash.showMessage(self.tr("Initializing Tools..."))
585 self.toolGroups, self.currentToolGroup = Preferences.readToolGroups() 586 self.toolGroups, self.currentToolGroup = Preferences.readToolGroups()
586 self.toolProcs = [] 587 self.toolProcs = []
823 self.shell = self.shellAssembly.shell() 824 self.shell = self.shellAssembly.shell()
824 825
825 if Preferences.getUI("ShowTemplateViewer"): 826 if Preferences.getUI("ShowTemplateViewer"):
826 # Create the template viewer part of the user interface 827 # Create the template viewer part of the user interface
827 logging.debug("Creating Template Viewer...") 828 logging.debug("Creating Template Viewer...")
828 from eric7.Templates.TemplateViewer import ( # __IGNORE_WARNING_I101__ 829 from eric7.Templates.TemplateViewer import TemplateViewer # noqa: I101
829 TemplateViewer,
830 )
831 830
832 self.templateViewer = TemplateViewer(None, self.viewmanager) 831 self.templateViewer = TemplateViewer(None, self.viewmanager)
833 else: 832 else:
834 logging.debug("Template Viewer disabled") 833 logging.debug("Template Viewer disabled")
835 self.templateViewer = None 834 self.templateViewer = None
836 835
837 if Preferences.getUI("ShowFileBrowser"): 836 if Preferences.getUI("ShowFileBrowser"):
838 # Create the file browser 837 # Create the file browser
839 logging.debug("Creating File Browser...") 838 logging.debug("Creating File Browser...")
840 from .Browser import Browser # __IGNORE_WARNING_I101__ 839 from .Browser import Browser # noqa: I101
841 840
842 self.browser = Browser() 841 self.browser = Browser()
843 else: 842 else:
844 logging.debug("File Browser disabled") 843 logging.debug("File Browser disabled")
845 self.browser = None 844 self.browser = None
846 845
847 if Preferences.getUI("ShowSymbolsViewer"): 846 if Preferences.getUI("ShowSymbolsViewer"):
848 # Create the symbols viewer 847 # Create the symbols viewer
849 logging.debug("Creating Symbols Viewer...") 848 logging.debug("Creating Symbols Viewer...")
850 from .SymbolsWidget import SymbolsWidget # __IGNORE_WARNING_I101__ 849 from .SymbolsWidget import SymbolsWidget # noqa: I101
851 850
852 self.symbolsViewer = SymbolsWidget() 851 self.symbolsViewer = SymbolsWidget()
853 else: 852 else:
854 logging.debug("Symbols Viewer disabled") 853 logging.debug("Symbols Viewer disabled")
855 self.symbolsViewer = None 854 self.symbolsViewer = None
856 855
857 if Preferences.getUI("ShowCodeDocumentationViewer"): 856 if Preferences.getUI("ShowCodeDocumentationViewer"):
858 # Create the code documentation viewer 857 # Create the code documentation viewer
859 logging.debug("Creating Code Documentation Viewer...") 858 logging.debug("Creating Code Documentation Viewer...")
860 from .CodeDocumentationViewer import ( # __IGNORE_WARNING_I101__ 859 from .CodeDocumentationViewer import CodeDocumentationViewer # noqa: I101
861 CodeDocumentationViewer,
862 )
863 860
864 self.codeDocumentationViewer = CodeDocumentationViewer(self) 861 self.codeDocumentationViewer = CodeDocumentationViewer(self)
865 else: 862 else:
866 logging.debug("Code Documentation Viewer disabled") 863 logging.debug("Code Documentation Viewer disabled")
867 self.codeDocumentationViewer = None 864 self.codeDocumentationViewer = None
868 865
869 if Preferences.getUI("ShowPyPIPackageManager"): 866 if Preferences.getUI("ShowPyPIPackageManager"):
870 # Create the PyPI package manager 867 # Create the PyPI package manager
871 logging.debug("Creating PyPI Package Manager...") 868 logging.debug("Creating PyPI Package Manager...")
872 from eric7.PipInterface.PipPackagesWidget import ( # __IGNORE_WARNING__ 869 from eric7.PipInterface.PipPackagesWidget import ( # noqa: I101
873 PipPackagesWidget, 870 PipPackagesWidget,
874 ) 871 )
875 872
876 self.pipWidget = PipPackagesWidget(self.pipInterface) 873 self.pipWidget = PipPackagesWidget(self.pipInterface)
877 else: 874 else:
879 self.pipWidget = None 876 self.pipWidget = None
880 877
881 if Preferences.getUI("ShowCondaPackageManager"): 878 if Preferences.getUI("ShowCondaPackageManager"):
882 # Create the conda package manager 879 # Create the conda package manager
883 logging.debug("Creating Conda Package Manager...") 880 logging.debug("Creating Conda Package Manager...")
884 from eric7.CondaInterface.CondaPackagesWidget import ( # __IGNORE_WARNING__ 881 from eric7.CondaInterface.CondaPackagesWidget import ( # noqa: I101
885 CondaPackagesWidget, 882 CondaPackagesWidget,
886 ) 883 )
887 884
888 self.condaWidget = CondaPackagesWidget(self.condaInterface) 885 self.condaWidget = CondaPackagesWidget(self.condaInterface)
889 else: 886 else:
891 self.condaWidget = None 888 self.condaWidget = None
892 889
893 if Preferences.getUI("ShowCooperation"): 890 if Preferences.getUI("ShowCooperation"):
894 # Create the chat part of the user interface 891 # Create the chat part of the user interface
895 logging.debug("Creating Chat Widget...") 892 logging.debug("Creating Chat Widget...")
896 from eric7.Cooperation.ChatWidget import ( # __IGNORE_WARNING_I101__ 893 from eric7.Cooperation.ChatWidget import ChatWidget # noqa: I101
897 ChatWidget,
898 )
899 894
900 self.cooperation = ChatWidget(self) 895 self.cooperation = ChatWidget(self)
901 else: 896 else:
902 logging.debug("Chat Widget disabled") 897 logging.debug("Chat Widget disabled")
903 self.cooperation = None 898 self.cooperation = None
904 899
905 if Preferences.getUI("ShowIrc"): 900 if Preferences.getUI("ShowIrc"):
906 # Create the IRC part of the user interface 901 # Create the IRC part of the user interface
907 logging.debug("Creating IRC Widget...") 902 logging.debug("Creating IRC Widget...")
908 from eric7.Network.IRC.IrcWidget import IrcWidget # __IGNORE_WARNING_I101__ 903 from eric7.Network.IRC.IrcWidget import IrcWidget # noqa: I101
909 904
910 self.irc = IrcWidget(self) 905 self.irc = IrcWidget(self)
911 else: 906 else:
912 logging.debug("IRC Widget disabled") 907 logging.debug("IRC Widget disabled")
913 self.irc = None 908 self.irc = None
914 909
915 if Preferences.getUI("ShowMicroPython"): 910 if Preferences.getUI("ShowMicroPython"):
916 # Create the MicroPython part of the user interface 911 # Create the MicroPython part of the user interface
917 logging.debug("Creating MicroPython Widget...") 912 logging.debug("Creating MicroPython Widget...")
918 from eric7.MicroPython.MicroPythonWidget import ( # __IGNORE_WARNING_I101__ 913 from eric7.MicroPython.MicroPythonWidget import ( # noqa: I101
919 MicroPythonWidget, 914 MicroPythonWidget,
920 ) 915 )
921 916
922 self.microPythonWidget = MicroPythonWidget(self) 917 self.microPythonWidget = MicroPythonWidget(self)
923 else: 918 else:
925 self.microPythonWidget = None 920 self.microPythonWidget = None
926 921
927 if Preferences.getUI("ShowNumbersViewer"): 922 if Preferences.getUI("ShowNumbersViewer"):
928 # Create the numbers viewer 923 # Create the numbers viewer
929 logging.debug("Creating Numbers Viewer...") 924 logging.debug("Creating Numbers Viewer...")
930 from .NumbersWidget import NumbersWidget # __IGNORE_WARNING_I101__ 925 from .NumbersWidget import NumbersWidget # noqa: I101
931 926
932 self.numbersViewer = NumbersWidget() 927 self.numbersViewer = NumbersWidget()
933 else: 928 else:
934 logging.debug("Numbers Viewer disabled") 929 logging.debug("Numbers Viewer disabled")
935 self.numbersViewer = None 930 self.numbersViewer = None
953 948
954 self.__findFileDialog = None 949 self.__findFileDialog = None
955 self.__replaceFileDialog = None 950 self.__replaceFileDialog = None
956 if Preferences.getUI("ShowFindFileWidget"): 951 if Preferences.getUI("ShowFindFileWidget"):
957 # Create the find in files widget 952 # Create the find in files widget
958 from .FindFileWidget import FindFileWidget # __IGNORE_WARNING_I101__ 953 from .FindFileWidget import FindFileWidget # noqa: I101
959 954
960 self.__findFileWidget = FindFileWidget(self.project, self) 955 self.__findFileWidget = FindFileWidget(self.project, self)
961 self.__findFileWidget.sourceFile.connect(self.viewmanager.openSourceFile) 956 self.__findFileWidget.sourceFile.connect(self.viewmanager.openSourceFile)
962 self.__findFileWidget.designerFile.connect(self.__designer) 957 self.__findFileWidget.designerFile.connect(self.__designer)
963 self.__findFileWidget.linguistFile.connect(self.__linguist) 958 self.__findFileWidget.linguistFile.connect(self.__linguist)
969 self.__findFileWidget = None 964 self.__findFileWidget = None
970 965
971 self.__findLocationDialog = None 966 self.__findLocationDialog = None
972 if Preferences.getUI("ShowFindLocationWidget"): 967 if Preferences.getUI("ShowFindLocationWidget"):
973 # Create the find location (file) widget 968 # Create the find location (file) widget
974 from .FindLocationWidget import ( # __IGNORE_WARNING_I101__ 969 from .FindLocationWidget import FindLocationWidget # noqa: I101
975 FindLocationWidget,
976 )
977 970
978 self.__findLocationWidget = FindLocationWidget(self.project, self) 971 self.__findLocationWidget = FindLocationWidget(self.project, self)
979 self.__findLocationWidget.sourceFile.connect( 972 self.__findLocationWidget.sourceFile.connect(
980 self.viewmanager.openSourceFile 973 self.viewmanager.openSourceFile
981 ) 974 )
995 Preferences.getUI("ShowInternalHelpViewer") 988 Preferences.getUI("ShowInternalHelpViewer")
996 or Preferences.getHelp("HelpViewerType") == 0 989 or Preferences.getHelp("HelpViewerType") == 0
997 ): 990 ):
998 # Create the embedded help viewer 991 # Create the embedded help viewer
999 logging.debug("Creating Internal Help Viewer...") 992 logging.debug("Creating Internal Help Viewer...")
1000 from eric7.HelpViewer.HelpViewerWidget import ( # __IGNORE_WARNING_I101__ 993 from eric7.HelpViewer.HelpViewerWidget import HelpViewerWidget # noqa: I101
1001 HelpViewerWidget,
1002 )
1003 994
1004 self.__helpViewerWidget = HelpViewerWidget(self) 995 self.__helpViewerWidget = HelpViewerWidget(self)
1005 else: 996 else:
1006 logging.debug("Internal Help Viewer disabled...") 997 logging.debug("Internal Help Viewer disabled...")
1007 self.__helpViewerWidget = None 998 self.__helpViewerWidget = None
1610 1601
1611 def processArgs(self, args): 1602 def processArgs(self, args):
1612 """ 1603 """
1613 Public method to process the command line args passed to the UI. 1604 Public method to process the command line args passed to the UI.
1614 1605
1615 @param args list of files to open<br /> 1606 @param args namespace object containing the parsed command line
1616 The args are processed one at a time. All arguments after a 1607 parameters
1617 '--' option are considered debug arguments to the program 1608 @type argparse.Namespace
1618 for the debugger. All files named before the '--' option
1619 are opened in a text editor, unless the argument ends in
1620 .epj or .e4p, then it is opened as a project file. If it
1621 ends in .emj, .e4m or .e5m, it is opened as a multi project.
1622 """ 1609 """
1623 # check and optionally read a crash session and ignore any arguments 1610 # check and optionally read a crash session and ignore any arguments
1624 if self.__readCrashSession(): 1611 if self.__readCrashSession():
1625 return 1612 return
1626 1613
1627 # no args, return 1614 if args.dd_args:
1628 if args is None: 1615 # store away any args we had
1629 if self.__openAtStartup: 1616 argsStr = " ".join(args.dd_args)
1630 self.__openOnStartup() 1617 self.debuggerUI.setArgvHistory(argsStr)
1618
1619 if args.start_file:
1620 self.__openOnStartup("File")
1631 return 1621 return
1622 elif args.start_multi:
1623 self.__openOnStartup("MultiProject")
1624 return
1625 elif args.start_project:
1626 self.__openOnStartup("Project")
1627 return
1628 elif args.start_session:
1629 self.__openOnStartup("Session")
1630 return
1632 1631
1633 opens = 0 1632 opens = 0
1634 1633 for filename in args.file_or_project:
1635 # holds space delimited list of command args, if any
1636 argsStr = None
1637 # flag indicating '--' options was found
1638 ddseen = False
1639
1640 argChars = ["-", "/"] if OSUtilities.isWindowsPlatform() else ["-"]
1641
1642 for arg in args:
1643 # handle a request to start with last session
1644 if arg == "--start-file":
1645 self.__openOnStartup("File")
1646 # ignore all further arguments
1647 return
1648 elif arg == "--start-multi":
1649 self.__openOnStartup("MultiProject")
1650 # ignore all further arguments
1651 return
1652 elif arg == "--start-project":
1653 self.__openOnStartup("Project")
1654 # ignore all further arguments
1655 return
1656 elif arg == "--start-session":
1657 self.__openOnStartup("Session")
1658 # ignore all further arguments
1659 return
1660
1661 if arg == "--" and not ddseen:
1662 ddseen = True
1663 continue
1664
1665 if arg[0] in argChars or ddseen:
1666 if argsStr is None:
1667 argsStr = arg
1668 else:
1669 argsStr = "{0} {1}".format(argsStr, arg)
1670 continue
1671
1672 try: 1634 try:
1673 ext = os.path.splitext(arg)[1] 1635 ext = os.path.normcase(os.path.splitext(filename)[1])
1674 ext = os.path.normcase(ext)
1675 except IndexError: 1636 except IndexError:
1676 ext = "" 1637 ext = ""
1677 1638
1678 if ext in (".epj", ".e4p"): 1639 if ext in (".epj", ".e4p"):
1679 self.project.openProject(arg) 1640 self.project.openProject(filename)
1680 opens += 1 1641 opens += 1
1681 elif ext in (".emj", ".e4m", ".e5m"): 1642 elif ext in (".emj", ".e4m", ".e5m"):
1682 self.multiProject.openMultiProject(arg) 1643 self.multiProject.openMultiProject(filename)
1683 opens += 1 1644 opens += 1
1684 else: 1645 else:
1685 self.viewmanager.openFiles(arg) 1646 self.viewmanager.openFiles(filename)
1686 opens += 1 1647 opens += 1
1687
1688 # store away any args we had
1689 if argsStr is not None:
1690 self.debuggerUI.setArgvHistory(argsStr)
1691 1648
1692 if opens == 0 and self.__openAtStartup: 1649 if opens == 0 and self.__openAtStartup:
1693 # no files, project or multiproject was given 1650 # no files, project or multiproject was given
1694 self.__openOnStartup() 1651 self.__openOnStartup()
1695 1652
3778 """ 3735 """
3779 Private slot to create the menus. 3736 Private slot to create the menus.
3780 """ 3737 """
3781 self.__menus = {} 3738 self.__menus = {}
3782 mb = self.menuBar() 3739 mb = self.menuBar()
3783 if OSUtilities.isLinuxPlatform() and not Preferences.getUI("UseNativeMenuBar"): 3740 if (
3741 OSUtilities.isLinuxPlatform() or OSUtilities.isFreeBsdPlatform()
3742 ) and not Preferences.getUI("UseNativeMenuBar"):
3784 mb.setNativeMenuBar(False) 3743 mb.setNativeMenuBar(False)
3785 3744
3786 ############################################################## 3745 ##############################################################
3787 ## File menu 3746 ## File menu
3788 ############################################################## 3747 ##############################################################
6946 @param searchWord word to search for 6905 @param searchWord word to search for
6947 @type str 6906 @type str
6948 @return flag indicating a successful launch 6907 @return flag indicating a successful launch
6949 @rtype bool 6908 @rtype bool
6950 """ 6909 """
6910 from eric7.WebBrowser import WebBrowserArgumentsCreator
6911
6951 clientArgs = [] 6912 clientArgs = []
6952 if searchWord: 6913 if searchWord:
6953 clientArgs.append("--search={0}".format(searchWord)) 6914 clientArgs.append("--search={0}".format(searchWord))
6954 6915
6955 if self.__webBrowserProcess is None: 6916 if self.__webBrowserProcess is None:
6994 6955
6995 else: 6956 else:
6996 clientArgs.append("--newtab={0}".format(home)) 6957 clientArgs.append("--newtab={0}".format(home))
6997 6958
6998 if clientArgs and self.__webBrowserClient: 6959 if clientArgs and self.__webBrowserClient:
6999 self.__webBrowserClient.processArgs(clientArgs, disconnect=False) 6960 args = WebBrowserArgumentsCreator.createArgparseNamespace(clientArgs)
6961 self.__webBrowserClient.processArgs(args, disconnect=False)
7000 6962
7001 return True 6963 return True
7002 6964
7003 def __connectToWebBrowser(self, process): 6965 def __connectToWebBrowser(self, process):
7004 """ 6966 """
7054 7016
7055 def __webBrowserShutdown(self): 7017 def __webBrowserShutdown(self):
7056 """ 7018 """
7057 Private method to shut down the web browser. 7019 Private method to shut down the web browser.
7058 """ 7020 """
7059 self.__webBrowserClient.processArgs(["--shutdown"], disconnect=False) 7021 from eric7.WebBrowser import WebBrowserArgumentsCreator
7022
7023 args = WebBrowserArgumentsCreator.createArgparseNamespace(["--shutdown"])
7024 self.__webBrowserClient.processArgs(args, disconnect=False)
7060 7025
7061 def __helpViewer(self): 7026 def __helpViewer(self):
7062 """ 7027 """
7063 Private slot to start an empty help viewer/web browser. 7028 Private slot to start an empty help viewer/web browser.
7064 """ 7029 """
7208 SpellChecker.setDefaultLanguage( 7173 SpellChecker.setDefaultLanguage(
7209 Preferences.getEditor("SpellCheckingDefaultLanguage") 7174 Preferences.getEditor("SpellCheckingDefaultLanguage")
7210 ) 7175 )
7211 7176
7212 with contextlib.suppress(ImportError, AttributeError): 7177 with contextlib.suppress(ImportError, AttributeError):
7213 from eric7.EricWidgets.EricSpellCheckedTextEdit import ( # __IGNORE_WARNING__ 7178 from eric7.EricWidgets.EricSpellCheckedTextEdit import ( # noqa: I101
7214 SpellCheckMixin, 7179 SpellCheckMixin,
7215 ) 7180 )
7216 7181
7217 pwl = SpellChecker.getUserDictionaryPath(isException=False) 7182 pwl = SpellChecker.getUserDictionaryPath(isException=False)
7218 pel = SpellChecker.getUserDictionaryPath(isException=True) 7183 pel = SpellChecker.getUserDictionaryPath(isException=True)
7258 7223
7259 self.mainPasswordChanged.emit(oldPassword, newPassword) 7224 self.mainPasswordChanged.emit(oldPassword, newPassword)
7260 Preferences.convertPasswords(oldPassword, newPassword) 7225 Preferences.convertPasswords(oldPassword, newPassword)
7261 variant = Globals.getWebBrowserSupport() 7226 variant = Globals.getWebBrowserSupport()
7262 if variant == "QtWebEngine": 7227 if variant == "QtWebEngine":
7263 from eric7.WebBrowser.Passwords.PasswordManager import ( # __IGNORE_WARNING__ 7228 from eric7.WebBrowser.Passwords.PasswordManager import ( # noqa: I101
7264 PasswordManager, 7229 PasswordManager,
7265 ) 7230 )
7266 7231
7267 pwManager = PasswordManager() 7232 pwManager = PasswordManager()
7268 pwManager.mainPasswordChanged(oldPassword, newPassword) 7233 pwManager.mainPasswordChanged(oldPassword, newPassword)
8133 8098
8134 sessionCreated = self.__writeSession() 8099 sessionCreated = self.__writeSession()
8135 8100
8136 self.__astViewer.hide() 8101 self.__astViewer.hide()
8137 8102
8103 self.shell.closeShell()
8104
8138 if not self.project.closeProject(shutdown=True): 8105 if not self.project.closeProject(shutdown=True):
8139 return False 8106 return False
8140 8107
8141 if not self.multiProject.closeMultiProject(): 8108 if not self.multiProject.closeMultiProject():
8142 return False 8109 return False
8155 self.codeDocumentationViewer.shutdown() 8122 self.codeDocumentationViewer.shutdown()
8156 8123
8157 self.__previewer.shutdown() 8124 self.__previewer.shutdown()
8158 8125
8159 self.__astViewer.shutdown() 8126 self.__astViewer.shutdown()
8160
8161 self.shell.closeShell()
8162 8127
8163 self.__writeTasks() 8128 self.__writeTasks()
8164 8129
8165 if self.templateViewer is not None: 8130 if self.templateViewer is not None:
8166 self.templateViewer.save() 8131 self.templateViewer.save()

eric ide

mercurial