src/eric7/UI/UserInterface.py

branch
eric7
changeset 11215
d07c71a34adf
parent 11207
7193db06924d
child 11216
a1471981ef18
equal deleted inserted replaced
11214:8cb6b7651074 11215:d07c71a34adf
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"):
8431 Private method to perform all necessary steps to close down the IDE. 8433 Private method to perform all necessary steps to close down the IDE.
8432 8434
8433 @return flag indicating success 8435 @return flag indicating success
8434 @rtype bool 8436 @rtype bool
8435 """ 8437 """
8436 if self.shutdownCalled: 8438 if self.__shutdownCalled:
8437 return True 8439 return True
8438 8440
8439 if not self.viewmanager.checkAllDirty(): 8441 if not self.viewmanager.checkAllDirty():
8440 return False 8442 return False
8441 8443
8444 8446
8445 if self.irc is not None and not self.irc.shutdown(): 8447 if self.irc is not None and not self.irc.shutdown():
8446 return False 8448 return False
8447 8449
8448 sessionCreated = self.__writeSession() 8450 sessionCreated = self.__writeSession()
8449
8450 self.__astViewer.hide()
8451 8451
8452 self.shell.closeShell() 8452 self.shell.closeShell()
8453 8453
8454 if not self.project.closeProject(shutdown=True): 8454 if not self.project.closeProject(shutdown=True):
8455 return False 8455 return False
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 """

eric ide

mercurial