UI/UserInterface.py

changeset 945
8cd4d08fa9f6
parent 934
657269549914
child 1112
8a7d1b9d18db
equal deleted inserted replaced
944:1b59c4ba121e 945:8cd4d08fa9f6
162 162
163 @param s data to be written (it must support the str-method) 163 @param s data to be written (it must support the str-method)
164 """ 164 """
165 self.buffer += str(s) 165 self.buffer += str(s)
166 self.__nWrite(self.__bufferedWrite()) 166 self.__nWrite(self.__bufferedWrite())
167
167 168
168 class UserInterface(QMainWindow): 169 class UserInterface(QMainWindow):
169 """ 170 """
170 Class implementing the main user interface. 171 Class implementing the main user interface.
171 172
246 self.multiProject = MultiProject(self.project, self) 247 self.multiProject = MultiProject(self.project, self)
247 248
248 splash.showMessage(self.trUtf8("Initializing Plugin Manager...")) 249 splash.showMessage(self.trUtf8("Initializing Plugin Manager..."))
249 250
250 # Initialize the Plugin Manager (Plugins are initialized later 251 # Initialize the Plugin Manager (Plugins are initialized later
251 self.pluginManager = PluginManager(self, develPlugin = plugin) 252 self.pluginManager = PluginManager(self, develPlugin=plugin)
252 253
253 splash.showMessage(self.trUtf8("Generating Main User Interface...")) 254 splash.showMessage(self.trUtf8("Generating Main User Interface..."))
254 255
255 # Create the main window now so that we can connect QActions to it. 256 # Create the main window now so that we can connect QActions to it.
256 logging.debug("Creating Layout...") 257 logging.debug("Creating Layout...")
257 self.__createLayout(debugServer) 258 self.__createLayout(debugServer)
258 259
259 # Generate the debugger part of the ui 260 # Generate the debugger part of the ui
260 logging.debug("Creating Debugger UI...") 261 logging.debug("Creating Debugger UI...")
261 self.debuggerUI = DebugUI(self, self.viewmanager, debugServer, 262 self.debuggerUI = DebugUI(self, self.viewmanager, debugServer,
262 self.debugViewer, self.project) 263 self.debugViewer, self.project)
263 self.debugViewer.setDebugger(self.debuggerUI) 264 self.debugViewer.setDebugger(self.debuggerUI)
264 self.shell.setDebuggerUI(self.debuggerUI) 265 self.shell.setDebuggerUI(self.debuggerUI)
265 266
266 # Generate the redirection helpers 267 # Generate the redirection helpers
447 # Generate the find in project files dialog 448 # Generate the find in project files dialog
448 self.findFilesDialog = FindFileDialog(self.project) 449 self.findFilesDialog = FindFileDialog(self.project)
449 self.findFilesDialog.sourceFile.connect( 450 self.findFilesDialog.sourceFile.connect(
450 self.viewmanager.openSourceFile) 451 self.viewmanager.openSourceFile)
451 self.findFilesDialog.designerFile.connect(self.__designer) 452 self.findFilesDialog.designerFile.connect(self.__designer)
452 self.replaceFilesDialog = FindFileDialog(self.project, replaceMode = True) 453 self.replaceFilesDialog = FindFileDialog(self.project, replaceMode=True)
453 self.replaceFilesDialog.sourceFile.connect( 454 self.replaceFilesDialog.sourceFile.connect(
454 self.viewmanager.openSourceFile) 455 self.viewmanager.openSourceFile)
455 self.replaceFilesDialog.designerFile.connect(self.__designer) 456 self.replaceFilesDialog.designerFile.connect(self.__designer)
456 457
457 # generate the find file dialog 458 # generate the find file dialog
598 599
599 # step 2: set a style sheet 600 # step 2: set a style sheet
600 styleSheetFile = Preferences.getUI("StyleSheet") 601 styleSheetFile = Preferences.getUI("StyleSheet")
601 if styleSheetFile: 602 if styleSheetFile:
602 try: 603 try:
603 f = open(styleSheetFile, "r", encoding = "utf-8") 604 f = open(styleSheetFile, "r", encoding="utf-8")
604 styleSheet = f.read() 605 styleSheet = f.read()
605 f.close() 606 f.close()
606 except IOError as msg: 607 except IOError as msg:
607 E5MessageBox.warning(self, 608 E5MessageBox.warning(self,
608 self.trUtf8("Loading Style Sheet"), 609 self.trUtf8("Loading Style Sheet"),
676 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject) 677 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject)
677 self.multiProjectBrowser.setWindowTitle(self.trUtf8("Multiproject-Viewer")) 678 self.multiProjectBrowser.setWindowTitle(self.trUtf8("Multiproject-Viewer"))
678 679
679 # Create the debug viewer maybe without the embedded shell 680 # Create the debug viewer maybe without the embedded shell
680 self.debugViewer = DebugViewer(debugServer, False, self.viewmanager, None, 681 self.debugViewer = DebugViewer(debugServer, False, self.viewmanager, None,
681 embeddedShell=self.embeddedShell, 682 embeddedShell=self.embeddedShell,
682 embeddedBrowser=(self.embeddedFileBrowser == 1)) 683 embeddedBrowser=(self.embeddedFileBrowser == 1))
683 self.debugViewer.setWindowTitle(self.trUtf8("Debug-Viewer")) 684 self.debugViewer.setWindowTitle(self.trUtf8("Debug-Viewer"))
684 685
685 # Create the chat part of the user interface 686 # Create the chat part of the user interface
686 self.cooperation = ChatWidget() 687 self.cooperation = ChatWidget()
708 709
709 # Create the numbers viewer 710 # Create the numbers viewer
710 self.numbersViewer = NumbersWidget() 711 self.numbersViewer = NumbersWidget()
711 self.numbersViewer.setWindowTitle(self.trUtf8("Numbers")) 712 self.numbersViewer.setWindowTitle(self.trUtf8("Numbers"))
712 713
713 self.windows = [self.projectBrowser, None, self.debugViewer, 714 self.windows = [self.projectBrowser, None, self.debugViewer,
714 None, self.logViewer, self.taskViewer, self.templateViewer, 715 None, self.logViewer, self.taskViewer, self.templateViewer,
715 self.multiProjectBrowser, self.terminal, self.cooperation, 716 self.multiProjectBrowser, self.terminal, self.cooperation,
716 self.symbolsViewer, self.numbersViewer] 717 self.symbolsViewer, self.numbersViewer]
717 718
718 if self.embeddedShell: 719 if self.embeddedShell:
719 self.shell = self.debugViewer.shell 720 self.shell = self.debugViewer.shell
720 else: 721 else:
725 if self.embeddedFileBrowser == 0: # separate window 726 if self.embeddedFileBrowser == 0: # separate window
726 # Create the file browser 727 # Create the file browser
727 self.browser = Browser(None) 728 self.browser = Browser(None)
728 self.browser.setWindowTitle(self.trUtf8("File-Browser")) 729 self.browser.setWindowTitle(self.trUtf8("File-Browser"))
729 self.windows[1] = self.browser 730 self.windows[1] = self.browser
730 elif self.embeddedFileBrowser == 1: # embedded in debug browser 731 elif self.embeddedFileBrowser == 1: # embedded in debug browser
731 self.browser = self.debugViewer.browser 732 self.browser = self.debugViewer.browser
732 else: # embedded in project browser 733 else: # embedded in project browser
733 self.browser = self.projectBrowser.fileBrowser 734 self.browser = self.projectBrowser.fileBrowser
734 735
735 def __createDockWindowsLayout(self, debugServer): 736 def __createDockWindowsLayout(self, debugServer):
748 # Create the multi project browser 749 # Create the multi project browser
749 self.multiProjectBrowserDock = \ 750 self.multiProjectBrowserDock = \
750 self.__createDockWindow("MultiProjectBrowserDock") 751 self.__createDockWindow("MultiProjectBrowserDock")
751 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject) 752 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject)
752 self.__setupDockWindow(self.multiProjectBrowserDock, Qt.LeftDockWidgetArea, 753 self.__setupDockWindow(self.multiProjectBrowserDock, Qt.LeftDockWidgetArea,
753 self.multiProjectBrowser, 754 self.multiProjectBrowser,
754 self.trUtf8("Multiproject-Viewer")) 755 self.trUtf8("Multiproject-Viewer"))
755 756
756 # Create the debug viewer maybe without the embedded shell 757 # Create the debug viewer maybe without the embedded shell
757 self.debugViewerDock = self.__createDockWindow("DebugViewerDock") 758 self.debugViewerDock = self.__createDockWindow("DebugViewerDock")
758 self.debugViewer = DebugViewer(debugServer, True, self.viewmanager, 759 self.debugViewer = DebugViewer(debugServer, True, self.viewmanager,
759 self.debugViewerDock, 760 self.debugViewerDock,
760 embeddedShell=self.embeddedShell, 761 embeddedShell=self.embeddedShell,
761 embeddedBrowser=(self.embeddedFileBrowser == 1)) 762 embeddedBrowser=(self.embeddedFileBrowser == 1))
762 self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea, 763 self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea,
763 self.debugViewer, self.trUtf8("Debug-Viewer")) 764 self.debugViewer, self.trUtf8("Debug-Viewer"))
764 765
765 # Create the chat part of the user interface 766 # Create the chat part of the user interface
766 self.cooperationDock = self.__createDockWindow("CooperationDock") 767 self.cooperationDock = self.__createDockWindow("CooperationDock")
767 self.cooperation = ChatWidget(parent = self.cooperationDock) 768 self.cooperation = ChatWidget(parent=self.cooperationDock)
768 self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea, 769 self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea,
769 self.cooperation, self.trUtf8("Cooperation")) 770 self.cooperation, self.trUtf8("Cooperation"))
770 771
771 # Create the log viewer part of the user interface 772 # Create the log viewer part of the user interface
772 self.logViewerDock = self.__createDockWindow("LogViewerDock") 773 self.logViewerDock = self.__createDockWindow("LogViewerDock")
780 self.__setupDockWindow(self.taskViewerDock, Qt.BottomDockWidgetArea, 781 self.__setupDockWindow(self.taskViewerDock, Qt.BottomDockWidgetArea,
781 self.taskViewer, self.trUtf8("Task-Viewer")) 782 self.taskViewer, self.trUtf8("Task-Viewer"))
782 783
783 # Create the template viewer part of the user interface 784 # Create the template viewer part of the user interface
784 self.templateViewerDock = self.__createDockWindow("TemplateViewerDock") 785 self.templateViewerDock = self.__createDockWindow("TemplateViewerDock")
785 self.templateViewer = TemplateViewer(self.templateViewerDock, 786 self.templateViewer = TemplateViewer(self.templateViewerDock,
786 self.viewmanager) 787 self.viewmanager)
787 self.__setupDockWindow(self.templateViewerDock, Qt.RightDockWidgetArea, 788 self.__setupDockWindow(self.templateViewerDock, Qt.RightDockWidgetArea,
788 self.templateViewer, self.trUtf8("Template-Viewer")) 789 self.templateViewer, self.trUtf8("Template-Viewer"))
789 790
790 # Create the terminal 791 # Create the terminal
791 self.terminalDock = self.__createDockWindow("TerminalDock") 792 self.terminalDock = self.__createDockWindow("TerminalDock")
792 self.terminal = Terminal(self.viewmanager, self.terminalDock) 793 self.terminal = Terminal(self.viewmanager, self.terminalDock)
793 self.__setupDockWindow(self.terminalDock, Qt.BottomDockWidgetArea, 794 self.__setupDockWindow(self.terminalDock, Qt.BottomDockWidgetArea,
794 self.terminal, self.trUtf8("Terminal")) 795 self.terminal, self.trUtf8("Terminal"))
795 796
796 self.windows = [self.projectBrowserDock, None, self.debugViewerDock, 797 self.windows = [self.projectBrowserDock, None, self.debugViewerDock,
797 None, self.logViewerDock, self.taskViewerDock, self.templateViewerDock, 798 None, self.logViewerDock, self.taskViewerDock, self.templateViewerDock,
798 self.multiProjectBrowserDock, self.terminalDock, self.cooperationDock] 799 self.multiProjectBrowserDock, self.terminalDock, self.cooperationDock]
799 800
800 if self.embeddedShell: 801 if self.embeddedShell:
801 self.shell = self.debugViewer.shell 802 self.shell = self.debugViewer.shell
802 else: 803 else:
812 self.browserDock = self.__createDockWindow("BrowserDock") 813 self.browserDock = self.__createDockWindow("BrowserDock")
813 self.browser = Browser(self.browserDock) 814 self.browser = Browser(self.browserDock)
814 self.__setupDockWindow(self.browserDock, Qt.RightDockWidgetArea, 815 self.__setupDockWindow(self.browserDock, Qt.RightDockWidgetArea,
815 self.browser, self.trUtf8("File-Browser")) 816 self.browser, self.trUtf8("File-Browser"))
816 self.windows[1] = self.browserDock 817 self.windows[1] = self.browserDock
817 elif self.embeddedFileBrowser == 1: # embedded in debug browser 818 elif self.embeddedFileBrowser == 1: # embedded in debug browser
818 self.browser = self.debugViewer.browser 819 self.browser = self.debugViewer.browser
819 else: # embedded in project browser 820 else: # embedded in project browser
820 self.browser = self.projectBrowser.fileBrowser 821 self.browser = self.projectBrowser.fileBrowser
821 822
822 # Create the symbols viewer 823 # Create the symbols viewer
840 @param debugServer reference to the debug server object 841 @param debugServer reference to the debug server object
841 """ 842 """
842 # Create the vertical toolbox 843 # Create the vertical toolbox
843 self.vToolboxDock = self.__createDockWindow("vToolboxDock") 844 self.vToolboxDock = self.__createDockWindow("vToolboxDock")
844 self.vToolbox = E5VerticalToolBox(self.vToolboxDock) 845 self.vToolbox = E5VerticalToolBox(self.vToolboxDock)
845 self.__setupDockWindow(self.vToolboxDock, Qt.LeftDockWidgetArea, 846 self.__setupDockWindow(self.vToolboxDock, Qt.LeftDockWidgetArea,
846 self.vToolbox, self.trUtf8("Vertical Toolbox")) 847 self.vToolbox, self.trUtf8("Vertical Toolbox"))
847 848
848 # Create the horizontal toolbox 849 # Create the horizontal toolbox
849 self.hToolboxDock = self.__createDockWindow("hToolboxDock") 850 self.hToolboxDock = self.__createDockWindow("hToolboxDock")
850 self.hToolbox = E5HorizontalToolBox(self.hToolboxDock) 851 self.hToolbox = E5HorizontalToolBox(self.hToolboxDock)
851 self.__setupDockWindow(self.hToolboxDock, Qt.BottomDockWidgetArea, 852 self.__setupDockWindow(self.hToolboxDock, Qt.BottomDockWidgetArea,
852 self.hToolbox, self.trUtf8("Horizontal Toolbox")) 853 self.hToolbox, self.trUtf8("Horizontal Toolbox"))
853 854
854 # Create the project browser 855 # Create the project browser
855 self.projectBrowser = ProjectBrowser(self.project, None, 856 self.projectBrowser = ProjectBrowser(self.project, None,
856 embeddedBrowser=(self.embeddedFileBrowser == 2)) 857 embeddedBrowser=(self.embeddedFileBrowser == 2))
857 self.vToolbox.addItem(self.projectBrowser, 858 self.vToolbox.addItem(self.projectBrowser,
858 UI.PixmapCache.getIcon("projectViewer.png"), 859 UI.PixmapCache.getIcon("projectViewer.png"),
859 self.trUtf8("Project-Viewer")) 860 self.trUtf8("Project-Viewer"))
860 861
861 # Create the multi project browser 862 # Create the multi project browser
862 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject) 863 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject)
863 self.vToolbox.addItem(self.multiProjectBrowser, 864 self.vToolbox.addItem(self.multiProjectBrowser,
864 UI.PixmapCache.getIcon("multiProjectViewer.png"), 865 UI.PixmapCache.getIcon("multiProjectViewer.png"),
865 self.trUtf8("Multiproject-Viewer")) 866 self.trUtf8("Multiproject-Viewer"))
866 867
867 # Create the template viewer part of the user interface 868 # Create the template viewer part of the user interface
868 self.templateViewer = TemplateViewer(None, 869 self.templateViewer = TemplateViewer(None,
869 self.viewmanager) 870 self.viewmanager)
870 self.vToolbox.addItem(self.templateViewer, 871 self.vToolbox.addItem(self.templateViewer,
871 UI.PixmapCache.getIcon("templateViewer.png"), 872 UI.PixmapCache.getIcon("templateViewer.png"),
872 self.trUtf8("Template-Viewer")) 873 self.trUtf8("Template-Viewer"))
873 874
874 # Create the debug viewer maybe without the embedded shell 875 # Create the debug viewer maybe without the embedded shell
875 self.debugViewerDock = self.__createDockWindow("DebugViewerDock") 876 self.debugViewerDock = self.__createDockWindow("DebugViewerDock")
876 self.debugViewer = DebugViewer(debugServer, True, self.viewmanager, 877 self.debugViewer = DebugViewer(debugServer, True, self.viewmanager,
877 self.debugViewerDock, 878 self.debugViewerDock,
878 embeddedShell=self.embeddedShell, 879 embeddedShell=self.embeddedShell,
879 embeddedBrowser=(self.embeddedFileBrowser == 1)) 880 embeddedBrowser=(self.embeddedFileBrowser == 1))
880 self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea, 881 self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea,
881 self.debugViewer, self.trUtf8("Debug-Viewer")) 882 self.debugViewer, self.trUtf8("Debug-Viewer"))
882 883
883 # Create the chat part of the user interface 884 # Create the chat part of the user interface
884 self.cooperationDock = self.__createDockWindow("CooperationDock") 885 self.cooperationDock = self.__createDockWindow("CooperationDock")
885 self.cooperation = ChatWidget(parent = self.cooperationDock) 886 self.cooperation = ChatWidget(parent=self.cooperationDock)
886 self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea, 887 self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea,
887 self.cooperation, self.trUtf8("Cooperation")) 888 self.cooperation, self.trUtf8("Cooperation"))
888 889
889 # Create the terminal part of the user interface 890 # Create the terminal part of the user interface
890 self.terminal = Terminal(self.viewmanager) 891 self.terminal = Terminal(self.viewmanager)
891 self.hToolbox.addItem(self.terminal, 892 self.hToolbox.addItem(self.terminal,
892 UI.PixmapCache.getIcon("terminal.png"), 893 UI.PixmapCache.getIcon("terminal.png"),
893 self.trUtf8("Terminal")) 894 self.trUtf8("Terminal"))
894 895
895 # Create the task viewer part of the user interface 896 # Create the task viewer part of the user interface
896 self.taskViewer = TaskViewer(None, self.project) 897 self.taskViewer = TaskViewer(None, self.project)
897 self.hToolbox.addItem(self.taskViewer, 898 self.hToolbox.addItem(self.taskViewer,
898 UI.PixmapCache.getIcon("task.png"), 899 UI.PixmapCache.getIcon("task.png"),
899 self.trUtf8("Task-Viewer")) 900 self.trUtf8("Task-Viewer"))
900 901
901 # Create the log viewer part of the user interface 902 # Create the log viewer part of the user interface
902 self.logViewer = LogViewer() 903 self.logViewer = LogViewer()
903 self.hToolbox.addItem(self.logViewer, 904 self.hToolbox.addItem(self.logViewer,
904 UI.PixmapCache.getIcon("logViewer.png"), 905 UI.PixmapCache.getIcon("logViewer.png"),
905 self.trUtf8("Log-Viewer")) 906 self.trUtf8("Log-Viewer"))
906 907
907 self.windows = [None, None, self.debugViewerDock, None, None, 908 self.windows = [None, None, self.debugViewerDock, None, None,
908 None, None, None, None, self.cooperationDock] 909 None, None, None, None, self.cooperationDock]
909 910
910 if self.embeddedShell: 911 if self.embeddedShell:
911 self.shell = self.debugViewer.shell 912 self.shell = self.debugViewer.shell
912 else: 913 else:
913 # Create the shell 914 # Create the shell
914 self.shell = Shell(debugServer, self.viewmanager) 915 self.shell = Shell(debugServer, self.viewmanager)
915 self.hToolbox.insertItem(0, self.shell, 916 self.hToolbox.insertItem(0, self.shell,
916 UI.PixmapCache.getIcon("shell.png"), 917 UI.PixmapCache.getIcon("shell.png"),
917 self.trUtf8("Shell")) 918 self.trUtf8("Shell"))
918 919
919 if self.embeddedFileBrowser == 0: # separate window 920 if self.embeddedFileBrowser == 0: # separate window
920 # Create the file browser 921 # Create the file browser
921 self.browser = Browser() 922 self.browser = Browser()
922 self.vToolbox.addItem(self.browser, 923 self.vToolbox.addItem(self.browser,
923 UI.PixmapCache.getIcon("browser.png"), 924 UI.PixmapCache.getIcon("browser.png"),
924 self.trUtf8("File-Browser")) 925 self.trUtf8("File-Browser"))
925 elif self.embeddedFileBrowser == 1: # embedded in debug browser 926 elif self.embeddedFileBrowser == 1: # embedded in debug browser
926 self.browser = self.debugViewer.browser 927 self.browser = self.debugViewer.browser
927 else: # embedded in project browser 928 else: # embedded in project browser
928 self.browser = self.projectBrowser.fileBrowser 929 self.browser = self.projectBrowser.fileBrowser
929 930
930 # Create the symbols viewer 931 # Create the symbols viewer
931 self.symbolsViewer = SymbolsWidget() 932 self.symbolsViewer = SymbolsWidget()
932 self.vToolbox.addItem(self.symbolsViewer, 933 self.vToolbox.addItem(self.symbolsViewer,
933 UI.PixmapCache.getIcon("symbols.png"), 934 UI.PixmapCache.getIcon("symbols.png"),
934 self.trUtf8("Symbols")) 935 self.trUtf8("Symbols"))
935 936
936 # Create the numbers viewer 937 # Create the numbers viewer
937 self.numbersViewer = NumbersWidget() 938 self.numbersViewer = NumbersWidget()
938 self.hToolbox.addItem(self.numbersViewer, 939 self.hToolbox.addItem(self.numbersViewer,
939 UI.PixmapCache.getIcon("numbers.png"), 940 UI.PixmapCache.getIcon("numbers.png"),
940 self.trUtf8("Numbers")) 941 self.trUtf8("Numbers"))
941 942
942 self.hToolbox.setCurrentIndex(0) 943 self.hToolbox.setCurrentIndex(0)
943 944
944 def __createSidebarsLayout(self, debugServer): 945 def __createSidebarsLayout(self, debugServer):
955 956
956 # Create the project browser 957 # Create the project browser
957 logging.debug("Creating Project Browser...") 958 logging.debug("Creating Project Browser...")
958 self.projectBrowser = ProjectBrowser(self.project, None, 959 self.projectBrowser = ProjectBrowser(self.project, None,
959 embeddedBrowser=(self.embeddedFileBrowser == 2)) 960 embeddedBrowser=(self.embeddedFileBrowser == 2))
960 self.leftSidebar.addTab(self.projectBrowser, 961 self.leftSidebar.addTab(self.projectBrowser,
961 UI.PixmapCache.getIcon("projectViewer.png"), 962 UI.PixmapCache.getIcon("projectViewer.png"),
962 self.trUtf8("Project-Viewer")) 963 self.trUtf8("Project-Viewer"))
963 964
964 # Create the multi project browser 965 # Create the multi project browser
965 logging.debug("Creating Multiproject Browser...") 966 logging.debug("Creating Multiproject Browser...")
966 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject) 967 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject)
967 self.leftSidebar.addTab(self.multiProjectBrowser, 968 self.leftSidebar.addTab(self.multiProjectBrowser,
968 UI.PixmapCache.getIcon("multiProjectViewer.png"), 969 UI.PixmapCache.getIcon("multiProjectViewer.png"),
969 self.trUtf8("Multiproject-Viewer")) 970 self.trUtf8("Multiproject-Viewer"))
970 971
971 # Create the template viewer part of the user interface 972 # Create the template viewer part of the user interface
972 logging.debug("Creating Template Viewer...") 973 logging.debug("Creating Template Viewer...")
973 self.templateViewer = TemplateViewer(None, 974 self.templateViewer = TemplateViewer(None,
974 self.viewmanager) 975 self.viewmanager)
975 self.leftSidebar.addTab(self.templateViewer, 976 self.leftSidebar.addTab(self.templateViewer,
976 UI.PixmapCache.getIcon("templateViewer.png"), 977 UI.PixmapCache.getIcon("templateViewer.png"),
977 self.trUtf8("Template-Viewer")) 978 self.trUtf8("Template-Viewer"))
978 979
979 # Create the debug viewer maybe without the embedded shell 980 # Create the debug viewer maybe without the embedded shell
980 logging.debug("Creating Debug Viewer...") 981 logging.debug("Creating Debug Viewer...")
981 self.debugViewerDock = self.__createDockWindow("DebugViewerDock") 982 self.debugViewerDock = self.__createDockWindow("DebugViewerDock")
982 self.debugViewer = DebugViewer(debugServer, True, self.viewmanager, 983 self.debugViewer = DebugViewer(debugServer, True, self.viewmanager,
983 self.debugViewerDock, 984 self.debugViewerDock,
984 embeddedShell=self.embeddedShell, 985 embeddedShell=self.embeddedShell,
985 embeddedBrowser=(self.embeddedFileBrowser == 1)) 986 embeddedBrowser=(self.embeddedFileBrowser == 1))
986 self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea, 987 self.__setupDockWindow(self.debugViewerDock, Qt.RightDockWidgetArea,
987 self.debugViewer, self.trUtf8("Debug-Viewer")) 988 self.debugViewer, self.trUtf8("Debug-Viewer"))
988 989
989 # Create the chat part of the user interface 990 # Create the chat part of the user interface
990 self.cooperationDock = self.__createDockWindow("CooperationDock") 991 self.cooperationDock = self.__createDockWindow("CooperationDock")
991 self.cooperation = ChatWidget(parent = self.cooperationDock) 992 self.cooperation = ChatWidget(parent=self.cooperationDock)
992 self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea, 993 self.__setupDockWindow(self.cooperationDock, Qt.RightDockWidgetArea,
993 self.cooperation, self.trUtf8("Cooperation")) 994 self.cooperation, self.trUtf8("Cooperation"))
994 995
995 # Create the terminal part of the user interface 996 # Create the terminal part of the user interface
996 logging.debug("Creating Terminal...") 997 logging.debug("Creating Terminal...")
997 self.terminal = Terminal(self.viewmanager) 998 self.terminal = Terminal(self.viewmanager)
998 self.bottomSidebar.addTab(self.terminal, 999 self.bottomSidebar.addTab(self.terminal,
999 UI.PixmapCache.getIcon("terminal.png"), 1000 UI.PixmapCache.getIcon("terminal.png"),
1000 self.trUtf8("Terminal")) 1001 self.trUtf8("Terminal"))
1001 1002
1002 # Create the task viewer part of the user interface 1003 # Create the task viewer part of the user interface
1003 logging.debug("Creating Task Viewer...") 1004 logging.debug("Creating Task Viewer...")
1004 self.taskViewer = TaskViewer(None, self.project) 1005 self.taskViewer = TaskViewer(None, self.project)
1005 self.bottomSidebar.addTab(self.taskViewer, 1006 self.bottomSidebar.addTab(self.taskViewer,
1006 UI.PixmapCache.getIcon("task.png"), 1007 UI.PixmapCache.getIcon("task.png"),
1007 self.trUtf8("Task-Viewer")) 1008 self.trUtf8("Task-Viewer"))
1008 1009
1009 # Create the log viewer part of the user interface 1010 # Create the log viewer part of the user interface
1010 logging.debug("Creating Log Viewer...") 1011 logging.debug("Creating Log Viewer...")
1011 self.logViewer = LogViewer() 1012 self.logViewer = LogViewer()
1012 self.bottomSidebar.addTab(self.logViewer, 1013 self.bottomSidebar.addTab(self.logViewer,
1013 UI.PixmapCache.getIcon("logViewer.png"), 1014 UI.PixmapCache.getIcon("logViewer.png"),
1014 self.trUtf8("Log-Viewer")) 1015 self.trUtf8("Log-Viewer"))
1015 1016
1016 self.windows = [None, None, self.debugViewerDock, None, None, 1017 self.windows = [None, None, self.debugViewerDock, None, None,
1017 None, None, None, None, self.cooperationDock] 1018 None, None, None, None, self.cooperationDock]
1018 1019
1019 if self.embeddedShell: 1020 if self.embeddedShell:
1020 self.shell = self.debugViewer.shell 1021 self.shell = self.debugViewer.shell
1021 else: 1022 else:
1022 # Create the shell 1023 # Create the shell
1023 logging.debug("Creating Shell...") 1024 logging.debug("Creating Shell...")
1024 self.shell = Shell(debugServer, self.viewmanager) 1025 self.shell = Shell(debugServer, self.viewmanager)
1025 self.bottomSidebar.insertTab(0, self.shell, 1026 self.bottomSidebar.insertTab(0, self.shell,
1026 UI.PixmapCache.getIcon("shell.png"), 1027 UI.PixmapCache.getIcon("shell.png"),
1027 self.trUtf8("Shell")) 1028 self.trUtf8("Shell"))
1028 1029
1029 if self.embeddedFileBrowser == 0: # separate window 1030 if self.embeddedFileBrowser == 0: # separate window
1030 # Create the file browser 1031 # Create the file browser
1031 logging.debug("Creating File Browser...") 1032 logging.debug("Creating File Browser...")
1032 self.browser = Browser() 1033 self.browser = Browser()
1033 self.leftSidebar.addTab(self.browser, 1034 self.leftSidebar.addTab(self.browser,
1034 UI.PixmapCache.getIcon("browser.png"), 1035 UI.PixmapCache.getIcon("browser.png"),
1035 self.trUtf8("File-Browser")) 1036 self.trUtf8("File-Browser"))
1036 elif self.embeddedFileBrowser == 1: # embedded in debug browser 1037 elif self.embeddedFileBrowser == 1: # embedded in debug browser
1037 self.browser = self.debugViewer.browser 1038 self.browser = self.debugViewer.browser
1038 else: # embedded in project browser 1039 else: # embedded in project browser
1039 self.browser = self.projectBrowser.fileBrowser 1040 self.browser = self.projectBrowser.fileBrowser
1040 1041
1041 # Create the symbols viewer 1042 # Create the symbols viewer
1042 self.symbolsViewer = SymbolsWidget() 1043 self.symbolsViewer = SymbolsWidget()
1043 self.leftSidebar.addTab(self.symbolsViewer, 1044 self.leftSidebar.addTab(self.symbolsViewer,
1044 UI.PixmapCache.getIcon("symbols.png"), 1045 UI.PixmapCache.getIcon("symbols.png"),
1045 self.trUtf8("Symbols")) 1046 self.trUtf8("Symbols"))
1046 1047
1047 # Create the numbers viewer 1048 # Create the numbers viewer
1048 self.numbersViewer = NumbersWidget() 1049 self.numbersViewer = NumbersWidget()
1049 self.bottomSidebar.addTab(self.numbersViewer, 1050 self.bottomSidebar.addTab(self.numbersViewer,
1050 UI.PixmapCache.getIcon("numbers.png"), 1051 UI.PixmapCache.getIcon("numbers.png"),
1051 self.trUtf8("Numbers")) 1052 self.trUtf8("Numbers"))
1052 1053
1053 self.bottomSidebar.setCurrentIndex(0) 1054 self.bottomSidebar.setCurrentIndex(0)
1054 1055
1055 # create the central widget 1056 # create the central widget
1106 self.bottomSidebar.setCurrentWidget(self.logViewer) 1107 self.bottomSidebar.setCurrentWidget(self.logViewer)
1107 self.bottomSidebar.raise_() 1108 self.bottomSidebar.raise_()
1108 if self.bottomSidebar.isAutoHiding(): 1109 if self.bottomSidebar.isAutoHiding():
1109 self.bottomSidebar.setFocus() 1110 self.bottomSidebar.setFocus()
1110 1111
1111 def __openOnStartup(self, startupType = None): 1112 def __openOnStartup(self, startupType=None):
1112 """ 1113 """
1113 Private method to open the last file, project or multiproject. 1114 Private method to open the last file, project or multiproject.
1114 1115
1115 @param startupType type of startup requested (string, one of 1116 @param startupType type of startup requested (string, one of
1116 "Nothing", "File", "Project", "MultiProject" or "Session") 1117 "Nothing", "File", "Project", "MultiProject" or "Session")
1117 """ 1118 """
1118 startupTypeMapping = { 1119 startupTypeMapping = {
1119 "Nothing" : 0, 1120 "Nothing": 0,
1120 "File" : 1, 1121 "File": 1,
1121 "Project" : 2, 1122 "Project": 2,
1122 "MultiProject" : 3, 1123 "MultiProject": 3,
1123 "Session" : 4, 1124 "Session": 4,
1124 } 1125 }
1125 1126
1126 if startupType is None: 1127 if startupType is None:
1127 startup = Preferences.getUI("OpenOnStartup") 1128 startup = Preferences.getUI("OpenOnStartup")
1128 else: 1129 else:
1157 """ 1158 """
1158 Public method to process the command line args passed to the UI. 1159 Public method to process the command line args passed to the UI.
1159 1160
1160 @param args list of files to open<br /> 1161 @param args list of files to open<br />
1161 The args are processed one at a time. All arguments after a 1162 The args are processed one at a time. All arguments after a
1162 '--' option are considered debug arguments to the program 1163 '--' option are considered debug arguments to the program
1163 for the debugger. All files named before the '--' option 1164 for the debugger. All files named before the '--' option
1164 are opened in a text editor, unless the argument ends in 1165 are opened in a text editor, unless the argument ends in
1165 .e4p, then it is opened as a project file. If it ends in 1166 .e4p, then it is opened as a project file. If it ends in
1166 .e4m, it is opened as a multiproject. 1167 .e4m, it is opened as a multiproject.
1167 """ 1168 """
1168 # no args, return 1169 # no args, return
1169 if args is None: 1170 if args is None:
1170 if not self.__noOpenAtStartup: 1171 if not self.__noOpenAtStartup:
1250 self.addDockWidget(where, dock) 1251 self.addDockWidget(where, dock)
1251 dock.setWidget(widget) 1252 dock.setWidget(widget)
1252 dock.setWindowTitle(caption) 1253 dock.setWindowTitle(caption)
1253 dock.show() 1254 dock.show()
1254 1255
1255 def __setWindowCaption(self, editor = None, project = None): 1256 def __setWindowCaption(self, editor=None, project=None):
1256 """ 1257 """
1257 Private method to set the caption of the Main Window. 1258 Private method to set the caption of the Main Window.
1258 1259
1259 @param editor filename to be displayed (string) 1260 @param editor filename to be displayed (string)
1260 @param project project name to be displayed (string) 1261 @param project project name to be displayed (string)
1296 self.wizardsActions = [] 1297 self.wizardsActions = []
1297 1298
1298 self.exitAct = E5Action(self.trUtf8('Quit'), 1299 self.exitAct = E5Action(self.trUtf8('Quit'),
1299 UI.PixmapCache.getIcon("exit.png"), 1300 UI.PixmapCache.getIcon("exit.png"),
1300 self.trUtf8('&Quit'), 1301 self.trUtf8('&Quit'),
1301 QKeySequence(self.trUtf8("Ctrl+Q","File|Quit")), 1302 QKeySequence(self.trUtf8("Ctrl+Q", "File|Quit")),
1302 0, self, 'quit') 1303 0, self, 'quit')
1303 self.exitAct.setStatusTip(self.trUtf8('Quit the IDE')) 1304 self.exitAct.setStatusTip(self.trUtf8('Quit the IDE'))
1304 self.exitAct.setWhatsThis(self.trUtf8( 1305 self.exitAct.setWhatsThis(self.trUtf8(
1305 """<b>Quit the IDE</b>""" 1306 """<b>Quit the IDE</b>"""
1306 """<p>This quits the IDE. Any unsaved changes may be saved first.""" 1307 """<p>This quits the IDE. Any unsaved changes may be saved first."""
1362 self.pbActivateAct.triggered[()].connect(self.__activateProjectBrowser) 1363 self.pbActivateAct.triggered[()].connect(self.__activateProjectBrowser)
1363 self.actions.append(self.pbActivateAct) 1364 self.actions.append(self.pbActivateAct)
1364 self.addAction(self.pbActivateAct) 1365 self.addAction(self.pbActivateAct)
1365 1366
1366 self.mpbAct = E5Action(self.trUtf8('Multiproject-Viewer'), 1367 self.mpbAct = E5Action(self.trUtf8('Multiproject-Viewer'),
1367 self.trUtf8('&Multiproject-Viewer'), 0, 0, self, 1368 self.trUtf8('&Multiproject-Viewer'), 0, 0, self,
1368 'multi_project_viewer', True) 1369 'multi_project_viewer', True)
1369 self.mpbAct.setStatusTip(self.trUtf8('Toggle the Multiproject-Viewer window')) 1370 self.mpbAct.setStatusTip(self.trUtf8('Toggle the Multiproject-Viewer window'))
1370 self.mpbAct.setWhatsThis(self.trUtf8( 1371 self.mpbAct.setWhatsThis(self.trUtf8(
1371 """<b>Toggle the Multiproject-Viewer window</b>""" 1372 """<b>Toggle the Multiproject-Viewer window</b>"""
1372 """<p>If the Multiproject-Viewer window is hidden then display it.""" 1373 """<p>If the Multiproject-Viewer window is hidden then display it."""
1499 1500
1500 self.taskViewerActivateAct = E5Action(self.trUtf8('Activate Task-Viewer'), 1501 self.taskViewerActivateAct = E5Action(self.trUtf8('Activate Task-Viewer'),
1501 self.trUtf8('Activate Task-Viewer'), 1502 self.trUtf8('Activate Task-Viewer'),
1502 QKeySequence(self.trUtf8("Alt+Shift+T")), 1503 QKeySequence(self.trUtf8("Alt+Shift+T")),
1503 0, self, 1504 0, self,
1504 'task_viewer_activate',1) 1505 'task_viewer_activate', 1)
1505 self.taskViewerActivateAct.triggered[()].connect(self.__activateTaskViewer) 1506 self.taskViewerActivateAct.triggered[()].connect(self.__activateTaskViewer)
1506 self.actions.append(self.taskViewerActivateAct) 1507 self.actions.append(self.taskViewerActivateAct)
1507 self.addAction(self.taskViewerActivateAct) 1508 self.addAction(self.taskViewerActivateAct)
1508 1509
1509 self.templateViewerAct = E5Action(self.trUtf8('Template-Viewer'), 1510 self.templateViewerAct = E5Action(self.trUtf8('Template-Viewer'),
1520 1521
1521 self.templateViewerActivateAct = E5Action(self.trUtf8('Activate Template-Viewer'), 1522 self.templateViewerActivateAct = E5Action(self.trUtf8('Activate Template-Viewer'),
1522 self.trUtf8('Activate Template-Viewer'), 1523 self.trUtf8('Activate Template-Viewer'),
1523 QKeySequence(self.trUtf8("Alt+Shift+A")), 1524 QKeySequence(self.trUtf8("Alt+Shift+A")),
1524 0, self, 1525 0, self,
1525 'template_viewer_activate',1) 1526 'template_viewer_activate', 1)
1526 self.templateViewerActivateAct.triggered[()].connect(self.__activateTemplateViewer) 1527 self.templateViewerActivateAct.triggered[()].connect(self.__activateTemplateViewer)
1527 self.actions.append(self.templateViewerActivateAct) 1528 self.actions.append(self.templateViewerActivateAct)
1528 self.addAction(self.templateViewerActivateAct) 1529 self.addAction(self.templateViewerActivateAct)
1529 1530
1530 self.vtAct = E5Action(self.trUtf8('Vertical Toolbox'), 1531 self.vtAct = E5Action(self.trUtf8('Vertical Toolbox'),
1537 )) 1538 ))
1538 self.vtAct.triggered[()].connect(self.__toggleVerticalToolbox) 1539 self.vtAct.triggered[()].connect(self.__toggleVerticalToolbox)
1539 self.actions.append(self.vtAct) 1540 self.actions.append(self.vtAct)
1540 1541
1541 self.htAct = E5Action(self.trUtf8('Horizontal Toolbox'), 1542 self.htAct = E5Action(self.trUtf8('Horizontal Toolbox'),
1542 self.trUtf8('&Horizontal Toolbox'), 0, 0, self, 1543 self.trUtf8('&Horizontal Toolbox'), 0, 0, self,
1543 'horizontal_toolbox', True) 1544 'horizontal_toolbox', True)
1544 self.htAct.setStatusTip(self.trUtf8('Toggle the Horizontal Toolbox window')) 1545 self.htAct.setStatusTip(self.trUtf8('Toggle the Horizontal Toolbox window'))
1545 self.htAct.setWhatsThis(self.trUtf8( 1546 self.htAct.setWhatsThis(self.trUtf8(
1546 """<b>Toggle the Horizontal Toolbox window</b>""" 1547 """<b>Toggle the Horizontal Toolbox window</b>"""
1547 """<p>If the Horizontal Toolbox window is hidden then display it.""" 1548 """<p>If the Horizontal Toolbox window is hidden then display it."""
1560 )) 1561 ))
1561 self.lsbAct.triggered[()].connect(self.__toggleLeftSidebar) 1562 self.lsbAct.triggered[()].connect(self.__toggleLeftSidebar)
1562 self.actions.append(self.lsbAct) 1563 self.actions.append(self.lsbAct)
1563 1564
1564 self.bsbAct = E5Action(self.trUtf8('Bottom Sidebar'), 1565 self.bsbAct = E5Action(self.trUtf8('Bottom Sidebar'),
1565 self.trUtf8('&Bottom Sidebar'), 0, 0, self, 1566 self.trUtf8('&Bottom Sidebar'), 0, 0, self,
1566 'bottom_sidebar', True) 1567 'bottom_sidebar', True)
1567 self.bsbAct.setStatusTip(self.trUtf8('Toggle the bottom sidebar window')) 1568 self.bsbAct.setStatusTip(self.trUtf8('Toggle the bottom sidebar window'))
1568 self.bsbAct.setWhatsThis(self.trUtf8( 1569 self.bsbAct.setWhatsThis(self.trUtf8(
1569 """<b>Toggle the bottom sidebar window</b>""" 1570 """<b>Toggle the bottom sidebar window</b>"""
1570 """<p>If the bottom sidebar window is hidden then display it.""" 1571 """<p>If the bottom sidebar window is hidden then display it."""
1639 self.actions.append(self.numbersViewerActivateAct) 1640 self.actions.append(self.numbersViewerActivateAct)
1640 self.addAction(self.numbersViewerActivateAct) 1641 self.addAction(self.numbersViewerActivateAct)
1641 1642
1642 self.whatsThisAct = E5Action(self.trUtf8('What\'s This?'), 1643 self.whatsThisAct = E5Action(self.trUtf8('What\'s This?'),
1643 UI.PixmapCache.getIcon("whatsThis.png"), 1644 UI.PixmapCache.getIcon("whatsThis.png"),
1644 self.trUtf8('&What\'s This?'), 1645 self.trUtf8('&What\'s This?'),
1645 QKeySequence(self.trUtf8("Shift+F1")), 1646 QKeySequence(self.trUtf8("Shift+F1")),
1646 0, self, 'whatsThis') 1647 0, self, 'whatsThis')
1647 self.whatsThisAct.setStatusTip(self.trUtf8('Context sensitive help')) 1648 self.whatsThisAct.setStatusTip(self.trUtf8('Context sensitive help'))
1648 self.whatsThisAct.setWhatsThis(self.trUtf8( 1649 self.whatsThisAct.setWhatsThis(self.trUtf8(
1649 """<b>Display context sensitive help</b>""" 1650 """<b>Display context sensitive help</b>"""
1656 self.whatsThisAct.triggered[()].connect(self.__whatsThis) 1657 self.whatsThisAct.triggered[()].connect(self.__whatsThis)
1657 self.actions.append(self.whatsThisAct) 1658 self.actions.append(self.whatsThisAct)
1658 1659
1659 self.helpviewerAct = E5Action(self.trUtf8('Helpviewer'), 1660 self.helpviewerAct = E5Action(self.trUtf8('Helpviewer'),
1660 UI.PixmapCache.getIcon("help.png"), 1661 UI.PixmapCache.getIcon("help.png"),
1661 self.trUtf8('&Helpviewer...'), 1662 self.trUtf8('&Helpviewer...'),
1662 QKeySequence(self.trUtf8("F1")), 1663 QKeySequence(self.trUtf8("F1")),
1663 0, self, 'helpviewer') 1664 0, self, 'helpviewer')
1664 self.helpviewerAct.setStatusTip(self.trUtf8('Open the helpviewer window')) 1665 self.helpviewerAct.setStatusTip(self.trUtf8('Open the helpviewer window'))
1665 self.helpviewerAct.setWhatsThis(self.trUtf8( 1666 self.helpviewerAct.setWhatsThis(self.trUtf8(
1666 """<b>Helpviewer</b>""" 1667 """<b>Helpviewer</b>"""
1698 )) 1699 ))
1699 self.checkUpdateAct.triggered[()].connect(self.performVersionCheck) 1700 self.checkUpdateAct.triggered[()].connect(self.performVersionCheck)
1700 self.actions.append(self.checkUpdateAct) 1701 self.actions.append(self.checkUpdateAct)
1701 1702
1702 self.showVersionsAct = E5Action(self.trUtf8('Show downloadable versions'), 1703 self.showVersionsAct = E5Action(self.trUtf8('Show downloadable versions'),
1703 self.trUtf8('Show &downloadable versions...'), 1704 self.trUtf8('Show &downloadable versions...'),
1704 0, 0, self, 'show_downloadable_versions') 1705 0, 0, self, 'show_downloadable_versions')
1705 self.showVersionsAct.setStatusTip( 1706 self.showVersionsAct.setStatusTip(
1706 self.trUtf8('Show the versions available for download')) 1707 self.trUtf8('Show the versions available for download'))
1707 self.showVersionsAct.setWhatsThis(self.trUtf8( 1708 self.showVersionsAct.setWhatsThis(self.trUtf8(
1708 """<b>Show downloadable versions...</b>""" 1709 """<b>Show downloadable versions...</b>"""
1732 self.requestFeatureAct.triggered[()].connect(self.__requestFeature) 1733 self.requestFeatureAct.triggered[()].connect(self.__requestFeature)
1733 self.actions.append(self.requestFeatureAct) 1734 self.actions.append(self.requestFeatureAct)
1734 1735
1735 self.utActGrp = createActionGroup(self) 1736 self.utActGrp = createActionGroup(self)
1736 1737
1737 self.utDialogAct = E5Action(self.trUtf8('Unittest'), 1738 self.utDialogAct = E5Action(self.trUtf8('Unittest'),
1738 UI.PixmapCache.getIcon("unittest.png"), 1739 UI.PixmapCache.getIcon("unittest.png"),
1739 self.trUtf8('&Unittest...'), 1740 self.trUtf8('&Unittest...'),
1740 0, 0, self.utActGrp, 'unittest') 1741 0, 0, self.utActGrp, 'unittest')
1741 self.utDialogAct.setStatusTip(self.trUtf8('Start unittest dialog')) 1742 self.utDialogAct.setStatusTip(self.trUtf8('Start unittest dialog'))
1742 self.utDialogAct.setWhatsThis(self.trUtf8( 1743 self.utDialogAct.setWhatsThis(self.trUtf8(
1789 # check for Qt4 designer and linguist 1790 # check for Qt4 designer and linguist
1790 designerExe = Utilities.isWindowsPlatform() and \ 1791 designerExe = Utilities.isWindowsPlatform() and \
1791 "{0}.exe".format(Utilities.generateQtToolName("designer")) or \ 1792 "{0}.exe".format(Utilities.generateQtToolName("designer")) or \
1792 Utilities.generateQtToolName("designer") 1793 Utilities.generateQtToolName("designer")
1793 if Utilities.isinpath(designerExe): 1794 if Utilities.isinpath(designerExe):
1794 self.designer4Act = E5Action(self.trUtf8('Qt-Designer 4'), 1795 self.designer4Act = E5Action(self.trUtf8('Qt-Designer 4'),
1795 UI.PixmapCache.getIcon("designer4.png"), 1796 UI.PixmapCache.getIcon("designer4.png"),
1796 self.trUtf8('&Designer 4...'), 0, 0, self, 'qt_designer4') 1797 self.trUtf8('&Designer 4...'), 0, 0, self, 'qt_designer4')
1797 self.designer4Act.setStatusTip(self.trUtf8('Start Qt-Designer 4')) 1798 self.designer4Act.setStatusTip(self.trUtf8('Start Qt-Designer 4'))
1798 self.designer4Act.setWhatsThis(self.trUtf8( 1799 self.designer4Act.setWhatsThis(self.trUtf8(
1799 """<b>Qt-Designer 4</b>""" 1800 """<b>Qt-Designer 4</b>"""
1806 1807
1807 linguistExe = Utilities.isWindowsPlatform() and \ 1808 linguistExe = Utilities.isWindowsPlatform() and \
1808 "{0}.exe".format(Utilities.generateQtToolName("linguist")) or \ 1809 "{0}.exe".format(Utilities.generateQtToolName("linguist")) or \
1809 Utilities.generateQtToolName("linguist") 1810 Utilities.generateQtToolName("linguist")
1810 if Utilities.isinpath(linguistExe): 1811 if Utilities.isinpath(linguistExe):
1811 self.linguist4Act = E5Action(self.trUtf8('Qt-Linguist 4'), 1812 self.linguist4Act = E5Action(self.trUtf8('Qt-Linguist 4'),
1812 UI.PixmapCache.getIcon("linguist4.png"), 1813 UI.PixmapCache.getIcon("linguist4.png"),
1813 self.trUtf8('&Linguist 4...'), 0, 0, self, 'qt_linguist4') 1814 self.trUtf8('&Linguist 4...'), 0, 0, self, 'qt_linguist4')
1814 self.linguist4Act.setStatusTip(self.trUtf8('Start Qt-Linguist 4')) 1815 self.linguist4Act.setStatusTip(self.trUtf8('Start Qt-Linguist 4'))
1815 self.linguist4Act.setWhatsThis(self.trUtf8( 1816 self.linguist4Act.setWhatsThis(self.trUtf8(
1816 """<b>Qt-Linguist 4</b>""" 1817 """<b>Qt-Linguist 4</b>"""
1819 self.linguist4Act.triggered[()].connect(self.__linguist4) 1820 self.linguist4Act.triggered[()].connect(self.__linguist4)
1820 self.actions.append(self.linguist4Act) 1821 self.actions.append(self.linguist4Act)
1821 else: 1822 else:
1822 self.linguist4Act = None 1823 self.linguist4Act = None
1823 1824
1824 self.uipreviewerAct = E5Action(self.trUtf8('UI Previewer'), 1825 self.uipreviewerAct = E5Action(self.trUtf8('UI Previewer'),
1825 UI.PixmapCache.getIcon("uiPreviewer.png"), 1826 UI.PixmapCache.getIcon("uiPreviewer.png"),
1826 self.trUtf8('&UI Previewer...'), 0, 0, self, 'ui_previewer') 1827 self.trUtf8('&UI Previewer...'), 0, 0, self, 'ui_previewer')
1827 self.uipreviewerAct.setStatusTip(self.trUtf8('Start the UI Previewer')) 1828 self.uipreviewerAct.setStatusTip(self.trUtf8('Start the UI Previewer'))
1828 self.uipreviewerAct.setWhatsThis(self.trUtf8( 1829 self.uipreviewerAct.setWhatsThis(self.trUtf8(
1829 """<b>UI Previewer</b>""" 1830 """<b>UI Previewer</b>"""
1830 """<p>Start the UI Previewer.</p>""" 1831 """<p>Start the UI Previewer.</p>"""
1831 )) 1832 ))
1832 self.uipreviewerAct.triggered[()].connect(self.__UIPreviewer) 1833 self.uipreviewerAct.triggered[()].connect(self.__UIPreviewer)
1833 self.actions.append(self.uipreviewerAct) 1834 self.actions.append(self.uipreviewerAct)
1834 1835
1835 self.trpreviewerAct = E5Action(self.trUtf8('Translations Previewer'), 1836 self.trpreviewerAct = E5Action(self.trUtf8('Translations Previewer'),
1836 UI.PixmapCache.getIcon("trPreviewer.png"), 1837 UI.PixmapCache.getIcon("trPreviewer.png"),
1837 self.trUtf8('&Translations Previewer...'), 0, 0, self, 'tr_previewer') 1838 self.trUtf8('&Translations Previewer...'), 0, 0, self, 'tr_previewer')
1838 self.trpreviewerAct.setStatusTip(self.trUtf8('Start the Translations Previewer')) 1839 self.trpreviewerAct.setStatusTip(self.trUtf8('Start the Translations Previewer'))
1839 self.trpreviewerAct.setWhatsThis(self.trUtf8( 1840 self.trpreviewerAct.setWhatsThis(self.trUtf8(
1840 """<b>Translations Previewer</b>""" 1841 """<b>Translations Previewer</b>"""
1854 self.diffAct.triggered[()].connect(self.__compareFiles) 1855 self.diffAct.triggered[()].connect(self.__compareFiles)
1855 self.actions.append(self.diffAct) 1856 self.actions.append(self.diffAct)
1856 1857
1857 self.compareAct = E5Action(self.trUtf8('Compare Files side by side'), 1858 self.compareAct = E5Action(self.trUtf8('Compare Files side by side'),
1858 UI.PixmapCache.getIcon("compareFiles.png"), 1859 UI.PixmapCache.getIcon("compareFiles.png"),
1859 self.trUtf8('Compare Files &side by side...'), 1860 self.trUtf8('Compare Files &side by side...'),
1860 0, 0, self, 'compare_files') 1861 0, 0, self, 'compare_files')
1861 self.compareAct.setStatusTip(self.trUtf8('Compare two files')) 1862 self.compareAct.setStatusTip(self.trUtf8('Compare two files'))
1862 self.compareAct.setWhatsThis(self.trUtf8( 1863 self.compareAct.setWhatsThis(self.trUtf8(
1863 """<b>Compare Files side by side</b>""" 1864 """<b>Compare Files side by side</b>"""
1864 """<p>Open a dialog to compare two files and show the result""" 1865 """<p>Open a dialog to compare two files and show the result"""
1867 self.compareAct.triggered[()].connect(self.__compareFilesSbs) 1868 self.compareAct.triggered[()].connect(self.__compareFilesSbs)
1868 self.actions.append(self.compareAct) 1869 self.actions.append(self.compareAct)
1869 1870
1870 self.sqlBrowserAct = E5Action(self.trUtf8('SQL Browser'), 1871 self.sqlBrowserAct = E5Action(self.trUtf8('SQL Browser'),
1871 UI.PixmapCache.getIcon("sqlBrowser.png"), 1872 UI.PixmapCache.getIcon("sqlBrowser.png"),
1872 self.trUtf8('SQL &Browser...'), 1873 self.trUtf8('SQL &Browser...'),
1873 0, 0, self, 'sql_browser') 1874 0, 0, self, 'sql_browser')
1874 self.sqlBrowserAct.setStatusTip(self.trUtf8('Browse a SQL database')) 1875 self.sqlBrowserAct.setStatusTip(self.trUtf8('Browse a SQL database'))
1875 self.sqlBrowserAct.setWhatsThis(self.trUtf8( 1876 self.sqlBrowserAct.setWhatsThis(self.trUtf8(
1876 """<b>SQL Browser</b>""" 1877 """<b>SQL Browser</b>"""
1877 """<p>Browse a SQL database.</p>""" 1878 """<p>Browse a SQL database.</p>"""
1879 self.sqlBrowserAct.triggered[()].connect(self.__sqlBrowser) 1880 self.sqlBrowserAct.triggered[()].connect(self.__sqlBrowser)
1880 self.actions.append(self.sqlBrowserAct) 1881 self.actions.append(self.sqlBrowserAct)
1881 1882
1882 self.miniEditorAct = E5Action(self.trUtf8('Mini Editor'), 1883 self.miniEditorAct = E5Action(self.trUtf8('Mini Editor'),
1883 UI.PixmapCache.getIcon("editor.png"), 1884 UI.PixmapCache.getIcon("editor.png"),
1884 self.trUtf8('Mini &Editor...'), 1885 self.trUtf8('Mini &Editor...'),
1885 0, 0, self, 'mini_editor') 1886 0, 0, self, 'mini_editor')
1886 self.miniEditorAct.setStatusTip(self.trUtf8('Mini Editor')) 1887 self.miniEditorAct.setStatusTip(self.trUtf8('Mini Editor'))
1887 self.miniEditorAct.setWhatsThis(self.trUtf8( 1888 self.miniEditorAct.setWhatsThis(self.trUtf8(
1888 """<b>Mini Editor</b>""" 1889 """<b>Mini Editor</b>"""
1889 """<p>Open a dialog with a simplified editor.</p>""" 1890 """<p>Open a dialog with a simplified editor.</p>"""
1891 self.miniEditorAct.triggered[()].connect(self.__openMiniEditor) 1892 self.miniEditorAct.triggered[()].connect(self.__openMiniEditor)
1892 self.actions.append(self.miniEditorAct) 1893 self.actions.append(self.miniEditorAct)
1893 1894
1894 self.webBrowserAct = E5Action(self.trUtf8('Web Browser'), 1895 self.webBrowserAct = E5Action(self.trUtf8('Web Browser'),
1895 UI.PixmapCache.getIcon("ericWeb.png"), 1896 UI.PixmapCache.getIcon("ericWeb.png"),
1896 self.trUtf8('&Web Browser...'), 1897 self.trUtf8('&Web Browser...'),
1897 0, 0, self, 'web_browser') 1898 0, 0, self, 'web_browser')
1898 self.webBrowserAct.setStatusTip(self.trUtf8('Start the eric5 Web Browser')) 1899 self.webBrowserAct.setStatusTip(self.trUtf8('Start the eric5 Web Browser'))
1899 self.webBrowserAct.setWhatsThis(self.trUtf8( 1900 self.webBrowserAct.setWhatsThis(self.trUtf8(
1900 """<b>Web Browser</b>""" 1901 """<b>Web Browser</b>"""
1901 """<p>Browse the Internet with the eric5 Web Browser.</p>""" 1902 """<p>Browse the Internet with the eric5 Web Browser.</p>"""
1903 self.webBrowserAct.triggered[()].connect(self.__startWebBrowser) 1904 self.webBrowserAct.triggered[()].connect(self.__startWebBrowser)
1904 self.actions.append(self.webBrowserAct) 1905 self.actions.append(self.webBrowserAct)
1905 1906
1906 self.iconEditorAct = E5Action(self.trUtf8('Icon Editor'), 1907 self.iconEditorAct = E5Action(self.trUtf8('Icon Editor'),
1907 UI.PixmapCache.getIcon("iconEditor.png"), 1908 UI.PixmapCache.getIcon("iconEditor.png"),
1908 self.trUtf8('&Icon Editor...'), 1909 self.trUtf8('&Icon Editor...'),
1909 0, 0, self, 'icon_editor') 1910 0, 0, self, 'icon_editor')
1910 self.iconEditorAct.setStatusTip(self.trUtf8('Start the eric5 Icon Editor')) 1911 self.iconEditorAct.setStatusTip(self.trUtf8('Start the eric5 Icon Editor'))
1911 self.iconEditorAct.setWhatsThis(self.trUtf8( 1912 self.iconEditorAct.setWhatsThis(self.trUtf8(
1912 """<b>Icon Editor</b>""" 1913 """<b>Icon Editor</b>"""
1913 """<p>Starts the eric5 Icon Editor for editing simple icons.</p>""" 1914 """<p>Starts the eric5 Icon Editor for editing simple icons.</p>"""
2036 2037
2037 self.viewmanagerActivateAct = E5Action(self.trUtf8('Activate current editor'), 2038 self.viewmanagerActivateAct = E5Action(self.trUtf8('Activate current editor'),
2038 self.trUtf8('Activate current editor'), 2039 self.trUtf8('Activate current editor'),
2039 QKeySequence(self.trUtf8("Alt+Shift+E")), 2040 QKeySequence(self.trUtf8("Alt+Shift+E")),
2040 0, self, 2041 0, self,
2041 'viewmanager_activate',1) 2042 'viewmanager_activate', 1)
2042 self.viewmanagerActivateAct.triggered[()].connect(self.__activateViewmanager) 2043 self.viewmanagerActivateAct.triggered[()].connect(self.__activateViewmanager)
2043 self.actions.append(self.viewmanagerActivateAct) 2044 self.actions.append(self.viewmanagerActivateAct)
2044 self.addAction(self.viewmanagerActivateAct) 2045 self.addAction(self.viewmanagerActivateAct)
2045 2046
2046 self.nextTabAct = E5Action(self.trUtf8('Show next'), 2047 self.nextTabAct = E5Action(self.trUtf8('Show next'),
2047 self.trUtf8('Show next'), 2048 self.trUtf8('Show next'),
2048 QKeySequence(self.trUtf8('Ctrl+Alt+Tab')), 0, 2049 QKeySequence(self.trUtf8('Ctrl+Alt+Tab')), 0,
2049 self, 'view_next_tab') 2050 self, 'view_next_tab')
2050 self.nextTabAct.triggered[()].connect(self.__showNext) 2051 self.nextTabAct.triggered[()].connect(self.__showNext)
2051 self.actions.append(self.nextTabAct) 2052 self.actions.append(self.nextTabAct)
2052 self.addAction(self.nextTabAct) 2053 self.addAction(self.nextTabAct)
2053 2054
2054 self.prevTabAct = E5Action(self.trUtf8('Show previous'), 2055 self.prevTabAct = E5Action(self.trUtf8('Show previous'),
2055 self.trUtf8('Show previous'), 2056 self.trUtf8('Show previous'),
2056 QKeySequence(self.trUtf8('Shift+Ctrl+Alt+Tab')), 0, 2057 QKeySequence(self.trUtf8('Shift+Ctrl+Alt+Tab')), 0,
2057 self, 'view_previous_tab') 2058 self, 'view_previous_tab')
2058 self.prevTabAct.triggered[()].connect(self.__showPrevious) 2059 self.prevTabAct.triggered[()].connect(self.__showPrevious)
2059 self.actions.append(self.prevTabAct) 2060 self.actions.append(self.prevTabAct)
2060 self.addAction(self.prevTabAct) 2061 self.addAction(self.prevTabAct)
2061 2062
2062 self.switchTabAct = E5Action(self.trUtf8('Switch between tabs'), 2063 self.switchTabAct = E5Action(self.trUtf8('Switch between tabs'),
2063 self.trUtf8('Switch between tabs'), 2064 self.trUtf8('Switch between tabs'),
2064 QKeySequence(self.trUtf8('Ctrl+1')), 0, 2065 QKeySequence(self.trUtf8('Ctrl+1')), 0,
2065 self, 'switch_tabs') 2066 self, 'switch_tabs')
2066 self.switchTabAct.triggered[()].connect(self.__switchTab) 2067 self.switchTabAct.triggered[()].connect(self.__switchTab)
2067 self.actions.append(self.switchTabAct) 2068 self.actions.append(self.switchTabAct)
2068 self.addAction(self.switchTabAct) 2069 self.addAction(self.switchTabAct)
2313 QMenu(self.trUtf8("&Toolbars"), self.__menus["window"]) 2314 QMenu(self.trUtf8("&Toolbars"), self.__menus["window"])
2314 self.__menus["toolbars"].setTearOffEnabled(True) 2315 self.__menus["toolbars"].setTearOffEnabled(True)
2315 self.__menus["toolbars"].aboutToShow.connect(self.__showToolbarsMenu) 2316 self.__menus["toolbars"].aboutToShow.connect(self.__showToolbarsMenu)
2316 self.__menus["toolbars"].triggered.connect(self.__TBMenuTriggered) 2317 self.__menus["toolbars"].triggered.connect(self.__TBMenuTriggered)
2317 2318
2318 self.__showWindowMenu() # to initialize these actions 2319 self.__showWindowMenu() # to initialize these actions
2319 2320
2320 self.__menus["bookmarks"] = self.viewmanager.initBookmarkMenu() 2321 self.__menus["bookmarks"] = self.viewmanager.initBookmarkMenu()
2321 mb.addMenu(self.__menus["bookmarks"]) 2322 mb.addMenu(self.__menus["bookmarks"])
2322 self.__menus["bookmarks"].setTearOffEnabled(True) 2323 self.__menus["bookmarks"].setTearOffEnabled(True)
2323 2324
2589 self.sbPos.setWhatsThis(self.trUtf8( 2590 self.sbPos.setWhatsThis(self.trUtf8(
2590 """<p>This part of the status bar displays the cursor position of""" 2591 """<p>This part of the status bar displays the cursor position of"""
2591 """ the current editor.</p>""" 2592 """ the current editor.</p>"""
2592 )) 2593 ))
2593 2594
2594 self.viewmanager.setSbInfo(self.sbFile, self.sbLine, self.sbPos, 2595 self.viewmanager.setSbInfo(self.sbFile, self.sbLine, self.sbPos,
2595 self.sbWritable, self.sbEncoding, self.sbLanguage, 2596 self.sbWritable, self.sbEncoding, self.sbLanguage,
2596 self.sbEol) 2597 self.sbEol)
2597 2598
2598 self.sbVcsMonitorLed = StatusMonitorLed(self.project, self.__statusBar) 2599 self.sbVcsMonitorLed = StatusMonitorLed(self.project, self.__statusBar)
2599 self.__statusBar.addPermanentWidget(self.sbVcsMonitorLed) 2600 self.__statusBar.addPermanentWidget(self.sbVcsMonitorLed)
2600 2601
2605 self.toolGroupActions = {} 2606 self.toolGroupActions = {}
2606 for toolGroup in self.toolGroups: 2607 for toolGroup in self.toolGroups:
2607 category = self.trUtf8("External Tools/{0}").format(toolGroup[0]) 2608 category = self.trUtf8("External Tools/{0}").format(toolGroup[0])
2608 for tool in toolGroup[1]: 2609 for tool in toolGroup[1]:
2609 if tool['menutext'] != '--': 2610 if tool['menutext'] != '--':
2610 act = QAction(UI.PixmapCache.getIcon(tool['icon']), tool['menutext'], 2611 act = QAction(UI.PixmapCache.getIcon(tool['icon']), tool['menutext'],
2611 self) 2612 self)
2612 act.setObjectName("{0}@@{1}".format(toolGroup[0], 2613 act.setObjectName("{0}@@{1}".format(toolGroup[0],
2613 tool['menutext'])) 2614 tool['menutext']))
2614 act.triggered[()].connect(self.__toolActionTriggered) 2615 act.triggered[()].connect(self.__toolActionTriggered)
2615 self.toolGroupActions[act.objectName()] = act 2616 self.toolGroupActions[act.objectName()] = act
2616 2617
2617 self.toolbarManager.addAction(act, category) 2618 self.toolbarManager.addAction(act, category)
2646 category = self.trUtf8("External Tools/{0}").format(toolGroup[0]) 2647 category = self.trUtf8("External Tools/{0}").format(toolGroup[0])
2647 for tool in toolGroup[1]: 2648 for tool in toolGroup[1]:
2648 if tool['menutext'] != '--': 2649 if tool['menutext'] != '--':
2649 key = "{0}@@{1}".format(toolGroup[0], tool['menutext']) 2650 key = "{0}@@{1}".format(toolGroup[0], tool['menutext'])
2650 if key not in groupActionKeys: 2651 if key not in groupActionKeys:
2651 act = QAction(UI.PixmapCache.getIcon(tool['icon']), tool['menutext'], 2652 act = QAction(UI.PixmapCache.getIcon(tool['icon']), tool['menutext'],
2652 self) 2653 self)
2653 act.setObjectName(key) 2654 act.setObjectName(key)
2654 act.triggered[()].connect(self.__toolActionTriggered) 2655 act.triggered[()].connect(self.__toolActionTriggered)
2655 self.toolGroupActions[key] = act 2656 self.toolGroupActions[key] = act
2656 2657
2764 """ 2765 """
2765 Private slot to handle the Feature Request dialog. 2766 Private slot to handle the Feature Request dialog.
2766 """ 2767 """
2767 self.__showEmailDialog("feature") 2768 self.__showEmailDialog("feature")
2768 2769
2769 def __showEmailDialog(self, mode, attachFile = None, deleteAttachFile = False): 2770 def __showEmailDialog(self, mode, attachFile=None, deleteAttachFile=False):
2770 """ 2771 """
2771 Private slot to show the email dialog in a given mode. 2772 Private slot to show the email dialog in a given mode.
2772 2773
2773 @param mode mode of the email dialog (string, "bug" or "feature") 2774 @param mode mode of the email dialog (string, "bug" or "feature")
2774 @param attachFile name of a file to attach to the email (string) 2775 @param attachFile name of a file to attach to the email (string)
2780 else: 2781 else:
2781 if Preferences.getUser("Email") == "" or \ 2782 if Preferences.getUser("Email") == "" or \
2782 Preferences.getUser("MailServer") == "": 2783 Preferences.getUser("MailServer") == "":
2783 E5MessageBox.critical(self, 2784 E5MessageBox.critical(self,
2784 self.trUtf8("Report Bug"), 2785 self.trUtf8("Report Bug"),
2785 self.trUtf8("""Email address or mail server address is empty.""" 2786 self.trUtf8("""Email address or mail server address is empty."""
2786 """ Please configure your Email settings in the""" 2787 """ Please configure your Email settings in the"""
2787 """ Preferences Dialog.""")) 2788 """ Preferences Dialog."""))
2788 self.showPreferences("emailPage") 2789 self.showPreferences("emailPage")
2789 return 2790 return
2790 2791
2791 self.dlg = EmailDialog(mode = mode) 2792 self.dlg = EmailDialog(mode=mode)
2792 if attachFile is not None: 2793 if attachFile is not None:
2793 self.dlg.attachFile(attachFile, deleteAttachFile) 2794 self.dlg.attachFile(attachFile, deleteAttachFile)
2794 self.dlg.show() 2795 self.dlg.show()
2795 2796
2796 def __showSystemEmailClient(self, mode, attachFile = None, deleteAttachFile = False): 2797 def __showSystemEmailClient(self, mode, attachFile=None, deleteAttachFile=False):
2797 """ 2798 """
2798 Private slot to show the system email dialog. 2799 Private slot to show the system email dialog.
2799 2800
2800 @param mode mode of the email dialog (string, "bug" or "feature") 2801 @param mode mode of the email dialog (string, "bug" or "feature")
2801 @param attachFile name of a file to put into the body of the 2802 @param attachFile name of a file to put into the body of the
2802 email (string) 2803 email (string)
2803 @param deleteAttachFile flag indicating to delete the file after 2804 @param deleteAttachFile flag indicating to delete the file after
2804 it has been read (boolean) 2805 it has been read (boolean)
2805 """ 2806 """
2806 if mode == "feature": 2807 if mode == "feature":
2807 address = FeatureAddress 2808 address = FeatureAddress
2808 else: 2809 else:
2809 address = BugAddress 2810 address = BugAddress
2810 subject = "[eric5] " 2811 subject = "[eric5] "
2811 if attachFile is not None: 2812 if attachFile is not None:
2812 f = open(attachFile, "r", encoding = "utf-8") 2813 f = open(attachFile, "r", encoding="utf-8")
2813 body = f.read() 2814 body = f.read()
2814 f.close() 2815 f.close()
2815 if deleteAttachFile: 2816 if deleteAttachFile:
2816 os.remove(attachFile) 2817 os.remove(attachFile)
2817 else: 2818 else:
2818 body = "\r\n----\r\n{0}----\r\n{1}----\r\n{2}".format( 2819 body = "\r\n----\r\n{0}----\r\n{1}----\r\n{2}".format(
2819 Utilities.generateVersionInfo("\r\n"), 2820 Utilities.generateVersionInfo("\r\n"),
2820 Utilities.generatePluginsVersionInfo("\r\n"), 2821 Utilities.generatePluginsVersionInfo("\r\n"),
2821 Utilities.generateDistroInfo("\r\n")) 2822 Utilities.generateDistroInfo("\r\n"))
2822 2823
2823 url = QUrl("mailto:{0}".format(address)) 2824 url = QUrl("mailto:{0}".format(address))
2824 url.addQueryItem("subject", subject) 2825 url.addQueryItem("subject", subject)
2825 url.addQueryItem("body", body) 2826 url.addQueryItem("body", body)
2831 what to do with it. 2832 what to do with it.
2832 """ 2833 """
2833 if Preferences.getUI("CheckErrorLog"): 2834 if Preferences.getUI("CheckErrorLog"):
2834 logFile = os.path.join(Utilities.getConfigDir(), "eric5_error.log") 2835 logFile = os.path.join(Utilities.getConfigDir(), "eric5_error.log")
2835 if os.path.exists(logFile): 2836 if os.path.exists(logFile):
2836 dlg = E5MessageBox.E5MessageBox(E5MessageBox.Question, 2837 dlg = E5MessageBox.E5MessageBox(E5MessageBox.Question,
2837 self.trUtf8("Error log found"), 2838 self.trUtf8("Error log found"),
2838 self.trUtf8("An error log file was found. " 2839 self.trUtf8("An error log file was found. "
2839 "What should be done with it?"), 2840 "What should be done with it?"),
2840 modal = True, parent = self) 2841 modal=True, parent=self)
2841 try: 2842 try:
2842 f = open(logFile, "r", encoding = "utf-8") 2843 f = open(logFile, "r", encoding="utf-8")
2843 txt = f.read() 2844 txt = f.read()
2844 f.close() 2845 f.close()
2845 dlg.setDetailedText(txt) 2846 dlg.setDetailedText(txt)
2846 except IOError: 2847 except IOError:
2847 pass 2848 pass
2848 emailButton = \ 2849 emailButton = \
2849 dlg.addButton(self.trUtf8("Send Bug Email"), 2850 dlg.addButton(self.trUtf8("Send Bug Email"),
2850 E5MessageBox.AcceptRole) 2851 E5MessageBox.AcceptRole)
2851 deleteButton = \ 2852 deleteButton = \
2852 dlg.addButton(self.trUtf8("Ignore and Delete"), 2853 dlg.addButton(self.trUtf8("Ignore and Delete"),
2853 E5MessageBox.AcceptRole) 2854 E5MessageBox.AcceptRole)
2854 keepButton = \ 2855 keepButton = \
2855 dlg.addButton(self.trUtf8("Ignore but Keep"), 2856 dlg.addButton(self.trUtf8("Ignore but Keep"),
2856 E5MessageBox.AcceptRole) 2857 E5MessageBox.AcceptRole)
2857 dlg.setDefaultButton(emailButton) 2858 dlg.setDefaultButton(emailButton)
2858 dlg.setEscapeButton(keepButton) 2859 dlg.setEscapeButton(keepButton)
2859 dlg.exec_() 2860 dlg.exec_()
2860 btn = dlg.clickedButton() 2861 btn = dlg.clickedButton()
2861 if btn == emailButton: 2862 if btn == emailButton:
2862 # start email dialog 2863 # start email dialog
2863 self.__showEmailDialog("bug", 2864 self.__showEmailDialog("bug",
2864 attachFile = logFile, deleteAttachFile = True) 2865 attachFile=logFile, deleteAttachFile=True)
2865 elif btn == deleteButton: 2866 elif btn == deleteButton:
2866 # delete the error log 2867 # delete the error log
2867 os.remove(logFile) 2868 os.remove(logFile)
2868 elif btn == keepButton: 2869 elif btn == keepButton:
2869 # keep the error log 2870 # keep the error log
2887 2888
2888 def __openMiniEditor(self): 2889 def __openMiniEditor(self):
2889 """ 2890 """
2890 Private slot to show a mini editor window. 2891 Private slot to show a mini editor window.
2891 """ 2892 """
2892 editor = MiniEditor(parent = self) 2893 editor = MiniEditor(parent=self)
2893 editor.show() 2894 editor.show()
2894 2895
2895 def addE5Actions(self, actions, type): 2896 def addE5Actions(self, actions, type):
2896 """ 2897 """
2897 Public method to add actions to the list of actions. 2898 Public method to add actions to the list of actions.
2903 if type == 'ui': 2904 if type == 'ui':
2904 self.actions.extend(actions) 2905 self.actions.extend(actions)
2905 elif type == 'wizards': 2906 elif type == 'wizards':
2906 self.wizardsActions.extend(actions) 2907 self.wizardsActions.extend(actions)
2907 2908
2908 def removeE5Actions(self, actions, type = 'ui'): 2909 def removeE5Actions(self, actions, type='ui'):
2909 """ 2910 """
2910 Public method to remove actions from the list of actions. 2911 Public method to remove actions from the list of actions.
2911 2912
2912 @param type string denoting the action set to get. 2913 @param type string denoting the action set to get.
2913 It must be one of "ui" or "wizards". 2914 It must be one of "ui" or "wizards".
2940 def getMenuAction(self, menuName, actionName): 2941 def getMenuAction(self, menuName, actionName):
2941 """ 2942 """
2942 Public method to get a reference to an action of a menu. 2943 Public method to get a reference to an action of a menu.
2943 2944
2944 @param menuName name of the menu to search in (string) 2945 @param menuName name of the menu to search in (string)
2945 @param actionName object name of the action to search for 2946 @param actionName object name of the action to search for
2946 (string) 2947 (string)
2947 """ 2948 """
2948 try: 2949 try:
2949 menu = self.__menus[menuName] 2950 menu = self.__menus[menuName]
2950 except KeyError: 2951 except KeyError:
3051 Private method to restart the application. 3052 Private method to restart the application.
3052 """ 3053 """
3053 res = E5MessageBox.yesNo(self, 3054 res = E5MessageBox.yesNo(self,
3054 self.trUtf8("Restart application"), 3055 self.trUtf8("Restart application"),
3055 self.trUtf8("""The application needs to be restarted. Do it now?"""), 3056 self.trUtf8("""The application needs to be restarted. Do it now?"""),
3056 yesDefault = True) 3057 yesDefault=True)
3057 3058
3058 if res and self.__shutdown(): 3059 if res and self.__shutdown():
3059 e5App().closeAllWindows() 3060 e5App().closeAllWindows()
3060 program = sys.executable 3061 program = sys.executable
3061 eric5 = os.path.join(getConfig("ericDir"), "eric5.py") 3062 eric5 = os.path.join(getConfig("ericDir"), "eric5.py")
3073 self.__menus["tools"].addMenu(self.toolGroupsMenu) 3074 self.__menus["tools"].addMenu(self.toolGroupsMenu)
3074 act = self.__menus["tools"].addAction(self.trUtf8("Configure Tool Groups ..."), 3075 act = self.__menus["tools"].addAction(self.trUtf8("Configure Tool Groups ..."),
3075 self.__toolGroupsConfiguration) 3076 self.__toolGroupsConfiguration)
3076 act.setData(-1) 3077 act.setData(-1)
3077 act = self.__menus["tools"].addAction( 3078 act = self.__menus["tools"].addAction(
3078 self.trUtf8("Configure current Tool Group ..."), 3079 self.trUtf8("Configure current Tool Group ..."),
3079 self.__toolsConfiguration) 3080 self.__toolsConfiguration)
3080 act.setData(-2) 3081 act.setData(-2)
3081 self.__menus["tools"].addSeparator() 3082 self.__menus["tools"].addSeparator()
3082 3083
3083 if self.currentToolGroup == -1: 3084 if self.currentToolGroup == -1:
3353 elif self.layout == "Sidebars": 3354 elif self.layout == "Sidebars":
3354 self.profiles[self.currentProfile][5][0] = self.leftSidebar.isVisible() 3355 self.profiles[self.currentProfile][5][0] = self.leftSidebar.isVisible()
3355 self.profiles[self.currentProfile][5][1] = self.bottomSidebar.isVisible() 3356 self.profiles[self.currentProfile][5][1] = self.bottomSidebar.isVisible()
3356 Preferences.setUI("ViewProfiles", self.profiles) 3357 Preferences.setUI("ViewProfiles", self.profiles)
3357 3358
3358 def __activateViewProfile(self, name, save = True): 3359 def __activateViewProfile(self, name, save=True):
3359 """ 3360 """
3360 Private slot to activate a view profile. 3361 Private slot to activate a view profile.
3361 3362
3362 @param name name of the profile to be activated (string) 3363 @param name name of the profile to be activated (string)
3363 @param save flag indicating that the current profile should 3364 @param save flag indicating that the current profile should
3423 if self.__menus["toolbars"].isTearOffMenuVisible(): 3424 if self.__menus["toolbars"].isTearOffMenuVisible():
3424 self.__showToolbarsMenu() 3425 self.__showToolbarsMenu()
3425 if self.__menus["window"].isTearOffMenuVisible(): 3426 if self.__menus["window"].isTearOffMenuVisible():
3426 self.__showWindowMenu() 3427 self.__showWindowMenu()
3427 3428
3428 def __setEditProfile(self, save = True): 3429 def __setEditProfile(self, save=True):
3429 """ 3430 """
3430 Private slot to activate the edit view profile. 3431 Private slot to activate the edit view profile.
3431 3432
3432 @param save flag indicating that the current profile should 3433 @param save flag indicating that the current profile should
3433 be saved (boolean) 3434 be saved (boolean)
3445 self.hToolbox.setCurrentWidget(self.shell) 3446 self.hToolbox.setCurrentWidget(self.shell)
3446 elif self.layout == "Sidebars": 3447 elif self.layout == "Sidebars":
3447 if not self.embeddedShell: 3448 if not self.embeddedShell:
3448 self.bottomSidebar.setCurrentWidget(self.shell) 3449 self.bottomSidebar.setCurrentWidget(self.shell)
3449 3450
3450 def setDebugProfile(self, save = True): 3451 def setDebugProfile(self, save=True):
3451 """ 3452 """
3452 Public slot to activate the debug view profile. 3453 Public slot to activate the debug view profile.
3453 3454
3454 @param save flag indicating that the current profile should 3455 @param save flag indicating that the current profile should
3455 be saved (boolean) 3456 be saved (boolean)
3754 elif self.layout == "Sidebars": 3755 elif self.layout == "Sidebars":
3755 self.leftSidebar.show() 3756 self.leftSidebar.show()
3756 self.leftSidebar.setCurrentWidget(self.browser) 3757 self.leftSidebar.setCurrentWidget(self.browser)
3757 else: 3758 else:
3758 self.browser.show() 3759 self.browser.show()
3759 elif self.embeddedFileBrowser == 1: # embedded in debug browser 3760 elif self.embeddedFileBrowser == 1: # embedded in debug browser
3760 if self.layout in ["DockWindows", "Toolboxes", "Sidebars"]: 3761 if self.layout in ["DockWindows", "Toolboxes", "Sidebars"]:
3761 self.debugViewerDock.show() 3762 self.debugViewerDock.show()
3762 self.debugViewerDock.raise_() 3763 self.debugViewerDock.raise_()
3763 else: 3764 else:
3764 self.debugViewer.show() 3765 self.debugViewer.show()
3960 Private slot for displaying the unittest dialog. 3961 Private slot for displaying the unittest dialog.
3961 """ 3962 """
3962 self.unittestDialog.show() 3963 self.unittestDialog.show()
3963 self.unittestDialog.raise_() 3964 self.unittestDialog.raise_()
3964 3965
3965 def __unittestScript(self, prog = None): 3966 def __unittestScript(self, prog=None):
3966 """ 3967 """
3967 Private slot for displaying the unittest dialog and run the current script. 3968 Private slot for displaying the unittest dialog and run the current script.
3968 3969
3969 @param prog the python program to be opened 3970 @param prog the python program to be opened
3970 """ 3971 """
4011 """ 4012 """
4012 self.unittestDialog.show() 4013 self.unittestDialog.show()
4013 self.unittestDialog.raise_() 4014 self.unittestDialog.raise_()
4014 self.unittestDialog.on_startButton_clicked() 4015 self.unittestDialog.on_startButton_clicked()
4015 4016
4016 def __designer(self, fn = None, version = 0): 4017 def __designer(self, fn=None, version=0):
4017 """ 4018 """
4018 Private slot to start the Qt-Designer executable. 4019 Private slot to start the Qt-Designer executable.
4019 4020
4020 @param fn filename of the form to be opened 4021 @param fn filename of the form to be opened
4021 @param version indication for the requested version (Qt 4) (integer) 4022 @param version indication for the requested version (Qt 4) (integer)
4022 """ 4023 """
4023 if fn is not None and version == 0: 4024 if fn is not None and version == 0:
4024 # determine version from file, if not specified 4025 # determine version from file, if not specified
4025 try: 4026 try:
4026 f = open(fn, "r", encoding = "utf-8") 4027 f = open(fn, "r", encoding="utf-8")
4027 found = False 4028 found = False
4028 while not found: 4029 while not found:
4029 uiLine = f.readline() 4030 uiLine = f.readline()
4030 found = uiLine.lower().startswith("<ui ") 4031 found = uiLine.lower().startswith("<ui ")
4031 f.close() 4032 f.close()
4085 4086
4086 def __designer4(self): 4087 def __designer4(self):
4087 """ 4088 """
4088 Private slot to start the Qt-Designer 4 executable. 4089 Private slot to start the Qt-Designer 4 executable.
4089 """ 4090 """
4090 self.__designer(version = 4) 4091 self.__designer(version=4)
4091 4092
4092 def __linguist(self, fn = None, version = 0): 4093 def __linguist(self, fn=None, version=0):
4093 """ 4094 """
4094 Private slot to start the Qt-Linguist executable. 4095 Private slot to start the Qt-Linguist executable.
4095 4096
4096 @param fn filename of the translation file to be opened 4097 @param fn filename of the translation file to be opened
4097 @param version indication for the requested version (Qt 4) (integer) 4098 @param version indication for the requested version (Qt 4) (integer)
4138 self.trUtf8( 4139 self.trUtf8(
4139 '<p>Could not start Qt-Linguist.<br>' 4140 '<p>Could not start Qt-Linguist.<br>'
4140 'Ensure that it is available as <b>{0}</b>.</p>' 4141 'Ensure that it is available as <b>{0}</b>.</p>'
4141 ).format(linguist)) 4142 ).format(linguist))
4142 4143
4143 def __linguist4(self, fn = None): 4144 def __linguist4(self, fn=None):
4144 """ 4145 """
4145 Private slot to start the Qt-Linguist 4 executable. 4146 Private slot to start the Qt-Linguist 4 executable.
4146 4147
4147 @param fn filename of the translation file to be opened 4148 @param fn filename of the translation file to be opened
4148 """ 4149 """
4149 self.__linguist(fn, version = 4) 4150 self.__linguist(fn, version=4)
4150 4151
4151 def __assistant(self, home = None, version = 0): 4152 def __assistant(self, home=None, version=0):
4152 """ 4153 """
4153 Private slot to start the Qt-Assistant executable. 4154 Private slot to start the Qt-Assistant executable.
4154 4155
4155 @param home full pathname of a file to display (string) 4156 @param home full pathname of a file to display (string)
4156 @param version indication for the requested version (Qt 4) (integer) 4157 @param version indication for the requested version (Qt 4) (integer)
4186 4187
4187 def __assistant4(self): 4188 def __assistant4(self):
4188 """ 4189 """
4189 Private slot to start the Qt-Assistant 4 executable. 4190 Private slot to start the Qt-Assistant 4 executable.
4190 """ 4191 """
4191 self.__assistant(version = 4) 4192 self.__assistant(version=4)
4192 4193
4193 def __startWebBrowser(self, home = ""): 4194 def __startWebBrowser(self, home=""):
4194 """ 4195 """
4195 Private slot to start the eric5 web browser. 4196 Private slot to start the eric5 web browser.
4196 4197
4197 @param home full pathname of a file to display (string) 4198 @param home full pathname of a file to display (string)
4198 """ 4199 """
4199 self.launchHelpViewer(home) 4200 self.launchHelpViewer(home)
4200 4201
4201 def __customViewer(self, home = None): 4202 def __customViewer(self, home=None):
4202 """ 4203 """
4203 Private slot to start a custom viewer. 4204 Private slot to start a custom viewer.
4204 4205
4205 @param home full pathname of a file to display (string) 4206 @param home full pathname of a file to display (string)
4206 """ 4207 """
4242 self.trUtf8( 4243 self.trUtf8(
4243 '<p>Could not start the help viewer.<br>' 4244 '<p>Could not start the help viewer.<br>'
4244 'Ensure that it is available as <b>hh</b>.</p>' 4245 'Ensure that it is available as <b>hh</b>.</p>'
4245 )) 4246 ))
4246 4247
4247 def __UIPreviewer(self,fn=None): 4248 def __UIPreviewer(self, fn=None):
4248 """ 4249 """
4249 Private slot to start the UI Previewer executable. 4250 Private slot to start the UI Previewer executable.
4250 4251
4251 @param fn filename of the form to be previewed (string) 4252 @param fn filename of the form to be previewed (string)
4252 """ 4253 """
4282 self.trUtf8( 4283 self.trUtf8(
4283 '<p>Could not start UI Previewer.<br>' 4284 '<p>Could not start UI Previewer.<br>'
4284 'Ensure that it is available as <b>{0}</b>.</p>' 4285 'Ensure that it is available as <b>{0}</b>.</p>'
4285 ).format(viewer)) 4286 ).format(viewer))
4286 4287
4287 def __TRPreviewer(self, fileNames = None, ignore = False): 4288 def __TRPreviewer(self, fileNames=None, ignore=False):
4288 """ 4289 """
4289 Private slot to start the Translation Previewer executable. 4290 Private slot to start the Translation Previewer executable.
4290 4291
4291 @param fileNames filenames of forms and/or translations to be previewed 4292 @param fileNames filenames of forms and/or translations to be previewed
4292 (list of strings) 4293 (list of strings)
4346 self.trUtf8( 4347 self.trUtf8(
4347 '<p>Could not start SQL Browser.<br>' 4348 '<p>Could not start SQL Browser.<br>'
4348 'Ensure that it is available as <b>{0}</b>.</p>' 4349 'Ensure that it is available as <b>{0}</b>.</p>'
4349 ).format(browser)) 4350 ).format(browser))
4350 4351
4351 def __editPixmap(self, fn = ""): 4352 def __editPixmap(self, fn=""):
4352 """ 4353 """
4353 Private slot to show a pixmap in a dialog. 4354 Private slot to show a pixmap in a dialog.
4354 4355
4355 @param fn filename of the file to show (string) 4356 @param fn filename of the file to show (string)
4356 """ 4357 """
4357 dlg = IconEditorWindow(fn, self, fromEric = True) 4358 dlg = IconEditorWindow(fn, self, fromEric=True)
4358 dlg.show() 4359 dlg.show()
4359 4360
4360 def __showPixmap(self, fn): 4361 def __showPixmap(self, fn):
4361 """ 4362 """
4362 Private slot to show a pixmap in a dialog. 4363 Private slot to show a pixmap in a dialog.
4469 # loop through all running tool processes 4470 # loop through all running tool processes
4470 for program, toolProc, toolProcData in self.toolProcs: 4471 for program, toolProc, toolProcData in self.toolProcs:
4471 toolProc.setReadChannel(QProcess.StandardOutput) 4472 toolProc.setReadChannel(QProcess.StandardOutput)
4472 4473
4473 if toolProcData[0] is None or \ 4474 if toolProcData[0] is None or \
4474 toolProcData[1] not in ["insert", "replaceSelection"]: 4475 toolProcData[1] not in ["insert", "replaceSelection"]:
4475 # not connected to an editor or wrong mode 4476 # not connected to an editor or wrong mode
4476 while toolProc.canReadLine(): 4477 while toolProc.canReadLine():
4477 s = "{0} - ".format(program) 4478 s = "{0} - ".format(program)
4478 output = str(toolProc.readLine(), ioEncoding, 'replace') 4479 output = str(toolProc.readLine(), ioEncoding, 'replace')
4479 s.append(output) 4480 s.append(output)
4532 Private slot to show the Python 3 documentation. 4533 Private slot to show the Python 3 documentation.
4533 """ 4534 """
4534 pythonDocDir = Preferences.getHelp("PythonDocDir") 4535 pythonDocDir = Preferences.getHelp("PythonDocDir")
4535 if not pythonDocDir: 4536 if not pythonDocDir:
4536 if Utilities.isWindowsPlatform(): 4537 if Utilities.isWindowsPlatform():
4537 pythonDocDir = Utilities.getEnvironmentEntry("PYTHON3DOCDIR", 4538 pythonDocDir = Utilities.getEnvironmentEntry("PYTHON3DOCDIR",
4538 os.path.join(os.path.dirname(sys.executable), "doc")) 4539 os.path.join(os.path.dirname(sys.executable), "doc"))
4539 else: 4540 else:
4540 pythonDocDir = Utilities.getEnvironmentEntry("PYTHON3DOCDIR", 4541 pythonDocDir = Utilities.getEnvironmentEntry("PYTHON3DOCDIR",
4541 '/usr/share/doc/packages/python/html') 4542 '/usr/share/doc/packages/python/html')
4542 if not pythonDocDir.startswith("http://") and \ 4543 if not pythonDocDir.startswith("http://") and \
4543 not pythonDocDir.startswith("https://"): 4544 not pythonDocDir.startswith("https://"):
4544 if pythonDocDir.startswith("file://"): 4545 if pythonDocDir.startswith("file://"):
4545 pythonDocDir = pythonDocDir[7:] 4546 pythonDocDir = pythonDocDir[7:]
4574 else: 4575 else:
4575 hvType = Preferences.getHelp("HelpViewerType") 4576 hvType = Preferences.getHelp("HelpViewerType")
4576 if hvType == 1: 4577 if hvType == 1:
4577 self.launchHelpViewer(home) 4578 self.launchHelpViewer(home)
4578 elif hvType == 2: 4579 elif hvType == 2:
4579 self.__assistant(home, version = 4) 4580 self.__assistant(home, version=4)
4580 elif hvType == 3: 4581 elif hvType == 3:
4581 self.__webBrowser(home) 4582 self.__webBrowser(home)
4582 else: 4583 else:
4583 self.__customViewer(home) 4584 self.__customViewer(home)
4584 4585
4594 default = os.path.join(os.path.dirname(executable), "doc") 4595 default = os.path.join(os.path.dirname(executable), "doc")
4595 else: 4596 else:
4596 default = "" 4597 default = ""
4597 pythonDocDir = Utilities.getEnvironmentEntry("PYTHON2DOCDIR", default) 4598 pythonDocDir = Utilities.getEnvironmentEntry("PYTHON2DOCDIR", default)
4598 else: 4599 else:
4599 pythonDocDir = Utilities.getEnvironmentEntry("PYTHON3DOCDIR", 4600 pythonDocDir = Utilities.getEnvironmentEntry("PYTHON3DOCDIR",
4600 '/usr/share/doc/packages/python/html/python-docs-html') 4601 '/usr/share/doc/packages/python/html/python-docs-html')
4601 if not pythonDocDir.startswith("http://") and \ 4602 if not pythonDocDir.startswith("http://") and \
4602 not pythonDocDir.startswith("https://"): 4603 not pythonDocDir.startswith("https://"):
4603 if pythonDocDir.startswith("file://"): 4604 if pythonDocDir.startswith("file://"):
4604 pythonDocDir = pythonDocDir[7:] 4605 pythonDocDir = pythonDocDir[7:]
4628 else: 4629 else:
4629 hvType = Preferences.getHelp("HelpViewerType") 4630 hvType = Preferences.getHelp("HelpViewerType")
4630 if hvType == 1: 4631 if hvType == 1:
4631 self.launchHelpViewer(home) 4632 self.launchHelpViewer(home)
4632 elif hvType == 2: 4633 elif hvType == 2:
4633 self.__assistant(home, version = 4) 4634 self.__assistant(home, version=4)
4634 elif hvType == 3: 4635 elif hvType == 3:
4635 self.__webBrowser(home) 4636 self.__webBrowser(home)
4636 else: 4637 else:
4637 self.__customViewer(home) 4638 self.__customViewer(home)
4638 4639
4674 4675
4675 hvType = Preferences.getHelp("HelpViewerType") 4676 hvType = Preferences.getHelp("HelpViewerType")
4676 if hvType == 1: 4677 if hvType == 1:
4677 self.launchHelpViewer(home) 4678 self.launchHelpViewer(home)
4678 elif hvType == 2: 4679 elif hvType == 2:
4679 self.__assistant(home, version = 4) 4680 self.__assistant(home, version=4)
4680 elif hvType == 3: 4681 elif hvType == 3:
4681 self.__webBrowser(home) 4682 self.__webBrowser(home)
4682 else: 4683 else:
4683 self.__customViewer(home) 4684 self.__customViewer(home)
4684 4685
4733 4734
4734 hvType = Preferences.getHelp("HelpViewerType") 4735 hvType = Preferences.getHelp("HelpViewerType")
4735 if hvType == 1: 4736 if hvType == 1:
4736 self.launchHelpViewer(home) 4737 self.launchHelpViewer(home)
4737 elif hvType == 2: 4738 elif hvType == 2:
4738 self.__assistant(home, version = 4) 4739 self.__assistant(home, version=4)
4739 elif hvType == 3: 4740 elif hvType == 3:
4740 self.__webBrowser(home) 4741 self.__webBrowser(home)
4741 else: 4742 else:
4742 self.__customViewer(home) 4743 self.__customViewer(home)
4743 4744
4765 4766
4766 hvType = Preferences.getHelp("HelpViewerType") 4767 hvType = Preferences.getHelp("HelpViewerType")
4767 if hvType == 1: 4768 if hvType == 1:
4768 self.launchHelpViewer(home) 4769 self.launchHelpViewer(home)
4769 elif hvType == 2: 4770 elif hvType == 2:
4770 self.__assistant(home, version = 4) 4771 self.__assistant(home, version=4)
4771 elif hvType == 3: 4772 elif hvType == 3:
4772 self.__webBrowser(home) 4773 self.__webBrowser(home)
4773 else: 4774 else:
4774 self.__customViewer(home) 4775 self.__customViewer(home)
4775 4776
4813 4814
4814 hvType = Preferences.getHelp("HelpViewerType") 4815 hvType = Preferences.getHelp("HelpViewerType")
4815 if hvType == 1: 4816 if hvType == 1:
4816 self.launchHelpViewer(home) 4817 self.launchHelpViewer(home)
4817 elif hvType == 2: 4818 elif hvType == 2:
4818 self.__assistant(home, version = 4) 4819 self.__assistant(home, version=4)
4819 elif hvType == 3: 4820 elif hvType == 3:
4820 self.__webBrowser(home) 4821 self.__webBrowser(home)
4821 else: 4822 else:
4822 self.__customViewer(home) 4823 self.__customViewer(home)
4823 4824
4824 def launchHelpViewer(self, home, searchWord = None): 4825 def launchHelpViewer(self, home, searchWord=None):
4825 """ 4826 """
4826 Public slot to start the help viewer. 4827 Public slot to start the help viewer.
4827 4828
4828 @param home filename of file to be shown (string) 4829 @param home filename of file to be shown (string)
4829 @keyparam searchWord word to search for (string) 4830 @keyparam searchWord word to search for (string)
4831 if len(home) > 0: 4832 if len(home) > 0:
4832 homeUrl = QUrl(home) 4833 homeUrl = QUrl(home)
4833 if not homeUrl.scheme(): 4834 if not homeUrl.scheme():
4834 home = QUrl.fromLocalFile(home).toString() 4835 home = QUrl.fromLocalFile(home).toString()
4835 if not Preferences.getHelp("SingleHelpWindow") or self.helpWindow is None: 4836 if not Preferences.getHelp("SingleHelpWindow") or self.helpWindow is None:
4836 help = HelpWindow(home, '.', None, 'help viewer', True, 4837 help = HelpWindow(home, '.', None, 'help viewer', True,
4837 searchWord = searchWord) 4838 searchWord=searchWord)
4838 4839
4839 if QApplication.desktop().width() > 400 and \ 4840 if QApplication.desktop().width() > 400 and \
4840 QApplication.desktop().height() > 500: 4841 QApplication.desktop().height() > 500:
4841 help.show() 4842 help.show()
4842 else: 4843 else:
4867 """ 4868 """
4868 searchWord = self.viewmanager.textForFind(False) 4869 searchWord = self.viewmanager.textForFind(False)
4869 if searchWord == "": 4870 if searchWord == "":
4870 searchWord = None 4871 searchWord = None
4871 4872
4872 self.launchHelpViewer("", searchWord = searchWord) 4873 self.launchHelpViewer("", searchWord=searchWord)
4873 4874
4874 def __webBrowser(self): 4875 def __webBrowser(self):
4875 """ 4876 """
4876 Private slot to start the eric5 web browser. 4877 Private slot to start the eric5 web browser.
4877 """ 4878 """
4878 self.launchHelpViewer("") 4879 self.launchHelpViewer("")
4879 4880
4880 def showPreferences(self, pageName = None): 4881 def showPreferences(self, pageName=None):
4881 """ 4882 """
4882 Public slot to set the preferences. 4883 Public slot to set the preferences.
4883 4884
4884 @param pageName name of the configuration page to show (string) 4885 @param pageName name of the configuration page to show (string)
4885 """ 4886 """
4928 self.SAServer = None 4929 self.SAServer = None
4929 4930
4930 self.maxEditorPathLen = Preferences.getUI("CaptionFilenameLength") 4931 self.maxEditorPathLen = Preferences.getUI("CaptionFilenameLength")
4931 self.captionShowsFilename = Preferences.getUI("CaptionShowsFilename") 4932 self.captionShowsFilename = Preferences.getUI("CaptionShowsFilename")
4932 if not self.captionShowsFilename: 4933 if not self.captionShowsFilename:
4933 self.__setWindowCaption(editor = "") 4934 self.__setWindowCaption(editor="")
4934 else: 4935 else:
4935 aw = self.viewmanager.activeWindow() 4936 aw = self.viewmanager.activeWindow()
4936 fn = aw and aw.getFileName() or None 4937 fn = aw and aw.getFileName() or None
4937 if fn: 4938 if fn:
4938 self.__setWindowCaption(editor = fn) 4939 self.__setWindowCaption(editor=fn)
4939 else: 4940 else:
4940 self.__setWindowCaption(editor = "") 4941 self.__setWindowCaption(editor="")
4941 4942
4942 self.__httpAlternatives = Preferences.getUI("VersionsUrls5") 4943 self.__httpAlternatives = Preferences.getUI("VersionsUrls5")
4943 self.performVersionCheck(False) 4944 self.performVersionCheck(False)
4944 4945
4945 self.__configureDockareaCornerUsage() 4946 self.__configureDockareaCornerUsage()
5028 5029
5029 def __newProject(self): 5030 def __newProject(self):
5030 """ 5031 """
5031 Private slot to handle the NewProject signal. 5032 Private slot to handle the NewProject signal.
5032 """ 5033 """
5033 self.__setWindowCaption(project = self.project.name) 5034 self.__setWindowCaption(project=self.project.name)
5034 5035
5035 def __projectOpened(self): 5036 def __projectOpened(self):
5036 """ 5037 """
5037 Private slot to handle the projectOpened signal. 5038 Private slot to handle the projectOpened signal.
5038 """ 5039 """
5039 self.__setWindowCaption(project = self.project.name) 5040 self.__setWindowCaption(project=self.project.name)
5040 cap = e5App().getObject("DebugServer")\ 5041 cap = e5App().getObject("DebugServer")\
5041 .getClientCapabilities(self.project.pdata["PROGLANGUAGE"][0]) 5042 .getClientCapabilities(self.project.pdata["PROGLANGUAGE"][0])
5042 self.utProjectAct.setEnabled(cap & HasUnittest) 5043 self.utProjectAct.setEnabled(cap & HasUnittest)
5043 self.utProjectOpen = cap & HasUnittest 5044 self.utProjectOpen = cap & HasUnittest
5044 5045
5045 def __projectClosed(self): 5046 def __projectClosed(self):
5046 """ 5047 """
5047 Private slot to handle the projectClosed signal. 5048 Private slot to handle the projectClosed signal.
5048 """ 5049 """
5049 self.__setWindowCaption(project = "") 5050 self.__setWindowCaption(project="")
5050 self.utProjectAct.setEnabled(False) 5051 self.utProjectAct.setEnabled(False)
5051 if not self.utEditorOpen: 5052 if not self.utEditorOpen:
5052 self.utRestartAct.setEnabled(False) 5053 self.utRestartAct.setEnabled(False)
5053 self.utProjectOpen = False 5054 self.utProjectOpen = False
5054 5055
5073 self.wizardsMenuAct.setEnabled(False) 5074 self.wizardsMenuAct.setEnabled(False)
5074 self.utScriptAct.setEnabled(False) 5075 self.utScriptAct.setEnabled(False)
5075 self.utEditorOpen = False 5076 self.utEditorOpen = False
5076 if not self.utProjectOpen: 5077 if not self.utProjectOpen:
5077 self.utRestartAct.setEnabled(False) 5078 self.utRestartAct.setEnabled(False)
5078 self.__setWindowCaption(editor = "") 5079 self.__setWindowCaption(editor="")
5079 5080
5080 def __editorOpened(self, fn): 5081 def __editorOpened(self, fn):
5081 """ 5082 """
5082 Private slot to handle the editorOpened signal. 5083 Private slot to handle the editorOpened signal.
5083 5084
5152 fn = os.path.join(Utilities.getConfigDir(), "eric5tasks.e4t") 5153 fn = os.path.join(Utilities.getConfigDir(), "eric5tasks.e4t")
5153 if not os.path.exists(fn): 5154 if not os.path.exists(fn):
5154 return 5155 return
5155 f = QFile(fn) 5156 f = QFile(fn)
5156 if f.open(QIODevice.ReadOnly): 5157 if f.open(QIODevice.ReadOnly):
5157 reader = TasksReader(f, viewer = self.taskViewer) 5158 reader = TasksReader(f, viewer=self.taskViewer)
5158 reader.readXML() 5159 reader.readXML()
5159 f.close() 5160 f.close()
5160 else: 5161 else:
5161 E5MessageBox.critical(self, 5162 E5MessageBox.critical(self,
5162 self.trUtf8("Read tasks"), 5163 self.trUtf8("Read tasks"),
5232 Private slot to show the plugin info dialog. 5233 Private slot to show the plugin info dialog.
5233 """ 5234 """
5234 self.__pluginInfoDialog = PluginInfoDialog(self.pluginManager, self) 5235 self.__pluginInfoDialog = PluginInfoDialog(self.pluginManager, self)
5235 self.__pluginInfoDialog.show() 5236 self.__pluginInfoDialog.show()
5236 5237
5237 def __installPlugins(self, pluginFileNames = []): 5238 def __installPlugins(self, pluginFileNames=[]):
5238 """ 5239 """
5239 Private slot to show a dialog to install a new plugin. 5240 Private slot to show a dialog to install a new plugin.
5240 5241
5241 @param pluginFileNames list of plugin files suggested for 5242 @param pluginFileNames list of plugin files suggested for
5242 installation list of strings 5243 installation list of strings
5243 """ 5244 """
5244 dlg = PluginInstallDialog(self.pluginManager, pluginFileNames, self) 5245 dlg = PluginInstallDialog(self.pluginManager, pluginFileNames, self)
5245 dlg.exec_() 5246 dlg.exec_()
5246 if dlg.restartNeeded(): 5247 if dlg.restartNeeded():
5384 windows = { 5385 windows = {
5385 "ProjectBrowser": self.projectBrowser, 5386 "ProjectBrowser": self.projectBrowser,
5386 "DebugViewer": self.debugViewer, 5387 "DebugViewer": self.debugViewer,
5387 "LogViewer": self.logViewer, 5388 "LogViewer": self.logViewer,
5388 "Shell": self.shell, 5389 "Shell": self.shell,
5389 "FileBrowser" : self.browser, 5390 "FileBrowser": self.browser,
5390 "TaskViewer" : self.taskViewer, 5391 "TaskViewer": self.taskViewer,
5391 "TemplateViewer" : self.templateViewer, 5392 "TemplateViewer": self.templateViewer,
5392 "MultiProjectBrowser": self.multiProjectBrowser, 5393 "MultiProjectBrowser": self.multiProjectBrowser,
5393 } 5394 }
5394 if self.embeddedShell: 5395 if self.embeddedShell:
5395 del windows["Shell"] 5396 del windows["Shell"]
5396 if self.embeddedFileBrowser: 5397 if self.embeddedFileBrowser:
5415 5416
5416 def showAvailableVersionsInfo(self): 5417 def showAvailableVersionsInfo(self):
5417 """ 5418 """
5418 Public method to show the eric5 versions available for download. 5419 Public method to show the eric5 versions available for download.
5419 """ 5420 """
5420 self.performVersionCheck(manual = True, showVersions = True) 5421 self.performVersionCheck(manual=True, showVersions=True)
5421 5422
5422 def performVersionCheck(self, manual = True, alternative = 0, showVersions = False): 5423 def performVersionCheck(self, manual=True, alternative=0, showVersions=False):
5423 """ 5424 """
5424 Public method to check the internet for an eric5 update. 5425 Public method to check the internet for an eric5 update.
5425 5426
5426 @param manual flag indicating an invocation via the menu (boolean) 5427 @param manual flag indicating an invocation via the menu (boolean)
5427 @param alternative index of server to download from (integer) 5428 @param alternative index of server to download from (integer)
5456 url = QUrl(self.__httpAlternatives[alternative]) 5457 url = QUrl(self.__httpAlternatives[alternative])
5457 self.__versionCheckCanceled = False 5458 self.__versionCheckCanceled = False
5458 if manual: 5459 if manual:
5459 if self.__versionCheckProgress is None: 5460 if self.__versionCheckProgress is None:
5460 self.__versionCheckProgress = \ 5461 self.__versionCheckProgress = \
5461 QProgressDialog("", self.trUtf8("&Cancel"), 5462 QProgressDialog("", self.trUtf8("&Cancel"),
5462 0, len(self.__httpAlternatives), self) 5463 0, len(self.__httpAlternatives), self)
5463 self.__versionCheckProgress.setMinimumDuration(0) 5464 self.__versionCheckProgress.setMinimumDuration(0)
5464 self.__versionCheckProgress.canceled.connect( 5465 self.__versionCheckProgress.canceled.connect(
5465 self.__versionsDownloadCanceled) 5466 self.__versionsDownloadCanceled)
5466 self.__versionCheckProgress.setLabelText( 5467 self.__versionCheckProgress.setLabelText(
5495 E5MessageBox.warning(self, 5496 E5MessageBox.warning(self,
5496 self.trUtf8("Error downloading versions file"), 5497 self.trUtf8("Error downloading versions file"),
5497 self.trUtf8("""Could not download the versions file.""")) 5498 self.trUtf8("""Could not download the versions file."""))
5498 return 5499 return
5499 else: 5500 else:
5500 self.performVersionCheck(self.manualUpdatesCheck, self.httpAlternative, 5501 self.performVersionCheck(self.manualUpdatesCheck, self.httpAlternative,
5501 self.showAvailableVersions) 5502 self.showAvailableVersions)
5502 return 5503 return
5503 5504
5504 self.__inVersionCheck = False 5505 self.__inVersionCheck = False
5505 if self.__versionCheckProgress is not None: 5506 if self.__versionCheckProgress is not None:
5544 res = E5MessageBox.yesNo(self, 5545 res = E5MessageBox.yesNo(self,
5545 self.trUtf8("Update available"), 5546 self.trUtf8("Update available"),
5546 self.trUtf8("""The update to <b>{0}</b> of eric5 is available""" 5547 self.trUtf8("""The update to <b>{0}</b> of eric5 is available"""
5547 """ at <b>{1}</b>. Would you like to get it?""")\ 5548 """ at <b>{1}</b>. Would you like to get it?""")\
5548 .format(versions[2], versions[3]), 5549 .format(versions[2], versions[3]),
5549 yesDefault = True) 5550 yesDefault=True)
5550 url = res and versions[3] or '' 5551 url = res and versions[3] or ''
5551 elif versions[0] > Version: 5552 elif versions[0] > Version:
5552 res = E5MessageBox.yesNo(self, 5553 res = E5MessageBox.yesNo(self,
5553 self.trUtf8("Update available"), 5554 self.trUtf8("Update available"),
5554 self.trUtf8("""The update to <b>{0}</b> of eric5 is available""" 5555 self.trUtf8("""The update to <b>{0}</b> of eric5 is available"""
5555 """ at <b>{1}</b>. Would you like to get it?""")\ 5556 """ at <b>{1}</b>. Would you like to get it?""")\
5556 .format(versions[0], versions[1]), 5557 .format(versions[0], versions[1]),
5557 yesDefault = True) 5558 yesDefault=True)
5558 url = res and versions[1] or '' 5559 url = res and versions[1] or ''
5559 else: 5560 else:
5560 if self.manualUpdatesCheck: 5561 if self.manualUpdatesCheck:
5561 E5MessageBox.information(self, 5562 E5MessageBox.information(self,
5562 self.trUtf8("Eric5 is up to date"), 5563 self.trUtf8("Eric5 is up to date"),
5567 res = E5MessageBox.yesNo(self, 5568 res = E5MessageBox.yesNo(self,
5568 self.trUtf8("Update available"), 5569 self.trUtf8("Update available"),
5569 self.trUtf8("""The update to <b>{0}</b> of eric5 is available""" 5570 self.trUtf8("""The update to <b>{0}</b> of eric5 is available"""
5570 """ at <b>{1}</b>. Would you like to get it?""")\ 5571 """ at <b>{1}</b>. Would you like to get it?""")\
5571 .format(versions[0], versions[1]), 5572 .format(versions[0], versions[1]),
5572 yesDefault = True) 5573 yesDefault=True)
5573 url = res and versions[1] or '' 5574 url = res and versions[1] or ''
5574 else: 5575 else:
5575 if self.manualUpdatesCheck: 5576 if self.manualUpdatesCheck:
5576 E5MessageBox.information(self, 5577 E5MessageBox.information(self,
5577 self.trUtf8("Eric5 is up to date"), 5578 self.trUtf8("Eric5 is up to date"),
5605 while line < len(versions): 5606 while line < len(versions):
5606 if versions[line] == "---": 5607 if versions[line] == "---":
5607 break 5608 break
5608 5609
5609 versionText += """<tr><td>{0}</td><td><a href="{1}">{2}</a></td></tr>"""\ 5610 versionText += """<tr><td>{0}</td><td><a href="{1}">{2}</a></td></tr>"""\
5610 .format(versions[line], versions[line + 1], 5611 .format(versions[line], versions[line + 1],
5611 'sourceforge' in versions[line + 1] and \ 5612 'sourceforge' in versions[line + 1] and \
5612 "SourceForge" or versions[line + 1]) 5613 "SourceForge" or versions[line + 1])
5613 line += 2 5614 line += 2
5614 versionText += self.trUtf8("""</table>""") 5615 versionText += self.trUtf8("""</table>""")
5615 5616
5630 self.trUtf8("SSL Errors"), 5631 self.trUtf8("SSL Errors"),
5631 self.trUtf8("""<p>SSL Errors:</p>""" 5632 self.trUtf8("""<p>SSL Errors:</p>"""
5632 """<p>{0}</p>""" 5633 """<p>{0}</p>"""
5633 """<p>Do you want to ignore these errors?</p>""")\ 5634 """<p>Do you want to ignore these errors?</p>""")\
5634 .format(errorString), 5635 .format(errorString),
5635 icon = E5MessageBox.Warning) 5636 icon=E5MessageBox.Warning)
5636 if ret: 5637 if ret:
5637 reply.ignoreSslErrors() 5638 reply.ignoreSslErrors()
5638 else: 5639 else:
5639 self.__downloadCancelled = True 5640 self.__downloadCancelled = True
5640 reply.abort() 5641 reply.abort()
5643 ## Below are methods for various checks 5644 ## Below are methods for various checks
5644 ####################################### 5645 #######################################
5645 5646
5646 def checkConfigurationStatus(self): 5647 def checkConfigurationStatus(self):
5647 """ 5648 """
5648 Public method to check, if eric5 has been configured. If it is not, 5649 Public method to check, if eric5 has been configured. If it is not,
5649 the configuration dialog is shown. 5650 the configuration dialog is shown.
5650 """ 5651 """
5651 if not Preferences.isConfigured(): 5652 if not Preferences.isConfigured():
5652 self.__initDebugToolbarsLayout() 5653 self.__initDebugToolbarsLayout()
5653 5654
5655 self.trUtf8("First time usage"), 5656 self.trUtf8("First time usage"),
5656 self.trUtf8("""eric5 has not been configured yet. """ 5657 self.trUtf8("""eric5 has not been configured yet. """
5657 """The configuration dialog will be started.""")) 5658 """The configuration dialog will be started."""))
5658 self.showPreferences() 5659 self.showPreferences()
5659 5660
5660 def versionIsNewer(self, required, snapshot = None): 5661 def versionIsNewer(self, required, snapshot=None):
5661 """ 5662 """
5662 Public method to check, if the eric5 version is good compared to 5663 Public method to check, if the eric5 version is good compared to
5663 the required version. 5664 the required version.
5664 5665
5665 @param required required version (string) 5666 @param required required version (string)

eric ide

mercurial