eric7/UI/UserInterface.py

branch
eric7-maintenance
changeset 9111
4ac66b6c33a4
parent 9039
3c8aa997bad8
child 9192
a763d57e23bc
equal deleted inserted replaced
9049:2b9bd8f97576 9111:4ac66b6c33a4
339 self.stderr = Redirector(True, self) 339 self.stderr = Redirector(True, self)
340 340
341 # set a few dialog members for non-modal dialogs created on demand 341 # set a few dialog members for non-modal dialogs created on demand
342 self.programsDialog = None 342 self.programsDialog = None
343 self.shortcutsDialog = None 343 self.shortcutsDialog = None
344 self.unittestDialog = None 344 self.__testingWidget = None
345 self.findFileNameDialog = None 345 self.findFileNameDialog = None
346 self.diffDlg = None 346 self.diffDlg = None
347 self.compareDlg = None 347 self.compareDlg = None
348 self.findFilesDialog = None 348 self.findFilesDialog = None
349 self.replaceFilesDialog = None 349 self.replaceFilesDialog = None
370 self.viewmanager.openSourceFile) 370 self.viewmanager.openSourceFile)
371 self.projectBrowser.psBrowser.sourceFile[str, int, str].connect( 371 self.projectBrowser.psBrowser.sourceFile[str, int, str].connect(
372 self.viewmanager.openSourceFile) 372 self.viewmanager.openSourceFile)
373 self.projectBrowser.psBrowser.closeSourceWindow.connect( 373 self.projectBrowser.psBrowser.closeSourceWindow.connect(
374 self.viewmanager.closeWindow) 374 self.viewmanager.closeWindow)
375 self.projectBrowser.psBrowser.unittestOpen.connect( 375 self.projectBrowser.psBrowser.testFile.connect(
376 self.__unittestScript) 376 self.__startTestScript)
377 377
378 self.projectBrowser.pfBrowser.designerFile.connect(self.__designer) 378 self.projectBrowser.pfBrowser.designerFile.connect(self.__designer)
379 self.projectBrowser.pfBrowser.sourceFile.connect( 379 self.projectBrowser.pfBrowser.sourceFile.connect(
380 self.viewmanager.openSourceFile) 380 self.viewmanager.openSourceFile)
381 self.projectBrowser.pfBrowser.uipreview.connect(self.__UIPreviewer) 381 self.projectBrowser.pfBrowser.uipreview.connect(self.__UIPreviewer)
529 self.browser.pixmapEditFile.connect(self.__editPixmap) 529 self.browser.pixmapEditFile.connect(self.__editPixmap)
530 self.browser.pixmapFile.connect(self.__showPixmap) 530 self.browser.pixmapFile.connect(self.__showPixmap)
531 self.browser.svgFile.connect(self.__showSvg) 531 self.browser.svgFile.connect(self.__showSvg)
532 self.browser.umlFile.connect(self.__showUml) 532 self.browser.umlFile.connect(self.__showUml)
533 self.browser.binaryFile.connect(self.__openHexEditor) 533 self.browser.binaryFile.connect(self.__openHexEditor)
534 self.browser.unittestOpen.connect(self.__unittestScript) 534 self.browser.testFile.connect(self.__startTestScript)
535 self.browser.trpreview.connect(self.__TRPreviewer) 535 self.browser.trpreview.connect(self.__TRPreviewer)
536 536
537 self.debuggerUI.debuggingStarted.connect( 537 self.debuggerUI.debuggingStarted.connect(
538 self.browser.handleProgramChange) 538 self.browser.handleProgramChange)
539 539
604 self.toolGroups, self.currentToolGroup = Preferences.readToolGroups() 604 self.toolGroups, self.currentToolGroup = Preferences.readToolGroups()
605 self.toolProcs = [] 605 self.toolProcs = []
606 self.__initExternalToolsActions() 606 self.__initExternalToolsActions()
607 607
608 # redirect handling of http and https URLs to ourselves 608 # redirect handling of http and https URLs to ourselves
609 QDesktopServices.setUrlHandler("file", self.handleUrl)
609 QDesktopServices.setUrlHandler("http", self.handleUrl) 610 QDesktopServices.setUrlHandler("http", self.handleUrl)
610 QDesktopServices.setUrlHandler("https", self.handleUrl) 611 QDesktopServices.setUrlHandler("https", self.handleUrl)
611 612
612 # register all relevant objects 613 # register all relevant objects
613 splash.showMessage(self.tr("Registering Objects...")) 614 splash.showMessage(self.tr("Registering Objects..."))
659 app.focusChanged.connect(self.viewmanager.appFocusChanged) 660 app.focusChanged.connect(self.viewmanager.appFocusChanged)
660 661
661 # Initialize the instance variables. 662 # Initialize the instance variables.
662 self.currentProg = None 663 self.currentProg = None
663 self.isProg = False 664 self.isProg = False
664 self.utEditorOpen = False 665 self.__testingEditorOpen = False
665 self.utProjectOpen = False 666 self.__testingProjectOpen = False
666 667
667 self.inDragDrop = False 668 self.inDragDrop = False
668 self.setAcceptDrops(True) 669 self.setAcceptDrops(True)
669 670
670 self.currentProfile = None 671 self.currentProfile = None
2508 """<p>Opens a dialog to send a feature request.</p>""" 2509 """<p>Opens a dialog to send a feature request.</p>"""
2509 )) 2510 ))
2510 self.requestFeatureAct.triggered.connect(self.__requestFeature) 2511 self.requestFeatureAct.triggered.connect(self.__requestFeature)
2511 self.actions.append(self.requestFeatureAct) 2512 self.actions.append(self.requestFeatureAct)
2512 2513
2513 self.utActGrp = createActionGroup(self) 2514 self.testingActGrp = createActionGroup(self)
2514 2515
2515 self.utDialogAct = EricAction( 2516 self.testingDialogAct = EricAction(
2516 self.tr('Unittest'), 2517 self.tr('Testing'),
2517 UI.PixmapCache.getIcon("unittest"), 2518 UI.PixmapCache.getIcon("unittest"),
2518 self.tr('&Unittest...'), 2519 self.tr('&Testing...'),
2519 0, 0, self.utActGrp, 'unittest') 2520 0, 0, self.testingActGrp, 'unittest')
2520 self.utDialogAct.setStatusTip(self.tr('Start unittest dialog')) 2521 self.testingDialogAct.setStatusTip(self.tr('Start the testing dialog'))
2521 self.utDialogAct.setWhatsThis(self.tr( 2522 self.testingDialogAct.setWhatsThis(self.tr(
2522 """<b>Unittest</b>""" 2523 """<b>Testing</b>"""
2523 """<p>Perform unit tests. The dialog gives you the""" 2524 """<p>Perform test runs. The dialog gives the"""
2524 """ ability to select and run a unittest suite.</p>""" 2525 """ ability to select and run a test suite or"""
2526 """ auto discover them.</p>"""
2525 )) 2527 ))
2526 self.utDialogAct.triggered.connect(self.__unittest) 2528 self.testingDialogAct.triggered.connect(self.__startTesting)
2527 self.actions.append(self.utDialogAct) 2529 self.actions.append(self.testingDialogAct)
2528 2530
2529 self.utRestartAct = EricAction( 2531 self.restartTestAct = EricAction(
2530 self.tr('Unittest Restart'), 2532 self.tr('Restart Last Test'),
2531 UI.PixmapCache.getIcon("unittestRestart"), 2533 UI.PixmapCache.getIcon("unittestRestart"),
2532 self.tr('&Restart Unittest...'), 2534 self.tr('&Restart Last Test...'),
2533 0, 0, self.utActGrp, 'unittest_restart') 2535 0, 0, self.testingActGrp, 'unittest_restart')
2534 self.utRestartAct.setStatusTip(self.tr('Restart last unittest')) 2536 self.restartTestAct.setStatusTip(self.tr('Restarts the last test'))
2535 self.utRestartAct.setWhatsThis(self.tr( 2537 self.restartTestAct.setWhatsThis(self.tr(
2536 """<b>Restart Unittest</b>""" 2538 """<b>Restart Last Test</b>"""
2537 """<p>Restart the unittest performed last.</p>""" 2539 """<p>Restarts the test performed last.</p>"""
2538 )) 2540 ))
2539 self.utRestartAct.triggered.connect(self.__unittestRestart) 2541 self.restartTestAct.triggered.connect(self.__restartTest)
2540 self.utRestartAct.setEnabled(False) 2542 self.restartTestAct.setEnabled(False)
2541 self.actions.append(self.utRestartAct) 2543 self.actions.append(self.restartTestAct)
2542 2544
2543 self.utRerunFailedAct = EricAction( 2545 self.rerunFailedTestsAct = EricAction(
2544 self.tr('Unittest Rerun Failed'), 2546 self.tr('Rerun Failed Tests'),
2545 UI.PixmapCache.getIcon("unittestRerunFailed"), 2547 UI.PixmapCache.getIcon("unittestRerunFailed"),
2546 self.tr('Rerun Failed Tests...'), 2548 self.tr('Rerun Failed Tests...'),
2547 0, 0, self.utActGrp, 'unittest_rerun_failed') 2549 0, 0, self.testingActGrp, 'unittest_rerun_failed')
2548 self.utRerunFailedAct.setStatusTip(self.tr( 2550 self.rerunFailedTestsAct.setStatusTip(self.tr(
2549 'Rerun failed tests of the last run')) 2551 'Rerun failed tests of the last run'))
2550 self.utRerunFailedAct.setWhatsThis(self.tr( 2552 self.rerunFailedTestsAct.setWhatsThis(self.tr(
2551 """<b>Rerun Failed Tests</b>""" 2553 """<b>Rerun Failed Tests</b>"""
2552 """<p>Rerun all tests that failed during the last unittest""" 2554 """<p>Rerun all tests that failed during the last test run.</p>"""
2553 """ run.</p>"""
2554 )) 2555 ))
2555 self.utRerunFailedAct.triggered.connect(self.__unittestRerunFailed) 2556 self.rerunFailedTestsAct.triggered.connect(self.__rerunFailedTests)
2556 self.utRerunFailedAct.setEnabled(False) 2557 self.rerunFailedTestsAct.setEnabled(False)
2557 self.actions.append(self.utRerunFailedAct) 2558 self.actions.append(self.rerunFailedTestsAct)
2558 2559
2559 self.utScriptAct = EricAction( 2560 self.testScriptAct = EricAction(
2560 self.tr('Unittest Script'), 2561 self.tr('Test Script'),
2561 UI.PixmapCache.getIcon("unittestScript"), 2562 UI.PixmapCache.getIcon("unittestScript"),
2562 self.tr('Unittest &Script...'), 2563 self.tr('Test &Script...'),
2563 0, 0, self.utActGrp, 'unittest_script') 2564 0, 0, self.testingActGrp, 'unittest_script')
2564 self.utScriptAct.setStatusTip(self.tr( 2565 self.testScriptAct.setStatusTip(self.tr(
2565 'Run unittest with current script')) 2566 'Run tests of the current script'))
2566 self.utScriptAct.setWhatsThis(self.tr( 2567 self.testScriptAct.setWhatsThis(self.tr(
2567 """<b>Unittest Script</b>""" 2568 """<b>Test Script</b>"""
2568 """<p>Run unittest with current script.</p>""" 2569 """<p>Run tests with the current script.</p>"""
2569 )) 2570 ))
2570 self.utScriptAct.triggered.connect(self.__unittestScript) 2571 self.testScriptAct.triggered.connect(self.__startTestScript)
2571 self.utScriptAct.setEnabled(False) 2572 self.testScriptAct.setEnabled(False)
2572 self.actions.append(self.utScriptAct) 2573 self.actions.append(self.testScriptAct)
2573 2574
2574 self.utProjectAct = EricAction( 2575 self.testProjectAct = EricAction(
2575 self.tr('Unittest Project'), 2576 self.tr('Test Project'),
2576 UI.PixmapCache.getIcon("unittestProject"), 2577 UI.PixmapCache.getIcon("unittestProject"),
2577 self.tr('Unittest &Project...'), 2578 self.tr('Test &Project...'),
2578 0, 0, self.utActGrp, 'unittest_project') 2579 0, 0, self.testingActGrp, 'unittest_project')
2579 self.utProjectAct.setStatusTip(self.tr( 2580 self.testProjectAct.setStatusTip(self.tr(
2580 'Run unittest with current project')) 2581 'Run tests of the current project'))
2581 self.utProjectAct.setWhatsThis(self.tr( 2582 self.testProjectAct.setWhatsThis(self.tr(
2582 """<b>Unittest Project</b>""" 2583 """<b>Test Project</b>"""
2583 """<p>Run unittest with current project.</p>""" 2584 """<p>Run test of the current project.</p>"""
2584 )) 2585 ))
2585 self.utProjectAct.triggered.connect(self.__unittestProject) 2586 self.testProjectAct.triggered.connect(self.__startTestProject)
2586 self.utProjectAct.setEnabled(False) 2587 self.testProjectAct.setEnabled(False)
2587 self.actions.append(self.utProjectAct) 2588 self.actions.append(self.testProjectAct)
2588 2589
2589 # check for Qt5 designer and linguist 2590 # check for Qt5 designer and linguist
2590 if Utilities.isWindowsPlatform(): 2591 if Utilities.isWindowsPlatform():
2591 designerExe = os.path.join( 2592 designerExe = os.path.join(
2592 Utilities.getQtBinariesPath(), 2593 Utilities.getQtBinariesPath(),
3397 3398
3398 ############################################################## 3399 ##############################################################
3399 ## Extras/Unittest menu 3400 ## Extras/Unittest menu
3400 ############################################################## 3401 ##############################################################
3401 3402
3402 self.__menus["unittest"] = QMenu(self.tr('&Unittest'), self) 3403 self.__menus["testing"] = QMenu(self.tr('&Testing'), self)
3403 self.__menus["unittest"].setTearOffEnabled(True) 3404 self.__menus["testing"].setTearOffEnabled(True)
3404 self.__menus["unittest"].addAction(self.utDialogAct) 3405 self.__menus["testing"].addAction(self.testingDialogAct)
3405 self.__menus["unittest"].addSeparator() 3406 self.__menus["testing"].addSeparator()
3406 self.__menus["unittest"].addAction(self.utRestartAct) 3407 self.__menus["testing"].addAction(self.restartTestAct)
3407 self.__menus["unittest"].addAction(self.utRerunFailedAct) 3408 self.__menus["testing"].addAction(self.rerunFailedTestsAct)
3408 self.__menus["unittest"].addSeparator() 3409 self.__menus["testing"].addSeparator()
3409 self.__menus["unittest"].addAction(self.utScriptAct) 3410 self.__menus["testing"].addAction(self.testScriptAct)
3410 self.__menus["unittest"].addAction(self.utProjectAct) 3411 self.__menus["testing"].addAction(self.testProjectAct)
3411 3412
3412 self.__menus["extras"].addMenu(self.__menus["unittest"]) 3413 self.__menus["extras"].addMenu(self.__menus["testing"])
3413 self.__menus["extras"].addSeparator() 3414 self.__menus["extras"].addSeparator()
3414 3415
3415 ############################################################## 3416 ##############################################################
3416 ## Extras/Builtin,Plugin,User tools menus 3417 ## Extras/Builtin,Plugin,User tools menus
3417 ############################################################## 3418 ##############################################################
3595 viewtb = self.viewmanager.initViewToolbar(self.toolbarManager) 3596 viewtb = self.viewmanager.initViewToolbar(self.toolbarManager)
3596 starttb, debugtb = self.debuggerUI.initToolbars(self.toolbarManager) 3597 starttb, debugtb = self.debuggerUI.initToolbars(self.toolbarManager)
3597 multiprojecttb = self.multiProject.initToolbar(self.toolbarManager) 3598 multiprojecttb = self.multiProject.initToolbar(self.toolbarManager)
3598 projecttb, vcstb = self.project.initToolbars(self.toolbarManager) 3599 projecttb, vcstb = self.project.initToolbars(self.toolbarManager)
3599 toolstb = QToolBar(self.tr("Tools"), self) 3600 toolstb = QToolBar(self.tr("Tools"), self)
3600 unittesttb = QToolBar(self.tr("Unittest"), self) 3601 testingtb = QToolBar(self.tr("Testing"), self)
3601 bookmarktb = self.viewmanager.initBookmarkToolbar(self.toolbarManager) 3602 bookmarktb = self.viewmanager.initBookmarkToolbar(self.toolbarManager)
3602 spellingtb = self.viewmanager.initSpellingToolbar(self.toolbarManager) 3603 spellingtb = self.viewmanager.initSpellingToolbar(self.toolbarManager)
3603 settingstb = QToolBar(self.tr("Settings"), self) 3604 settingstb = QToolBar(self.tr("Settings"), self)
3604 helptb = QToolBar(self.tr("Help"), self) 3605 helptb = QToolBar(self.tr("Help"), self)
3605 profilestb = QToolBar(self.tr("Profiles"), self) 3606 profilestb = QToolBar(self.tr("Profiles"), self)
3606 pluginstb = QToolBar(self.tr("Plugins"), self) 3607 pluginstb = QToolBar(self.tr("Plugins"), self)
3607 3608
3608 toolstb.setIconSize(Config.ToolBarIconSize) 3609 toolstb.setIconSize(Config.ToolBarIconSize)
3609 unittesttb.setIconSize(Config.ToolBarIconSize) 3610 testingtb.setIconSize(Config.ToolBarIconSize)
3610 settingstb.setIconSize(Config.ToolBarIconSize) 3611 settingstb.setIconSize(Config.ToolBarIconSize)
3611 helptb.setIconSize(Config.ToolBarIconSize) 3612 helptb.setIconSize(Config.ToolBarIconSize)
3612 profilestb.setIconSize(Config.ToolBarIconSize) 3613 profilestb.setIconSize(Config.ToolBarIconSize)
3613 pluginstb.setIconSize(Config.ToolBarIconSize) 3614 pluginstb.setIconSize(Config.ToolBarIconSize)
3614 3615
3615 toolstb.setObjectName("ToolsToolbar") 3616 toolstb.setObjectName("ToolsToolbar")
3616 unittesttb.setObjectName("UnittestToolbar") 3617 testingtb.setObjectName("UnittestToolbar")
3617 settingstb.setObjectName("SettingsToolbar") 3618 settingstb.setObjectName("SettingsToolbar")
3618 helptb.setObjectName("HelpToolbar") 3619 helptb.setObjectName("HelpToolbar")
3619 profilestb.setObjectName("ProfilesToolbar") 3620 profilestb.setObjectName("ProfilesToolbar")
3620 pluginstb.setObjectName("PluginsToolbar") 3621 pluginstb.setObjectName("PluginsToolbar")
3621 3622
3622 toolstb.setToolTip(self.tr("Tools")) 3623 toolstb.setToolTip(self.tr("Tools"))
3623 unittesttb.setToolTip(self.tr("Unittest")) 3624 testingtb.setToolTip(self.tr("Unittest"))
3624 settingstb.setToolTip(self.tr("Settings")) 3625 settingstb.setToolTip(self.tr("Settings"))
3625 helptb.setToolTip(self.tr("Help")) 3626 helptb.setToolTip(self.tr("Help"))
3626 profilestb.setToolTip(self.tr("Profiles")) 3627 profilestb.setToolTip(self.tr("Profiles"))
3627 pluginstb.setToolTip(self.tr("Plugins")) 3628 pluginstb.setToolTip(self.tr("Plugins"))
3628 3629
3632 act = filetb.actions()[0] 3633 act = filetb.actions()[0]
3633 sep = filetb.insertSeparator(act) 3634 sep = filetb.insertSeparator(act)
3634 filetb.insertAction(sep, self.newWindowAct) 3635 filetb.insertAction(sep, self.newWindowAct)
3635 self.toolbarManager.addToolBar(filetb, filetb.windowTitle()) 3636 self.toolbarManager.addToolBar(filetb, filetb.windowTitle())
3636 3637
3637 # setup the unittest toolbar 3638 # setup the testing toolbar
3638 unittesttb.addAction(self.utDialogAct) 3639 testingtb.addAction(self.testingDialogAct)
3639 unittesttb.addSeparator() 3640 testingtb.addSeparator()
3640 unittesttb.addAction(self.utRestartAct) 3641 testingtb.addAction(self.restartTestAct)
3641 unittesttb.addAction(self.utRerunFailedAct) 3642 testingtb.addAction(self.rerunFailedTestsAct)
3642 unittesttb.addSeparator() 3643 testingtb.addSeparator()
3643 unittesttb.addAction(self.utScriptAct) 3644 testingtb.addAction(self.testScriptAct)
3644 unittesttb.addAction(self.utProjectAct) 3645 testingtb.addAction(self.testProjectAct)
3645 self.toolbarManager.addToolBar(unittesttb, unittesttb.windowTitle()) 3646 self.toolbarManager.addToolBar(testingtb, testingtb.windowTitle())
3646 3647
3647 # setup the tools toolbar 3648 # setup the tools toolbar
3648 if self.designer4Act is not None: 3649 if self.designer4Act is not None:
3649 toolstb.addAction(self.designer4Act) 3650 toolstb.addAction(self.designer4Act)
3650 if self.linguist4Act is not None: 3651 if self.linguist4Act is not None:
3720 self.addToolBar(Qt.ToolBarArea.RightToolBarArea, settingstb) 3721 self.addToolBar(Qt.ToolBarArea.RightToolBarArea, settingstb)
3721 self.addToolBar(Qt.ToolBarArea.RightToolBarArea, toolstb) 3722 self.addToolBar(Qt.ToolBarArea.RightToolBarArea, toolstb)
3722 self.addToolBar(helptb) 3723 self.addToolBar(helptb)
3723 self.addToolBar(bookmarktb) 3724 self.addToolBar(bookmarktb)
3724 self.addToolBar(spellingtb) 3725 self.addToolBar(spellingtb)
3725 self.addToolBar(unittesttb) 3726 self.addToolBar(testingtb)
3726 self.addToolBar(profilestb) 3727 self.addToolBar(profilestb)
3727 self.addToolBar(pluginstb) 3728 self.addToolBar(pluginstb)
3728 3729
3729 # hide toolbars not wanted in the initial layout 3730 # hide toolbars not wanted in the initial layout
3730 searchtb.hide() 3731 searchtb.hide()
3731 viewtb.hide() 3732 viewtb.hide()
3732 debugtb.hide() 3733 debugtb.hide()
3733 multiprojecttb.hide() 3734 multiprojecttb.hide()
3734 helptb.hide() 3735 helptb.hide()
3735 spellingtb.hide() 3736 spellingtb.hide()
3736 unittesttb.hide() 3737 testingtb.hide()
3737 pluginstb.hide() 3738 pluginstb.hide()
3738 3739
3739 # just add new toolbars to the end of the list 3740 # just add new toolbars to the end of the list
3740 self.__toolbars = {} 3741 self.__toolbars = {}
3741 self.__toolbars["file"] = [filetb.windowTitle(), filetb, ""] 3742 self.__toolbars["file"] = [filetb.windowTitle(), filetb, ""]
3749 self.__toolbars["help"] = [helptb.windowTitle(), helptb, ""] 3750 self.__toolbars["help"] = [helptb.windowTitle(), helptb, ""]
3750 self.__toolbars["settings"] = [settingstb.windowTitle(), settingstb, 3751 self.__toolbars["settings"] = [settingstb.windowTitle(), settingstb,
3751 ""] 3752 ""]
3752 self.__toolbars["bookmarks"] = [bookmarktb.windowTitle(), bookmarktb, 3753 self.__toolbars["bookmarks"] = [bookmarktb.windowTitle(), bookmarktb,
3753 ""] 3754 ""]
3754 self.__toolbars["unittest"] = [unittesttb.windowTitle(), unittesttb, 3755 self.__toolbars["testing"] = [testingtb.windowTitle(), testingtb, ""]
3755 ""]
3756 self.__toolbars["view_profiles"] = [profilestb.windowTitle(), 3756 self.__toolbars["view_profiles"] = [profilestb.windowTitle(),
3757 profilestb, ""] 3757 profilestb, ""]
3758 self.__toolbars["plugins"] = [pluginstb.windowTitle(), pluginstb, ""] 3758 self.__toolbars["plugins"] = [pluginstb.windowTitle(), pluginstb, ""]
3759 self.__toolbars["multiproject"] = [multiprojecttb.windowTitle(), 3759 self.__toolbars["multiproject"] = [multiprojecttb.windowTitle(),
3760 multiprojecttb, ""] 3760 multiprojecttb, ""]
4431 4431
4432 @return flag indicating a successful upgrade 4432 @return flag indicating a successful upgrade
4433 @rtype bool 4433 @rtype bool
4434 """ 4434 """
4435 yes = EricMessageBox.yesNo( 4435 yes = EricMessageBox.yesNo(
4436 self, 4436 None,
4437 self.tr("Upgrade PyQt"), 4437 self.tr("Upgrade PyQt"),
4438 self.tr("""eric needs to be closed in order to upgrade PyQt. It""" 4438 self.tr("""eric needs to be closed in order to upgrade PyQt. It"""
4439 """ will be restarted once the upgrade process has""" 4439 """ will be restarted once the upgrade process has"""
4440 """ finished. This may take some time.\n\nShall the""" 4440 """ finished. This may take some time.\n\nShall the"""
4441 """ upgrade be done now?""") 4441 """ upgrade be done now?""")
4454 4454
4455 @return flag indicating a successful upgrade 4455 @return flag indicating a successful upgrade
4456 @rtype bool 4456 @rtype bool
4457 """ 4457 """
4458 yes = EricMessageBox.yesNo( 4458 yes = EricMessageBox.yesNo(
4459 self, 4459 None,
4460 self.tr("Upgrade Eric"), 4460 self.tr("Upgrade Eric"),
4461 self.tr("""eric needs to be closed in order to be upgraded. It""" 4461 self.tr("""eric needs to be closed in order to be upgraded. It"""
4462 """ will be restarted once the upgrade process has""" 4462 """ will be restarted once the upgrade process has"""
4463 """ finished. This may take some time.\n\nShall the""" 4463 """ finished. This may take some time.\n\nShall the"""
4464 """ upgrade be done now?""") 4464 """ upgrade be done now?""")
4478 4478
4479 @return flag indicating a successful upgrade 4479 @return flag indicating a successful upgrade
4480 @rtype bool 4480 @rtype bool
4481 """ 4481 """
4482 yes = EricMessageBox.yesNo( 4482 yes = EricMessageBox.yesNo(
4483 self, 4483 None,
4484 self.tr("Upgrade Eric"), 4484 self.tr("Upgrade Eric"),
4485 self.tr("""eric needs to be closed in order to upgrade eric and""" 4485 self.tr("""eric needs to be closed in order to upgrade eric and"""
4486 """ PyQt. It will be restarted once the upgrade process""" 4486 """ PyQt. It will be restarted once the upgrade process"""
4487 """ has finished. This may take some time.\n\n Shall""" 4487 """ has finished. This may take some time.\n\n Shall"""
4488 """ the upgrade be done now?""") 4488 """ the upgrade be done now?""")
5329 ) 5329 )
5330 dlg = ToolGroupConfigurationDialog( 5330 dlg = ToolGroupConfigurationDialog(
5331 self.toolGroups, self.currentToolGroup, self) 5331 self.toolGroups, self.currentToolGroup, self)
5332 if dlg.exec() == QDialog.DialogCode.Accepted: 5332 if dlg.exec() == QDialog.DialogCode.Accepted:
5333 self.toolGroups, self.currentToolGroup = dlg.getToolGroups() 5333 self.toolGroups, self.currentToolGroup = dlg.getToolGroups()
5334 5334
5335 def __createUnitTestDialog(self): 5335 def __createTestingDialog(self):
5336 """ 5336 """
5337 Private slot to generate the unit test dialog on demand. 5337 Private slot to generate the testing dialog on demand.
5338 """ 5338 """
5339 if self.unittestDialog is None: 5339 if self.__testingWidget is None:
5340 from PyUnit.UnittestDialog import UnittestDialog 5340 from Testing.TestingWidget import TestingWidget
5341 self.unittestDialog = UnittestDialog( 5341 self.__testingWidget = TestingWidget()
5342 None, self.__debugServer, self) 5342 self.__testingWidget.testFile.connect(
5343 self.unittestDialog.unittestFile.connect(
5344 self.viewmanager.setFileLine) 5343 self.viewmanager.setFileLine)
5345 self.unittestDialog.unittestStopped.connect(self.__unittestStopped) 5344 self.__testingWidget.testRunStopped.connect(
5346 5345 self.__testingStopped)
5347 def __unittestStopped(self): 5346
5348 """ 5347 def __testingStopped(self):
5349 Private slot to handle the end of a unit test run. 5348 """
5350 """ 5349 Private slot to handle the end of a test run.
5351 self.utRerunFailedAct.setEnabled(self.unittestDialog.hasFailedTests()) 5350 """
5352 self.utRestartAct.setEnabled(True) 5351 self.rerunFailedTestsAct.setEnabled(
5353 5352 self.__testingWidget.hasFailedTests())
5354 def __unittest(self): 5353 self.restartTestAct.setEnabled(True)
5355 """ 5354
5356 Private slot for displaying the unittest dialog. 5355 def __startTesting(self):
5357 """ 5356 """
5358 self.__createUnitTestDialog() 5357 Private slot for displaying the testing dialog.
5359 self.unittestDialog.show() 5358 """
5360 self.unittestDialog.raise_() 5359 self.__createTestingDialog()
5360 self.__testingWidget.show()
5361 self.__testingWidget.raise_()
5361 5362
5362 @pyqtSlot() 5363 @pyqtSlot()
5363 @pyqtSlot(str) 5364 @pyqtSlot(str)
5364 def __unittestScript(self, prog=None): 5365 def __startTestScript(self, testFile=None):
5365 """ 5366 """
5366 Private slot for displaying the unittest dialog and run the current 5367 Private slot for displaying the testing dialog and run the current
5367 script. 5368 script.
5368 5369
5369 @param prog the python program to be opened 5370 @param testFile file containing the tests to be run
5370 """ 5371 @type str
5371 if prog is None: 5372 """
5373 if testFile is None:
5372 aw = self.viewmanager.activeWindow() 5374 aw = self.viewmanager.activeWindow()
5373 fn = aw.getFileName() 5375 fn = aw.getFileName()
5374 tfn = Utilities.getTestFileName(fn) 5376 testFile = [
5375 if os.path.exists(tfn): 5377 f for f in Utilities.getTestFileNames(fn) + [fn]
5376 prog = tfn 5378 if os.path.exists(f)
5377 else: 5379 ][0]
5378 prog = fn 5380
5379 5381 self.__startTesting()
5380 self.__unittest() 5382 self.__testingWidget.setTestFile(testFile, forProject=False)
5381 self.unittestDialog.setProjectMode(False) 5383 self.restartTestAct.setEnabled(False)
5382 self.unittestDialog.insertProg(prog) 5384 self.rerunFailedTestsAct.setEnabled(False)
5383 self.utRestartAct.setEnabled(False) 5385
5384 self.utRerunFailedAct.setEnabled(False) 5386 @pyqtSlot()
5385 5387 def __startTestProject(self):
5386 def __unittestProject(self): 5388 """
5387 """ 5389 Private slot for displaying the testing dialog and run the test for
5388 Private slot for displaying the unittest dialog and run the current 5390 the current project.
5389 project. 5391 """
5390 """ 5392 testFile = None
5391 prog = None
5392 fn = self.project.getMainScript(True) 5393 fn = self.project.getMainScript(True)
5393 if fn: 5394 if fn:
5394 tfn = Utilities.getTestFileName(fn) 5395 testFile = [
5395 if os.path.exists(tfn): 5396 f for f in Utilities.getTestFileNames(fn) + [fn]
5396 prog = tfn 5397 if os.path.exists(f)
5397 else: 5398 ][0]
5398 prog = fn 5399
5399 5400 self.__startTesting()
5400 self.__unittest() 5401 self.__testingWidget.setTestFile(testFile, forProject=True)
5401 self.unittestDialog.setProjectMode(True) 5402 self.restartTestAct.setEnabled(False)
5402 self.unittestDialog.insertProg(prog) 5403 self.rerunFailedTestsAct.setEnabled(False)
5403 self.utRestartAct.setEnabled(False) 5404
5404 self.utRerunFailedAct.setEnabled(False) 5405 def __restartTest(self):
5405 5406 """
5406 def __unittestRestart(self): 5407 Private slot to display the testing dialog and rerun the last
5407 """ 5408 test run.
5408 Private slot to display the unittest dialog and rerun the last 5409 """
5409 unit test. 5410 self.__startTesting()
5410 """ 5411 self.__testingWidget.startTests()
5411 self.__unittest() 5412
5412 self.unittestDialog.startTests() 5413 def __rerunFailedTests(self):
5413 5414 """
5414 def __unittestRerunFailed(self): 5415 Private slot to display the testing dialog and rerun all failed tests
5415 """
5416 Private slot to display the unittest dialog and rerun all failed tests
5417 of the last run. 5416 of the last run.
5418 """ 5417 """
5419 self.__unittest() 5418 self.__startTesting()
5420 self.unittestDialog.startTests(failedOnly=True) 5419 self.__testingWidget.startTests(failedOnly=True)
5421 5420
5422 @pyqtSlot() 5421 @pyqtSlot()
5423 @pyqtSlot(str) 5422 @pyqtSlot(str)
5424 def __designer(self, fn=None): 5423 def __designer(self, fn=None):
5425 """ 5424 """
6814 from .ClearPrivateDataDialog import ClearPrivateDataDialog 6813 from .ClearPrivateDataDialog import ClearPrivateDataDialog
6815 dlg = ClearPrivateDataDialog(self) 6814 dlg = ClearPrivateDataDialog(self)
6816 if dlg.exec() == QDialog.DialogCode.Accepted: 6815 if dlg.exec() == QDialog.DialogCode.Accepted:
6817 # recent files, recent projects, recent multi projects, 6816 # recent files, recent projects, recent multi projects,
6818 # debug histories, shell histories 6817 # debug histories, shell histories
6819 (files, projects, multiProjects, debug, shell, unittests, vcs, 6818 (files, projects, multiProjects, debug, shell, testing, vcs,
6820 plugins) = dlg.getData() 6819 plugins) = dlg.getData()
6821 if files: 6820 if files:
6822 # clear list of recently opened files 6821 # clear list of recently opened files
6823 self.viewmanager.clearRecent() 6822 self.viewmanager.clearRecent()
6824 if projects: 6823 if projects:
6831 # clear the various debug histories 6830 # clear the various debug histories
6832 self.debuggerUI.clearHistories() 6831 self.debuggerUI.clearHistories()
6833 if shell: 6832 if shell:
6834 # clear the shell histories 6833 # clear the shell histories
6835 self.shell.clearAllHistories() 6834 self.shell.clearAllHistories()
6836 if unittests: 6835 if testing:
6837 # clear the unit test histories 6836 # clear the unit test histories
6838 if self.unittestDialog is None: 6837 if self.__testingWidget is None:
6839 from PyUnit.UnittestDialog import clearSavedHistories 6838 from Testing.TestingWidget import clearSavedHistories
6840 clearSavedHistories() 6839 clearSavedHistories()
6841 else: 6840 else:
6842 self.unittestDialog.clearRecent() 6841 self.__testingWidget.clearRecent()
6843 if vcs: 6842 if vcs:
6844 # clear the VCS related histories 6843 # clear the VCS related histories
6845 self.pluginManager.clearPluginsPrivateData("version_control") 6844 self.pluginManager.clearPluginsPrivateData("version_control")
6846 if plugins: 6845 if plugins:
6847 # clear private data of plug-ins not covered above 6846 # clear private data of plug-ins not covered above
6857 6856
6858 def __projectOpened(self): 6857 def __projectOpened(self):
6859 """ 6858 """
6860 Private slot to handle the projectOpened signal. 6859 Private slot to handle the projectOpened signal.
6861 """ 6860 """
6862 from Debugger.DebugClientCapabilities import HasUnittest 6861 import Testing
6863 self.__setWindowCaption(project=self.project.name) 6862 self.__setWindowCaption(project=self.project.name)
6864 cap = self.__debugServer.getClientCapabilities( 6863 supported = Testing.isLanguageSupported(
6865 self.project.getProjectLanguage()) 6864 self.project.getProjectLanguage())
6866 self.utProjectAct.setEnabled(cap & HasUnittest) 6865 self.testProjectAct.setEnabled(supported)
6867 self.utProjectOpen = cap & HasUnittest 6866 self.__testingProjectOpen = supported
6868 6867
6869 def __projectClosed(self): 6868 def __projectClosed(self):
6870 """ 6869 """
6871 Private slot to handle the projectClosed signal. 6870 Private slot to handle the projectClosed signal.
6872 """ 6871 """
6873 self.__setWindowCaption(project="") 6872 self.__setWindowCaption(project="")
6874 self.utProjectAct.setEnabled(False) 6873 self.testProjectAct.setEnabled(False)
6875 if not self.utEditorOpen: 6874 if not self.__testingEditorOpen:
6876 self.utRestartAct.setEnabled(False) 6875 self.restartTestAct.setEnabled(False)
6877 self.utRerunFailedAct.setEnabled(False) 6876 self.rerunFailedTestsAct.setEnabled(False)
6878 self.utProjectOpen = False 6877 self.__testingProjectOpen = False
6879 6878
6880 def __programChange(self, fn): 6879 def __programChange(self, fn):
6881 """ 6880 """
6882 Private slot to handle the programChange signal. 6881 Private slot to handle the programChange signal.
6883 6882
6894 def __lastEditorClosed(self): 6893 def __lastEditorClosed(self):
6895 """ 6894 """
6896 Private slot to handle the lastEditorClosed signal. 6895 Private slot to handle the lastEditorClosed signal.
6897 """ 6896 """
6898 self.wizardsMenuAct.setEnabled(False) 6897 self.wizardsMenuAct.setEnabled(False)
6899 self.utScriptAct.setEnabled(False) 6898 self.testScriptAct.setEnabled(False)
6900 self.utEditorOpen = False 6899 self.__testingEditorOpen = False
6901 if not self.utProjectOpen: 6900 if not self.__testingProjectOpen:
6902 self.utRestartAct.setEnabled(False) 6901 self.restartTestAct.setEnabled(False)
6903 self.utRerunFailedAct.setEnabled(False) 6902 self.rerunFailedTestsAct.setEnabled(False)
6904 self.__setWindowCaption(editor="") 6903 self.__setWindowCaption(editor="")
6905 6904
6906 def __editorOpened(self, fn): 6905 def __editorOpened(self, fn):
6907 """ 6906 """
6908 Private slot to handle the editorOpened signal. 6907 Private slot to handle the editorOpened signal.
6911 """ 6910 """
6912 self.wizardsMenuAct.setEnabled( 6911 self.wizardsMenuAct.setEnabled(
6913 len(self.__menus["wizards"].actions()) > 0) 6912 len(self.__menus["wizards"].actions()) > 0)
6914 6913
6915 if fn and str(fn) != "None": 6914 if fn and str(fn) != "None":
6916 dbs = self.__debugServer 6915 import Testing
6917 for language in dbs.getSupportedLanguages(): 6916 if Testing.isLanguageSupported(
6918 exts = dbs.getExtensions(language) 6917 self.viewmanager.getOpenEditor(fn).getFileType()
6919 if fn.endswith(exts): 6918 ):
6920 from Debugger.DebugClientCapabilities import HasUnittest 6919 self.testScriptAct.setEnabled(True)
6921 cap = dbs.getClientCapabilities(language) 6920 self.__testingEditorOpen = True
6922 self.utScriptAct.setEnabled(cap & HasUnittest)
6923 self.utEditorOpen = cap & HasUnittest
6924 return
6925
6926 if self.viewmanager.getOpenEditor(fn).isPyFile():
6927 self.utScriptAct.setEnabled(True)
6928 self.utEditorOpen = True
6929 6921
6930 def __checkActions(self, editor): 6922 def __checkActions(self, editor):
6931 """ 6923 """
6932 Private slot to check some actions for their enable/disable status. 6924 Private slot to check some actions for their enable/disable status.
6933 6925
6934 @param editor editor window 6926 @param editor editor window
6935 """ 6927 """
6936 fn = editor.getFileName() if editor else None 6928 fn = editor.getFileName() if editor else None
6937 6929
6938 if fn: 6930 if fn:
6939 dbs = self.__debugServer 6931 import Testing
6940 for language in dbs.getSupportedLanguages(): 6932 if Testing.isLanguageSupported(editor.getFileType()):
6941 exts = dbs.getExtensions(language) 6933 self.testScriptAct.setEnabled(True)
6942 if fn.endswith(exts): 6934 self.__testingEditorOpen = True
6943 from Debugger.DebugClientCapabilities import HasUnittest
6944 cap = dbs.getClientCapabilities(language)
6945 self.utScriptAct.setEnabled(cap & HasUnittest)
6946 self.utEditorOpen = cap & HasUnittest
6947 return
6948
6949 if editor.isPyFile():
6950 self.utScriptAct.setEnabled(True)
6951 self.utEditorOpen = True
6952 return 6935 return
6953 6936
6954 self.utScriptAct.setEnabled(False) 6937 self.testScriptAct.setEnabled(False)
6955 6938
6956 def __writeTasks(self): 6939 def __writeTasks(self):
6957 """ 6940 """
6958 Private slot to write the tasks data to a JSON file (.etj). 6941 Private slot to write the tasks data to a JSON file (.etj).
6959 """ 6942 """

eric ide

mercurial