src/eric7/UI/UserInterface.py

branch
eric7-maintenance
changeset 9549
67295777d9fe
parent 9449
c982bacca23f
parent 9548
2d2a91757852
child 9554
fe8c29d7cf96
equal deleted inserted replaced
9451:24c847222774 9549:67295777d9fe
5 5
6 """ 6 """
7 Module implementing the main user interface. 7 Module implementing the main user interface.
8 """ 8 """
9 9
10 import contextlib
11 import datetime
12 import functools
13 import getpass
14 import json
15 import logging
10 import os 16 import os
17 import pathlib
18 import shutil
11 import sys 19 import sys
12 import logging 20
13 import shutil 21 from PyQt6 import sip
14 import json 22 from PyQt6.Qsci import QSCINTILLA_VERSION_STR
15 import datetime
16 import getpass
17 import functools
18 import contextlib
19 import pathlib
20
21 from PyQt6.QtCore import ( 23 from PyQt6.QtCore import (
22 pyqtSlot,
23 QTimer,
24 QFile,
25 pyqtSignal,
26 PYQT_VERSION_STR, 24 PYQT_VERSION_STR,
27 QDate, 25 QDate,
26 QFile,
28 QIODevice, 27 QIODevice,
29 qVersion, 28 QObject,
30 QProcess, 29 QProcess,
31 QSize, 30 QSize,
31 Qt,
32 QThread,
33 QTimer,
32 QUrl, 34 QUrl,
33 QObject, 35 QUrlQuery,
34 Qt,
35 QUuid, 36 QUuid,
36 QThread, 37 pyqtSignal,
37 QUrlQuery, 38 pyqtSlot,
39 qVersion,
38 ) 40 )
39 from PyQt6.QtGui import QAction, QKeySequence, QDesktopServices, QSessionManager 41 from PyQt6.QtGui import QAction, QDesktopServices, QKeySequence, QSessionManager
42 from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkProxyFactory
40 from PyQt6.QtWidgets import ( 43 from PyQt6.QtWidgets import (
41 QSizePolicy, 44 QApplication,
42 QWidget,
43 QWhatsThis,
44 QToolBar,
45 QDialog, 45 QDialog,
46 QSplitter,
47 QApplication,
48 QMenu,
49 QVBoxLayout,
50 QDockWidget, 46 QDockWidget,
51 QLabel, 47 QLabel,
48 QMenu,
49 QSizePolicy,
50 QSplitter,
51 QToolBar,
52 QVBoxLayout,
53 QWhatsThis,
54 QWidget,
52 ) 55 )
53 from PyQt6.Qsci import QSCINTILLA_VERSION_STR 56
54 from PyQt6.QtNetwork import QNetworkProxyFactory, QNetworkAccessManager 57 from eric7 import Globals, Preferences, Testing, Utilities
55 58 from eric7.CondaInterface.Conda import Conda
56 from .Info import Version, VersionOnly, BugAddress, Program, FeatureAddress 59 from eric7.Debugger.DebugServer import DebugServer
57 from . import Config 60 from eric7.Debugger.DebugUI import DebugUI
58 from .NotificationWidget import NotificationTypes 61 from eric7.EricGui import EricPixmapCache
59
60 from eric7.EricWidgets.EricSingleApplication import EricSingleApplicationServer
61 from eric7.EricGui.EricAction import EricAction, createActionGroup 62 from eric7.EricGui.EricAction import EricAction, createActionGroup
62 from eric7.EricWidgets.EricToolBarManager import EricToolBarManager
63 from eric7.EricWidgets import EricMessageBox, EricFileDialog, EricErrorMessage
64 from eric7.EricWidgets.EricApplication import ericApp
65 from eric7.EricWidgets.EricMainWindow import EricMainWindow
66 from eric7.EricWidgets.EricZoomWidget import EricZoomWidget
67 from eric7.EricWidgets.EricClickableLabel import EricClickableLabel
68
69 from eric7 import Globals, Preferences, Utilities
70
71 from eric7.EricGui import EricPixmapCache
72
73 from eric7.Sessions.SessionFile import SessionFile
74
75 from eric7.Tasks.TasksFile import TasksFile
76
77 from eric7.EricNetwork.EricNetworkIcon import EricNetworkIcon 63 from eric7.EricNetwork.EricNetworkIcon import EricNetworkIcon
78 from eric7.EricNetwork.EricNetworkProxyFactory import ( 64 from eric7.EricNetwork.EricNetworkProxyFactory import (
79 EricNetworkProxyFactory, 65 EricNetworkProxyFactory,
80 proxyAuthenticationRequired, 66 proxyAuthenticationRequired,
81 ) 67 )
68 from eric7.EricWidgets import EricErrorMessage, EricFileDialog, EricMessageBox
69 from eric7.EricWidgets.EricApplication import ericApp
70 from eric7.EricWidgets.EricClickableLabel import EricClickableLabel
71 from eric7.EricWidgets.EricMainWindow import EricMainWindow
72 from eric7.EricWidgets.EricSingleApplication import EricSingleApplicationServer
73 from eric7.EricWidgets.EricToolBarManager import EricToolBarManager
74 from eric7.EricWidgets.EricZoomWidget import EricZoomWidget
75 from eric7.EricXML.SessionReader import SessionReader
76 from eric7.EricXML.TasksReader import TasksReader
77 from eric7.Globals import getConfig
78 from eric7.MultiProject.MultiProject import MultiProject
79 from eric7.PipInterface.Pip import Pip
80 from eric7.PluginManager.PluginManager import PluginManager
81 from eric7.PluginManager.PluginRepositoryDialog import PluginRepositoryDownloadCleanup
82 from eric7.Preferences import Shortcuts
83 from eric7.Project.Project import Project
84 from eric7.QScintilla.SpellChecker import SpellChecker
85 from eric7.Sessions.SessionFile import SessionFile
86 from eric7.Tasks.TasksFile import TasksFile
87 from eric7.Testing.TestingWidget import clearSavedHistories
88 from eric7.Utilities.BackgroundService import BackgroundService
89 from eric7.VirtualEnv.VirtualenvManager import VirtualenvManager
90
91 from . import Config
92 from .Info import BugAddress, FeatureAddress, Program, Version, VersionOnly
93 from .NotificationWidget import NotificationTypes
82 94
83 try: 95 try:
84 from eric7.EricNetwork.EricSslErrorHandler import ( 96 from eric7.EricNetwork.EricSslErrorHandler import (
85 EricSslErrorHandler, 97 EricSslErrorHandler,
86 EricSslErrorState, 98 EricSslErrorState,
87 ) 99 )
88 100
89 SSL_AVAILABLE = True 101 SSL_AVAILABLE = True
90 except ImportError: 102 except ImportError:
91 SSL_AVAILABLE = False 103 SSL_AVAILABLE = False
92
93 from eric7.Globals import getConfig
94 104
95 105
96 class Redirector(QObject): 106 class Redirector(QObject):
97 """ 107 """
98 Helper class used to redirect stdout and stderr to the log window. 108 Helper class used to redirect stdout and stderr to the log window.
285 295
286 splash.showMessage(self.tr("Initializing Basic Services...")) 296 splash.showMessage(self.tr("Initializing Basic Services..."))
287 297
288 # Generate the conda interface 298 # Generate the conda interface
289 logging.debug("Creating Conda Interface...") 299 logging.debug("Creating Conda Interface...")
290 from eric7.CondaInterface.Conda import Conda
291
292 self.condaInterface = Conda(self) 300 self.condaInterface = Conda(self)
293 ericApp().registerObject("Conda", self.condaInterface) 301 ericApp().registerObject("Conda", self.condaInterface)
294 302
295 # Generate the pip interface 303 # Generate the pip interface
296 logging.debug("Creating Pip Interface...") 304 logging.debug("Creating Pip Interface...")
297 from eric7.PipInterface.Pip import Pip
298
299 self.pipInterface = Pip(self) 305 self.pipInterface = Pip(self)
300 ericApp().registerObject("Pip", self.pipInterface) 306 ericApp().registerObject("Pip", self.pipInterface)
301 307
302 # Generate the virtual environment manager 308 # Generate the virtual environment manager
303 logging.debug("Creating Virtual Environments Manager...") 309 logging.debug("Creating Virtual Environments Manager...")
304 from eric7.VirtualEnv.VirtualenvManager import VirtualenvManager
305
306 self.virtualenvManager = VirtualenvManager(self) 310 self.virtualenvManager = VirtualenvManager(self)
307 # register it early because it is needed very soon 311 # register it early because it is needed very soon
308 ericApp().registerObject("VirtualEnvManager", self.virtualenvManager) 312 ericApp().registerObject("VirtualEnvManager", self.virtualenvManager)
309 313
310 # Generate an empty project object and multi project object 314 # Generate an empty project object and multi project object
311 logging.debug("Creating Project Manager...") 315 logging.debug("Creating Project Manager...")
312 from eric7.Project.Project import Project
313
314 self.project = Project(self) 316 self.project = Project(self)
315 ericApp().registerObject("Project", self.project) 317 ericApp().registerObject("Project", self.project)
316 318
317 from eric7.MultiProject.MultiProject import MultiProject
318
319 logging.debug("Creating Multi-Project Manager...") 319 logging.debug("Creating Multi-Project Manager...")
320 self.multiProject = MultiProject(self.project, self) 320 self.multiProject = MultiProject(self.project, self)
321 321
322 # Generate the debug server object 322 # Generate the debug server object
323 logging.debug("Creating Debug Server...") 323 logging.debug("Creating Debug Server...")
324 from eric7.Debugger.DebugServer import DebugServer
325
326 self.__debugServer = DebugServer( 324 self.__debugServer = DebugServer(
327 self.__originalPathString, project=self.project, parent=self 325 self.__originalPathString, project=self.project, parent=self
328 ) 326 )
329 327
330 # Create the background service object 328 # Create the background service object
331 from eric7.Utilities.BackgroundService import BackgroundService
332
333 self.backgroundService = BackgroundService(self) 329 self.backgroundService = BackgroundService(self)
334 330
335 splash.showMessage(self.tr("Initializing Plugin Manager...")) 331 splash.showMessage(self.tr("Initializing Plugin Manager..."))
336 332
337 # Initialize the Plugin Manager (Plugins are initialized later 333 # Initialize the Plugin Manager (Plugins are initialized later
338 from eric7.PluginManager.PluginManager import PluginManager
339
340 self.pluginManager = PluginManager( 334 self.pluginManager = PluginManager(
341 self, self.__disabledPlugins, develPlugin=plugin 335 self, self.__disabledPlugins, develPlugin=plugin
342 ) 336 )
343 337
344 splash.showMessage(self.tr("Generating Main User Interface...")) 338 splash.showMessage(self.tr("Generating Main User Interface..."))
346 self.__webBrowserProcess = None 340 self.__webBrowserProcess = None
347 self.__webBrowserClient = None 341 self.__webBrowserClient = None
348 self.__webBrowserSAName = QUuid.createUuid().toString()[1:-1] 342 self.__webBrowserSAName = QUuid.createUuid().toString()[1:-1]
349 343
350 # set spellchecker defaults 344 # set spellchecker defaults
351 from eric7.QScintilla.SpellChecker import SpellChecker
352
353 SpellChecker.setDefaultLanguage( 345 SpellChecker.setDefaultLanguage(
354 Preferences.getEditor("SpellCheckingDefaultLanguage") 346 Preferences.getEditor("SpellCheckingDefaultLanguage")
355 ) 347 )
356 348
357 with contextlib.suppress(ImportError, AttributeError): 349 with contextlib.suppress(ImportError, AttributeError):
358 from eric7.EricWidgets.EricSpellCheckedTextEdit import SpellCheckMixin 350 from eric7.EricWidgets.EricSpellCheckedTextEdit import ( # __IGNORE_WARNING__
351 SpellCheckMixin,
352 )
359 353
360 pwl = SpellChecker.getUserDictionaryPath(isException=False) 354 pwl = SpellChecker.getUserDictionaryPath(isException=False)
361 pel = SpellChecker.getUserDictionaryPath(isException=True) 355 pel = SpellChecker.getUserDictionaryPath(isException=True)
362 SpellCheckMixin.setDefaultLanguage( 356 SpellCheckMixin.setDefaultLanguage(
363 Preferences.getEditor("SpellCheckingDefaultLanguage"), pwl, pel 357 Preferences.getEditor("SpellCheckingDefaultLanguage"), pwl, pel
372 self.__currentRightWidget = None 366 self.__currentRightWidget = None
373 self.__currentBottomWidget = None 367 self.__currentBottomWidget = None
374 368
375 # Generate the debugger part of the ui 369 # Generate the debugger part of the ui
376 logging.debug("Creating Debugger UI...") 370 logging.debug("Creating Debugger UI...")
377 from eric7.Debugger.DebugUI import DebugUI
378
379 self.debuggerUI = DebugUI( 371 self.debuggerUI = DebugUI(
380 self, self.viewmanager, self.__debugServer, self.debugViewer, self.project 372 self, self.viewmanager, self.__debugServer, self.debugViewer, self.project
381 ) 373 )
382 self.debugViewer.setDebugger(self.debuggerUI) 374 self.debugViewer.setDebugger(self.debuggerUI)
383 self.shell.setDebuggerUI(self.debuggerUI) 375 self.shell.setDebuggerUI(self.debuggerUI)
409 401
410 self.debugViewer.sourceFile.connect(self.viewmanager.showDebugSource) 402 self.debugViewer.sourceFile.connect(self.viewmanager.showDebugSource)
411 403
412 self.taskViewer.displayFile.connect(self.viewmanager.openSourceFile) 404 self.taskViewer.displayFile.connect(self.viewmanager.openSourceFile)
413 405
414 self.projectBrowser.psBrowser.sourceFile[str].connect( 406 self.projectBrowser.appendStderr.connect(self.appendToStderr)
407 self.projectBrowser.appendStdout.connect(self.appendToStdout)
408 self.projectBrowser.sourceFile[str].connect(self.viewmanager.openSourceFile)
409 self.projectBrowser.sourceFile[str, int].connect(
415 self.viewmanager.openSourceFile 410 self.viewmanager.openSourceFile
416 ) 411 )
417 self.projectBrowser.psBrowser.sourceFile[str, int].connect( 412 self.projectBrowser.sourceFile[str, list].connect(
418 self.viewmanager.openSourceFile 413 self.viewmanager.openSourceFile
419 ) 414 )
420 self.projectBrowser.psBrowser.sourceFile[str, list].connect( 415 self.projectBrowser.sourceFile[str, int, str].connect(
421 self.viewmanager.openSourceFile 416 self.viewmanager.openSourceFile
422 ) 417 )
423 self.projectBrowser.psBrowser.sourceFile[str, int, str].connect( 418 self.projectBrowser.closeSourceWindow.connect(self.viewmanager.closeWindow)
424 self.viewmanager.openSourceFile 419 self.projectBrowser.testFile.connect(self.__startTestScript)
425 ) 420 self.projectBrowser.designerFile.connect(self.__designer)
426 self.projectBrowser.psBrowser.closeSourceWindow.connect( 421 self.projectBrowser.uipreview.connect(self.__UIPreviewer)
427 self.viewmanager.closeWindow 422 self.projectBrowser.trpreview[list].connect(self.__TRPreviewer)
428 ) 423 self.projectBrowser.trpreview[list, bool].connect(self.__TRPreviewer)
429 self.projectBrowser.psBrowser.testFile.connect(self.__startTestScript) 424 self.projectBrowser.linguistFile.connect(self.__linguist)
430 425 self.projectBrowser.pixmapEditFile.connect(self.__editPixmap)
431 self.projectBrowser.pfBrowser.designerFile.connect(self.__designer) 426 self.projectBrowser.pixmapFile.connect(self.__showPixmap)
432 self.projectBrowser.pfBrowser.sourceFile.connect( 427 self.projectBrowser.svgFile.connect(self.__showSvg)
433 self.viewmanager.openSourceFile 428 self.projectBrowser.umlFile.connect(self.__showUml)
434 ) 429 self.projectBrowser.binaryFile.connect(self.__openHexEditor)
435 self.projectBrowser.pfBrowser.uipreview.connect(self.__UIPreviewer)
436 self.projectBrowser.pfBrowser.trpreview.connect(self.__TRPreviewer)
437 self.projectBrowser.pfBrowser.closeSourceWindow.connect(
438 self.viewmanager.closeWindow
439 )
440 self.projectBrowser.pfBrowser.appendStderr.connect(self.appendToStderr)
441
442 self.projectBrowser.prBrowser.sourceFile.connect(
443 self.viewmanager.openSourceFile
444 )
445 self.projectBrowser.prBrowser.closeSourceWindow.connect(
446 self.viewmanager.closeWindow
447 )
448 self.projectBrowser.prBrowser.appendStderr.connect(self.appendToStderr)
449
450 self.projectBrowser.ptBrowser.linguistFile.connect(self.__linguist)
451 self.projectBrowser.ptBrowser.sourceFile.connect(
452 self.viewmanager.openSourceFile
453 )
454 self.projectBrowser.ptBrowser.trpreview[list].connect(self.__TRPreviewer)
455 self.projectBrowser.ptBrowser.trpreview[list, bool].connect(self.__TRPreviewer)
456 self.projectBrowser.ptBrowser.closeSourceWindow.connect(
457 self.viewmanager.closeWindow
458 )
459 self.projectBrowser.ptBrowser.appendStdout.connect(self.appendToStdout)
460 self.projectBrowser.ptBrowser.appendStderr.connect(self.appendToStderr)
461
462 self.projectBrowser.piBrowser.sourceFile[str].connect(
463 self.viewmanager.openSourceFile
464 )
465 self.projectBrowser.piBrowser.sourceFile[str, int].connect(
466 self.viewmanager.openSourceFile
467 )
468 self.projectBrowser.piBrowser.closeSourceWindow.connect(
469 self.viewmanager.closeWindow
470 )
471 self.projectBrowser.piBrowser.appendStdout.connect(self.appendToStdout)
472 self.projectBrowser.piBrowser.appendStderr.connect(self.appendToStderr)
473
474 self.projectBrowser.ppBrowser.sourceFile[str].connect(
475 self.viewmanager.openSourceFile
476 )
477 self.projectBrowser.ppBrowser.sourceFile[str, int].connect(
478 self.viewmanager.openSourceFile
479 )
480 self.projectBrowser.ppBrowser.closeSourceWindow.connect(
481 self.viewmanager.closeWindow
482 )
483 self.projectBrowser.ppBrowser.appendStdout.connect(self.appendToStdout)
484 self.projectBrowser.ppBrowser.appendStderr.connect(self.appendToStderr)
485
486 self.projectBrowser.poBrowser.sourceFile.connect(
487 self.viewmanager.openSourceFile
488 )
489 self.projectBrowser.poBrowser.closeSourceWindow.connect(
490 self.viewmanager.closeWindow
491 )
492 self.projectBrowser.poBrowser.pixmapEditFile.connect(self.__editPixmap)
493 self.projectBrowser.poBrowser.pixmapFile.connect(self.__showPixmap)
494 self.projectBrowser.poBrowser.svgFile.connect(self.__showSvg)
495 self.projectBrowser.poBrowser.umlFile.connect(self.__showUml)
496 self.projectBrowser.poBrowser.binaryFile.connect(self.__openHexEditor)
497 430
498 self.project.sourceFile.connect(self.viewmanager.openSourceFile) 431 self.project.sourceFile.connect(self.viewmanager.openSourceFile)
499 self.project.designerFile.connect(self.__designer) 432 self.project.designerFile.connect(self.__designer)
500 self.project.linguistFile.connect(self.__linguist) 433 self.project.linguistFile.connect(self.__linguist)
501 self.project.projectOpened.connect(self.viewmanager.projectOpened) 434 self.project.projectOpened.connect(self.viewmanager.projectOpened)
523 self.debuggerUI.resetUI.connect(self.viewmanager.handleResetUI) 456 self.debuggerUI.resetUI.connect(self.viewmanager.handleResetUI)
524 self.debuggerUI.resetUI.connect(self.debugViewer.handleResetUI) 457 self.debuggerUI.resetUI.connect(self.debugViewer.handleResetUI)
525 self.debuggerUI.resetUI.connect(self.__debuggingDone) 458 self.debuggerUI.resetUI.connect(self.__debuggingDone)
526 self.debuggerUI.debuggingStarted.connect(self.__programChange) 459 self.debuggerUI.debuggingStarted.connect(self.__programChange)
527 self.debuggerUI.debuggingStarted.connect(self.__debuggingStarted) 460 self.debuggerUI.debuggingStarted.connect(self.__debuggingStarted)
528 self.debuggerUI.compileForms.connect( 461 self.debuggerUI.processChangedProjectFiles.connect(
529 self.projectBrowser.pfBrowser.compileChangedForms 462 self.projectBrowser.processChangedProjectFiles
530 ) 463 )
531 self.debuggerUI.compileResources.connect( 464 self.debuggerUI.processChangedProjectFiles.connect(
532 self.projectBrowser.prBrowser.compileChangedResources 465 self.project.processChangedProjectFiles
533 ) 466 )
534 self.debuggerUI.executeMake.connect(self.project.executeMake)
535 self.debuggerUI.appendStdout.connect(self.appendToStdout) 467 self.debuggerUI.appendStdout.connect(self.appendToStdout)
536 468
537 self.__debugServer.clientDisassembly.connect( 469 self.__debugServer.clientDisassembly.connect(
538 self.debugViewer.disassemblyViewer.showDisassembly 470 self.debugViewer.disassemblyViewer.showDisassembly
539 ) 471 )
550 self.appendStdout.connect(self.logViewer.appendToStdout) 482 self.appendStdout.connect(self.logViewer.appendToStdout)
551 self.appendStderr.connect(self.logViewer.appendToStderr) 483 self.appendStderr.connect(self.logViewer.appendToStderr)
552 self.preferencesChanged.connect(self.shell.handlePreferencesChanged) 484 self.preferencesChanged.connect(self.shell.handlePreferencesChanged)
553 self.preferencesChanged.connect(self.project.handlePreferencesChanged) 485 self.preferencesChanged.connect(self.project.handlePreferencesChanged)
554 self.preferencesChanged.connect(self.projectBrowser.handlePreferencesChanged) 486 self.preferencesChanged.connect(self.projectBrowser.handlePreferencesChanged)
555 self.preferencesChanged.connect(
556 self.projectBrowser.psBrowser.handlePreferencesChanged
557 )
558 self.preferencesChanged.connect(
559 self.projectBrowser.pfBrowser.handlePreferencesChanged
560 )
561 self.preferencesChanged.connect(
562 self.projectBrowser.prBrowser.handlePreferencesChanged
563 )
564 self.preferencesChanged.connect(
565 self.projectBrowser.ptBrowser.handlePreferencesChanged
566 )
567 self.preferencesChanged.connect(
568 self.projectBrowser.piBrowser.handlePreferencesChanged
569 )
570 self.preferencesChanged.connect(
571 self.projectBrowser.ppBrowser.handlePreferencesChanged
572 )
573 self.preferencesChanged.connect(
574 self.projectBrowser.poBrowser.handlePreferencesChanged
575 )
576 self.preferencesChanged.connect(self.taskViewer.handlePreferencesChanged) 487 self.preferencesChanged.connect(self.taskViewer.handlePreferencesChanged)
577 self.preferencesChanged.connect(self.pluginManager.preferencesChanged) 488 self.preferencesChanged.connect(self.pluginManager.preferencesChanged)
578 self.preferencesChanged.connect(self.__debugServer.preferencesChanged) 489 self.preferencesChanged.connect(self.__debugServer.preferencesChanged)
579 self.preferencesChanged.connect(self.debugViewer.preferencesChanged) 490 self.preferencesChanged.connect(self.debugViewer.preferencesChanged)
580 self.preferencesChanged.connect( 491 self.preferencesChanged.connect(
750 self.pluginManager.activatePlugins() 661 self.pluginManager.activatePlugins()
751 splash.showMessage(self.tr("Generating Plugins Toolbars...")) 662 splash.showMessage(self.tr("Generating Plugins Toolbars..."))
752 self.pluginManager.initPluginToolbars(self.toolbarManager) 663 self.pluginManager.initPluginToolbars(self.toolbarManager)
753 if Preferences.getPluginManager("StartupCleanup"): 664 if Preferences.getPluginManager("StartupCleanup"):
754 splash.showMessage(self.tr("Cleaning Plugins Download Area...")) 665 splash.showMessage(self.tr("Cleaning Plugins Download Area..."))
755 from eric7.PluginManager.PluginRepositoryDialog import (
756 PluginRepositoryDownloadCleanup,
757 )
758
759 PluginRepositoryDownloadCleanup(quiet=True) 666 PluginRepositoryDownloadCleanup(quiet=True)
760 667
761 # now read the keyboard shortcuts for all the actions 668 # now read the keyboard shortcuts for all the actions
762 from eric7.Preferences import Shortcuts
763
764 Shortcuts.readShortcuts() 669 Shortcuts.readShortcuts()
765 670
766 # restore toolbar manager state 671 # restore toolbar manager state
767 splash.showMessage(self.tr("Restoring Toolbarmanager...")) 672 splash.showMessage(self.tr("Restoring Toolbarmanager..."))
768 self.toolbarManager.restoreState(Preferences.getUI("ToolbarManagerState")) 673 self.toolbarManager.restoreState(Preferences.getUI("ToolbarManagerState"))
795 700
796 # now start the debug client with the most recently used virtual 701 # now start the debug client with the most recently used virtual
797 # environment 702 # environment
798 splash.showMessage(self.tr("Starting Debugger...")) 703 splash.showMessage(self.tr("Starting Debugger..."))
799 if Preferences.getShell("StartWithMostRecentlyUsedEnvironment"): 704 if Preferences.getShell("StartWithMostRecentlyUsedEnvironment"):
800 self.__debugServer.startClient( 705 venvName=Preferences.getShell("LastVirtualEnvironment")
801 False, venvName=Preferences.getShell("LastVirtualEnvironment") 706 if venvName == "embedded environment":
802 ) 707 venvName = ""
708 self.__debugServer.startClient(False, venvName=venvName)
803 else: 709 else:
804 self.__debugServer.startClient(False) 710 self.__debugServer.startClient(False)
805 711
806 # attributes for the network objects 712 # attributes for the network objects
807 self.__networkManager = QNetworkAccessManager(self) 713 self.__networkManager = QNetworkAccessManager(self)
839 745
840 def __createObjects(self): 746 def __createObjects(self):
841 """ 747 """
842 Private method to create the various application objects. 748 Private method to create the various application objects.
843 """ 749 """
750 from eric7 import ViewManager
751 from eric7.Debugger.DebugViewer import DebugViewer
752 from eric7.JediInterface.AssistantJedi import AssistantJedi
753 from eric7.MultiProject.MultiProjectBrowser import MultiProjectBrowser
754 from eric7.PluginManager.PluginRepositoryDialog import PluginRepositoryWidget
755 from eric7.Project.ProjectBrowser import ProjectBrowser
756 from eric7.QScintilla.Shell import ShellAssembly
757 from eric7.Tasks.TaskViewer import TaskViewer
758 from eric7.VCS.StatusWidget import StatusWidget
759 from eric7.VirtualEnv.VirtualenvManagerWidgets import VirtualenvManagerWidget
760
761 from .LogView import LogViewer
762 from .Previewer import Previewer
763 from .PythonAstViewer import PythonAstViewer
764 from .PythonDisViewer import PythonDisViewer
765
844 # Create the view manager depending on the configuration setting 766 # Create the view manager depending on the configuration setting
845 logging.debug("Creating Viewmanager...") 767 logging.debug("Creating Viewmanager...")
846 from eric7 import ViewManager
847
848 self.viewmanager = ViewManager.factory( 768 self.viewmanager = ViewManager.factory(
849 self, self, self.__debugServer, self.pluginManager 769 self, self, self.__debugServer, self.pluginManager
850 ) 770 )
851 771
852 # Create previewer 772 # Create previewer
853 logging.debug("Creating Previewer...") 773 logging.debug("Creating Previewer...")
854 from .Previewer import Previewer
855
856 self.__previewer = Previewer(self.viewmanager) 774 self.__previewer = Previewer(self.viewmanager)
857 775
858 # Create AST viewer 776 # Create AST viewer
859 logging.debug("Creating Python AST Viewer") 777 logging.debug("Creating Python AST Viewer")
860 from .PythonAstViewer import PythonAstViewer
861
862 self.__astViewer = PythonAstViewer(self.viewmanager) 778 self.__astViewer = PythonAstViewer(self.viewmanager)
863 779
864 # Create DIS viewer 780 # Create DIS viewer
865 logging.debug("Creating Python Disassembly Viewer") 781 logging.debug("Creating Python Disassembly Viewer")
866 from .PythonDisViewer import PythonDisViewer
867
868 self.__disViewer = PythonDisViewer(self.viewmanager) 782 self.__disViewer = PythonDisViewer(self.viewmanager)
869 783
870 # Create the project browser 784 # Create the project browser
871 logging.debug("Creating Project Browser...") 785 logging.debug("Creating Project Browser...")
872 from eric7.Project.ProjectBrowser import ProjectBrowser
873
874 self.projectBrowser = ProjectBrowser(self.project) 786 self.projectBrowser = ProjectBrowser(self.project)
875 787
876 # Create the multi project browser 788 # Create the multi project browser
877 logging.debug("Creating Multiproject Browser...") 789 logging.debug("Creating Multiproject Browser...")
878 from eric7.MultiProject.MultiProjectBrowser import MultiProjectBrowser
879
880 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject, self.project) 790 self.multiProjectBrowser = MultiProjectBrowser(self.multiProject, self.project)
881 791
882 # Create the task viewer part of the user interface 792 # Create the task viewer part of the user interface
883 logging.debug("Creating Task Viewer...") 793 logging.debug("Creating Task Viewer...")
884 from eric7.Tasks.TaskViewer import TaskViewer
885
886 self.taskViewer = TaskViewer(None, self.project) 794 self.taskViewer = TaskViewer(None, self.project)
887 795
888 # Create the log viewer part of the user interface 796 # Create the log viewer part of the user interface
889 logging.debug("Creating Log Viewer...") 797 logging.debug("Creating Log Viewer...")
890 from .LogView import LogViewer
891
892 self.logViewer = LogViewer(self) 798 self.logViewer = LogViewer(self)
893 799
894 # Create the debug viewer 800 # Create the debug viewer
895 logging.debug("Creating Debug Viewer...") 801 logging.debug("Creating Debug Viewer...")
896 from eric7.Debugger.DebugViewer import DebugViewer
897
898 self.debugViewer = DebugViewer(self.__debugServer) 802 self.debugViewer = DebugViewer(self.__debugServer)
899 803
900 # Create the shell 804 # Create the shell
901 logging.debug("Creating Shell...") 805 logging.debug("Creating Shell...")
902 from eric7.QScintilla.Shell import ShellAssembly
903
904 self.shellAssembly = ShellAssembly( 806 self.shellAssembly = ShellAssembly(
905 self.__debugServer, self.viewmanager, self.project, True 807 self.__debugServer, self.viewmanager, self.project, True
906 ) 808 )
907 self.shell = self.shellAssembly.shell() 809 self.shell = self.shellAssembly.shell()
908 810
909 if Preferences.getUI("ShowTemplateViewer"): 811 if Preferences.getUI("ShowTemplateViewer"):
910 # Create the template viewer part of the user interface 812 # Create the template viewer part of the user interface
911 logging.debug("Creating Template Viewer...") 813 logging.debug("Creating Template Viewer...")
912 from eric7.Templates.TemplateViewer import TemplateViewer 814 from eric7.Templates.TemplateViewer import ( # __IGNORE_WARNING_I101__
815 TemplateViewer,
816 )
913 817
914 self.templateViewer = TemplateViewer(None, self.viewmanager) 818 self.templateViewer = TemplateViewer(None, self.viewmanager)
915 else: 819 else:
916 logging.debug("Template Viewer disabled") 820 logging.debug("Template Viewer disabled")
917 self.templateViewer = None 821 self.templateViewer = None
918 822
919 if Preferences.getUI("ShowFileBrowser"): 823 if Preferences.getUI("ShowFileBrowser"):
920 # Create the file browser 824 # Create the file browser
921 logging.debug("Creating File Browser...") 825 logging.debug("Creating File Browser...")
922 from .Browser import Browser 826 from .Browser import Browser # __IGNORE_WARNING_I101__
923 827
924 self.browser = Browser() 828 self.browser = Browser()
925 else: 829 else:
926 logging.debug("File Browser disabled") 830 logging.debug("File Browser disabled")
927 self.browser = None 831 self.browser = None
928 832
929 if Preferences.getUI("ShowSymbolsViewer"): 833 if Preferences.getUI("ShowSymbolsViewer"):
930 # Create the symbols viewer 834 # Create the symbols viewer
931 logging.debug("Creating Symbols Viewer...") 835 logging.debug("Creating Symbols Viewer...")
932 from .SymbolsWidget import SymbolsWidget 836 from .SymbolsWidget import SymbolsWidget # __IGNORE_WARNING_I101__
933 837
934 self.symbolsViewer = SymbolsWidget() 838 self.symbolsViewer = SymbolsWidget()
935 else: 839 else:
936 logging.debug("Symbols Viewer disabled") 840 logging.debug("Symbols Viewer disabled")
937 self.symbolsViewer = None 841 self.symbolsViewer = None
938 842
939 if Preferences.getUI("ShowCodeDocumentationViewer"): 843 if Preferences.getUI("ShowCodeDocumentationViewer"):
940 # Create the code documentation viewer 844 # Create the code documentation viewer
941 logging.debug("Creating Code Documentation Viewer...") 845 logging.debug("Creating Code Documentation Viewer...")
942 from .CodeDocumentationViewer import CodeDocumentationViewer 846 from .CodeDocumentationViewer import ( # __IGNORE_WARNING_I101__
847 CodeDocumentationViewer,
848 )
943 849
944 self.codeDocumentationViewer = CodeDocumentationViewer(self) 850 self.codeDocumentationViewer = CodeDocumentationViewer(self)
945 else: 851 else:
946 logging.debug("Code Documentation Viewer disabled") 852 logging.debug("Code Documentation Viewer disabled")
947 self.codeDocumentationViewer = None 853 self.codeDocumentationViewer = None
948 854
949 if Preferences.getUI("ShowPyPIPackageManager"): 855 if Preferences.getUI("ShowPyPIPackageManager"):
950 # Create the PyPI package manager 856 # Create the PyPI package manager
951 logging.debug("Creating PyPI Package Manager...") 857 logging.debug("Creating PyPI Package Manager...")
952 from eric7.PipInterface.PipPackagesWidget import PipPackagesWidget 858 from eric7.PipInterface.PipPackagesWidget import ( # __IGNORE_WARNING__
859 PipPackagesWidget,
860 )
953 861
954 self.pipWidget = PipPackagesWidget(self.pipInterface) 862 self.pipWidget = PipPackagesWidget(self.pipInterface)
955 else: 863 else:
956 logging.debug("PyPI Package Manager disabled") 864 logging.debug("PyPI Package Manager disabled")
957 self.pipWidget = None 865 self.pipWidget = None
958 866
959 if Preferences.getUI("ShowCondaPackageManager"): 867 if Preferences.getUI("ShowCondaPackageManager"):
960 # Create the conda package manager 868 # Create the conda package manager
961 logging.debug("Creating Conda Package Manager...") 869 logging.debug("Creating Conda Package Manager...")
962 from eric7.CondaInterface.CondaPackagesWidget import CondaPackagesWidget 870 from eric7.CondaInterface.CondaPackagesWidget import ( # __IGNORE_WARNING__
871 CondaPackagesWidget,
872 )
963 873
964 self.condaWidget = CondaPackagesWidget(self.condaInterface) 874 self.condaWidget = CondaPackagesWidget(self.condaInterface)
965 else: 875 else:
966 logging.debug("Conda Package Manager disabled") 876 logging.debug("Conda Package Manager disabled")
967 self.condaWidget = None 877 self.condaWidget = None
968 878
969 if Preferences.getUI("ShowCooperation"): 879 if Preferences.getUI("ShowCooperation"):
970 # Create the chat part of the user interface 880 # Create the chat part of the user interface
971 logging.debug("Creating Chat Widget...") 881 logging.debug("Creating Chat Widget...")
972 from eric7.Cooperation.ChatWidget import ChatWidget 882 from eric7.Cooperation.ChatWidget import ( # __IGNORE_WARNING_I101__
883 ChatWidget,
884 )
973 885
974 self.cooperation = ChatWidget(self) 886 self.cooperation = ChatWidget(self)
975 else: 887 else:
976 logging.debug("Chat Widget disabled") 888 logging.debug("Chat Widget disabled")
977 self.cooperation = None 889 self.cooperation = None
978 890
979 if Preferences.getUI("ShowIrc"): 891 if Preferences.getUI("ShowIrc"):
980 # Create the IRC part of the user interface 892 # Create the IRC part of the user interface
981 logging.debug("Creating IRC Widget...") 893 logging.debug("Creating IRC Widget...")
982 from eric7.Network.IRC.IrcWidget import IrcWidget 894 from eric7.Network.IRC.IrcWidget import IrcWidget # __IGNORE_WARNING_I101__
983 895
984 self.irc = IrcWidget(self) 896 self.irc = IrcWidget(self)
985 else: 897 else:
986 logging.debug("IRC Widget disabled") 898 logging.debug("IRC Widget disabled")
987 self.irc = None 899 self.irc = None
988 900
989 if Preferences.getUI("ShowMicroPython"): 901 if Preferences.getUI("ShowMicroPython"):
990 # Create the MicroPython part of the user interface 902 # Create the MicroPython part of the user interface
991 logging.debug("Creating MicroPython Widget...") 903 logging.debug("Creating MicroPython Widget...")
992 from eric7.MicroPython.MicroPythonWidget import MicroPythonWidget 904 from eric7.MicroPython.MicroPythonWidget import ( # __IGNORE_WARNING_I101__
905 MicroPythonWidget,
906 )
993 907
994 self.microPythonWidget = MicroPythonWidget(self) 908 self.microPythonWidget = MicroPythonWidget(self)
995 else: 909 else:
996 logging.debug("MicroPython Widget disabled") 910 logging.debug("MicroPython Widget disabled")
997 self.microPythonWidget = None 911 self.microPythonWidget = None
998 912
999 if Preferences.getUI("ShowNumbersViewer"): 913 if Preferences.getUI("ShowNumbersViewer"):
1000 # Create the numbers viewer 914 # Create the numbers viewer
1001 logging.debug("Creating Numbers Viewer...") 915 logging.debug("Creating Numbers Viewer...")
1002 from .NumbersWidget import NumbersWidget 916 from .NumbersWidget import NumbersWidget # __IGNORE_WARNING_I101__
1003 917
1004 self.numbersViewer = NumbersWidget() 918 self.numbersViewer = NumbersWidget()
1005 else: 919 else:
1006 logging.debug("Numbers Viewer disabled") 920 logging.debug("Numbers Viewer disabled")
1007 self.numbersViewer = None 921 self.numbersViewer = None
1008 922
1009 # Create the Jedi Assistant 923 # Create the Jedi Assistant
1010 logging.debug("Creating Jedi Assistant...") 924 logging.debug("Creating Jedi Assistant...")
1011 from eric7.JediInterface.AssistantJedi import AssistantJedi
1012
1013 self.jediAssistant = AssistantJedi(self, self.viewmanager, self.project) 925 self.jediAssistant = AssistantJedi(self, self.viewmanager, self.project)
1014 926
1015 # Create the plug-ins repository viewer 927 # Create the plug-ins repository viewer
1016 from eric7.PluginManager.PluginRepositoryDialog import PluginRepositoryWidget
1017
1018 self.pluginRepositoryViewer = PluginRepositoryWidget( 928 self.pluginRepositoryViewer = PluginRepositoryWidget(
1019 self.pluginManager, integrated=True, parent=self 929 self.pluginManager, integrated=True, parent=self
1020 ) 930 )
1021 self.pluginRepositoryViewer.closeAndInstall.connect( 931 self.pluginRepositoryViewer.closeAndInstall.connect(
1022 self.__installDownloadedPlugins 932 self.__installDownloadedPlugins
1023 ) 933 )
1024 934
1025 # Create the virtual environments management widget 935 # Create the virtual environments management widget
1026 from eric7.VirtualEnv.VirtualenvManagerWidgets import VirtualenvManagerWidget
1027
1028 self.__virtualenvManagerWidget = VirtualenvManagerWidget( 936 self.__virtualenvManagerWidget = VirtualenvManagerWidget(
1029 self.virtualenvManager, self 937 self.virtualenvManager, self
1030 ) 938 )
1031 939
1032 self.__findFileDialog = None 940 self.__findFileDialog = None
1033 self.__replaceFileDialog = None 941 self.__replaceFileDialog = None
1034 if Preferences.getUI("ShowFindFileWidget"): 942 if Preferences.getUI("ShowFindFileWidget"):
1035 # Create the find in files widget 943 # Create the find in files widget
1036 from .FindFileWidget import FindFileWidget 944 from .FindFileWidget import FindFileWidget # __IGNORE_WARNING_I101__
1037 945
1038 self.__findFileWidget = FindFileWidget(self.project, self) 946 self.__findFileWidget = FindFileWidget(self.project, self)
1039 self.__findFileWidget.sourceFile.connect(self.viewmanager.openSourceFile) 947 self.__findFileWidget.sourceFile.connect(self.viewmanager.openSourceFile)
1040 self.__findFileWidget.designerFile.connect(self.__designer) 948 self.__findFileWidget.designerFile.connect(self.__designer)
1041 self.__findFileWidget.linguistFile.connect(self.__linguist) 949 self.__findFileWidget.linguistFile.connect(self.__linguist)
1047 self.__findFileWidget = None 955 self.__findFileWidget = None
1048 956
1049 self.__findLocationDialog = None 957 self.__findLocationDialog = None
1050 if Preferences.getUI("ShowFindLocationWidget"): 958 if Preferences.getUI("ShowFindLocationWidget"):
1051 # Create the find location (file) widget 959 # Create the find location (file) widget
1052 from .FindLocationWidget import FindLocationWidget 960 from .FindLocationWidget import ( # __IGNORE_WARNING_I101__
961 FindLocationWidget,
962 )
1053 963
1054 self.__findLocationWidget = FindLocationWidget(self.project, self) 964 self.__findLocationWidget = FindLocationWidget(self.project, self)
1055 self.__findLocationWidget.sourceFile.connect( 965 self.__findLocationWidget.sourceFile.connect(
1056 self.viewmanager.openSourceFile 966 self.viewmanager.openSourceFile
1057 ) 967 )
1063 self.__findLocationWidget.umlFile.connect(self.__showUml) 973 self.__findLocationWidget.umlFile.connect(self.__showUml)
1064 else: 974 else:
1065 self.__findLocationWidget = None 975 self.__findLocationWidget = None
1066 976
1067 # Create the VCS Status widget 977 # Create the VCS Status widget
1068 from eric7.VCS.StatusWidget import StatusWidget
1069
1070 self.__vcsStatusWidget = StatusWidget(self.project, self.viewmanager, self) 978 self.__vcsStatusWidget = StatusWidget(self.project, self.viewmanager, self)
1071 979
1072 if ( 980 if (
1073 Preferences.getUI("ShowInternalHelpViewer") 981 Preferences.getUI("ShowInternalHelpViewer")
1074 or Preferences.getHelp("HelpViewerType") == 0 982 or Preferences.getHelp("HelpViewerType") == 0
1075 ): 983 ):
1076 # Create the embedded help viewer 984 # Create the embedded help viewer
1077 logging.debug("Creating Internal Help Viewer...") 985 logging.debug("Creating Internal Help Viewer...")
1078 from eric7.HelpViewer.HelpViewerWidget import HelpViewerWidget 986 from eric7.HelpViewer.HelpViewerWidget import ( # __IGNORE_WARNING_I101__
987 HelpViewerWidget,
988 )
1079 989
1080 self.__helpViewerWidget = HelpViewerWidget(self) 990 self.__helpViewerWidget = HelpViewerWidget(self)
1081 else: 991 else:
1082 logging.debug("Internal Help Viewer disabled...") 992 logging.debug("Internal Help Viewer disabled...")
1083 self.__helpViewerWidget = None 993 self.__helpViewerWidget = None
1138 def __createToolboxesLayout(self): 1048 def __createToolboxesLayout(self):
1139 """ 1049 """
1140 Private method to create the Toolboxes layout. 1050 Private method to create the Toolboxes layout.
1141 """ 1051 """
1142 from eric7.EricWidgets.EricToolBox import ( 1052 from eric7.EricWidgets.EricToolBox import (
1053 EricHorizontalToolBox,
1143 EricVerticalToolBox, 1054 EricVerticalToolBox,
1144 EricHorizontalToolBox,
1145 ) 1055 )
1146 1056
1147 logging.debug("Creating Toolboxes Layout...") 1057 logging.debug("Creating Toolboxes Layout...")
1148 1058
1149 # Create the left toolbox 1059 # Create the left toolbox
4363 4273
4364 def __initStatusbar(self): 4274 def __initStatusbar(self):
4365 """ 4275 """
4366 Private slot to set up the status bar. 4276 Private slot to set up the status bar.
4367 """ 4277 """
4278 from eric7.VCS.StatusMonitorLed import StatusMonitorLedWidget
4279
4368 self.__statusBar = self.statusBar() 4280 self.__statusBar = self.statusBar()
4369 self.__statusBar.setSizeGripEnabled(True) 4281 self.__statusBar.setSizeGripEnabled(True)
4370 4282
4371 self.sbLanguage = EricClickableLabel(self.__statusBar) 4283 self.sbLanguage = EricClickableLabel(self.__statusBar)
4372 self.__statusBar.addPermanentWidget(self.sbLanguage) 4284 self.__statusBar.addPermanentWidget(self.sbLanguage)
4443 self.sbEncoding, 4355 self.sbEncoding,
4444 self.sbLanguage, 4356 self.sbLanguage,
4445 self.sbEol, 4357 self.sbEol,
4446 self.sbZoom, 4358 self.sbZoom,
4447 ) 4359 )
4448
4449 from eric7.VCS.StatusMonitorLed import StatusMonitorLedWidget
4450 4360
4451 self.sbVcsMonitorLed = StatusMonitorLedWidget(self.project, self.__statusBar) 4361 self.sbVcsMonitorLed = StatusMonitorLedWidget(self.project, self.__statusBar)
4452 self.__statusBar.addPermanentWidget(self.sbVcsMonitorLed) 4362 self.__statusBar.addPermanentWidget(self.sbVcsMonitorLed)
4453 4363
4454 self.networkIcon = EricNetworkIcon(self.__statusBar) 4364 self.networkIcon = EricNetworkIcon(self.__statusBar)
4603 Private slot to handle the Versions dialog. 4513 Private slot to handle the Versions dialog.
4604 """ 4514 """
4605 from .VersionsDialog import VersionsDialog 4515 from .VersionsDialog import VersionsDialog
4606 4516
4607 try: 4517 try:
4608 try:
4609 from PyQt6 import sip
4610 except ImportError:
4611 import sip
4612 sip_version_str = sip.SIP_VERSION_STR 4518 sip_version_str = sip.SIP_VERSION_STR
4613 except (ImportError, AttributeError): 4519 except AttributeError:
4614 sip_version_str = "sip version not available" 4520 sip_version_str = "sip version not available"
4615 4521
4616 sizeStr = "64-Bit" if sys.maxsize > 2**32 else "32-Bit" 4522 sizeStr = "64-Bit" if sys.maxsize > 2**32 else "32-Bit"
4617 4523
4618 versionText = self.tr("""<h2>Version Numbers</h2>""" """<table>""") 4524 versionText = self.tr("""<h2>Version Numbers</h2>""" """<table>""")
4630 # PyQt versions 4536 # PyQt versions
4631 versionText += ("""<tr><td><b>PyQt6</b></td><td>{0}</td></tr>""").format( 4537 versionText += ("""<tr><td><b>PyQt6</b></td><td>{0}</td></tr>""").format(
4632 PYQT_VERSION_STR 4538 PYQT_VERSION_STR
4633 ) 4539 )
4634 with contextlib.suppress(ImportError, AttributeError): 4540 with contextlib.suppress(ImportError, AttributeError):
4635 from PyQt6 import QtCharts 4541 from PyQt6 import QtCharts # __IGNORE_WARNING_I10__
4636 4542
4637 versionText += ( 4543 versionText += (
4638 """<tr><td><b>PyQt6-Charts</b></td><td>{0}</td></tr>""" 4544 """<tr><td><b>PyQt6-Charts</b></td><td>{0}</td></tr>"""
4639 ).format(QtCharts.PYQT_CHART_VERSION_STR) 4545 ).format(QtCharts.PYQT_CHART_VERSION_STR)
4640 with contextlib.suppress(ImportError, AttributeError): 4546 with contextlib.suppress(ImportError, AttributeError):
4641 from PyQt6 import QtWebEngineCore 4547 from PyQt6 import QtWebEngineCore # __IGNORE_WARNING_I10__
4642 4548
4643 versionText += ( 4549 versionText += (
4644 """<tr><td><b>PyQt6-WebEngine</b></td><td>{0}</td></tr>""" 4550 """<tr><td><b>PyQt6-WebEngine</b></td><td>{0}</td></tr>"""
4645 ).format(QtWebEngineCore.PYQT_WEBENGINE_VERSION_STR) 4551 ).format(QtWebEngineCore.PYQT_WEBENGINE_VERSION_STR)
4646 versionText += ( 4552 versionText += (
4650 sip_version_str 4556 sip_version_str
4651 ) 4557 )
4652 4558
4653 # webengine (chromium) version 4559 # webengine (chromium) version
4654 with contextlib.suppress(ImportError): 4560 with contextlib.suppress(ImportError):
4655 from eric7.WebBrowser.Tools import WebBrowserTools 4561 from eric7.WebBrowser.Tools import ( # __IGNORE_WARNING_I101__
4562 WebBrowserTools,
4563 )
4656 4564
4657 ( 4565 (
4658 chromiumVersion, 4566 chromiumVersion,
4659 chromiumSecurityVersion, 4567 chromiumSecurityVersion,
4660 ) = WebBrowserTools.getWebEngineVersions()[0:2] 4568 ) = WebBrowserTools.getWebEngineVersions()[0:2]
4709 @param mode mode of the email dialog (string, "bug" or "feature") 4617 @param mode mode of the email dialog (string, "bug" or "feature")
4710 @param attachFile name of a file to attach to the email (string) 4618 @param attachFile name of a file to attach to the email (string)
4711 @param deleteAttachFile flag indicating to delete the attached file 4619 @param deleteAttachFile flag indicating to delete the attached file
4712 after it has been sent (boolean) 4620 after it has been sent (boolean)
4713 """ 4621 """
4622 from .EmailDialog import EmailDialog
4623
4714 if Preferences.getUser("UseSystemEmailClient"): 4624 if Preferences.getUser("UseSystemEmailClient"):
4715 self.__showSystemEmailClient(mode, attachFile, deleteAttachFile) 4625 self.__showSystemEmailClient(mode, attachFile, deleteAttachFile)
4716 else: 4626 else:
4717 if not Preferences.getUser("UseGoogleMailOAuth2") and ( 4627 if not Preferences.getUser("UseGoogleMailOAuth2") and (
4718 Preferences.getUser("Email") == "" 4628 Preferences.getUser("Email") == ""
4728 ), 4638 ),
4729 ) 4639 )
4730 self.showPreferences("emailPage") 4640 self.showPreferences("emailPage")
4731 return 4641 return
4732 4642
4733 from .EmailDialog import EmailDialog
4734
4735 self.dlg = EmailDialog(mode=mode) 4643 self.dlg = EmailDialog(mode=mode)
4736 if attachFile is not None: 4644 if attachFile is not None:
4737 self.dlg.attachFile(attachFile, deleteAttachFile) 4645 self.dlg.attachFile(attachFile, deleteAttachFile)
4738 self.dlg.show() 4646 self.dlg.show()
4739 4647
4771 def checkForErrorLog(self): 4679 def checkForErrorLog(self):
4772 """ 4680 """
4773 Public method to check for the presence of an error log and ask the 4681 Public method to check for the presence of an error log and ask the
4774 user, what to do with it. 4682 user, what to do with it.
4775 """ 4683 """
4684 from .ErrorLogDialog import ErrorLogDialog
4685
4776 if Preferences.getUI("CheckErrorLog"): 4686 if Preferences.getUI("CheckErrorLog"):
4777 logFile = os.path.join(Utilities.getConfigDir(), self.ErrorLogFileName) 4687 logFile = os.path.join(Utilities.getConfigDir(), self.ErrorLogFileName)
4778 if os.path.exists(logFile): 4688 if os.path.exists(logFile):
4779 from .ErrorLogDialog import ErrorLogDialog
4780
4781 dlg = ErrorLogDialog(logFile, False, self) 4689 dlg = ErrorLogDialog(logFile, False, self)
4782 dlg.exec() 4690 dlg.exec()
4783 4691
4784 def __hasErrorLog(self): 4692 def __hasErrorLog(self):
4785 """ 4693 """
4792 4700
4793 def __showErrorLog(self): 4701 def __showErrorLog(self):
4794 """ 4702 """
4795 Private slot to show the most recent error log message. 4703 Private slot to show the most recent error log message.
4796 """ 4704 """
4705 from .ErrorLogDialog import ErrorLogDialog
4706
4797 logFile = os.path.join(Utilities.getConfigDir(), self.ErrorLogFileName) 4707 logFile = os.path.join(Utilities.getConfigDir(), self.ErrorLogFileName)
4798 if os.path.exists(logFile): 4708 if os.path.exists(logFile):
4799 from .ErrorLogDialog import ErrorLogDialog
4800
4801 dlg = ErrorLogDialog(logFile, True, self) 4709 dlg = ErrorLogDialog(logFile, True, self)
4802 dlg.show() 4710 dlg.show()
4803 4711
4804 def __showInstallInfo(self): 4712 def __showInstallInfo(self):
4805 """ 4713 """
4814 4722
4815 def __compareFiles(self): 4723 def __compareFiles(self):
4816 """ 4724 """
4817 Private slot to handle the Compare Files dialog. 4725 Private slot to handle the Compare Files dialog.
4818 """ 4726 """
4727 from .DiffDialog import DiffDialog
4728
4819 aw = self.viewmanager.activeWindow() 4729 aw = self.viewmanager.activeWindow()
4820 fn = aw and aw.getFileName() or None 4730 fn = aw and aw.getFileName() or None
4821 if self.diffDlg is None: 4731 if self.diffDlg is None:
4822 from .DiffDialog import DiffDialog
4823
4824 self.diffDlg = DiffDialog() 4732 self.diffDlg = DiffDialog()
4825 self.diffDlg.show(fn) 4733 self.diffDlg.show(fn)
4826 4734
4827 def __compareFilesSbs(self): 4735 def __compareFilesSbs(self):
4828 """ 4736 """
4829 Private slot to handle the Compare Files dialog. 4737 Private slot to handle the Compare Files dialog.
4830 """ 4738 """
4739 from .CompareDialog import CompareDialog
4740
4831 aw = self.viewmanager.activeWindow() 4741 aw = self.viewmanager.activeWindow()
4832 fn = aw and aw.getFileName() or None 4742 fn = aw and aw.getFileName() or None
4833 if self.compareDlg is None: 4743 if self.compareDlg is None:
4834 from .CompareDialog import CompareDialog
4835
4836 self.compareDlg = CompareDialog() 4744 self.compareDlg = CompareDialog()
4837 self.compareDlg.show(fn) 4745 self.compareDlg.show(fn)
4838 4746
4839 def __openMiniEditor(self): 4747 def __openMiniEditor(self):
4840 """ 4748 """
5671 def __activateShell(self): 5579 def __activateShell(self):
5672 """ 5580 """
5673 Private slot to handle the activation of the Shell window. 5581 Private slot to handle the activation of the Shell window.
5674 """ 5582 """
5675 if self.__layoutType == "Toolboxes": 5583 if self.__layoutType == "Toolboxes":
5676 self.__shellParent.show() 5584 self.hToolboxDock.show()
5677 self.__shellParent.widget().setCurrentWidget(self.shellAssembly) 5585 self.hToolboxDock.setCurrentWidget(self.shellAssembly)
5678 elif self.__layoutType == "Sidebars": 5586 elif self.__layoutType == "Sidebars":
5679 self.__shellParent.show() 5587 self.bottomSidebar.show()
5680 self.__shellParent.setCurrentWidget(self.shellAssembly) 5588 self.bottomSidebar.setCurrentWidget(self.shellAssembly)
5681 self.shell.setFocus(Qt.FocusReason.ActiveWindowFocusReason) 5589 self.shell.setFocus(Qt.FocusReason.ActiveWindowFocusReason)
5682 5590
5683 def __activateLogViewer(self): 5591 def __activateLogViewer(self):
5684 """ 5592 """
5685 Private slot to handle the activation of the Log Viewer. 5593 Private slot to handle the activation of the Log Viewer.
5965 5873
5966 def __createTestingDialog(self): 5874 def __createTestingDialog(self):
5967 """ 5875 """
5968 Private slot to generate the testing dialog on demand. 5876 Private slot to generate the testing dialog on demand.
5969 """ 5877 """
5878 from eric7.Testing.TestingWidget import TestingWidget
5879
5970 if self.__testingWidget is None: 5880 if self.__testingWidget is None:
5971 from eric7.Testing.TestingWidget import TestingWidget
5972
5973 self.__testingWidget = TestingWidget() 5881 self.__testingWidget = TestingWidget()
5974 self.__testingWidget.testFile.connect(self.viewmanager.setFileLine) 5882 self.__testingWidget.testFile.connect(self.viewmanager.setFileLine)
5975 self.__testingWidget.testRunStopped.connect(self.__testingStopped) 5883 self.__testingWidget.testRunStopped.connect(self.__testingStopped)
5976 5884
5977 def __testingStopped(self): 5885 def __testingStopped(self):
7162 """ 7070 """
7163 Public slot to set the preferences. 7071 Public slot to set the preferences.
7164 7072
7165 @param pageName name of the configuration page to show (string) 7073 @param pageName name of the configuration page to show (string)
7166 """ 7074 """
7075 from eric7.Preferences.ConfigurationDialog import ConfigurationDialog
7076
7167 if self.__configurationDialog is None: 7077 if self.__configurationDialog is None:
7168 # only one invocation at a time is allowed 7078 # only one invocation at a time is allowed
7169 from eric7.Preferences.ConfigurationDialog import ConfigurationDialog
7170
7171 self.__configurationDialog = ConfigurationDialog( 7079 self.__configurationDialog = ConfigurationDialog(
7172 self, 7080 self,
7173 "Configuration", 7081 "Configuration",
7174 expandedEntries=self.__expandedConfigurationEntries, 7082 expandedEntries=self.__expandedConfigurationEntries,
7175 ) 7083 )
7241 @pyqtSlot() 7149 @pyqtSlot()
7242 def __preferencesChanged(self): 7150 def __preferencesChanged(self):
7243 """ 7151 """
7244 Private slot to handle a change of the preferences. 7152 Private slot to handle a change of the preferences.
7245 """ 7153 """
7154 from eric7.HexEdit.HexEditMainWindow import HexEditMainWindow
7155
7246 self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet")) 7156 self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet"))
7247 7157
7248 if Preferences.getUI("SingleApplicationMode"): 7158 if Preferences.getUI("SingleApplicationMode"):
7249 if self.SAServer is None: 7159 if self.SAServer is None:
7250 self.SAServer = EricSingleApplicationServer() 7160 self.SAServer = EricSingleApplicationServer()
7277 else: 7187 else:
7278 self.__setWindowCaption(editor="") 7188 self.__setWindowCaption(editor="")
7279 7189
7280 self.performVersionCheck() 7190 self.performVersionCheck()
7281 7191
7282 from eric7.QScintilla.SpellChecker import SpellChecker
7283
7284 SpellChecker.setDefaultLanguage( 7192 SpellChecker.setDefaultLanguage(
7285 Preferences.getEditor("SpellCheckingDefaultLanguage") 7193 Preferences.getEditor("SpellCheckingDefaultLanguage")
7286 ) 7194 )
7287 7195
7288 with contextlib.suppress(ImportError, AttributeError): 7196 with contextlib.suppress(ImportError, AttributeError):
7289 from eric7.EricWidgets.EricSpellCheckedTextEdit import SpellCheckMixin 7197 from eric7.EricWidgets.EricSpellCheckedTextEdit import ( # __IGNORE_WARNING__
7198 SpellCheckMixin,
7199 )
7290 7200
7291 pwl = SpellChecker.getUserDictionaryPath(isException=False) 7201 pwl = SpellChecker.getUserDictionaryPath(isException=False)
7292 pel = SpellChecker.getUserDictionaryPath(isException=True) 7202 pel = SpellChecker.getUserDictionaryPath(isException=True)
7293 SpellCheckMixin.setDefaultLanguage( 7203 SpellCheckMixin.setDefaultLanguage(
7294 Preferences.getEditor("SpellCheckingDefaultLanguage"), pwl, pel 7204 Preferences.getEditor("SpellCheckingDefaultLanguage"), pwl, pel
7299 else: 7209 else:
7300 self.__proxyFactory = EricNetworkProxyFactory() 7210 self.__proxyFactory = EricNetworkProxyFactory()
7301 QNetworkProxyFactory.setApplicationProxyFactory(self.__proxyFactory) 7211 QNetworkProxyFactory.setApplicationProxyFactory(self.__proxyFactory)
7302 QNetworkProxyFactory.setUseSystemConfiguration(False) 7212 QNetworkProxyFactory.setUseSystemConfiguration(False)
7303 7213
7304 from eric7.HexEdit.HexEditMainWindow import HexEditMainWindow
7305
7306 for hexEditor in HexEditMainWindow.windows: 7214 for hexEditor in HexEditMainWindow.windows:
7307 hexEditor.preferencesChanged() 7215 hexEditor.preferencesChanged()
7308 7216
7309 # set the keyboard input interval 7217 # set the keyboard input interval
7310 interval = Preferences.getUI("KeyboardInputInterval") 7218 interval = Preferences.getUI("KeyboardInputInterval")
7332 7240
7333 self.masterPasswordChanged.emit(oldPassword, newPassword) 7241 self.masterPasswordChanged.emit(oldPassword, newPassword)
7334 Preferences.convertPasswords(oldPassword, newPassword) 7242 Preferences.convertPasswords(oldPassword, newPassword)
7335 variant = Globals.getWebBrowserSupport() 7243 variant = Globals.getWebBrowserSupport()
7336 if variant == "QtWebEngine": 7244 if variant == "QtWebEngine":
7337 from eric7.WebBrowser.Passwords.PasswordManager import PasswordManager 7245 from eric7.WebBrowser.Passwords.PasswordManager import ( # __IGNORE_WARNING__
7246 PasswordManager,
7247 )
7338 7248
7339 pwManager = PasswordManager() 7249 pwManager = PasswordManager()
7340 pwManager.masterPasswordChanged(oldPassword, newPassword) 7250 pwManager.masterPasswordChanged(oldPassword, newPassword)
7341 Utilities.crypto.changeRememberedMaster(newPassword) 7251 Utilities.crypto.changeRememberedMaster(newPassword)
7342 7252
7349 def __showExternalTools(self): 7259 def __showExternalTools(self):
7350 """ 7260 """
7351 Private slot to display a dialog show a list of external tools used 7261 Private slot to display a dialog show a list of external tools used
7352 by eric. 7262 by eric.
7353 """ 7263 """
7264 from eric7.Preferences.ProgramsDialog import ProgramsDialog
7265
7354 if self.programsDialog is None: 7266 if self.programsDialog is None:
7355 from eric7.Preferences.ProgramsDialog import ProgramsDialog
7356
7357 self.programsDialog = ProgramsDialog(self) 7267 self.programsDialog = ProgramsDialog(self)
7358 self.programsDialog.show() 7268 self.programsDialog.show()
7359 7269
7360 def __configViewProfiles(self): 7270 def __configViewProfiles(self):
7361 """ 7271 """
7388 7298
7389 def __configShortcuts(self): 7299 def __configShortcuts(self):
7390 """ 7300 """
7391 Private slot to configure the keyboard shortcuts. 7301 Private slot to configure the keyboard shortcuts.
7392 """ 7302 """
7303 from eric7.Preferences.ShortcutsDialog import ShortcutsDialog
7304
7393 if self.shortcutsDialog is None: 7305 if self.shortcutsDialog is None:
7394 from eric7.Preferences.ShortcutsDialog import ShortcutsDialog
7395
7396 self.shortcutsDialog = ShortcutsDialog(self) 7306 self.shortcutsDialog = ShortcutsDialog(self)
7397 self.shortcutsDialog.populate() 7307 self.shortcutsDialog.populate()
7398 self.shortcutsDialog.show() 7308 self.shortcutsDialog.show()
7399 7309
7400 def __exportShortcuts(self): 7310 def __exportShortcuts(self):
7431 if fpath.exists() 7341 if fpath.exists()
7432 else True 7342 else True
7433 ) 7343 )
7434 7344
7435 if ok: 7345 if ok:
7436 from eric7.Preferences import Shortcuts
7437
7438 Shortcuts.exportShortcuts(str(fpath)) 7346 Shortcuts.exportShortcuts(str(fpath))
7439 7347
7440 def __importShortcuts(self): 7348 def __importShortcuts(self):
7441 """ 7349 """
7442 Private slot to import the keyboard shortcuts. 7350 Private slot to import the keyboard shortcuts.
7449 "Keyboard Shortcuts File (*.ekj);;" "XML Keyboard shortcut file (*.e4k)" 7357 "Keyboard Shortcuts File (*.ekj);;" "XML Keyboard shortcut file (*.e4k)"
7450 ), 7358 ),
7451 ) 7359 )
7452 7360
7453 if fn: 7361 if fn:
7454 from eric7.Preferences import Shortcuts
7455
7456 Shortcuts.importShortcuts(fn) 7362 Shortcuts.importShortcuts(fn)
7457 7363
7458 def __showCertificatesDialog(self): 7364 def __showCertificatesDialog(self):
7459 """ 7365 """
7460 Private slot to show the certificates management dialog. 7366 Private slot to show the certificates management dialog.
7502 # clear the shell histories 7408 # clear the shell histories
7503 self.shell.clearAllHistories() 7409 self.shell.clearAllHistories()
7504 if testing: 7410 if testing:
7505 # clear the unit test histories 7411 # clear the unit test histories
7506 if self.__testingWidget is None: 7412 if self.__testingWidget is None:
7507 from eric7.Testing.TestingWidget import clearSavedHistories
7508
7509 clearSavedHistories() 7413 clearSavedHistories()
7510 else: 7414 else:
7511 self.__testingWidget.clearRecent() 7415 self.__testingWidget.clearRecent()
7512 if vcs: 7416 if vcs:
7513 # clear the VCS related histories 7417 # clear the VCS related histories
7578 7482
7579 @param fn filename of the opened editor (string) 7483 @param fn filename of the opened editor (string)
7580 """ 7484 """
7581 self.wizardsMenuAct.setEnabled(len(self.__menus["wizards"].actions()) > 0) 7485 self.wizardsMenuAct.setEnabled(len(self.__menus["wizards"].actions()) > 0)
7582 7486
7583 if fn and str(fn) != "None": 7487 if (
7584 from eric7 import Testing 7488 fn
7585 7489 and str(fn) != "None"
7586 if Testing.isLanguageSupported( 7490 and Testing.isLanguageSupported(
7587 self.viewmanager.getOpenEditor(fn).getFileType() 7491 self.viewmanager.getOpenEditor(fn).getFileType()
7588 ): 7492 )
7589 self.testScriptAct.setEnabled(True) 7493 ):
7590 self.__testingEditorOpen = True 7494 self.testScriptAct.setEnabled(True)
7495 self.__testingEditorOpen = True
7591 7496
7592 def __checkActions(self, editor): 7497 def __checkActions(self, editor):
7593 """ 7498 """
7594 Private slot to check some actions for their enable/disable status. 7499 Private slot to check some actions for their enable/disable status.
7595 7500
7596 @param editor editor window 7501 @param editor editor window
7597 """ 7502 """
7598 fn = editor.getFileName() if editor else None 7503 fn = editor.getFileName() if editor else None
7599 7504
7600 if fn: 7505 if fn and Testing.isLanguageSupported(editor.getFileType()):
7601 from eric7 import Testing 7506 self.testScriptAct.setEnabled(True)
7602 7507 self.__testingEditorOpen = True
7603 if Testing.isLanguageSupported(editor.getFileType()): 7508 return
7604 self.testScriptAct.setEnabled(True)
7605 self.__testingEditorOpen = True
7606 return
7607 7509
7608 self.testScriptAct.setEnabled(False) 7510 self.testScriptAct.setEnabled(False)
7609 7511
7610 def __writeTasks(self): 7512 def __writeTasks(self):
7611 """ 7513 """
7626 # try old style XML file second 7528 # try old style XML file second
7627 fn = os.path.join(Utilities.getConfigDir(), "eric7tasks.e6t") 7529 fn = os.path.join(Utilities.getConfigDir(), "eric7tasks.e6t")
7628 if os.path.exists(fn): 7530 if os.path.exists(fn):
7629 f = QFile(fn) 7531 f = QFile(fn)
7630 if f.open(QIODevice.OpenModeFlag.ReadOnly): 7532 if f.open(QIODevice.OpenModeFlag.ReadOnly):
7631 from eric7.EricXML.TasksReader import TasksReader
7632
7633 reader = TasksReader(f, viewer=self.taskViewer) 7533 reader = TasksReader(f, viewer=self.taskViewer)
7634 reader.readXML() 7534 reader.readXML()
7635 f.close() 7535 f.close()
7636 else: 7536 else:
7637 EricMessageBox.critical( 7537 EricMessageBox.critical(
7696 self.__readingSession = False 7596 self.__readingSession = False
7697 else: 7597 else:
7698 # old XML based format 7598 # old XML based format
7699 f = QFile(fn) 7599 f = QFile(fn)
7700 if f.open(QIODevice.OpenModeFlag.ReadOnly): 7600 if f.open(QIODevice.OpenModeFlag.ReadOnly):
7701 from eric7.EricXML.SessionReader import SessionReader
7702
7703 self.__readingSession = True 7601 self.__readingSession = True
7704 reader = SessionReader(f, True) 7602 reader = SessionReader(f, True)
7705 reader.readXML() 7603 reader.readXML()
7706 self.__readingSession = False 7604 self.__readingSession = False
7707 f.close() 7605 f.close()
7810 7708
7811 def showFindFileByNameDialog(self): 7709 def showFindFileByNameDialog(self):
7812 """ 7710 """
7813 Public slot to show the Find File by Name dialog. 7711 Public slot to show the Find File by Name dialog.
7814 """ 7712 """
7713 from .FindFileNameDialog import FindFileNameDialog
7714
7815 if self.findFileNameDialog is None: 7715 if self.findFileNameDialog is None:
7816 from .FindFileNameDialog import FindFileNameDialog
7817
7818 self.findFileNameDialog = FindFileNameDialog(self.project) 7716 self.findFileNameDialog = FindFileNameDialog(self.project)
7819 self.findFileNameDialog.sourceFile.connect(self.viewmanager.openSourceFile) 7717 self.findFileNameDialog.sourceFile.connect(self.viewmanager.openSourceFile)
7820 self.findFileNameDialog.designerFile.connect(self.__designer) 7718 self.findFileNameDialog.designerFile.connect(self.__designer)
7821 self.findFileNameDialog.show() 7719 self.findFileNameDialog.show()
7822 self.findFileNameDialog.raise_() 7720 self.findFileNameDialog.raise_()
7832 @type str (optional) 7730 @type str (optional)
7833 @param openFiles flag indicating to operate on open files only 7731 @param openFiles flag indicating to operate on open files only
7834 (defaults to False) 7732 (defaults to False)
7835 @type bool (optional) 7733 @type bool (optional)
7836 """ 7734 """
7735 from .FindFileWidget import FindFileDialog
7736
7837 if Preferences.getUI("ShowFindFileWidget"): 7737 if Preferences.getUI("ShowFindFileWidget"):
7838 # embedded tool 7738 # embedded tool
7839 self.__activateFindFileWidget() 7739 self.__activateFindFileWidget()
7840 self.__findFileWidget.activate( 7740 self.__findFileWidget.activate(
7841 replaceMode=False, txt=txt, searchDir=searchDir, openFiles=openFiles 7741 replaceMode=False, txt=txt, searchDir=searchDir, openFiles=openFiles
7842 ) 7742 )
7843 else: 7743 else:
7844 # external dialog 7744 # external dialog
7845 if self.__findFileDialog is None: 7745 if self.__findFileDialog is None:
7846 from .FindFileWidget import FindFileDialog
7847
7848 self.__findFileDialog = FindFileDialog(self.project, self) 7746 self.__findFileDialog = FindFileDialog(self.project, self)
7849 self.__findFileDialog.sourceFile.connect( 7747 self.__findFileDialog.sourceFile.connect(
7850 self.viewmanager.openSourceFile 7748 self.viewmanager.openSourceFile
7851 ) 7749 )
7852 self.__findFileDialog.designerFile.connect(self.__designer) 7750 self.__findFileDialog.designerFile.connect(self.__designer)
7869 @type str (optional) 7767 @type str (optional)
7870 @param openFiles flag indicating to operate on open files only 7768 @param openFiles flag indicating to operate on open files only
7871 (defaults to False) 7769 (defaults to False)
7872 @type bool (optional) 7770 @type bool (optional)
7873 """ 7771 """
7772 from .FindFileWidget import FindFileDialog
7773
7874 if Preferences.getUI("ShowFindFileWidget"): 7774 if Preferences.getUI("ShowFindFileWidget"):
7875 # embedded tool 7775 # embedded tool
7876 self.__activateFindFileWidget() 7776 self.__activateFindFileWidget()
7877 self.__findFileWidget.activate( 7777 self.__findFileWidget.activate(
7878 replaceMode=True, txt=txt, searchDir=searchDir, openFiles=openFiles 7778 replaceMode=True, txt=txt, searchDir=searchDir, openFiles=openFiles
7879 ) 7779 )
7880 else: 7780 else:
7881 # external dialog 7781 # external dialog
7882 if self.__replaceFileDialog is None: 7782 if self.__replaceFileDialog is None:
7883 from .FindFileWidget import FindFileDialog
7884
7885 self.__replaceFileDialog = FindFileDialog(self.project, self) 7783 self.__replaceFileDialog = FindFileDialog(self.project, self)
7886 self.__replaceFileDialog.sourceFile.connect( 7784 self.__replaceFileDialog.sourceFile.connect(
7887 self.viewmanager.openSourceFile 7785 self.viewmanager.openSourceFile
7888 ) 7786 )
7889 self.__replaceFileDialog.designerFile.connect(self.__designer) 7787 self.__replaceFileDialog.designerFile.connect(self.__designer)
7912 7810
7913 def showFindLocationWidget(self): 7811 def showFindLocationWidget(self):
7914 """ 7812 """
7915 Public method to show the Find File widget. 7813 Public method to show the Find File widget.
7916 """ 7814 """
7815 from .FindLocationWidget import FindLocationDialog
7816
7917 if Preferences.getUI("ShowFindLocationWidget"): 7817 if Preferences.getUI("ShowFindLocationWidget"):
7918 # embedded tool 7818 # embedded tool
7919 self.__activateFindLocationWidget() 7819 self.__activateFindLocationWidget()
7920 else: 7820 else:
7921 # external dialog 7821 # external dialog
7922 if self.__findLocationDialog is None: 7822 if self.__findLocationDialog is None:
7923 from .FindLocationWidget import FindLocationDialog
7924
7925 self.__findLocationDialog = FindLocationDialog(self.project, self) 7823 self.__findLocationDialog = FindLocationDialog(self.project, self)
7926 self.__findLocationDialog.sourceFile.connect( 7824 self.__findLocationDialog.sourceFile.connect(
7927 self.viewmanager.openSourceFile 7825 self.viewmanager.openSourceFile
7928 ) 7826 )
7929 self.__findLocationDialog.designerFile.connect(self.__designer) 7827 self.__findLocationDialog.designerFile.connect(self.__designer)
8189 def __shutdown(self): 8087 def __shutdown(self):
8190 """ 8088 """
8191 Private method to perform all necessary steps to close down the IDE. 8089 Private method to perform all necessary steps to close down the IDE.
8192 8090
8193 @return flag indicating success 8091 @return flag indicating success
8092 @rtype bool
8194 """ 8093 """
8195 if self.shutdownCalled: 8094 if self.shutdownCalled:
8196 return True 8095 return True
8096
8097 if not self.viewmanager.checkAllDirty():
8098 return False
8197 8099
8198 if self.__webBrowserProcess is not None: 8100 if self.__webBrowserProcess is not None:
8199 self.__webBrowserShutdown() 8101 self.__webBrowserShutdown()
8200 8102
8201 if self.irc is not None and not self.irc.shutdown(): 8103 if self.irc is not None and not self.irc.shutdown():
8532 @type NotificationTypes 8434 @type NotificationTypes
8533 @param timeout time in seconds the notification should be shown 8435 @param timeout time in seconds the notification should be shown
8534 (None = use configured timeout, 0 = indefinitely) 8436 (None = use configured timeout, 0 = indefinitely)
8535 @type int 8437 @type int
8536 """ 8438 """
8439 from .NotificationWidget import NotificationWidget
8440
8537 if self.__notification is None: 8441 if self.__notification is None:
8538 from .NotificationWidget import NotificationWidget
8539
8540 self.__notification = NotificationWidget(parent=self) 8442 self.__notification = NotificationWidget(parent=self)
8541 if timeout is None: 8443 if timeout is None:
8542 timeout = Preferences.getUI("NotificationTimeout") 8444 timeout = Preferences.getUI("NotificationTimeout")
8543 self.__notification.showNotification( 8445 self.__notification.showNotification(
8544 icon, heading, text, kind=kind, timeout=timeout 8446 icon, heading, text, kind=kind, timeout=timeout

eric ide

mercurial