142 name of the menu and a reference to the menu are given. |
142 name of the menu and a reference to the menu are given. |
143 @signal mainPasswordChanged(str, str) emitted after the main |
143 @signal mainPasswordChanged(str, str) emitted after the main |
144 password has been changed with the old and the new password |
144 password has been changed with the old and the new password |
145 @signal onlineStateChanged(online) emitted to indicate a change of the |
145 @signal onlineStateChanged(online) emitted to indicate a change of the |
146 network state |
146 network state |
|
147 @signal shutdown() emitted to indicate a shutdown of the application |
147 """ |
148 """ |
148 |
149 |
149 appendStderr = pyqtSignal(str) |
150 appendStderr = pyqtSignal(str) |
150 appendStdout = pyqtSignal(str) |
151 appendStdout = pyqtSignal(str) |
151 preferencesChanged = pyqtSignal() |
152 preferencesChanged = pyqtSignal() |
152 reloadAPIs = pyqtSignal() |
153 reloadAPIs = pyqtSignal() |
153 showMenu = pyqtSignal(str, QMenu) |
154 showMenu = pyqtSignal(str, QMenu) |
154 mainPasswordChanged = pyqtSignal(str, str) |
155 mainPasswordChanged = pyqtSignal(str, str) |
155 onlineStateChanged = pyqtSignal(bool) |
156 onlineStateChanged = pyqtSignal(bool) |
|
157 shutdown = pyqtSignal() |
156 |
158 |
157 maxFilePathLen = 100 |
159 maxFilePathLen = 100 |
158 maxMenuFilePathLen = 75 |
160 maxMenuFilePathLen = 75 |
159 |
161 |
160 # NOTE: change this to 'True' for official releases |
162 # NOTE: change this to 'True' for official releases |
662 self.inDragDrop = False |
664 self.inDragDrop = False |
663 self.setAcceptDrops(True) |
665 self.setAcceptDrops(True) |
664 |
666 |
665 self.currentProfile = None |
667 self.currentProfile = None |
666 |
668 |
667 self.shutdownCalled = False |
669 self.__shutdownCalled = False |
668 self.inCloseEvent = False |
670 self.inCloseEvent = False |
669 |
671 |
670 # now fire up the single application server |
672 # now fire up the single application server |
671 if Preferences.getUI("SingleApplicationMode"): |
673 if Preferences.getUI("SingleApplicationMode"): |
672 splash.showMessage(self.tr("Initializing Single Application Server...")) |
674 splash.showMessage(self.tr("Initializing Single Application Server...")) |
807 self, self.__debugServer, self.__ericServerInterface, self.pluginManager |
809 self, self.__debugServer, self.__ericServerInterface, self.pluginManager |
808 ) |
810 ) |
809 |
811 |
810 # Create previewer |
812 # Create previewer |
811 logging.getLogger(__name__).debug("Creating Previewer...") |
813 logging.getLogger(__name__).debug("Creating Previewer...") |
812 self.__previewer = Previewer(self.viewmanager) |
814 self.__previewer = Previewer(viewmanager=self.viewmanager, ui=self) |
813 |
815 |
814 # Create AST viewer |
816 # Create AST viewer |
815 logging.getLogger(__name__).debug("Creating Python AST Viewer") |
817 logging.getLogger(__name__).debug("Creating Python AST Viewer") |
816 self.__astViewer = PythonAstViewer(self.viewmanager) |
818 self.__astViewer = PythonAstViewer(viewmanager=self.viewmanager, ui=self) |
817 |
819 |
818 # Create DIS viewer |
820 # Create DIS viewer |
819 logging.getLogger(__name__).debug("Creating Python Disassembly Viewer") |
821 logging.getLogger(__name__).debug("Creating Python Disassembly Viewer") |
820 self.__disViewer = PythonDisViewer(self.viewmanager) |
822 self.__disViewer = PythonDisViewer(self.viewmanager) |
821 |
823 |
849 if Preferences.getUI("ShowTemplateViewer"): |
851 if Preferences.getUI("ShowTemplateViewer"): |
850 # Create the template viewer part of the user interface |
852 # Create the template viewer part of the user interface |
851 logging.getLogger(__name__).debug("Creating Template Viewer...") |
853 logging.getLogger(__name__).debug("Creating Template Viewer...") |
852 from eric7.Templates.TemplateViewer import TemplateViewer # noqa: I-101 |
854 from eric7.Templates.TemplateViewer import TemplateViewer # noqa: I-101 |
853 |
855 |
854 self.templateViewer = TemplateViewer(None, self.viewmanager) |
856 self.templateViewer = TemplateViewer(self, self.viewmanager) |
855 else: |
857 else: |
856 logging.getLogger(__name__).debug("Template Viewer disabled") |
858 logging.getLogger(__name__).debug("Template Viewer disabled") |
857 self.templateViewer = None |
859 self.templateViewer = None |
858 |
860 |
859 if Preferences.getUI("ShowFileBrowser"): |
861 if Preferences.getUI("ShowFileBrowser"): |
8465 QDesktopServices.unsetUrlHandler("https") |
8465 QDesktopServices.unsetUrlHandler("https") |
8466 |
8466 |
8467 if sessionCreated and not self.__disableCrashSession: |
8467 if sessionCreated and not self.__disableCrashSession: |
8468 self.__deleteCrashSession() |
8468 self.__deleteCrashSession() |
8469 |
8469 |
8470 if self.codeDocumentationViewer is not None: |
|
8471 self.codeDocumentationViewer.shutdown() |
|
8472 |
|
8473 self.__previewer.shutdown() |
|
8474 |
|
8475 self.__astViewer.shutdown() |
|
8476 |
|
8477 self.__writeTasks() |
8470 self.__writeTasks() |
8478 |
|
8479 if self.templateViewer is not None: |
|
8480 self.templateViewer.save() |
|
8481 |
8471 |
8482 if not self.debuggerUI.shutdownServer(): |
8472 if not self.debuggerUI.shutdownServer(): |
8483 return False |
8473 return False |
8484 self.debuggerUI.shutdown() |
8474 |
8485 |
8475 # stop the single application server |
8486 self.backgroundService.shutdown() |
|
8487 |
|
8488 if self.cooperation is not None: |
|
8489 self.cooperation.shutdown() |
|
8490 |
|
8491 if self.__helpViewerWidget is not None: |
|
8492 self.__helpViewerWidget.shutdown() |
|
8493 |
|
8494 if self.microPythonWidget is not None: |
|
8495 self.microPythonWidget.shutdown() |
|
8496 |
|
8497 self.pipInterface.shutdown() |
|
8498 |
|
8499 self.pluginManager.doShutdown() |
|
8500 |
|
8501 if self.SAServer is not None: |
8476 if self.SAServer is not None: |
8502 self.SAServer.shutdown() |
8477 self.SAServer.shutdown() |
8503 self.SAServer = None |
8478 self.SAServer = None |
8504 |
8479 |
8505 # set proxy factory to None to avoid crashes |
8480 # set proxy factory to None to avoid crashes |
8514 |
8489 |
8515 Preferences.setUI("ToolbarManagerState", self.toolbarManager.saveState()) |
8490 Preferences.setUI("ToolbarManagerState", self.toolbarManager.saveState()) |
8516 self.__saveCurrentViewProfile(True) |
8491 self.__saveCurrentViewProfile(True) |
8517 Preferences.saveToolGroups(self.toolGroups, self.currentToolGroup) |
8492 Preferences.saveToolGroups(self.toolGroups, self.currentToolGroup) |
8518 Preferences.syncPreferences() |
8493 Preferences.syncPreferences() |
8519 self.shutdownCalled = True |
8494 |
|
8495 # emit the shutdown() signal to allow connected parts to perform their |
|
8496 # individual shutdown actions |
|
8497 self.shutdown.emit() |
8520 |
8498 |
8521 # shut down the global file system watcher |
8499 # shut down the global file system watcher |
8522 EricFileSystemWatcher.instance().shutdown() |
8500 EricFileSystemWatcher.instance().shutdown() |
8523 |
8501 |
8524 # revert changes to sys.stdout and sys.stderr |
8502 # revert changes to sys.stdout and sys.stderr |
8525 sys.stdout = sys.__stdout__ |
8503 sys.stdout = sys.__stdout__ |
8526 sys.stderr = sys.__stderr__ |
8504 sys.stderr = sys.__stderr__ |
|
8505 |
|
8506 self.__shutdownCalled = True |
8527 |
8507 |
8528 return True |
8508 return True |
8529 |
8509 |
8530 def isOnline(self): |
8510 def isOnline(self): |
8531 """ |
8511 """ |