Fri, 05 Apr 2019 19:06:39 +0200
Merged with default branch to prepare a new release.
--- a/APIs/Python3/eric6.api Sat Mar 02 11:17:15 2019 +0100 +++ b/APIs/Python3/eric6.api Fri Apr 05 19:06:39 2019 +0200 @@ -238,7 +238,7 @@ eric6.DebugClients.Python.DCTestResult.DCTestResult.addUnexpectedSuccess?4(test) eric6.DebugClients.Python.DCTestResult.DCTestResult.startTest?4(test) eric6.DebugClients.Python.DCTestResult.DCTestResult.stopTest?4(test) -eric6.DebugClients.Python.DCTestResult.DCTestResult?1(dbgClient) +eric6.DebugClients.Python.DCTestResult.DCTestResult?1(dbgClient, failfast) eric6.DebugClients.Python.DebugBase.DebugBase._fnCache?8 eric6.DebugClients.Python.DebugBase.DebugBase._set_stopinfo?5(stopframe, returnframe) eric6.DebugClients.Python.DebugBase.DebugBase.bootstrap?4(target, args, kwargs) @@ -478,7 +478,8 @@ eric6.Debugger.DebugServer.DebugServer.clientSyntaxError?7 eric6.Debugger.DebugServer.DebugServer.clientThreadList?7 eric6.Debugger.DebugServer.DebugServer.clientThreadSet?7 -eric6.Debugger.DebugServer.DebugServer.clientUtFinished?4() +eric6.Debugger.DebugServer.DebugServer.clientUtDiscovered?4(testCases, exceptionType, exceptionValue) +eric6.Debugger.DebugServer.DebugServer.clientUtFinished?4(status) eric6.Debugger.DebugServer.DebugServer.clientUtPrepared?4(result, exceptionType, exceptionValue) eric6.Debugger.DebugServer.DebugServer.clientUtStartTest?4(testname, doc) eric6.Debugger.DebugServer.DebugServer.clientUtStopTest?4() @@ -527,8 +528,9 @@ eric6.Debugger.DebugServer.DebugServer.remoteStepOver?4() eric6.Debugger.DebugServer.DebugServer.remoteStepQuit?4() eric6.Debugger.DebugServer.DebugServer.remoteThreadList?4() -eric6.Debugger.DebugServer.DebugServer.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, clientType="") -eric6.Debugger.DebugServer.DebugServer.remoteUTRun?4() +eric6.Debugger.DebugServer.DebugServer.remoteUTDiscover?4(clientType, forProject, venvName, syspath, workdir, discoveryStart) +eric6.Debugger.DebugServer.DebugServer.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, clientType="", forProject=False, venvName="", syspath=None, workdir="", discover=False, discoveryStart="", testCases=None, debug=False) +eric6.Debugger.DebugServer.DebugServer.remoteUTRun?4(debug=False, failfast=False) eric6.Debugger.DebugServer.DebugServer.remoteUTStop?4() eric6.Debugger.DebugServer.DebugServer.setCallTraceEnabled?4(on) eric6.Debugger.DebugServer.DebugServer.setDebugging?4(on) @@ -556,6 +558,7 @@ eric6.Debugger.DebugServer.DebugServer.signalClientWatchConditionError?4(condition) eric6.Debugger.DebugServer.DebugServer.startClient?4(unplanned=True, clType=None, forProject=False, runInConsole=False, venvName="", workingDir=None) eric6.Debugger.DebugServer.DebugServer.unregisterDebuggerInterface?4(interfaceName) +eric6.Debugger.DebugServer.DebugServer.utDiscovered?7 eric6.Debugger.DebugServer.DebugServer.utFinished?7 eric6.Debugger.DebugServer.DebugServer.utPrepared?7 eric6.Debugger.DebugServer.DebugServer.utStartTest?7 @@ -644,8 +647,9 @@ eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepOver?4() eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepQuit?4() eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteThreadList?4() -eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase) -eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTRun?4() +eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTDiscover?4(syspath, workdir, discoveryStart) +eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug) +eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTRun?4(debug, failfast) eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTStop?4() eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpoint?4(cond, setWatch, temp=False) eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointEnable?4(cond, enable) @@ -686,8 +690,9 @@ eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepOver?4() eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepQuit?4() eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteThreadList?4() -eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase) -eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTRun?4() +eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTDiscover?4(syspath, workdir, discoveryStart) +eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug) +eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTRun?4(debug, failfast) eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTStop?4() eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpoint?4(cond, setWatch, temp=False) eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointEnable?4(cond, enable) @@ -1497,16 +1502,20 @@ eric6.E5Network.E5Ftp.E5FtpProxyType.Site?7 eric6.E5Network.E5Ftp.E5FtpProxyType.UserAtProxyuserAtServer?7 eric6.E5Network.E5Ftp.E5FtpProxyType.UserAtServer?7 -eric6.E5Network.E5GoogleMail.APPLICATION_NAME?7 -eric6.E5Network.E5GoogleMail.CLIENT_SECRET_FILE?7 -eric6.E5Network.E5GoogleMail.CREDENTIALS_FILE?7 +eric6.E5Network.E5GoogleMail.E5GoogleMail.sendMessage?4(message) +eric6.E5Network.E5GoogleMail.E5GoogleMail.sendResult?7 +eric6.E5Network.E5GoogleMail.E5GoogleMail?1(parent=None) +eric6.E5Network.E5GoogleMail.E5GoogleMailAuthBrowser.approvalCodeReceived?7 +eric6.E5Network.E5GoogleMail.E5GoogleMailAuthBrowser.load?4(url) +eric6.E5Network.E5GoogleMail.E5GoogleMailAuthBrowser?1(parent=None) eric6.E5Network.E5GoogleMail.GoogleMailHelp?4() -eric6.E5Network.E5GoogleMail.GoogleMailSendMessage?4(message) -eric6.E5Network.E5GoogleMail.SCOPES?7 -eric6.E5Network.E5GoogleMail._prepareMessage_v2?5(message) -eric6.E5Network.E5GoogleMail._prepareMessage_v3?5(message) -eric6.E5Network.E5GoogleMail.getCredentials?4() -eric6.E5Network.E5GoogleMail.isClientSecretFileAvailable?4() +eric6.E5Network.E5GoogleMailHelpers.APPLICATION_NAME?7 +eric6.E5Network.E5GoogleMailHelpers.CLIENT_SECRET_FILE?7 +eric6.E5Network.E5GoogleMailHelpers.RequiredPackages?7 +eric6.E5Network.E5GoogleMailHelpers.SCOPES?7 +eric6.E5Network.E5GoogleMailHelpers.TOKEN_FILE?7 +eric6.E5Network.E5GoogleMailHelpers.getInstallCommand?4() +eric6.E5Network.E5GoogleMailHelpers.isClientSecretFileAvailable?4() eric6.E5Network.E5NetworkHeaderDetailsDialog.E5NetworkHeaderDetailsDialog.setData?4(name, value) eric6.E5Network.E5NetworkHeaderDetailsDialog.E5NetworkHeaderDetailsDialog?1(parent=None) eric6.E5Network.E5NetworkIcon.E5NetworkIcon.isOnline?4() @@ -3704,6 +3713,7 @@ eric6.MultiProject.MultiProject.MultiProject.checkDirty?4() eric6.MultiProject.MultiProject.MultiProject.clearRecent?4() eric6.MultiProject.MultiProject.MultiProject.closeMultiProject?4() +eric6.MultiProject.MultiProject.MultiProject.copyProject?4(uid) eric6.MultiProject.MultiProject.MultiProject.deleteProject?4(uid) eric6.MultiProject.MultiProject.MultiProject.dirty?7 eric6.MultiProject.MultiProject.MultiProject.getActions?4() @@ -3992,7 +4002,7 @@ eric6.PipInterface.Pip.Pip.getVirtualenvConfig?4(venvName) eric6.PipInterface.Pip.Pip.getVirtualenvInterpreter?4(venvName) eric6.PipInterface.Pip.Pip.getVirtualenvNames?4() -eric6.PipInterface.Pip.Pip.installPackages?4(packages, venvName, userSite=False) +eric6.PipInterface.Pip.Pip.installPackages?4(packages, venvName="", userSite=False, interpreter="") eric6.PipInterface.Pip.Pip.installPip?4(venvName, userSite=False) eric6.PipInterface.Pip.Pip.installRequirements?4(venvName) eric6.PipInterface.Pip.Pip.repairPip?4(venvName) @@ -4056,7 +4066,7 @@ eric6.PipInterface.PipPackagesWidget.PipPackagesWidget.on_upgradeButton_clicked?4() eric6.PipInterface.PipPackagesWidget.PipPackagesWidget.on_userCheckBox_clicked?4(checked) eric6.PipInterface.PipPackagesWidget.PipPackagesWidget.on_verboseCheckBox_clicked?4(checked) -eric6.PipInterface.PipPackagesWidget.PipPackagesWidget?1(parent=None) +eric6.PipInterface.PipPackagesWidget.PipPackagesWidget?1(pip, parent=None) eric6.PluginManager.PluginDetailsDialog.PluginDetailsDialog.on_activeCheckBox_clicked?4() eric6.PluginManager.PluginDetailsDialog.PluginDetailsDialog.on_autoactivateCheckBox_clicked?4() eric6.PluginManager.PluginDetailsDialog.PluginDetailsDialog?1(details, parent=None) @@ -4259,6 +4269,18 @@ eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.NameFinder.visit?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.NameFinder.visit_Name?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.NameFinder?1() +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.Assigns?7 +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.Refs?7 +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.Returns?7 +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.assigns?4() +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.refs?4() +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.returns?4() +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_Assign?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_AsyncFunctionDef?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_FunctionDef?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_Name?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_Return?4(node) +eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor?1() eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_AsyncFunctionDef?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Bytes?4(node) eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Call?4(node) @@ -7391,27 +7413,37 @@ eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.FAMILYONLY?7 eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.FONT?7 eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.SIZEONLY?7 +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.StyleRole?7 +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.SubstyleRole?7 +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_addSubstyleButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_allDefaultButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_allEolFillButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_backgroundButton_clicked?4() +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_copySubstyleButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_defaultButton_clicked?4() -eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_eolfillCheckBox_toggled?4(on) +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_defaultSubstylesButton_clicked?4() +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_deleteSubstyleButton_clicked?4() +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_editSubstyleButton_clicked?4() +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_eolfillCheckBox_clicked?4(on) eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_exportAllButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_exportCurrentButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_foregroundButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_importAllButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_importCurrentButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_lexerLanguageComboBox_activated?4(language) -eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_styleElementList_currentRowChanged?4(index) +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.on_styleElementList_currentItemChanged?4(current, previous) eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.save?4() eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.saveState?4() -eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.setFont?4(style, familyOnly, sizeOnly) +eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.setFont?4(style, substyle, familyOnly, sizeOnly) eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.setSampleFont?4(familyOnly, sizeOnly) eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage.setState?4(state) eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.EditorHighlightingStylesPage?1(lexers) eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.NoFontsOption?7 eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.create?4(dlg) +eric6.Preferences.ConfigurationPages.EditorKeywordsPage.EditorKeywordsPage.MaxKeywordSets?7 +eric6.Preferences.ConfigurationPages.EditorKeywordsPage.EditorKeywordsPage.on_allDefaultButton_clicked?4() +eric6.Preferences.ConfigurationPages.EditorKeywordsPage.EditorKeywordsPage.on_defaultButton_clicked?4() eric6.Preferences.ConfigurationPages.EditorKeywordsPage.EditorKeywordsPage.on_languageCombo_activated?4(language) eric6.Preferences.ConfigurationPages.EditorKeywordsPage.EditorKeywordsPage.on_setSpinBox_valueChanged?4(kwSet) eric6.Preferences.ConfigurationPages.EditorKeywordsPage.EditorKeywordsPage.save?4() @@ -7449,7 +7481,9 @@ eric6.Preferences.ConfigurationPages.EditorTypingPage.EditorTypingPage.save?4() eric6.Preferences.ConfigurationPages.EditorTypingPage.EditorTypingPage?1() eric6.Preferences.ConfigurationPages.EditorTypingPage.create?4(dlg) +eric6.Preferences.ConfigurationPages.EmailPage.EmailPage.on_googleCheckAgainButton_clicked?4() eric6.Preferences.ConfigurationPages.EmailPage.EmailPage.on_googleHelpButton_clicked?4() +eric6.Preferences.ConfigurationPages.EmailPage.EmailPage.on_googleInstallButton_clicked?4() eric6.Preferences.ConfigurationPages.EmailPage.EmailPage.on_mailAuthenticationGroup_toggled?4(checked) eric6.Preferences.ConfigurationPages.EmailPage.EmailPage.on_mailPasswordEdit_textChanged?4(txt) eric6.Preferences.ConfigurationPages.EmailPage.EmailPage.on_mailServerEdit_textChanged?4(txt) @@ -7635,20 +7669,33 @@ eric6.Preferences.MouseClickDialog.MouseClickDialog.getClick?4() eric6.Preferences.MouseClickDialog.MouseClickDialog.on_clearButton_clicked?4() eric6.Preferences.MouseClickDialog.MouseClickDialog?1(modifiers, button, parent=None) -eric6.Preferences.PreferencesLexer.PreferencesLexer.color?4(style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.defaulEolFill?4(style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultColor?4(style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultFont?4(style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultPaper?4(style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.description?4(style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.eolFill?4(style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.font?4(style) +eric6.Preferences.PreferencesLexer.PreferencesLexer.addSubstyle?4(style) +eric6.Preferences.PreferencesLexer.PreferencesLexer.color?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultColor?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultDescription?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultEolFill?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultFont?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultPaper?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.defaultWords?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.delSubstyle?4(style, substyle) +eric6.Preferences.PreferencesLexer.PreferencesLexer.description?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.eolFill?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.font?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.getStyles?4() +eric6.Preferences.PreferencesLexer.PreferencesLexer.getSubStyles?4(style) +eric6.Preferences.PreferencesLexer.PreferencesLexer.hasStyle?4(style, substyle) +eric6.Preferences.PreferencesLexer.PreferencesLexer.isBaseStyle?4(style) eric6.Preferences.PreferencesLexer.PreferencesLexer.language?4() -eric6.Preferences.PreferencesLexer.PreferencesLexer.paper?4(style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.setColor?4(c, style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.setEolFill?4(eolfill, style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.setFont?4(f, style) -eric6.Preferences.PreferencesLexer.PreferencesLexer.setPaper?4(c, style) +eric6.Preferences.PreferencesLexer.PreferencesLexer.loadDefaultSubStyles?4(style) +eric6.Preferences.PreferencesLexer.PreferencesLexer.paper?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.setColor?4(c, style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.setDescription?4(description, style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.setEolFill?4(eolfill, style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.setFont?4(f, style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.setPaper?4(c, style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.setWords?4(words, style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.words?4(style, substyle=-1) +eric6.Preferences.PreferencesLexer.PreferencesLexer.writeSettings?4() eric6.Preferences.PreferencesLexer.PreferencesLexer?1(language, parent=None) eric6.Preferences.PreferencesLexer.PreferencesLexerError?1() eric6.Preferences.PreferencesLexer.PreferencesLexerLanguageError?1(language) @@ -7723,6 +7770,12 @@ eric6.Preferences.ShortcutsDialog.ShortcutsDialog.populate?4(helpViewer=None) eric6.Preferences.ShortcutsDialog.ShortcutsDialog.updateShortcuts?7 eric6.Preferences.ShortcutsDialog.ShortcutsDialog?1(parent=None) +eric6.Preferences.SubstyleDefinitionDialog.SubstyleDefinitionDialog.getData?4() +eric6.Preferences.SubstyleDefinitionDialog.SubstyleDefinitionDialog.on_defaultButton_clicked?4() +eric6.Preferences.SubstyleDefinitionDialog.SubstyleDefinitionDialog.on_descriptionEdit_textChanged?4(txt) +eric6.Preferences.SubstyleDefinitionDialog.SubstyleDefinitionDialog.on_resetButton_clicked?4() +eric6.Preferences.SubstyleDefinitionDialog.SubstyleDefinitionDialog.on_wordsEdit_textChanged?4() +eric6.Preferences.SubstyleDefinitionDialog.SubstyleDefinitionDialog?1(lexer, style, substyle, parent=None) eric6.Preferences.ToolConfigurationDialog.ToolConfigurationDialog.getToollist?4() eric6.Preferences.ToolConfigurationDialog.ToolConfigurationDialog.on_addButton_clicked?4() eric6.Preferences.ToolConfigurationDialog.ToolConfigurationDialog.on_argumentsEdit_textChanged?4(text) @@ -8332,20 +8385,26 @@ eric6.PyUnit.UnittestDialog.QtTestResult.addUnexpectedSuccess?4(test) eric6.PyUnit.UnittestDialog.QtTestResult.startTest?4(test) eric6.PyUnit.UnittestDialog.QtTestResult.stopTest?4(test) -eric6.PyUnit.UnittestDialog.QtTestResult?1(parent) +eric6.PyUnit.UnittestDialog.QtTestResult?1(parent, failfast) +eric6.PyUnit.UnittestDialog.UnittestDialog.ErrorsInfoRole?7 +eric6.PyUnit.UnittestDialog.UnittestDialog.TestCaseFileRole?7 +eric6.PyUnit.UnittestDialog.UnittestDialog.TestCaseNameRole?7 eric6.PyUnit.UnittestDialog.UnittestDialog.closeEvent?4(event) eric6.PyUnit.UnittestDialog.UnittestDialog.hasFailedTests?4() +eric6.PyUnit.UnittestDialog.UnittestDialog.insertDiscovery?4(start) eric6.PyUnit.UnittestDialog.UnittestDialog.insertProg?4(prog) eric6.PyUnit.UnittestDialog.UnittestDialog.insertTestName?4(testName) eric6.PyUnit.UnittestDialog.UnittestDialog.keyPressEvent?4(evt) eric6.PyUnit.UnittestDialog.UnittestDialog.on_buttonBox_clicked?4(button) +eric6.PyUnit.UnittestDialog.UnittestDialog.on_discoverCheckBox_toggled?4(checked) +eric6.PyUnit.UnittestDialog.UnittestDialog.on_discoveryList_itemDoubleClicked?4(item, column) eric6.PyUnit.UnittestDialog.UnittestDialog.on_errorsListWidget_currentTextChanged?4(text) eric6.PyUnit.UnittestDialog.UnittestDialog.on_errorsListWidget_itemDoubleClicked?4(lbitem) -eric6.PyUnit.UnittestDialog.UnittestDialog.on_startButton_clicked?4(failedOnly=False) -eric6.PyUnit.UnittestDialog.UnittestDialog.on_stopButton_clicked?4() eric6.PyUnit.UnittestDialog.UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog?4() -eric6.PyUnit.UnittestDialog.UnittestDialog.on_testsuitePicker_editTextChanged?4(txt) +eric6.PyUnit.UnittestDialog.UnittestDialog.on_testsuitePicker_editTextChanged?4(path) eric6.PyUnit.UnittestDialog.UnittestDialog.on_testsuitePicker_pathSelected?4(suite) +eric6.PyUnit.UnittestDialog.UnittestDialog.setProjectMode?4(forProject) +eric6.PyUnit.UnittestDialog.UnittestDialog.startTests?4(failedOnly=False) eric6.PyUnit.UnittestDialog.UnittestDialog.testErrored?4(test, exc, testId) eric6.PyUnit.UnittestDialog.UnittestDialog.testFailed?4(test, exc, testId) eric6.PyUnit.UnittestDialog.UnittestDialog.testFailedExpected?4(test, exc, testId) @@ -8355,7 +8414,7 @@ eric6.PyUnit.UnittestDialog.UnittestDialog.testSucceededUnexpected?4(test, testId) eric6.PyUnit.UnittestDialog.UnittestDialog.unittestFile?7 eric6.PyUnit.UnittestDialog.UnittestDialog.unittestStopped?7 -eric6.PyUnit.UnittestDialog.UnittestDialog?1(prog=None, dbs=None, ui=None, fromEric=False, parent=None, name=None) +eric6.PyUnit.UnittestDialog.UnittestDialog?1(prog=None, dbs=None, ui=None, parent=None, name=None) eric6.PyUnit.UnittestDialog.UnittestWindow.eventFilter?4(obj, event) eric6.PyUnit.UnittestDialog.UnittestWindow?1(prog=None, parent=None) eric6.QScintilla.APIsManager.APIs.apiPreparationCancelled?7 @@ -8707,11 +8766,14 @@ eric6.QScintilla.Lexers.Lexer.Lexer.canBoxComment?4() eric6.QScintilla.Lexers.Lexer.Lexer.canStreamComment?4() eric6.QScintilla.Lexers.Lexer.Lexer.commentStr?4() +eric6.QScintilla.Lexers.Lexer.Lexer.defaultKeywords?4(kwSet) eric6.QScintilla.Lexers.Lexer.Lexer.hasSmartIndent?4() +eric6.QScintilla.Lexers.Lexer.Lexer.hasSubstyles?4() eric6.QScintilla.Lexers.Lexer.Lexer.initProperties?4() eric6.QScintilla.Lexers.Lexer.Lexer.isCommentStyle?4(style) eric6.QScintilla.Lexers.Lexer.Lexer.isStringStyle?4(style) eric6.QScintilla.Lexers.Lexer.Lexer.keywords?4(kwSet) +eric6.QScintilla.Lexers.Lexer.Lexer.keywordsDescription?4(kwSet) eric6.QScintilla.Lexers.Lexer.Lexer.lexerName?4() eric6.QScintilla.Lexers.Lexer.Lexer.maximumKeywordSet?4() eric6.QScintilla.Lexers.Lexer.Lexer.smartIndentLine?4(editor) @@ -8989,6 +9051,37 @@ eric6.QScintilla.Lexers.LexerYAML.LexerYAML.isCommentStyle?4(style) eric6.QScintilla.Lexers.LexerYAML.LexerYAML.isStringStyle?4(style) eric6.QScintilla.Lexers.LexerYAML.LexerYAML?1(parent=None) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.addSubstyle?4(style) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.delSubstyle?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.getBaseStyles?4() +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.hasSubstyle?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.hasSubstyles?4() +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.isBaseStyle?4(style) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.loadAllDefaultSubStyles?4() +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.loadDefaultSubStyles?4(style) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.loadSubstyles?4() +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.readSubstyles?4(editor) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.setSubstyleColor?4(color, style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.setSubstyleDescription?4(description, style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.setSubstyleEolFill?4(eolFill, style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.setSubstyleFont?4(font, style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.setSubstylePaper?4(color, style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.setSubstyleWords?4(words, style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleColor?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleDefaultColor?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleDefaultDescription?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleDefaultEolFill?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleDefaultFont?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleDefaultPaper?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleDefaultWords?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleDescription?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleEolFill?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleFont?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substylePaper?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substyleWords?4(style, substyle) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.substylesCount?4(style) +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer.writeSubstyles?4() +eric6.QScintilla.Lexers.SubstyledLexer.SubstyledLexer?1() eric6.QScintilla.Lexers.getDefaultLexerAssociations?4() eric6.QScintilla.Lexers.getLanguageIcon?4(language, pixmap) eric6.QScintilla.Lexers.getLexer?4(language, parent=None, pyname="") @@ -9175,7 +9268,8 @@ eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.extendSelectionToEOL?4() eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.extendSelectionWordLeft?4() eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.extendSelectionWordRight?4() -eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.findFirstTarget?4(expr_, re_, cs_, wo_, begline=-1, begindex=-1, endline=-1, endindex=-1, ws_=False) +eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.findFirst?4(expression, regexp, caseSensitive, word, wrap, forward=True, line=-1, index=-1, show=True, posix=False, cxx11=False) +eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.findFirstTarget?4(expr_, re_, cs_, wo_, begline=-1, begindex=-1, endline=-1, endindex=-1, ws_=False, posix=False, cxx11=False) eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.findNextTarget?4() eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.flashFindIndicator?4(sline, sindex, eline, eindex) eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.focusOutEvent?4(event) @@ -9244,6 +9338,7 @@ eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setRectangularSelection?4(startLine, startIndex, endLine, endIndex) eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setStyling?4(length, style) eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setVirtualSpaceOptions?4(options) +eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setWrapStartIndent?4(indent) eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.showFindIndicator?4(sline, sindex, eline, eindex) eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.showUserList?4(listId, lst) eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.startStyling?4(pos, mask) @@ -9881,7 +9976,6 @@ eric6.UI.EmailDialog.EmailDialog.on_sendButton_clicked?4() eric6.UI.EmailDialog.EmailDialog.on_subject_textChanged?4(txt) eric6.UI.EmailDialog.EmailDialog?1(mode="bug", parent=None) -eric6.UI.EmailDialog._encode_base64?5(msg) eric6.UI.ErrorLogDialog.ErrorLogDialog.on_deleteButton_clicked?4() eric6.UI.ErrorLogDialog.ErrorLogDialog.on_emailButton_clicked?4() eric6.UI.ErrorLogDialog.ErrorLogDialog.on_keepButton_clicked?4() @@ -10802,6 +10896,7 @@ eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvInterpreter?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvNames?4() eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvNamesForVariant?4(variant) +eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvVariant?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.isCondaEnvironment?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.isGlobalEnvironment?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.isRemoteEnvironment?4(venvName)
--- a/APIs/Python3/eric6.bas Sat Mar 02 11:17:15 2019 +0100 +++ b/APIs/Python3/eric6.bas Fri Apr 05 19:06:39 2019 +0200 @@ -181,6 +181,8 @@ E5Ftp ftplib.FTP E5FtpProxyError ftplib.Error E5GenericDiffHighlighter QSyntaxHighlighter +E5GoogleMail QObject +E5GoogleMailAuthBrowser QDialog E5GraphicsView QGraphicsView E5HorizontalToolBox E5TabWidget E5Led QWidget @@ -556,7 +558,7 @@ LexerBash Lexer QsciLexerBash LexerBatch Lexer QsciLexerBatch LexerCMake Lexer QsciLexerCMake -LexerCPP Lexer QsciLexerCPP +LexerCPP QsciLexerCPP SubstyledLexer LexerCSS Lexer QsciLexerCSS LexerCSharp Lexer QsciLexerCSharp LexerCoffeeScript Lexer QsciLexerCoffeeScript @@ -582,7 +584,7 @@ LexerPostScript Lexer QsciLexerPostScript LexerProperties Lexer QsciLexerProperties LexerPygments LexerContainer -LexerPython Lexer QsciLexerPython +LexerPython QsciLexerPython SubstyledLexer LexerQSS Lexer QsciLexerCSS LexerRuby Lexer QsciLexerRuby LexerSQL Lexer QsciLexerSQL @@ -703,7 +705,7 @@ PluginUninstallWidget QWidget Ui_PluginUninstallDialog PluginUninstallWindow E5MainWindow PluginWizardDialog QDialog Ui_PluginWizardDialog -PreferencesLexer QsciLexer +PreferencesLexer QObject PreferencesLexerError Exception PreferencesLexerLanguageError PreferencesLexerError PreviewProcessingThread QThread @@ -789,6 +791,7 @@ ReloadStopButton E5ToolButton RemoveBookmarksCommand QUndoCommand RestructuredTextProvider MarkupBase +ReturnVisitor ast.NodeVisitor SafariImporter BookmarksImporter SafeBrowsingAPIClient QObject SafeBrowsingCache QObject @@ -861,6 +864,8 @@ StatusMonitorLedWidget QWidget Strip HgExtension StripProjectHelper HgExtensionProjectHelper +SubstyleDefinitionDialog QDialog Ui_SubstyleDefinitionDialog +SubstyledLexer Lexer Subversion VersionControl SubversionPage ConfigurationPageBase Ui_SubversionPage SvgDiagram E5MainWindow
--- a/DTDs/HighlightingStyles-4.3.dtd Sat Mar 02 11:17:15 2019 +0100 +++ b/DTDs/HighlightingStyles-4.3.dtd Fri Apr 05 19:06:39 2019 +0200 @@ -1,4 +1,4 @@ -<!-- This is the DTD for eric4's highlightings styles file version 4.3 --> +<!-- This is the DTD for eric4's highlighting styles file version 4.3 --> <!ELEMENT Style (#PCDATA)> <!ATTLIST Style
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DTDs/HighlightingStyles-6.0.dtd Fri Apr 05 19:06:39 2019 +0200 @@ -0,0 +1,23 @@ +<!-- This is the DTD for eric6's highlighting styles file version 6.0 --> + +<!ELEMENT Description (#PCDATA)> + +<!ELEMENT Words (#PCDATA)> + +<!ELEMENT Style (Description, + Words?)> +<!ATTLIST Style + style CDATA #REQUIRED + substyle CDATA #REQUIRED + color CDATA #REQUIRED + paper CDATA #REQUIRED + font CDATA #REQUIRED + eolfill CDATA #REQUIRED> + +<!ELEMENT Lexer (Style+)> +<!ATTLIST Lexer + name CDATA #REQUIRED> + +<!ELEMENT HighlightingStyles (Lexer+)> +<!ATTLIST HighlightingStyles + version CDATA #REQUIRED>
--- a/DebugClients/Python/BreakpointWatch.py Sat Mar 02 11:17:15 2019 +0100 +++ b/DebugClients/Python/BreakpointWatch.py Fri Apr 05 19:06:39 2019 +0200 @@ -278,6 +278,8 @@ for b in Watch.watches: if b.cond == cond: return b + + return None @staticmethod def effectiveWatch(frame):
--- a/DebugClients/Python/DCTestResult.py Sat Mar 02 11:17:15 2019 +0100 +++ b/DebugClients/Python/DCTestResult.py Fri Apr 05 19:06:39 2019 +0200 @@ -17,15 +17,18 @@ For more details see unittest.py of the standard python distribution. """ - def __init__(self, dbgClient): + def __init__(self, dbgClient, failfast): """ Constructor @param dbgClient reference to the debug client @type DebugClientBase + @param failfast flag indicating to stop at the first error + @type bool """ TestResult.__init__(self) self.__dbgClient = dbgClient + self.failfast = failfast def addFailure(self, test, err): """
--- a/DebugClients/Python/DebugBase.py Sat Mar 02 11:17:15 2019 +0100 +++ b/DebugClients/Python/DebugBase.py Fri Apr 05 19:06:39 2019 +0200 @@ -329,14 +329,14 @@ return self.trace_dispatch else: # No need to trace this function - return + return None if event == 'return': if frame == self.returnframe: # Only true if we didn't stopped in this frame, because it's # belonging to the eric debugger. self._set_stopinfo(None, frame.f_back) - return + return None if event == 'exception': if not self.__skipFrame(frame): @@ -355,14 +355,14 @@ self.stopframe.f_code.co_flags & CO_GENERATOR and arg[0] in (StopIteration, GeneratorExit)): self.user_exception(arg) - return + return None if event == 'c_call': - return + return None if event == 'c_exception': - return + return None if event == 'c_return': - return + return None print('DebugBase.trace_dispatch:' # __IGNORE_WARNING_M801__ ' unknown debugging event: ',
--- a/DebugClients/Python/DebugClientBase.py Sat Mar 02 11:17:15 2019 +0100 +++ b/DebugClients/Python/DebugClientBase.py Fri Apr 05 19:06:39 2019 +0200 @@ -19,6 +19,7 @@ import re import atexit import signal +import time import DebugClientCapabilities @@ -800,10 +801,15 @@ elif method == "RequestCompletion": self.__completionList(params["text"]) - elif method == "RequestUTPrepare": - sys.path.insert( - 0, os.path.dirname(os.path.abspath(params["filename"]))) - os.chdir(sys.path[0]) + elif method == "RequestUTDiscover": + if params["syspath"]: + sys.path = params["syspath"] + sys.path + + discoveryStart = params["discoverystart"] + if not discoveryStart: + discoveryStart = params["workdir"] + + os.chdir(params["discoverystart"]) # set the system exception handling function to ensure, that # we report on all unhandled exceptions @@ -812,19 +818,75 @@ try: import unittest - utModule = imp.load_source( - params["testname"], params["filename"]) - try: - if params["failed"]: - self.test = unittest.defaultTestLoader\ - .loadTestsFromNames(params["failed"], utModule) + testLoader = unittest.TestLoader() + test = testLoader.discover(discoveryStart) + if hasattr(testLoader, "errors") and \ + bool(testLoader.errors): + self.sendJsonCommand("ResponseUTDiscover", { + "testCasesList": [], + "exception": "DiscoveryError", + "message": "\n\n".join(testLoader.errors), + }) + else: + testsList = self.__assembleTestCasesList(test, + discoveryStart) + self.sendJsonCommand("ResponseUTDiscover", { + "testCasesList": testsList, + "exception": "", + "message": "", + }) + except Exception: + exc_type, exc_value, exc_tb = sys.exc_info() + self.sendJsonCommand("ResponseUTDiscover", { + "testCasesList": [], + "exception": exc_type.__name__, + "message": str(exc_value), + }) + + elif method == "RequestUTPrepare": + if params["syspath"]: + sys.path = params["syspath"] + sys.path + sys.path.insert( + 0, os.path.dirname(os.path.abspath(params["filename"]))) + if params["workdir"]: + os.chdir(params["workdir"]) + else: + os.chdir(sys.path[0]) + + # set the system exception handling function to ensure, that + # we report on all unhandled exceptions + sys.excepthook = self.__unhandled_exception + self.__interceptSignals() + + try: + import unittest + testLoader = unittest.TestLoader() + if params["discover"]: + discoveryStart = params["discoverystart"] + if not discoveryStart: + discoveryStart = params["workdir"] + if params["testcases"]: + self.test = testLoader.loadTestsFromNames( + params["testcases"]) else: - self.test = unittest.defaultTestLoader\ - .loadTestsFromName(params["testfunctionname"], - utModule) - except AttributeError: - self.test = unittest.defaultTestLoader\ - .loadTestsFromModule(utModule) + self.test = testLoader.discover(discoveryStart) + else: + if params["filename"]: + utModule = imp.load_source( + params["testname"], params["filename"]) + else: + utModule = None + if params["failed"]: + if utModule: + failed = [t.split(".", 1)[1] + for t in params["failed"]] + else: + failed = params["failed"][:] + self.test = testLoader.loadTestsFromNames( + failed, utModule) + else: + self.test = testLoader.loadTestsFromName( + params["testfunctionname"], utModule) except Exception: exc_type, exc_value, exc_tb = sys.exc_info() self.sendJsonCommand("ResponseUTPrepared", { @@ -846,6 +908,10 @@ else: self.cover = None + if params["debug"]: + Breakpoint.clear_all_breaks() + Watch.clear_all_watches() + self.sendJsonCommand("ResponseUTPrepared", { "count": self.test.countTestCases(), "exception": "", @@ -854,14 +920,27 @@ elif method == "RequestUTRun": from DCTestResult import DCTestResult - self.testResult = DCTestResult(self) + self.testResult = DCTestResult(self, params["failfast"]) if self.cover: self.cover.start() - self.test.run(self.testResult) + self.debugging = params["debug"] + if params["debug"]: + locals_ = locals() + self.threads.clear() + self.attachThread(mainThread=True) + sys.setprofile(None) + self.mainThread.run( + "result = self.test.run(self.testResult)\n", + localsDict=locals_) + result = locals_["result"] + else: + result = self.test.run(self.testResult) if self.cover: self.cover.stop() self.cover.save() - self.sendJsonCommand("ResponseUTFinished", {}) + self.sendJsonCommand("ResponseUTFinished", { + "status": 0 if result.wasSuccessful() else 1, + }) elif method == "RequestUTStop": self.testResult.stop() @@ -871,6 +950,37 @@ self.fork_child = (params["target"] == 'child') self.eventExit = True + def __assembleTestCasesList(self, suite, start): + """ + Private method to assemble a list of test cases included in a test + suite. + + @param suite test suite to be inspected + @type unittest.TestSuite + @param start name of directory discovery was started at + @type str + @return list of tuples containing the test case ID, a short description + and the path of the test file name + @rtype list of tuples of (str, str, str) + """ + import unittest + testCases = [] + for test in suite: + if isinstance(test, unittest.TestSuite): + testCases.extend(self.__assembleTestCasesList(test, start)) + else: + testId = test.id() + if "ModuleImportFailure" not in testId and \ + "LoadTestsFailure" not in testId and \ + "_FailedTest" not in testId: + filename = os.path.join( + start, + test.__module__.replace(".", os.sep) + ".py") + testCases.append( + (test.id(), test.shortDescription(), filename) + ) + return testCases + def sendJsonCommand(self, method, params): """ Public method to send a single command or response to the IDE. @@ -1987,8 +2097,17 @@ family = socket.AF_INET else: family = socket.AF_INET6 - return socket.getaddrinfo(host, None, family, - socket.SOCK_STREAM)[0][4][0] + + retryCount = 0 + while retryCount < 10: + try: + addrinfo = socket.getaddrinfo( + host, None, family, socket.SOCK_STREAM) + return addrinfo[0][4][0] + except Exception: + retryCount += 1 + time.sleep(3) + return None def main(self): """ @@ -2073,16 +2192,15 @@ except (ValueError, IndexError): redirect = True - try: - ipOrHost = sys.argv[3] - if ':' in ipOrHost: - remoteAddress = ipOrHost - elif ipOrHost[0] in '0123456789': - remoteAddress = ipOrHost - else: - remoteAddress = self.__resolveHost(ipOrHost) - except Exception: - remoteAddress = None + ipOrHost = sys.argv[3] + if ':' in ipOrHost: + # IPv6 address + remoteAddress = ipOrHost + elif ipOrHost[0] in '0123456789': + # IPv4 address + remoteAddress = ipOrHost + else: + remoteAddress = self.__resolveHost(ipOrHost) sys.argv = [''] if '' not in sys.path:
--- a/DebugClients/Python/FlexCompleter.py Sat Mar 02 11:17:15 2019 +0100 +++ b/DebugClients/Python/FlexCompleter.py Fri Apr 05 19:06:39 2019 +0200 @@ -177,7 +177,7 @@ m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text) if not m: - return + return [] expr, attr = m.group(1, 3) try: thisobject = eval(expr, self.namespace)
--- a/DebugClients/Python/ThreadExtension.py Sat Mar 02 11:17:15 2019 +0100 +++ b/DebugClients/Python/ThreadExtension.py Fri Apr 05 19:06:39 2019 +0200 @@ -131,7 +131,7 @@ @rtype bool """ if blocking: - self.clientLock.acquire() + return self.clientLock.acquire() else: return self.clientLock.acquire(blocking)
--- a/Debugger/DebugServer.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/DebugServer.py Fri Apr 05 19:06:39 2019 +0200 @@ -69,8 +69,8 @@ detected on the client side @signal clientSignal(signal) emitted after a signal has been generated on the client side - @signal clientExit(int) emitted with the exit status after the client has - exited + @signal clientExit(int, str, bool) emitted after the client has exited + giving the exit status, an exit message and an indication to be quiet @signal clientClearBreak(filename, lineno) emitted after the debug client has decided to clear a temporary breakpoint @signal clientBreakConditionError(fn, lineno) emitted after the client has @@ -94,6 +94,8 @@ unplanned) @signal clientInterpreterChanged(str) emitted to signal a change of the client interpreter + @signal utDiscovered(testCases, exc_type, exc_value) emitted after the + client has performed a test case discovery action @signal utPrepared(nrTests, exc_type, exc_value) emitted after the client has loaded a unittest suite @signal utFinished() emitted after the client signalled the end of the @@ -134,7 +136,7 @@ clientException = pyqtSignal(str, str, list) clientSyntaxError = pyqtSignal(str, str, int, int) clientSignal = pyqtSignal(str, str, int, str, str) - clientExit = pyqtSignal(int, str) + clientExit = pyqtSignal(int, str, bool) clientBreakConditionError = pyqtSignal(str, int) clientWatchConditionError = pyqtSignal(str) clientRawInput = pyqtSignal(str, bool) @@ -142,6 +144,7 @@ clientCapabilities = pyqtSignal(int, str, str) clientCompletionList = pyqtSignal(list, str) clientInterpreterChanged = pyqtSignal(str) + utDiscovered = pyqtSignal(list, str, str) utPrepared = pyqtSignal(int, str, str) utStartTest = pyqtSignal(str, str) utStopTest = pyqtSignal() @@ -1311,26 +1314,91 @@ @param text the text to be completed (string) """ self.debuggerInterface.remoteCompletion(text) - + + def remoteUTDiscover(self, clientType, forProject, venvName, syspath, + workdir, discoveryStart): + """ + Public method to perform a test case discovery. + + @param clientType client type to be used + @type str + @param forProject flag indicating a project related action + @type bool + @param venvName name of a virtual environment + @type str + @param syspath list of directories to be added to sys.path on the + remote side + @type list of str + @param workdir path name of the working directory + @type str + @param discoveryStart directory to start auto-discovery at + @type str + """ + if clientType and clientType not in self.getSupportedLanguages(): + # a not supported client language was requested + E5MessageBox.critical( + None, + self.tr("Start Debugger"), + self.tr( + """<p>The debugger type <b>{0}</b> is not supported""" + """ or not configured.</p>""").format(clientType) + ) + return + + # Restart the client if there is already a program loaded. + try: + if clientType: + self.__setClientType(clientType) + except KeyError: + self.__setClientType('Python3') # assume it is a Python3 file + self.startClient(False, forProject=forProject, venvName=venvName) + + self.debuggerInterface.remoteUTDiscover( + syspath, workdir, discoveryStart) + def remoteUTPrepare(self, fn, tn, tfn, failed, cov, covname, coverase, - clientType=""): + clientType="", forProject=False, venvName="", + syspath=None, workdir="", discover=False, + discoveryStart="", testCases=None, debug=False): """ Public method to prepare a new unittest run. - @param fn the filename to load (string) - @param tn the testname to load (string) - @param tfn the test function name to load tests from (string) + @param fn the filename to load + @type str + @param tn the testname to load + @type str + @param tfn the test function name to load tests from + @type str @param failed list of failed test, if only failed test should be run - (list of strings) + @type list of str @param cov flag indicating collection of coverage data is requested - (boolean) + @type bool @param covname filename to be used to assemble the coverage caches - filename (string) + filename + @type str @param coverase flag indicating erasure of coverage data is requested - (boolean) - @keyparam clientType client type to be used (string) + @type bool + @param clientType client type to be used + @type str + @param forProject flag indicating a project related action + @type bool + @param venvName name of a virtual environment + @type str + @param syspath list of directories to be added to sys.path on the + remote side + @type list of str + @param workdir path name of the working directory + @type str + @param discover flag indicating to discover the tests automatically + @type bool + @param discoveryStart directory to start auto-discovery at + @type str + @param testCases list of test cases to be loaded + @type list of str + @param debug flag indicating to run unittest with debugging + @type bool """ - if clientType not in self.getSupportedLanguages(): + if clientType and clientType not in self.getSupportedLanguages(): # a not supported client language was requested E5MessageBox.critical( None, @@ -1350,18 +1418,27 @@ self.__findLanguageForExtension(os.path.splitext(fn)[1])) except KeyError: self.__setClientType('Python3') # assume it is a Python3 file - self.startClient(False) + self.startClient(False, forProject=forProject, venvName=venvName) self.debuggerInterface.remoteUTPrepare( - fn, tn, tfn, failed, cov, covname, coverase) - self.debugging = False + fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, + discover, discoveryStart, testCases, debug) self.running = True + self.debugging = debug + if debug: + self.__restoreBreakpoints() + self.__restoreWatchpoints() - def remoteUTRun(self): + def remoteUTRun(self, debug=False, failfast=False): """ Public method to start a unittest run. + + @param debug flag indicating to run unittest with debugging + @type bool + @param failfast flag indicating to stop at the first error + @type bool """ - self.debuggerInterface.remoteUTRun() + self.debuggerInterface.remoteUTRun(debug, failfast) def remoteUTStop(self): """ @@ -1500,7 +1577,7 @@ """ if self.passive: self.__passiveShutDown() - self.clientExit.emit(int(status), message) + self.clientExit.emit(int(status), message, False) if Preferences.getDebugger("AutomaticReset") or (self.running and not self.debugging): self.debugging = False @@ -1613,6 +1690,19 @@ isCall, fromFile, fromLine, fromFunction, toFile, toLine, toFunction) + def clientUtDiscovered(self, testCases, exceptionType, exceptionValue): + """ + Public method to process the client unittest discover info. + + @param testCases list of detected test cases + @type str + @param exceptionType exception type + @type str + @param exceptionValue exception message + @type str + """ + self.utDiscovered.emit(testCases, exceptionType, exceptionValue) + def clientUtPrepared(self, result, exceptionType, exceptionValue): """ Public method to process the client unittest prepared info. @@ -1687,12 +1777,19 @@ """ self.utTestSucceededUnexpected.emit(testname, testId) - def clientUtFinished(self): + def clientUtFinished(self, status): """ Public method to process the client unit test finished info. + + @param status exit status of the unit test + @type int """ self.utFinished.emit() + self.clientExit.emit(int(status), "", True) + self.debugging = False + self.running = False + def passiveStartUp(self, fn, exc): """ Public method to handle a passive debug connection.
--- a/Debugger/DebugUI.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/DebugUI.py Fri Apr 05 19:06:39 2019 +0200 @@ -1013,7 +1013,7 @@ self.debugActGrp.setEnabled(True) - def __clientExit(self, status, message): + def __clientExit(self, status, message, quiet): """ Private method to handle the debugged program terminating. @@ -1021,58 +1021,64 @@ @type int @param message exit message of the debugged program @type str + @param quiet flag indicating to suppress exit info display + @type bool """ self.viewmanager.exit() self.__resetUI() - if not Preferences.getDebugger("SuppressClientExit") or status != 0: - if message: - info = self.tr("<p>Message: {0}</p>").format( - Utilities.html_uencode(message)) - else: - info = "" - if self.ui.currentProg is None: - E5MessageBox.information( - self.ui, Program, - self.tr('<p>The program has terminated with an exit' - ' status of {0}.</p>{1}').format(status, info)) - else: - E5MessageBox.information( - self.ui, Program, - self.tr('<p><b>{0}</b> has terminated with an exit' - ' status of {1}.</p>{2}') - .format(Utilities.normabspath(self.ui.currentProg), - status, info)) - else: - if message: - info = self.tr("Message: {0}").format( - Utilities.html_uencode(message)) - else: - info = "" - if self.ui.notificationsEnabled(): + if not quiet: + if not Preferences.getDebugger("SuppressClientExit") or \ + status != 0: + if message: + info = self.tr("<p>Message: {0}</p>").format( + Utilities.html_uencode(message)) + else: + info = "" if self.ui.currentProg is None: - msg = self.tr('The program has terminated with an exit' - ' status of {0}.\n{1}').format(status, info) + E5MessageBox.information( + self.ui, Program, + self.tr('<p>The program has terminated with an exit' + ' status of {0}.</p>{1}').format(status, info)) else: - msg = self.tr('"{0}" has terminated with an exit' - ' status of {1}.\n{2}')\ - .format(os.path.basename(self.ui.currentProg), - status, info) - self.ui.showNotification( - UI.PixmapCache.getPixmap("debug48.png"), - self.tr("Program terminated"), msg) - else: - if self.ui.currentProg is None: - self.appendStdout.emit( - self.tr('The program has terminated with an exit' - ' status of {0}.\n{1}\n').format(status, info)) - else: - self.appendStdout.emit( - self.tr('"{0}" has terminated with an exit' - ' status of {1}.\n{2}\n') + E5MessageBox.information( + self.ui, Program, + self.tr('<p><b>{0}</b> has terminated with an exit' + ' status of {1}.</p>{2}') .format(Utilities.normabspath(self.ui.currentProg), status, info)) + else: + if message: + info = self.tr("Message: {0}").format( + Utilities.html_uencode(message)) + else: + info = "" + if self.ui.notificationsEnabled(): + if self.ui.currentProg is None: + msg = self.tr( + 'The program has terminated with an exit status of' + ' {0}.\n{1}').format(status, info) + else: + msg = self.tr( + '"{0}" has terminated with an exit status of' + ' {1}.\n{2}').format( + os.path.basename(self.ui.currentProg), status, + info) + self.ui.showNotification( + UI.PixmapCache.getPixmap("debug48.png"), + self.tr("Program terminated"), msg) + else: + if self.ui.currentProg is None: + self.appendStdout.emit(self.tr( + 'The program has terminated with an exit status' + ' of {0}.\n{1}\n').format(status, info)) + else: + self.appendStdout.emit(self.tr( + '"{0}" has terminated with an exit status of' + ' {1}.\n{2}\n').format( + Utilities.normabspath(self.ui.currentProg), status, + info)) def __clientSyntaxError(self, message, filename, lineNo, characterNo): """
--- a/Debugger/DebuggerInterfaceNone.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/DebuggerInterfaceNone.py Fri Apr 05 19:06:39 2019 +0200 @@ -408,27 +408,65 @@ """ return - def remoteUTPrepare(self, fn, tn, tfn, failed, cov, covname, coverase): + def remoteUTDiscover(self, syspath, workdir, discoveryStart): + """ + Public method to perform a test case discovery. + + @param syspath list of directories to be added to sys.path on the + remote side + @type list of str + @param workdir path name of the working directory + @type str + @param discoveryStart directory to start auto-discovery at + @type str + """ + return + + def remoteUTPrepare(self, fn, tn, tfn, failed, cov, covname, coverase, + syspath, workdir, discover, discoveryStart, testCases, + debug): """ Public method to prepare a new unittest run. - @param fn the filename to load (string) - @param tn the testname to load (string) - @param tfn the test function name to load tests from (string) + @param fn name of file to load + @type str + @param tn name of test to load + @type str + @param tfn test function name to load tests from + @type str @param failed list of failed test, if only failed test should be run - (list of strings) + @type list of str @param cov flag indicating collection of coverage data is requested - (boolean) - @param covname filename to be used to assemble the coverage caches - filename (string) + @type bool + @param covname name of file to be used to assemble the coverage caches + filename + @type str @param coverase flag indicating erasure of coverage data is requested - (boolean) + @type bool + @param syspath list of directories to be added to sys.path on the + remote side + @type list of str + @param workdir path name of the working directory + @type str + @param discover flag indicating to discover the tests automatically + @type bool + @param discoveryStart directory to start auto-discovery at + @type str + @param testCases list of test cases to be loaded + @type list of str + @param debug flag indicating to run unittest with debugging + @type bool """ return - def remoteUTRun(self): + def remoteUTRun(self, debug, failfast): """ Public method to start a unittest run. + + @param debug flag indicating to run unittest with debugging + @type bool + @param failfast flag indicating to stop at the first error + @type bool """ return
--- a/Debugger/DebuggerInterfacePython.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/DebuggerInterfacePython.py Fri Apr 05 19:06:39 2019 +0200 @@ -228,7 +228,15 @@ args = Utilities.parseOptionString(rexec) + \ [rhost, interpreter, debugClient, noencoding, str(port), redirect, ipaddr] - args[0] = Utilities.getExecutablePath(args[0]) + if Utilities.isWindowsPlatform(): + if not os.path.splitext(args[0])[1]: + for ext in [".exe", ".com", ".cmd", ".bat"]: + prog = Utilities.getExecutablePath(args[0] + ext) + if prog: + args[0] = prog + break + else: + args[0] = Utilities.getExecutablePath(args[0]) process = self.__startProcess(args[0], args[1:], workingDir=workingDir) if process is None: @@ -381,7 +389,15 @@ args = Utilities.parseOptionString(rexec) + \ [rhost, interpreter, debugClient, noencoding, str(port), redirect, ipaddr] - args[0] = Utilities.getExecutablePath(args[0]) + if Utilities.isWindowsPlatform(): + if not os.path.splitext(args[0])[1]: + for ext in [".exe", ".com", ".cmd", ".bat"]: + prog = Utilities.getExecutablePath(args[0] + ext) + if prog: + args[0] = prog + break + else: + args[0] = Utilities.getExecutablePath(args[0]) process = self.__startProcess(args[0], args[1:], workingDir=workingDir) if process is None: @@ -911,25 +927,66 @@ "text": text, }) - def remoteUTPrepare(self, fn, tn, tfn, failed, cov, covname, coverase): + def remoteUTDiscover(self, syspath, workdir, discoveryStart): + """ + Public method to perform a test case discovery. + + @param syspath list of directories to be added to sys.path on the + remote side + @type list of str + @param workdir path name of the working directory + @type str + @param discoveryStart directory to start auto-discovery at + @type str + """ + self.__sendJsonCommand("RequestUTDiscover", { + "syspath": [] if syspath is None else syspath, + "workdir": workdir, + "discoverystart": discoveryStart, + }) + + def remoteUTPrepare(self, fn, tn, tfn, failed, cov, covname, coverase, + syspath, workdir, discover, discoveryStart, testCases, + debug): """ Public method to prepare a new unittest run. - @param fn the filename to load (string) - @param tn the testname to load (string) - @param tfn the test function name to load tests from (string) + @param fn name of file to load + @type str + @param tn name of test to load + @type str + @param tfn test function name to load tests from + @type str @param failed list of failed test, if only failed test should be run - (list of strings) + @type list of str @param cov flag indicating collection of coverage data is requested - (boolean) - @param covname filename to be used to assemble the coverage caches - filename (string) + @type bool + @param covname name of file to be used to assemble the coverage caches + filename + @type str @param coverase flag indicating erasure of coverage data is requested - (boolean) + @type bool + @param syspath list of directories to be added to sys.path on the + remote side + @type list of str + @param workdir path name of the working directory + @type str + @param discover flag indicating to discover the tests automatically + @type bool + @param discoveryStart directory to start auto-discovery at + @type str + @param testCases list of test cases to be loaded + @type list of str + @param debug flag indicating to run unittest with debugging + @type bool """ - self.__scriptName = os.path.abspath(fn) + if fn: + self.__scriptName = os.path.abspath(fn) + + fn = self.translate(os.path.abspath(fn), False) + else: + self.__scriptName = "unittest discover" - fn = self.translate(os.path.abspath(fn), False) self.__sendJsonCommand("RequestUTPrepare", { "filename": fn, "testname": tn, @@ -938,13 +995,29 @@ "coverage": cov, "coveragefile": covname, "coverageerase": coverase, + "syspath": [] if syspath is None else syspath, + "workdir": workdir, + "discover": discover, + "discoverystart": discoveryStart, + "testcases": [] if testCases is None else testCases, + "debug": debug, }) - def remoteUTRun(self): + def remoteUTRun(self, debug, failfast): """ Public method to start a unittest run. + + @param debug flag indicating to run unittest with debugging + @type bool + @param failfast flag indicating to stop at the first error + @type bool """ - self.__sendJsonCommand("RequestUTRun", {}) + if debug: + self.__autoContinue = True + self.__sendJsonCommand("RequestUTRun", { + "debug": debug, + "failfast": failfast, + }) def remoteUTStop(self): """ @@ -1155,12 +1228,17 @@ self.debugServer.signalClientCompletionList( params["completions"], params["text"]) + elif method == "ResponseUTDiscover": + self.debugServer.clientUtDiscovered( + params["testCasesList"], params["exception"], + params["message"]) + elif method == "ResponseUTPrepared": self.debugServer.clientUtPrepared( params["count"], params["exception"], params["message"]) elif method == "ResponseUTFinished": - self.debugServer.clientUtFinished() + self.debugServer.clientUtFinished(params["status"]) elif method == "ResponseUTStartTest": self.debugServer.clientUtStartTest(
--- a/Debugger/StartCoverageDialog.ui Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/StartCoverageDialog.ui Fri Apr 05 19:06:39 2019 +0200 @@ -22,7 +22,7 @@ <item row="2" column="0"> <widget class="QLabel" name="TextLabel2"> <property name="text"> - <string>&Working directory:</string> + <string>Working directory:</string> </property> <property name="buddy"> <cstring>workdirPicker</cstring> @@ -32,7 +32,7 @@ <item row="1" column="0"> <widget class="QLabel" name="TextLabel1"> <property name="text"> - <string>Command&line:</string> + <string>Script Parameters:</string> </property> <property name="buddy"> <cstring>cmdlineCombo</cstring> @@ -137,7 +137,7 @@ <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> - <string>&Virtual Environment:</string> + <string>Virtual Environment:</string> </property> <property name="buddy"> <cstring>venvComboBox</cstring> @@ -147,7 +147,7 @@ <item row="3" column="0"> <widget class="QLabel" name="textLabel1"> <property name="text"> - <string>&Environment Variables:</string> + <string>Environment Variables:</string> </property> <property name="buddy"> <cstring>environmentCombo</cstring> @@ -168,7 +168,7 @@ <p>Uncheck this in order to disable exception reporting.</p></string> </property> <property name="text"> - <string>Report &exceptions</string> + <string>Report exceptions</string> </property> <property name="shortcut"> <string>Alt+E</string> @@ -187,7 +187,7 @@ <string><b>Clear interpreter window</b><p>This clears the display of the interpreter window before starting the debug client.</p></string> </property> <property name="text"> - <string>Clear &interpreter window</string> + <string>Clear interpreter window</string> </property> <property name="checked"> <bool>true</bool> @@ -218,7 +218,7 @@ <p>Select this to erase the collected coverage information before the next coverage run.</p></string> </property> <property name="text"> - <string>Erase &coverage information</string> + <string>Erase coverage information</string> </property> <property name="shortcut"> <string>Alt+C</string>
--- a/Debugger/StartDebugDialog.ui Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/StartDebugDialog.ui Fri Apr 05 19:06:39 2019 +0200 @@ -22,7 +22,7 @@ <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> - <string>&Virtual Environment:</string> + <string>Virtual Environment:</string> </property> <property name="buddy"> <cstring>venvComboBox</cstring> @@ -48,7 +48,7 @@ <item row="1" column="0"> <widget class="QLabel" name="TextLabel1"> <property name="text"> - <string>Command&line:</string> + <string>Script Parameters:</string> </property> <property name="buddy"> <cstring>cmdlineCombo</cstring> @@ -87,7 +87,7 @@ <item row="2" column="0"> <widget class="QLabel" name="TextLabel2"> <property name="text"> - <string>&Working directory:</string> + <string>Working directory:</string> </property> <property name="buddy"> <cstring>workdirPicker</cstring> @@ -117,7 +117,7 @@ <item row="3" column="0"> <widget class="QLabel" name="textLabel1"> <property name="text"> - <string>&Environment Variables:</string> + <string>Environment Variables:</string> </property> <property name="buddy"> <cstring>environmentCombo</cstring> @@ -168,7 +168,7 @@ <p>Uncheck this in order to disable exception reporting.</p></string> </property> <property name="text"> - <string>Report &exceptions</string> + <string>Report exceptions</string> </property> <property name="shortcut"> <string>Alt+E</string> @@ -187,7 +187,7 @@ <string><b>Clear interpreter window</b><p>This clears the display of the interpreter window before starting the debug client.</p></string> </property> <property name="text"> - <string>Clear &interpreter window</string> + <string>Clear interpreter window</string> </property> <property name="checked"> <bool>true</bool> @@ -214,7 +214,7 @@ <string>Select to trace into the Python library</string> </property> <property name="text"> - <string>&Trace into interpreter libraries</string> + <string>Trace into interpreter libraries</string> </property> <property name="shortcut"> <string>Alt+T</string>
--- a/Debugger/StartDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/StartDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -193,6 +193,8 @@ self.ui.autoContinueCheckBox.isChecked(), self.ui.forkModeCheckBox.isChecked(), self.ui.forkChildCheckBox.isChecked()) + else: + return (False, False, False, False) def getRunData(self): """ @@ -207,6 +209,8 @@ if self.dialogType == 1: return (self.ui.forkModeCheckBox.isChecked(), self.ui.forkChildCheckBox.isChecked()) + else: + return (False, False) def getCoverageData(self): """ @@ -217,6 +221,8 @@ """ if self.dialogType == 2: return self.ui.eraseCheckBox.isChecked() + else: + return False def getProfilingData(self): """ @@ -227,6 +233,8 @@ """ if self.dialogType == 3: return self.ui.eraseCheckBox.isChecked() + else: + return False def __clearHistories(self): """
--- a/Debugger/StartProfileDialog.ui Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/StartProfileDialog.ui Fri Apr 05 19:06:39 2019 +0200 @@ -22,7 +22,7 @@ <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> - <string>&Virtual Environment:</string> + <string>Virtual Environment:</string> </property> <property name="buddy"> <cstring>venvComboBox</cstring> @@ -48,7 +48,7 @@ <item row="1" column="0"> <widget class="QLabel" name="TextLabel1"> <property name="text"> - <string>Command&line:</string> + <string>Script Parameters:</string> </property> <property name="buddy"> <cstring>cmdlineCombo</cstring> @@ -87,7 +87,7 @@ <item row="2" column="0"> <widget class="QLabel" name="TextLabel2"> <property name="text"> - <string>&Working directory:</string> + <string>Working directory:</string> </property> <property name="buddy"> <cstring>workdirPicker</cstring> @@ -117,7 +117,7 @@ <item row="3" column="0"> <widget class="QLabel" name="textLabel1"> <property name="text"> - <string>&Environment Variables:</string> + <string>Environment Variables:</string> </property> <property name="buddy"> <cstring>environmentCombo</cstring> @@ -168,7 +168,7 @@ <p>Uncheck this in order to disable exception reporting.</p></string> </property> <property name="text"> - <string>Report &exceptions</string> + <string>Report exceptions</string> </property> <property name="shortcut"> <string>Alt+E</string> @@ -187,7 +187,7 @@ <string><b>Clear interpreter window</b><p>This clears the display of the interpreter window before starting the debug client.</p></string> </property> <property name="text"> - <string>Clear &interpreter window</string> + <string>Clear interpreter window</string> </property> <property name="checked"> <bool>true</bool> @@ -218,7 +218,7 @@ <p>Select this to erase the collected timing data before the next profiling run.</p></string> </property> <property name="text"> - <string>Erase &timing data</string> + <string>Erase timing data</string> </property> <property name="shortcut"> <string>Alt+C</string>
--- a/Debugger/StartRunDialog.ui Sat Mar 02 11:17:15 2019 +0100 +++ b/Debugger/StartRunDialog.ui Fri Apr 05 19:06:39 2019 +0200 @@ -22,7 +22,7 @@ <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> - <string>&Virtual Environment:</string> + <string>Virtual Environment:</string> </property> <property name="buddy"> <cstring>venvComboBox</cstring> @@ -48,7 +48,7 @@ <item row="1" column="0"> <widget class="QLabel" name="TextLabel1"> <property name="text"> - <string>Command&line:</string> + <string>Script Parameters:</string> </property> <property name="buddy"> <cstring>cmdlineCombo</cstring> @@ -87,7 +87,7 @@ <item row="2" column="0"> <widget class="QLabel" name="TextLabel2"> <property name="text"> - <string>&Working directory:</string> + <string>Working directory:</string> </property> <property name="buddy"> <cstring>workdirPicker</cstring> @@ -117,7 +117,7 @@ <item row="3" column="0"> <widget class="QLabel" name="textLabel1"> <property name="text"> - <string>&Environment Variables:</string> + <string>Environment Variables:</string> </property> <property name="buddy"> <cstring>environmentCombo</cstring> @@ -168,7 +168,7 @@ <p>Uncheck this in order to disable exception reporting.</p></string> </property> <property name="text"> - <string>Report &exceptions</string> + <string>Report exceptions</string> </property> <property name="shortcut"> <string>Alt+E</string> @@ -187,7 +187,7 @@ <string><b>Clear interpreter window</b><p>This clears the display of the interpreter window before starting the debug client.</p></string> </property> <property name="text"> - <string>Clear &interpreter window</string> + <string>Clear interpreter window</string> </property> <property name="checked"> <bool>true</bool>
--- a/Documentation/Help/source.qhp Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Help/source.qhp Fri Apr 05 19:06:39 2019 +0200 @@ -140,6 +140,7 @@ </section> <section title="eric6.E5Network.E5Ftp" ref="eric6.E5Network.E5Ftp.html" /> <section title="eric6.E5Network.E5GoogleMail" ref="eric6.E5Network.E5GoogleMail.html" /> + <section title="eric6.E5Network.E5GoogleMailHelpers" ref="eric6.E5Network.E5GoogleMailHelpers.html" /> <section title="eric6.E5Network.E5NetworkHeaderDetailsDialog" ref="eric6.E5Network.E5NetworkHeaderDetailsDialog.html" /> <section title="eric6.E5Network.E5NetworkIcon" ref="eric6.E5Network.E5NetworkIcon.html" /> <section title="eric6.E5Network.E5NetworkMonitor" ref="eric6.E5Network.E5NetworkMonitor.html" /> @@ -969,6 +970,7 @@ <section title="eric6.Preferences.ShortcutDialog" ref="eric6.Preferences.ShortcutDialog.html" /> <section title="eric6.Preferences.Shortcuts" ref="eric6.Preferences.Shortcuts.html" /> <section title="eric6.Preferences.ShortcutsDialog" ref="eric6.Preferences.ShortcutsDialog.html" /> + <section title="eric6.Preferences.SubstyleDefinitionDialog" ref="eric6.Preferences.SubstyleDefinitionDialog.html" /> <section title="eric6.Preferences.ToolConfigurationDialog" ref="eric6.Preferences.ToolConfigurationDialog.html" /> <section title="eric6.Preferences.ToolGroupConfigurationDialog" ref="eric6.Preferences.ToolGroupConfigurationDialog.html" /> <section title="eric6.Preferences.ViewProfileDialog" ref="eric6.Preferences.ViewProfileDialog.html" /> @@ -1063,6 +1065,7 @@ <section title="eric6.QScintilla.Lexers.LexerVHDL" ref="eric6.QScintilla.Lexers.LexerVHDL.html" /> <section title="eric6.QScintilla.Lexers.LexerXML" ref="eric6.QScintilla.Lexers.LexerXML.html" /> <section title="eric6.QScintilla.Lexers.LexerYAML" ref="eric6.QScintilla.Lexers.LexerYAML.html" /> + <section title="eric6.QScintilla.Lexers.SubstyledLexer" ref="eric6.QScintilla.Lexers.SubstyledLexer.html" /> <section title="eric6.QScintilla.Lexers.__init__" ref="eric6.QScintilla.Lexers.__init__.html" /> </section> <section title="eric6.QScintilla.MarkupProviders" ref="index-eric6.QScintilla.MarkupProviders.html"> @@ -3723,6 +3726,7 @@ <keyword name="DebugClientBase" id="DebugClientBase" ref="eric6.DebugClients.Python.DebugClientBase.html#DebugClientBase" /> <keyword name="DebugClientBase (Constructor)" id="DebugClientBase (Constructor)" ref="eric6.DebugClients.Python.DebugClientBase.html#DebugClientBase.__init__" /> <keyword name="DebugClientBase (Module)" id="DebugClientBase (Module)" ref="eric6.DebugClients.Python.DebugClientBase.html" /> + <keyword name="DebugClientBase.__assembleTestCasesList" id="DebugClientBase.__assembleTestCasesList" ref="eric6.DebugClients.Python.DebugClientBase.html#DebugClientBase.__assembleTestCasesList" /> <keyword name="DebugClientBase.__clientCapabilities" id="DebugClientBase.__clientCapabilities" ref="eric6.DebugClients.Python.DebugClientBase.html#DebugClientBase.__clientCapabilities" /> <keyword name="DebugClientBase.__compileFileSource" id="DebugClientBase.__compileFileSource" ref="eric6.DebugClients.Python.DebugClientBase.html#DebugClientBase.__compileFileSource" /> <keyword name="DebugClientBase.__completionList" id="DebugClientBase.__completionList" ref="eric6.DebugClients.Python.DebugClientBase.html#DebugClientBase.__completionList" /> @@ -3807,6 +3811,7 @@ <keyword name="DebugServer.__setClientType" id="DebugServer.__setClientType" ref="eric6.Debugger.DebugServer.html#DebugServer.__setClientType" /> <keyword name="DebugServer.__splitWatchCondition" id="DebugServer.__splitWatchCondition" ref="eric6.Debugger.DebugServer.html#DebugServer.__splitWatchCondition" /> <keyword name="DebugServer.__watchPointDataAboutToBeChanged" id="DebugServer.__watchPointDataAboutToBeChanged" ref="eric6.Debugger.DebugServer.html#DebugServer.__watchPointDataAboutToBeChanged" /> + <keyword name="DebugServer.clientUtDiscovered" id="DebugServer.clientUtDiscovered" ref="eric6.Debugger.DebugServer.html#DebugServer.clientUtDiscovered" /> <keyword name="DebugServer.clientUtFinished" id="DebugServer.clientUtFinished" ref="eric6.Debugger.DebugServer.html#DebugServer.clientUtFinished" /> <keyword name="DebugServer.clientUtPrepared" id="DebugServer.clientUtPrepared" ref="eric6.Debugger.DebugServer.html#DebugServer.clientUtPrepared" /> <keyword name="DebugServer.clientUtStartTest" id="DebugServer.clientUtStartTest" ref="eric6.Debugger.DebugServer.html#DebugServer.clientUtStartTest" /> @@ -3852,6 +3857,7 @@ <keyword name="DebugServer.remoteStepOver" id="DebugServer.remoteStepOver" ref="eric6.Debugger.DebugServer.html#DebugServer.remoteStepOver" /> <keyword name="DebugServer.remoteStepQuit" id="DebugServer.remoteStepQuit" ref="eric6.Debugger.DebugServer.html#DebugServer.remoteStepQuit" /> <keyword name="DebugServer.remoteThreadList" id="DebugServer.remoteThreadList" ref="eric6.Debugger.DebugServer.html#DebugServer.remoteThreadList" /> + <keyword name="DebugServer.remoteUTDiscover" id="DebugServer.remoteUTDiscover" ref="eric6.Debugger.DebugServer.html#DebugServer.remoteUTDiscover" /> <keyword name="DebugServer.remoteUTPrepare" id="DebugServer.remoteUTPrepare" ref="eric6.Debugger.DebugServer.html#DebugServer.remoteUTPrepare" /> <keyword name="DebugServer.remoteUTRun" id="DebugServer.remoteUTRun" ref="eric6.Debugger.DebugServer.html#DebugServer.remoteUTRun" /> <keyword name="DebugServer.remoteUTStop" id="DebugServer.remoteUTStop" ref="eric6.Debugger.DebugServer.html#DebugServer.remoteUTStop" /> @@ -4025,6 +4031,7 @@ <keyword name="DebuggerInterfaceNone.remoteStepOver" id="DebuggerInterfaceNone.remoteStepOver" ref="eric6.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteStepOver" /> <keyword name="DebuggerInterfaceNone.remoteStepQuit" id="DebuggerInterfaceNone.remoteStepQuit" ref="eric6.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteStepQuit" /> <keyword name="DebuggerInterfaceNone.remoteThreadList" id="DebuggerInterfaceNone.remoteThreadList" ref="eric6.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteThreadList" /> + <keyword name="DebuggerInterfaceNone.remoteUTDiscover" id="DebuggerInterfaceNone.remoteUTDiscover" ref="eric6.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteUTDiscover" /> <keyword name="DebuggerInterfaceNone.remoteUTPrepare" id="DebuggerInterfaceNone.remoteUTPrepare" ref="eric6.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteUTPrepare" /> <keyword name="DebuggerInterfaceNone.remoteUTRun" id="DebuggerInterfaceNone.remoteUTRun" ref="eric6.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteUTRun" /> <keyword name="DebuggerInterfaceNone.remoteUTStop" id="DebuggerInterfaceNone.remoteUTStop" ref="eric6.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteUTStop" /> @@ -4074,6 +4081,7 @@ <keyword name="DebuggerInterfacePython.remoteStepOver" id="DebuggerInterfacePython.remoteStepOver" ref="eric6.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteStepOver" /> <keyword name="DebuggerInterfacePython.remoteStepQuit" id="DebuggerInterfacePython.remoteStepQuit" ref="eric6.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteStepQuit" /> <keyword name="DebuggerInterfacePython.remoteThreadList" id="DebuggerInterfacePython.remoteThreadList" ref="eric6.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteThreadList" /> + <keyword name="DebuggerInterfacePython.remoteUTDiscover" id="DebuggerInterfacePython.remoteUTDiscover" ref="eric6.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteUTDiscover" /> <keyword name="DebuggerInterfacePython.remoteUTPrepare" id="DebuggerInterfacePython.remoteUTPrepare" ref="eric6.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteUTPrepare" /> <keyword name="DebuggerInterfacePython.remoteUTRun" id="DebuggerInterfacePython.remoteUTRun" ref="eric6.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteUTRun" /> <keyword name="DebuggerInterfacePython.remoteUTStop" id="DebuggerInterfacePython.remoteUTStop" ref="eric6.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteUTStop" /> @@ -4607,7 +4615,24 @@ <keyword name="E5GenericDiffHighlighter.makeFormat" id="E5GenericDiffHighlighter.makeFormat" ref="eric6.E5Gui.E5GenericDiffHighlighter.html#E5GenericDiffHighlighter.makeFormat" /> <keyword name="E5GenericDiffHighlighter.makeFormat" id="E5GenericDiffHighlighter.makeFormat" ref="eric6.Plugins.VcsPlugins.vcsGit.GitDiffHighlighter.html#E5GenericDiffHighlighter.makeFormat" /> <keyword name="E5GenericDiffHighlighter.regenerateRules" id="E5GenericDiffHighlighter.regenerateRules" ref="eric6.E5Gui.E5GenericDiffHighlighter.html#E5GenericDiffHighlighter.regenerateRules" /> + <keyword name="E5GoogleMail" id="E5GoogleMail" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail" /> + <keyword name="E5GoogleMail (Constructor)" id="E5GoogleMail (Constructor)" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__init__" /> <keyword name="E5GoogleMail (Module)" id="E5GoogleMail (Module)" ref="eric6.E5Network.E5GoogleMail.html" /> + <keyword name="E5GoogleMail.__credentialsFromSession" id="E5GoogleMail.__credentialsFromSession" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__credentialsFromSession" /> + <keyword name="E5GoogleMail.__doSendMessages" id="E5GoogleMail.__doSendMessages" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__doSendMessages" /> + <keyword name="E5GoogleMail.__loadToken" id="E5GoogleMail.__loadToken" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__loadToken" /> + <keyword name="E5GoogleMail.__prepareMessage_v2" id="E5GoogleMail.__prepareMessage_v2" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__prepareMessage_v2" /> + <keyword name="E5GoogleMail.__prepareMessage_v3" id="E5GoogleMail.__prepareMessage_v3" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__prepareMessage_v3" /> + <keyword name="E5GoogleMail.__processAuthorization" id="E5GoogleMail.__processAuthorization" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__processAuthorization" /> + <keyword name="E5GoogleMail.__saveToken" id="E5GoogleMail.__saveToken" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__saveToken" /> + <keyword name="E5GoogleMail.__startSession" id="E5GoogleMail.__startSession" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.__startSession" /> + <keyword name="E5GoogleMail.sendMessage" id="E5GoogleMail.sendMessage" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMail.sendMessage" /> + <keyword name="E5GoogleMailAuthBrowser" id="E5GoogleMailAuthBrowser" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMailAuthBrowser" /> + <keyword name="E5GoogleMailAuthBrowser (Constructor)" id="E5GoogleMailAuthBrowser (Constructor)" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMailAuthBrowser.__init__" /> + <keyword name="E5GoogleMailAuthBrowser.__pageLoadFinished" id="E5GoogleMailAuthBrowser.__pageLoadFinished" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMailAuthBrowser.__pageLoadFinished" /> + <keyword name="E5GoogleMailAuthBrowser.__titleChanged" id="E5GoogleMailAuthBrowser.__titleChanged" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMailAuthBrowser.__titleChanged" /> + <keyword name="E5GoogleMailAuthBrowser.load" id="E5GoogleMailAuthBrowser.load" ref="eric6.E5Network.E5GoogleMail.html#E5GoogleMailAuthBrowser.load" /> + <keyword name="E5GoogleMailHelpers (Module)" id="E5GoogleMailHelpers (Module)" ref="eric6.E5Network.E5GoogleMailHelpers.html" /> <keyword name="E5Graphics (Package)" id="E5Graphics (Package)" ref="index-eric6.E5Graphics.html" /> <keyword name="E5GraphicsView" id="E5GraphicsView" ref="eric6.E5Graphics.E5GraphicsView.html#E5GraphicsView" /> <keyword name="E5GraphicsView (Constructor)" id="E5GraphicsView (Constructor)" ref="eric6.E5Graphics.E5GraphicsView.html#E5GraphicsView.__init__" /> @@ -5811,24 +5836,32 @@ <keyword name="EditorHighlightingStylesPage (Module)" id="EditorHighlightingStylesPage (Module)" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html" /> <keyword name="EditorHighlightingStylesPage.__allFontsButtonMenuTriggered" id="EditorHighlightingStylesPage.__allFontsButtonMenuTriggered" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__allFontsButtonMenuTriggered" /> <keyword name="EditorHighlightingStylesPage.__changeFont" id="EditorHighlightingStylesPage.__changeFont" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__changeFont" /> + <keyword name="EditorHighlightingStylesPage.__currentStyles" id="EditorHighlightingStylesPage.__currentStyles" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__currentStyles" /> <keyword name="EditorHighlightingStylesPage.__exportStyles" id="EditorHighlightingStylesPage.__exportStyles" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__exportStyles" /> <keyword name="EditorHighlightingStylesPage.__fontButtonMenuTriggered" id="EditorHighlightingStylesPage.__fontButtonMenuTriggered" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__fontButtonMenuTriggered" /> <keyword name="EditorHighlightingStylesPage.__importStyles" id="EditorHighlightingStylesPage.__importStyles" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__importStyles" /> <keyword name="EditorHighlightingStylesPage.__setToDefault" id="EditorHighlightingStylesPage.__setToDefault" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__setToDefault" /> <keyword name="EditorHighlightingStylesPage.__styleAllItems" id="EditorHighlightingStylesPage.__styleAllItems" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__styleAllItems" /> + <keyword name="EditorHighlightingStylesPage.__styleOneItem" id="EditorHighlightingStylesPage.__styleOneItem" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__styleOneItem" /> + <keyword name="EditorHighlightingStylesPage.__stylesForItem" id="EditorHighlightingStylesPage.__stylesForItem" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.__stylesForItem" /> + <keyword name="EditorHighlightingStylesPage.on_addSubstyleButton_clicked" id="EditorHighlightingStylesPage.on_addSubstyleButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_addSubstyleButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked" id="EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_allDefaultButton_clicked" id="EditorHighlightingStylesPage.on_allDefaultButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_allDefaultButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_allEolFillButton_clicked" id="EditorHighlightingStylesPage.on_allEolFillButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_allEolFillButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_backgroundButton_clicked" id="EditorHighlightingStylesPage.on_backgroundButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_backgroundButton_clicked" /> + <keyword name="EditorHighlightingStylesPage.on_copySubstyleButton_clicked" id="EditorHighlightingStylesPage.on_copySubstyleButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_copySubstyleButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_defaultButton_clicked" id="EditorHighlightingStylesPage.on_defaultButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_defaultButton_clicked" /> - <keyword name="EditorHighlightingStylesPage.on_eolfillCheckBox_toggled" id="EditorHighlightingStylesPage.on_eolfillCheckBox_toggled" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_eolfillCheckBox_toggled" /> + <keyword name="EditorHighlightingStylesPage.on_defaultSubstylesButton_clicked" id="EditorHighlightingStylesPage.on_defaultSubstylesButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_defaultSubstylesButton_clicked" /> + <keyword name="EditorHighlightingStylesPage.on_deleteSubstyleButton_clicked" id="EditorHighlightingStylesPage.on_deleteSubstyleButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_deleteSubstyleButton_clicked" /> + <keyword name="EditorHighlightingStylesPage.on_editSubstyleButton_clicked" id="EditorHighlightingStylesPage.on_editSubstyleButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_editSubstyleButton_clicked" /> + <keyword name="EditorHighlightingStylesPage.on_eolfillCheckBox_clicked" id="EditorHighlightingStylesPage.on_eolfillCheckBox_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_eolfillCheckBox_clicked" /> <keyword name="EditorHighlightingStylesPage.on_exportAllButton_clicked" id="EditorHighlightingStylesPage.on_exportAllButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_exportAllButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_exportCurrentButton_clicked" id="EditorHighlightingStylesPage.on_exportCurrentButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_exportCurrentButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_foregroundButton_clicked" id="EditorHighlightingStylesPage.on_foregroundButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_foregroundButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_importAllButton_clicked" id="EditorHighlightingStylesPage.on_importAllButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_importAllButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_importCurrentButton_clicked" id="EditorHighlightingStylesPage.on_importCurrentButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_importCurrentButton_clicked" /> <keyword name="EditorHighlightingStylesPage.on_lexerLanguageComboBox_activated" id="EditorHighlightingStylesPage.on_lexerLanguageComboBox_activated" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_lexerLanguageComboBox_activated" /> - <keyword name="EditorHighlightingStylesPage.on_styleElementList_currentRowChanged" id="EditorHighlightingStylesPage.on_styleElementList_currentRowChanged" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_styleElementList_currentRowChanged" /> + <keyword name="EditorHighlightingStylesPage.on_styleElementList_currentItemChanged" id="EditorHighlightingStylesPage.on_styleElementList_currentItemChanged" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.on_styleElementList_currentItemChanged" /> <keyword name="EditorHighlightingStylesPage.save" id="EditorHighlightingStylesPage.save" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.save" /> <keyword name="EditorHighlightingStylesPage.saveState" id="EditorHighlightingStylesPage.saveState" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.saveState" /> <keyword name="EditorHighlightingStylesPage.setFont" id="EditorHighlightingStylesPage.setFont" ref="eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html#EditorHighlightingStylesPage.setFont" /> @@ -5837,6 +5870,8 @@ <keyword name="EditorKeywordsPage" id="EditorKeywordsPage" ref="eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html#EditorKeywordsPage" /> <keyword name="EditorKeywordsPage (Constructor)" id="EditorKeywordsPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html#EditorKeywordsPage.__init__" /> <keyword name="EditorKeywordsPage (Module)" id="EditorKeywordsPage (Module)" ref="eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html" /> + <keyword name="EditorKeywordsPage.on_allDefaultButton_clicked" id="EditorKeywordsPage.on_allDefaultButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html#EditorKeywordsPage.on_allDefaultButton_clicked" /> + <keyword name="EditorKeywordsPage.on_defaultButton_clicked" id="EditorKeywordsPage.on_defaultButton_clicked" ref="eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html#EditorKeywordsPage.on_defaultButton_clicked" /> <keyword name="EditorKeywordsPage.on_languageCombo_activated" id="EditorKeywordsPage.on_languageCombo_activated" ref="eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html#EditorKeywordsPage.on_languageCombo_activated" /> <keyword name="EditorKeywordsPage.on_setSpinBox_valueChanged" id="EditorKeywordsPage.on_setSpinBox_valueChanged" ref="eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html#EditorKeywordsPage.on_setSpinBox_valueChanged" /> <keyword name="EditorKeywordsPage.save" id="EditorKeywordsPage.save" ref="eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html#EditorKeywordsPage.save" /> @@ -5890,8 +5925,10 @@ <keyword name="EmailDialog (Module)" id="EmailDialog (Module)" ref="eric6.UI.EmailDialog.html" /> <keyword name="EmailDialog.__createMultipartMail" id="EmailDialog.__createMultipartMail" ref="eric6.UI.EmailDialog.html#EmailDialog.__createMultipartMail" /> <keyword name="EmailDialog.__createSimpleMail" id="EmailDialog.__createSimpleMail" ref="eric6.UI.EmailDialog.html#EmailDialog.__createSimpleMail" /> + <keyword name="EmailDialog.__deleteAttachedFiles" id="EmailDialog.__deleteAttachedFiles" ref="eric6.UI.EmailDialog.html#EmailDialog.__deleteAttachedFiles" /> <keyword name="EmailDialog.__encodedHeader" id="EmailDialog.__encodedHeader" ref="eric6.UI.EmailDialog.html#EmailDialog.__encodedHeader" /> <keyword name="EmailDialog.__encodedText" id="EmailDialog.__encodedText" ref="eric6.UI.EmailDialog.html#EmailDialog.__encodedText" /> + <keyword name="EmailDialog.__gmailSendResult" id="EmailDialog.__gmailSendResult" ref="eric6.UI.EmailDialog.html#EmailDialog.__gmailSendResult" /> <keyword name="EmailDialog.__sendmail" id="EmailDialog.__sendmail" ref="eric6.UI.EmailDialog.html#EmailDialog.__sendmail" /> <keyword name="EmailDialog.__sendmailGoogle" id="EmailDialog.__sendmailGoogle" ref="eric6.UI.EmailDialog.html#EmailDialog.__sendmailGoogle" /> <keyword name="EmailDialog.attachFile" id="EmailDialog.attachFile" ref="eric6.UI.EmailDialog.html#EmailDialog.attachFile" /> @@ -5907,9 +5944,12 @@ <keyword name="EmailPage" id="EmailPage" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage" /> <keyword name="EmailPage (Constructor)" id="EmailPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.__init__" /> <keyword name="EmailPage (Module)" id="EmailPage (Module)" ref="eric6.Preferences.ConfigurationPages.EmailPage.html" /> + <keyword name="EmailPage.__checkGoogleMail" id="EmailPage.__checkGoogleMail" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.__checkGoogleMail" /> <keyword name="EmailPage.__updatePortSpin" id="EmailPage.__updatePortSpin" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.__updatePortSpin" /> <keyword name="EmailPage.__updateTestButton" id="EmailPage.__updateTestButton" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.__updateTestButton" /> + <keyword name="EmailPage.on_googleCheckAgainButton_clicked" id="EmailPage.on_googleCheckAgainButton_clicked" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.on_googleCheckAgainButton_clicked" /> <keyword name="EmailPage.on_googleHelpButton_clicked" id="EmailPage.on_googleHelpButton_clicked" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.on_googleHelpButton_clicked" /> + <keyword name="EmailPage.on_googleInstallButton_clicked" id="EmailPage.on_googleInstallButton_clicked" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.on_googleInstallButton_clicked" /> <keyword name="EmailPage.on_mailAuthenticationGroup_toggled" id="EmailPage.on_mailAuthenticationGroup_toggled" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.on_mailAuthenticationGroup_toggled" /> <keyword name="EmailPage.on_mailPasswordEdit_textChanged" id="EmailPage.on_mailPasswordEdit_textChanged" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.on_mailPasswordEdit_textChanged" /> <keyword name="EmailPage.on_mailServerEdit_textChanged" id="EmailPage.on_mailServerEdit_textChanged" ref="eric6.Preferences.ConfigurationPages.EmailPage.html#EmailPage.on_mailServerEdit_textChanged" /> @@ -7514,7 +7554,6 @@ <keyword name="GlosbeEngine.getTranslation" id="GlosbeEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html#GlosbeEngine.getTranslation" /> <keyword name="GlosbeEngine.supportedLanguages" id="GlosbeEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GlosbeEngine.html#GlosbeEngine.supportedLanguages" /> <keyword name="GoogleMailHelp" id="GoogleMailHelp" ref="eric6.E5Network.E5GoogleMail.html#GoogleMailHelp" /> - <keyword name="GoogleMailSendMessage" id="GoogleMailSendMessage" ref="eric6.E5Network.E5GoogleMail.html#GoogleMailSendMessage" /> <keyword name="GoogleV1Engine" id="GoogleV1Engine" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine" /> <keyword name="GoogleV1Engine (Constructor)" id="GoogleV1Engine (Constructor)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html#GoogleV1Engine.__init__" /> <keyword name="GoogleV1Engine (Module)" id="GoogleV1Engine (Module)" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV1Engine.html" /> @@ -10675,11 +10714,14 @@ <keyword name="Lexer.canBoxComment" id="Lexer.canBoxComment" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.canBoxComment" /> <keyword name="Lexer.canStreamComment" id="Lexer.canStreamComment" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.canStreamComment" /> <keyword name="Lexer.commentStr" id="Lexer.commentStr" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.commentStr" /> + <keyword name="Lexer.defaultKeywords" id="Lexer.defaultKeywords" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.defaultKeywords" /> <keyword name="Lexer.hasSmartIndent" id="Lexer.hasSmartIndent" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.hasSmartIndent" /> + <keyword name="Lexer.hasSubstyles" id="Lexer.hasSubstyles" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.hasSubstyles" /> <keyword name="Lexer.initProperties" id="Lexer.initProperties" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.initProperties" /> <keyword name="Lexer.isCommentStyle" id="Lexer.isCommentStyle" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.isCommentStyle" /> <keyword name="Lexer.isStringStyle" id="Lexer.isStringStyle" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.isStringStyle" /> <keyword name="Lexer.keywords" id="Lexer.keywords" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.keywords" /> + <keyword name="Lexer.keywordsDescription" id="Lexer.keywordsDescription" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.keywordsDescription" /> <keyword name="Lexer.lexerName" id="Lexer.lexerName" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.lexerName" /> <keyword name="Lexer.maximumKeywordSet" id="Lexer.maximumKeywordSet" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.maximumKeywordSet" /> <keyword name="Lexer.smartIndentLine" id="Lexer.smartIndentLine" ref="eric6.QScintilla.Lexers.Lexer.html#Lexer.smartIndentLine" /> @@ -11351,6 +11393,7 @@ <keyword name="MiscellaneousChecker.__checkMutableDefault" id="MiscellaneousChecker.__checkMutableDefault" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkMutableDefault" /> <keyword name="MiscellaneousChecker.__checkPep3101" id="MiscellaneousChecker.__checkPep3101" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkPep3101" /> <keyword name="MiscellaneousChecker.__checkPrintStatements" id="MiscellaneousChecker.__checkPrintStatements" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkPrintStatements" /> + <keyword name="MiscellaneousChecker.__checkReturn" id="MiscellaneousChecker.__checkReturn" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkReturn" /> <keyword name="MiscellaneousChecker.__checkTuple" id="MiscellaneousChecker.__checkTuple" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkTuple" /> <keyword name="MiscellaneousChecker.__dictShouldBeChecked" id="MiscellaneousChecker.__dictShouldBeChecked" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__dictShouldBeChecked" /> <keyword name="MiscellaneousChecker.__error" id="MiscellaneousChecker.__error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__error" /> @@ -11461,6 +11504,7 @@ <keyword name="MultiProject.checkDirty" id="MultiProject.checkDirty" ref="eric6.MultiProject.MultiProject.html#MultiProject.checkDirty" /> <keyword name="MultiProject.clearRecent" id="MultiProject.clearRecent" ref="eric6.MultiProject.MultiProject.html#MultiProject.clearRecent" /> <keyword name="MultiProject.closeMultiProject" id="MultiProject.closeMultiProject" ref="eric6.MultiProject.MultiProject.html#MultiProject.closeMultiProject" /> + <keyword name="MultiProject.copyProject" id="MultiProject.copyProject" ref="eric6.MultiProject.MultiProject.html#MultiProject.copyProject" /> <keyword name="MultiProject.deleteProject" id="MultiProject.deleteProject" ref="eric6.MultiProject.MultiProject.html#MultiProject.deleteProject" /> <keyword name="MultiProject.getActions" id="MultiProject.getActions" ref="eric6.MultiProject.MultiProject.html#MultiProject.getActions" /> <keyword name="MultiProject.getCategories" id="MultiProject.getCategories" ref="eric6.MultiProject.MultiProject.html#MultiProject.getCategories" /> @@ -11491,6 +11535,7 @@ <keyword name="MultiProjectBrowser.__addProject" id="MultiProjectBrowser.__addProject" ref="eric6.MultiProject.MultiProjectBrowser.html#MultiProjectBrowser.__addProject" /> <keyword name="MultiProjectBrowser.__configure" id="MultiProjectBrowser.__configure" ref="eric6.MultiProject.MultiProjectBrowser.html#MultiProjectBrowser.__configure" /> <keyword name="MultiProjectBrowser.__contextMenuRequested" id="MultiProjectBrowser.__contextMenuRequested" ref="eric6.MultiProject.MultiProjectBrowser.html#MultiProjectBrowser.__contextMenuRequested" /> + <keyword name="MultiProjectBrowser.__copyProject" id="MultiProjectBrowser.__copyProject" ref="eric6.MultiProject.MultiProjectBrowser.html#MultiProjectBrowser.__copyProject" /> <keyword name="MultiProjectBrowser.__createPopupMenu" id="MultiProjectBrowser.__createPopupMenu" ref="eric6.MultiProject.MultiProjectBrowser.html#MultiProjectBrowser.__createPopupMenu" /> <keyword name="MultiProjectBrowser.__deleteProject" id="MultiProjectBrowser.__deleteProject" ref="eric6.MultiProject.MultiProjectBrowser.html#MultiProjectBrowser.__deleteProject" /> <keyword name="MultiProjectBrowser.__findCategoryItem" id="MultiProjectBrowser.__findCategoryItem" ref="eric6.MultiProject.MultiProjectBrowser.html#MultiProjectBrowser.__findCategoryItem" /> @@ -12659,20 +12704,33 @@ <keyword name="PreferencesLexer" id="PreferencesLexer" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer" /> <keyword name="PreferencesLexer (Constructor)" id="PreferencesLexer (Constructor)" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.__init__" /> <keyword name="PreferencesLexer (Module)" id="PreferencesLexer (Module)" ref="eric6.Preferences.PreferencesLexer.html" /> + <keyword name="PreferencesLexer.addSubstyle" id="PreferencesLexer.addSubstyle" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.addSubstyle" /> <keyword name="PreferencesLexer.color" id="PreferencesLexer.color" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.color" /> - <keyword name="PreferencesLexer.defaulEolFill" id="PreferencesLexer.defaulEolFill" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.defaulEolFill" /> <keyword name="PreferencesLexer.defaultColor" id="PreferencesLexer.defaultColor" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.defaultColor" /> + <keyword name="PreferencesLexer.defaultDescription" id="PreferencesLexer.defaultDescription" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.defaultDescription" /> + <keyword name="PreferencesLexer.defaultEolFill" id="PreferencesLexer.defaultEolFill" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.defaultEolFill" /> <keyword name="PreferencesLexer.defaultFont" id="PreferencesLexer.defaultFont" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.defaultFont" /> <keyword name="PreferencesLexer.defaultPaper" id="PreferencesLexer.defaultPaper" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.defaultPaper" /> + <keyword name="PreferencesLexer.defaultWords" id="PreferencesLexer.defaultWords" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.defaultWords" /> + <keyword name="PreferencesLexer.delSubstyle" id="PreferencesLexer.delSubstyle" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.delSubstyle" /> <keyword name="PreferencesLexer.description" id="PreferencesLexer.description" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.description" /> <keyword name="PreferencesLexer.eolFill" id="PreferencesLexer.eolFill" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.eolFill" /> <keyword name="PreferencesLexer.font" id="PreferencesLexer.font" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.font" /> + <keyword name="PreferencesLexer.getStyles" id="PreferencesLexer.getStyles" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.getStyles" /> + <keyword name="PreferencesLexer.getSubStyles" id="PreferencesLexer.getSubStyles" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.getSubStyles" /> + <keyword name="PreferencesLexer.hasStyle" id="PreferencesLexer.hasStyle" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.hasStyle" /> + <keyword name="PreferencesLexer.isBaseStyle" id="PreferencesLexer.isBaseStyle" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.isBaseStyle" /> <keyword name="PreferencesLexer.language" id="PreferencesLexer.language" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.language" /> + <keyword name="PreferencesLexer.loadDefaultSubStyles" id="PreferencesLexer.loadDefaultSubStyles" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.loadDefaultSubStyles" /> <keyword name="PreferencesLexer.paper" id="PreferencesLexer.paper" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.paper" /> <keyword name="PreferencesLexer.setColor" id="PreferencesLexer.setColor" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.setColor" /> + <keyword name="PreferencesLexer.setDescription" id="PreferencesLexer.setDescription" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.setDescription" /> <keyword name="PreferencesLexer.setEolFill" id="PreferencesLexer.setEolFill" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.setEolFill" /> <keyword name="PreferencesLexer.setFont" id="PreferencesLexer.setFont" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.setFont" /> <keyword name="PreferencesLexer.setPaper" id="PreferencesLexer.setPaper" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.setPaper" /> + <keyword name="PreferencesLexer.setWords" id="PreferencesLexer.setWords" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.setWords" /> + <keyword name="PreferencesLexer.words" id="PreferencesLexer.words" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.words" /> + <keyword name="PreferencesLexer.writeSettings" id="PreferencesLexer.writeSettings" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexer.writeSettings" /> <keyword name="PreferencesLexerError" id="PreferencesLexerError" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexerError" /> <keyword name="PreferencesLexerError (Constructor)" id="PreferencesLexerError (Constructor)" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexerError.__init__" /> <keyword name="PreferencesLexerError.__repr__" id="PreferencesLexerError.__repr__" ref="eric6.Preferences.PreferencesLexer.html#PreferencesLexerError.__repr__" /> @@ -13696,6 +13754,7 @@ <keyword name="QsciScintillaCompat.extendSelectionToEOL" id="QsciScintillaCompat.extendSelectionToEOL" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.extendSelectionToEOL" /> <keyword name="QsciScintillaCompat.extendSelectionWordLeft" id="QsciScintillaCompat.extendSelectionWordLeft" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.extendSelectionWordLeft" /> <keyword name="QsciScintillaCompat.extendSelectionWordRight" id="QsciScintillaCompat.extendSelectionWordRight" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.extendSelectionWordRight" /> + <keyword name="QsciScintillaCompat.findFirst" id="QsciScintillaCompat.findFirst" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.findFirst" /> <keyword name="QsciScintillaCompat.findFirstTarget" id="QsciScintillaCompat.findFirstTarget" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.findFirstTarget" /> <keyword name="QsciScintillaCompat.findNextTarget" id="QsciScintillaCompat.findNextTarget" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.findNextTarget" /> <keyword name="QsciScintillaCompat.flashFindIndicator" id="QsciScintillaCompat.flashFindIndicator" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.flashFindIndicator" /> @@ -13765,6 +13824,7 @@ <keyword name="QsciScintillaCompat.setRectangularSelection" id="QsciScintillaCompat.setRectangularSelection" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setRectangularSelection" /> <keyword name="QsciScintillaCompat.setStyling" id="QsciScintillaCompat.setStyling" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setStyling" /> <keyword name="QsciScintillaCompat.setVirtualSpaceOptions" id="QsciScintillaCompat.setVirtualSpaceOptions" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setVirtualSpaceOptions" /> + <keyword name="QsciScintillaCompat.setWrapStartIndent" id="QsciScintillaCompat.setWrapStartIndent" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setWrapStartIndent" /> <keyword name="QsciScintillaCompat.showFindIndicator" id="QsciScintillaCompat.showFindIndicator" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.showFindIndicator" /> <keyword name="QsciScintillaCompat.showUserList" id="QsciScintillaCompat.showUserList" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.showUserList" /> <keyword name="QsciScintillaCompat.startStyling" id="QsciScintillaCompat.startStyling" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.startStyling" /> @@ -14061,6 +14121,26 @@ <keyword name="RestructuredTextProvider.line" id="RestructuredTextProvider.line" ref="eric6.QScintilla.MarkupProviders.RestructuredTextProvider.html#RestructuredTextProvider.line" /> <keyword name="RestructuredTextProvider.numberedList" id="RestructuredTextProvider.numberedList" ref="eric6.QScintilla.MarkupProviders.RestructuredTextProvider.html#RestructuredTextProvider.numberedList" /> <keyword name="RestructuredTextProvider.quote" id="RestructuredTextProvider.quote" ref="eric6.QScintilla.MarkupProviders.RestructuredTextProvider.html#RestructuredTextProvider.quote" /> + <keyword name="ReturnVisitor" id="ReturnVisitor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor" /> + <keyword name="ReturnVisitor (Constructor)" id="ReturnVisitor (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__init__" /> + <keyword name="ReturnVisitor.__checkFunction" id="ReturnVisitor.__checkFunction" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__checkFunction" /> + <keyword name="ReturnVisitor.__checkImplicitReturn" id="ReturnVisitor.__checkImplicitReturn" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__checkImplicitReturn" /> + <keyword name="ReturnVisitor.__checkImplicitReturnValue" id="ReturnVisitor.__checkImplicitReturnValue" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__checkImplicitReturnValue" /> + <keyword name="ReturnVisitor.__checkUnnecessaryAssign" id="ReturnVisitor.__checkUnnecessaryAssign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__checkUnnecessaryAssign" /> + <keyword name="ReturnVisitor.__checkUnnecessaryReturnNone" id="ReturnVisitor.__checkUnnecessaryReturnNone" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__checkUnnecessaryReturnNone" /> + <keyword name="ReturnVisitor.__hasRefsBeforeNextAssign" id="ReturnVisitor.__hasRefsBeforeNextAssign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__hasRefsBeforeNextAssign" /> + <keyword name="ReturnVisitor.__isNone" id="ReturnVisitor.__isNone" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__isNone" /> + <keyword name="ReturnVisitor.__resultExists" id="ReturnVisitor.__resultExists" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__resultExists" /> + <keyword name="ReturnVisitor.__visitAssignTarget" id="ReturnVisitor.__visitAssignTarget" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__visitAssignTarget" /> + <keyword name="ReturnVisitor.__visitWithStack" id="ReturnVisitor.__visitWithStack" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__visitWithStack" /> + <keyword name="ReturnVisitor.assigns" id="ReturnVisitor.assigns" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.assigns" /> + <keyword name="ReturnVisitor.refs" id="ReturnVisitor.refs" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.refs" /> + <keyword name="ReturnVisitor.returns" id="ReturnVisitor.returns" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.returns" /> + <keyword name="ReturnVisitor.visit_Assign" id="ReturnVisitor.visit_Assign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_Assign" /> + <keyword name="ReturnVisitor.visit_AsyncFunctionDef" id="ReturnVisitor.visit_AsyncFunctionDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_AsyncFunctionDef" /> + <keyword name="ReturnVisitor.visit_FunctionDef" id="ReturnVisitor.visit_FunctionDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_FunctionDef" /> + <keyword name="ReturnVisitor.visit_Name" id="ReturnVisitor.visit_Name" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_Name" /> + <keyword name="ReturnVisitor.visit_Return" id="ReturnVisitor.visit_Return" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_Return" /> <keyword name="SafariImporter" id="SafariImporter" ref="eric6.Helpviewer.Bookmarks.BookmarksImporters.SafariImporter.html#SafariImporter" /> <keyword name="SafariImporter" id="SafariImporter" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.SafariImporter.html#SafariImporter" /> <keyword name="SafariImporter (Constructor)" id="SafariImporter (Constructor)" ref="eric6.Helpviewer.Bookmarks.BookmarksImporters.SafariImporter.html#SafariImporter.__init__" /> @@ -15114,6 +15194,48 @@ <keyword name="StyleGuide.init_report" id="StyleGuide.init_report" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.init_report" /> <keyword name="StyleGuide.input_dir" id="StyleGuide.input_dir" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.input_dir" /> <keyword name="StyleGuide.input_file" id="StyleGuide.input_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.input_file" /> + <keyword name="SubstyleDefinitionDialog" id="SubstyleDefinitionDialog" ref="eric6.Preferences.SubstyleDefinitionDialog.html#SubstyleDefinitionDialog" /> + <keyword name="SubstyleDefinitionDialog (Constructor)" id="SubstyleDefinitionDialog (Constructor)" ref="eric6.Preferences.SubstyleDefinitionDialog.html#SubstyleDefinitionDialog.__init__" /> + <keyword name="SubstyleDefinitionDialog (Module)" id="SubstyleDefinitionDialog (Module)" ref="eric6.Preferences.SubstyleDefinitionDialog.html" /> + <keyword name="SubstyleDefinitionDialog.__updateOk" id="SubstyleDefinitionDialog.__updateOk" ref="eric6.Preferences.SubstyleDefinitionDialog.html#SubstyleDefinitionDialog.__updateOk" /> + <keyword name="SubstyleDefinitionDialog.getData" id="SubstyleDefinitionDialog.getData" ref="eric6.Preferences.SubstyleDefinitionDialog.html#SubstyleDefinitionDialog.getData" /> + <keyword name="SubstyleDefinitionDialog.on_defaultButton_clicked" id="SubstyleDefinitionDialog.on_defaultButton_clicked" ref="eric6.Preferences.SubstyleDefinitionDialog.html#SubstyleDefinitionDialog.on_defaultButton_clicked" /> + <keyword name="SubstyleDefinitionDialog.on_descriptionEdit_textChanged" id="SubstyleDefinitionDialog.on_descriptionEdit_textChanged" ref="eric6.Preferences.SubstyleDefinitionDialog.html#SubstyleDefinitionDialog.on_descriptionEdit_textChanged" /> + <keyword name="SubstyleDefinitionDialog.on_resetButton_clicked" id="SubstyleDefinitionDialog.on_resetButton_clicked" ref="eric6.Preferences.SubstyleDefinitionDialog.html#SubstyleDefinitionDialog.on_resetButton_clicked" /> + <keyword name="SubstyleDefinitionDialog.on_wordsEdit_textChanged" id="SubstyleDefinitionDialog.on_wordsEdit_textChanged" ref="eric6.Preferences.SubstyleDefinitionDialog.html#SubstyleDefinitionDialog.on_wordsEdit_textChanged" /> + <keyword name="SubstyledLexer" id="SubstyledLexer" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer" /> + <keyword name="SubstyledLexer (Constructor)" id="SubstyledLexer (Constructor)" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.__init__" /> + <keyword name="SubstyledLexer (Module)" id="SubstyledLexer (Module)" ref="eric6.QScintilla.Lexers.SubstyledLexer.html" /> + <keyword name="SubstyledLexer.addSubstyle" id="SubstyledLexer.addSubstyle" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.addSubstyle" /> + <keyword name="SubstyledLexer.delSubstyle" id="SubstyledLexer.delSubstyle" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.delSubstyle" /> + <keyword name="SubstyledLexer.getBaseStyles" id="SubstyledLexer.getBaseStyles" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.getBaseStyles" /> + <keyword name="SubstyledLexer.hasSubstyle" id="SubstyledLexer.hasSubstyle" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.hasSubstyle" /> + <keyword name="SubstyledLexer.hasSubstyles" id="SubstyledLexer.hasSubstyles" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.hasSubstyles" /> + <keyword name="SubstyledLexer.isBaseStyle" id="SubstyledLexer.isBaseStyle" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.isBaseStyle" /> + <keyword name="SubstyledLexer.loadAllDefaultSubStyles" id="SubstyledLexer.loadAllDefaultSubStyles" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.loadAllDefaultSubStyles" /> + <keyword name="SubstyledLexer.loadDefaultSubStyles" id="SubstyledLexer.loadDefaultSubStyles" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.loadDefaultSubStyles" /> + <keyword name="SubstyledLexer.loadSubstyles" id="SubstyledLexer.loadSubstyles" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.loadSubstyles" /> + <keyword name="SubstyledLexer.readSubstyles" id="SubstyledLexer.readSubstyles" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.readSubstyles" /> + <keyword name="SubstyledLexer.setSubstyleColor" id="SubstyledLexer.setSubstyleColor" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.setSubstyleColor" /> + <keyword name="SubstyledLexer.setSubstyleDescription" id="SubstyledLexer.setSubstyleDescription" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.setSubstyleDescription" /> + <keyword name="SubstyledLexer.setSubstyleEolFill" id="SubstyledLexer.setSubstyleEolFill" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.setSubstyleEolFill" /> + <keyword name="SubstyledLexer.setSubstyleFont" id="SubstyledLexer.setSubstyleFont" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.setSubstyleFont" /> + <keyword name="SubstyledLexer.setSubstylePaper" id="SubstyledLexer.setSubstylePaper" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.setSubstylePaper" /> + <keyword name="SubstyledLexer.setSubstyleWords" id="SubstyledLexer.setSubstyleWords" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.setSubstyleWords" /> + <keyword name="SubstyledLexer.substyleColor" id="SubstyledLexer.substyleColor" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleColor" /> + <keyword name="SubstyledLexer.substyleDefaultColor" id="SubstyledLexer.substyleDefaultColor" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleDefaultColor" /> + <keyword name="SubstyledLexer.substyleDefaultDescription" id="SubstyledLexer.substyleDefaultDescription" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleDefaultDescription" /> + <keyword name="SubstyledLexer.substyleDefaultEolFill" id="SubstyledLexer.substyleDefaultEolFill" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleDefaultEolFill" /> + <keyword name="SubstyledLexer.substyleDefaultFont" id="SubstyledLexer.substyleDefaultFont" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleDefaultFont" /> + <keyword name="SubstyledLexer.substyleDefaultPaper" id="SubstyledLexer.substyleDefaultPaper" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleDefaultPaper" /> + <keyword name="SubstyledLexer.substyleDefaultWords" id="SubstyledLexer.substyleDefaultWords" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleDefaultWords" /> + <keyword name="SubstyledLexer.substyleDescription" id="SubstyledLexer.substyleDescription" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleDescription" /> + <keyword name="SubstyledLexer.substyleEolFill" id="SubstyledLexer.substyleEolFill" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleEolFill" /> + <keyword name="SubstyledLexer.substyleFont" id="SubstyledLexer.substyleFont" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleFont" /> + <keyword name="SubstyledLexer.substylePaper" id="SubstyledLexer.substylePaper" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substylePaper" /> + <keyword name="SubstyledLexer.substyleWords" id="SubstyledLexer.substyleWords" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substyleWords" /> + <keyword name="SubstyledLexer.substylesCount" id="SubstyledLexer.substylesCount" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.substylesCount" /> + <keyword name="SubstyledLexer.writeSubstyles" id="SubstyledLexer.writeSubstyles" ref="eric6.QScintilla.Lexers.SubstyledLexer.html#SubstyledLexer.writeSubstyles" /> <keyword name="Subversion" id="Subversion" ref="eric6.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion" /> <keyword name="Subversion" id="Subversion" ref="eric6.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion" /> <keyword name="Subversion (Constructor)" id="Subversion (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.__init__" /> @@ -16832,25 +16954,36 @@ <keyword name="UnittestDialog" id="UnittestDialog" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog" /> <keyword name="UnittestDialog (Constructor)" id="UnittestDialog (Constructor)" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__init__" /> <keyword name="UnittestDialog (Module)" id="UnittestDialog (Module)" ref="eric6.PyUnit.UnittestDialog.html" /> + <keyword name="UnittestDialog.__UTDiscovered" id="UnittestDialog.__UTDiscovered" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__UTDiscovered" /> <keyword name="UnittestDialog.__UTPrepared" id="UnittestDialog.__UTPrepared" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__UTPrepared" /> + <keyword name="UnittestDialog.__assembleTestCasesList" id="UnittestDialog.__assembleTestCasesList" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__assembleTestCasesList" /> + <keyword name="UnittestDialog.__discover" id="UnittestDialog.__discover" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__discover" /> + <keyword name="UnittestDialog.__findDiscoveryItem" id="UnittestDialog.__findDiscoveryItem" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__findDiscoveryItem" /> <keyword name="UnittestDialog.__openEditor" id="UnittestDialog.__openEditor" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__openEditor" /> + <keyword name="UnittestDialog.__populateDiscoveryResults" id="UnittestDialog.__populateDiscoveryResults" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__populateDiscoveryResults" /> + <keyword name="UnittestDialog.__populateVenvComboBox" id="UnittestDialog.__populateVenvComboBox" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__populateVenvComboBox" /> + <keyword name="UnittestDialog.__selectedTestCases" id="UnittestDialog.__selectedTestCases" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__selectedTestCases" /> <keyword name="UnittestDialog.__setProgressColor" id="UnittestDialog.__setProgressColor" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__setProgressColor" /> <keyword name="UnittestDialog.__setRunningMode" id="UnittestDialog.__setRunningMode" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__setRunningMode" /> <keyword name="UnittestDialog.__setStoppedMode" id="UnittestDialog.__setStoppedMode" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__setStoppedMode" /> <keyword name="UnittestDialog.__showSource" id="UnittestDialog.__showSource" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__showSource" /> + <keyword name="UnittestDialog.__stopTests" id="UnittestDialog.__stopTests" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.__stopTests" /> <keyword name="UnittestDialog.closeEvent" id="UnittestDialog.closeEvent" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.closeEvent" /> <keyword name="UnittestDialog.hasFailedTests" id="UnittestDialog.hasFailedTests" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.hasFailedTests" /> + <keyword name="UnittestDialog.insertDiscovery" id="UnittestDialog.insertDiscovery" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.insertDiscovery" /> <keyword name="UnittestDialog.insertProg" id="UnittestDialog.insertProg" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.insertProg" /> <keyword name="UnittestDialog.insertTestName" id="UnittestDialog.insertTestName" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.insertTestName" /> <keyword name="UnittestDialog.keyPressEvent" id="UnittestDialog.keyPressEvent" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.keyPressEvent" /> <keyword name="UnittestDialog.on_buttonBox_clicked" id="UnittestDialog.on_buttonBox_clicked" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_buttonBox_clicked" /> + <keyword name="UnittestDialog.on_discoverCheckBox_toggled" id="UnittestDialog.on_discoverCheckBox_toggled" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_discoverCheckBox_toggled" /> + <keyword name="UnittestDialog.on_discoveryList_itemDoubleClicked" id="UnittestDialog.on_discoveryList_itemDoubleClicked" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_discoveryList_itemDoubleClicked" /> <keyword name="UnittestDialog.on_errorsListWidget_currentTextChanged" id="UnittestDialog.on_errorsListWidget_currentTextChanged" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_errorsListWidget_currentTextChanged" /> <keyword name="UnittestDialog.on_errorsListWidget_itemDoubleClicked" id="UnittestDialog.on_errorsListWidget_itemDoubleClicked" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_errorsListWidget_itemDoubleClicked" /> - <keyword name="UnittestDialog.on_startButton_clicked" id="UnittestDialog.on_startButton_clicked" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_startButton_clicked" /> - <keyword name="UnittestDialog.on_stopButton_clicked" id="UnittestDialog.on_stopButton_clicked" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_stopButton_clicked" /> <keyword name="UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog" id="UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog" /> <keyword name="UnittestDialog.on_testsuitePicker_editTextChanged" id="UnittestDialog.on_testsuitePicker_editTextChanged" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_testsuitePicker_editTextChanged" /> <keyword name="UnittestDialog.on_testsuitePicker_pathSelected" id="UnittestDialog.on_testsuitePicker_pathSelected" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.on_testsuitePicker_pathSelected" /> + <keyword name="UnittestDialog.setProjectMode" id="UnittestDialog.setProjectMode" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.setProjectMode" /> + <keyword name="UnittestDialog.startTests" id="UnittestDialog.startTests" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.startTests" /> <keyword name="UnittestDialog.testErrored" id="UnittestDialog.testErrored" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.testErrored" /> <keyword name="UnittestDialog.testFailed" id="UnittestDialog.testFailed" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.testFailed" /> <keyword name="UnittestDialog.testFailedExpected" id="UnittestDialog.testFailedExpected" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog.testFailedExpected" /> @@ -17810,6 +17943,7 @@ <keyword name="VirtualenvManager.getVirtualenvInterpreter" id="VirtualenvManager.getVirtualenvInterpreter" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvInterpreter" /> <keyword name="VirtualenvManager.getVirtualenvNames" id="VirtualenvManager.getVirtualenvNames" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvNames" /> <keyword name="VirtualenvManager.getVirtualenvNamesForVariant" id="VirtualenvManager.getVirtualenvNamesForVariant" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvNamesForVariant" /> + <keyword name="VirtualenvManager.getVirtualenvVariant" id="VirtualenvManager.getVirtualenvVariant" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvVariant" /> <keyword name="VirtualenvManager.isCondaEnvironment" id="VirtualenvManager.isCondaEnvironment" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.isCondaEnvironment" /> <keyword name="VirtualenvManager.isGlobalEnvironment" id="VirtualenvManager.isGlobalEnvironment" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.isGlobalEnvironment" /> <keyword name="VirtualenvManager.isRemoteEnvironment" id="VirtualenvManager.isRemoteEnvironment" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.isRemoteEnvironment" /> @@ -18816,7 +18950,6 @@ <keyword name="_add_check" id="_add_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_add_check" /> <keyword name="_break_around_binary_operators" id="_break_around_binary_operators" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_break_around_binary_operators" /> <keyword name="_buildChildrenLists" id="_buildChildrenLists" ref="eric6.Graphics.GraphicsUtilities.html#_buildChildrenLists" /> - <keyword name="_encode_base64" id="_encode_base64" ref="eric6.UI.EmailDialog.html#_encode_base64" /> <keyword name="_get_parameters" id="_get_parameters" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_get_parameters" /> <keyword name="_getfullargs" id="_getfullargs" ref="eric6.DebugClients.Python.DebugUtilities.html#_getfullargs" /> <keyword name="_indent" id="_indent" ref="eric6.Utilities.ClassBrowsers.pyclbr.html#_indent" /> @@ -18827,8 +18960,6 @@ <keyword name="_main" id="_main" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_main" /> <keyword name="_parse_multi_options" id="_parse_multi_options" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_parse_multi_options" /> <keyword name="_percentReplacementFunc" id="_percentReplacementFunc" ref="eric6.Utilities.__init__.html#_percentReplacementFunc" /> - <keyword name="_prepareMessage_v2" id="_prepareMessage_v2" ref="eric6.E5Network.E5GoogleMail.html#_prepareMessage_v2" /> - <keyword name="_prepareMessage_v3" id="_prepareMessage_v3" ref="eric6.E5Network.E5GoogleMail.html#_prepareMessage_v3" /> <keyword name="absolutePath" id="absolutePath" ref="eric6.Utilities.__init__.html#absolutePath" /> <keyword name="absoluteUniversalPath" id="absoluteUniversalPath" ref="eric6.Utilities.__init__.html#absoluteUniversalPath" /> <keyword name="addActions" id="addActions" ref="eric6.E5Gui.E5Action.html#addActions" /> @@ -19123,7 +19254,6 @@ <keyword name="getConfigPath" id="getConfigPath" ref="eric6.Plugins.VcsPlugins.vcsSubversion.SvnUtilities.html#getConfigPath" /> <keyword name="getCooperation" id="getCooperation" ref="eric6.Preferences.__init__.html#getCooperation" /> <keyword name="getCorba" id="getCorba" ref="eric6.Preferences.__init__.html#getCorba" /> - <keyword name="getCredentials" id="getCredentials" ref="eric6.E5Network.E5GoogleMail.html#getCredentials" /> <keyword name="getDebugger" id="getDebugger" ref="eric6.Preferences.__init__.html#getDebugger" /> <keyword name="getDefaultLexerAssociations" id="getDefaultLexerAssociations" ref="eric6.QScintilla.Lexers.__init__.html#getDefaultLexerAssociations" /> <keyword name="getDefaults" id="getDefaults" ref="eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.__init__.html#getDefaults" /> @@ -19178,6 +19308,7 @@ <keyword name="getImporterInfo" id="getImporterInfo" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.__init__.html#getImporterInfo" /> <keyword name="getImporters" id="getImporters" ref="eric6.Helpviewer.Bookmarks.BookmarksImporters.__init__.html#getImporters" /> <keyword name="getImporters" id="getImporters" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.__init__.html#getImporters" /> + <keyword name="getInstallCommand" id="getInstallCommand" ref="eric6.E5Network.E5GoogleMailHelpers.html#getInstallCommand" /> <keyword name="getIrc" id="getIrc" ref="eric6.Preferences.__init__.html#getIrc" /> <keyword name="getKeyUrl" id="getKeyUrl" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#getKeyUrl" /> <keyword name="getLanguageIcon" id="getLanguageIcon" ref="eric6.QScintilla.Lexers.__init__.html#getLanguageIcon" /> @@ -19312,7 +19443,7 @@ <keyword name="instance" id="instance" ref="eric6.WebBrowser.ZoomManager.ZoomManager.html#instance" /> <keyword name="ircFilter" id="ircFilter" ref="eric6.Network.IRC.IrcUtilities.html#ircFilter" /> <keyword name="ircTimestamp" id="ircTimestamp" ref="eric6.Network.IRC.IrcUtilities.html#ircTimestamp" /> - <keyword name="isClientSecretFileAvailable" id="isClientSecretFileAvailable" ref="eric6.E5Network.E5GoogleMail.html#isClientSecretFileAvailable" /> + <keyword name="isClientSecretFileAvailable" id="isClientSecretFileAvailable" ref="eric6.E5Network.E5GoogleMailHelpers.html#isClientSecretFileAvailable" /> <keyword name="isCondaAvailable" id="isCondaAvailable" ref="eric6.CondaInterface.__init__.html#isCondaAvailable" /> <keyword name="isConfigured" id="isConfigured" ref="eric6.Preferences.__init__.html#isConfigured" /> <keyword name="isCupsAvailable" id="isCupsAvailable" ref="eric6.WebBrowser.Tools.FilePrinter.html#isCupsAvailable" /> @@ -19787,6 +19918,7 @@ <file>eric6.E5Gui.E5ZoomWidget.html</file> <file>eric6.E5Network.E5Ftp.html</file> <file>eric6.E5Network.E5GoogleMail.html</file> + <file>eric6.E5Network.E5GoogleMailHelpers.html</file> <file>eric6.E5Network.E5NetworkHeaderDetailsDialog.html</file> <file>eric6.E5Network.E5NetworkIcon.html</file> <file>eric6.E5Network.E5NetworkMonitor.html</file> @@ -20440,6 +20572,7 @@ <file>eric6.Preferences.ShortcutDialog.html</file> <file>eric6.Preferences.Shortcuts.html</file> <file>eric6.Preferences.ShortcutsDialog.html</file> + <file>eric6.Preferences.SubstyleDefinitionDialog.html</file> <file>eric6.Preferences.ToolConfigurationDialog.html</file> <file>eric6.Preferences.ToolGroupConfigurationDialog.html</file> <file>eric6.Preferences.ViewProfileDialog.html</file> @@ -20532,6 +20665,7 @@ <file>eric6.QScintilla.Lexers.LexerVHDL.html</file> <file>eric6.QScintilla.Lexers.LexerXML.html</file> <file>eric6.QScintilla.Lexers.LexerYAML.html</file> + <file>eric6.QScintilla.Lexers.SubstyledLexer.html</file> <file>eric6.QScintilla.Lexers.__init__.html</file> <file>eric6.QScintilla.MarkupProviders.HtmlProvider.html</file> <file>eric6.QScintilla.MarkupProviders.HyperlinkMarkupDialog.html</file>
--- a/Documentation/Source/eric6.DebugClients.Python.DCTestResult.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.DebugClients.Python.DCTestResult.html Fri Apr 05 19:06:39 2019 +0200 @@ -90,13 +90,16 @@ </table> <a NAME="DCTestResult.__init__" ID="DCTestResult.__init__"></a> <h4>DCTestResult (Constructor)</h4> -<b>DCTestResult</b>(<i>dbgClient</i>) +<b>DCTestResult</b>(<i>dbgClient, failfast</i>) <p> Constructor </p><dl> <dt><i>dbgClient</i> (DebugClientBase)</dt> <dd> reference to the debug client +</dd><dt><i>failfast</i> (bool)</dt> +<dd> +flag indicating to stop at the first error </dd> </dl><a NAME="DCTestResult.addError" ID="DCTestResult.addError"></a> <h4>DCTestResult.addError</h4>
--- a/Documentation/Source/eric6.DebugClients.Python.DebugClientBase.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.DebugClients.Python.DebugClientBase.html Fri Apr 05 19:06:39 2019 +0200 @@ -89,6 +89,9 @@ <td><a href="#DebugClientBase.__init__">DebugClientBase</a></td> <td>Constructor</td> </tr><tr> +<td><a href="#DebugClientBase.__assembleTestCasesList">__assembleTestCasesList</a></td> +<td>Private method to assemble a list of test cases included in a test suite.</td> +</tr><tr> <td><a href="#DebugClientBase.__clientCapabilities">__clientCapabilities</a></td> <td>Private method to determine the clients capabilities.</td> </tr><tr> @@ -231,7 +234,32 @@ <b>DebugClientBase</b>(<i></i>) <p> Constructor -</p><a NAME="DebugClientBase.__clientCapabilities" ID="DebugClientBase.__clientCapabilities"></a> +</p><a NAME="DebugClientBase.__assembleTestCasesList" ID="DebugClientBase.__assembleTestCasesList"></a> +<h4>DebugClientBase.__assembleTestCasesList</h4> +<b>__assembleTestCasesList</b>(<i>suite, start</i>) +<p> + Private method to assemble a list of test cases included in a test + suite. +</p><dl> +<dt><i>suite</i> (unittest.TestSuite)</dt> +<dd> +test suite to be inspected +</dd><dt><i>start</i> (str)</dt> +<dd> +name of directory discovery was started at +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +list of tuples containing the test case ID, a short description + and the path of the test file name +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +list of tuples of (str, str, str) +</dd> +</dl><a NAME="DebugClientBase.__clientCapabilities" ID="DebugClientBase.__clientCapabilities"></a> <h4>DebugClientBase.__clientCapabilities</h4> <b>__clientCapabilities</b>(<i></i>) <p>
--- a/Documentation/Source/eric6.Debugger.DebugServer.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Debugger.DebugServer.html Fri Apr 05 19:06:39 2019 +0200 @@ -83,10 +83,10 @@ <dd> emitted after an exception occured on the client side -</dd><dt>clientExit(int)</dt> +</dd><dt>clientExit(int, str, bool)</dt> <dd> -emitted with the exit status after the client has - exited +emitted after the client has exited + giving the exit status, an exit message and an indication to be quiet </dd><dt>clientGone(bool)</dt> <dd> emitted if the client went away (planned or @@ -159,6 +159,10 @@ <dd> emitted after the debug client has connected in passive debug mode +</dd><dt>utDiscovered(testCases, exc_type, exc_value)</dt> +<dd> +emitted after the + client has performed a test case discovery action </dd><dt>utFinished()</dt> <dd> emitted after the client signalled the end of the @@ -296,6 +300,9 @@ <td><a href="#DebugServer.__watchPointDataAboutToBeChanged">__watchPointDataAboutToBeChanged</a></td> <td>Private slot to handle the dataAboutToBeChanged signal of the watch expression model.</td> </tr><tr> +<td><a href="#DebugServer.clientUtDiscovered">clientUtDiscovered</a></td> +<td>Public method to process the client unittest discover info.</td> +</tr><tr> <td><a href="#DebugServer.clientUtFinished">clientUtFinished</a></td> <td>Public method to process the client unit test finished info.</td> </tr><tr> @@ -431,6 +438,9 @@ <td><a href="#DebugServer.remoteThreadList">remoteThreadList</a></td> <td>Public method to request the list of threads from the client.</td> </tr><tr> +<td><a href="#DebugServer.remoteUTDiscover">remoteUTDiscover</a></td> +<td>Public method to perform a test case discovery.</td> +</tr><tr> <td><a href="#DebugServer.remoteUTPrepare">remoteUTPrepare</a></td> <td>Public method to prepare a new unittest run.</td> </tr><tr> @@ -881,12 +891,33 @@ <dd> end index of the rows to be changed (QModelIndex) </dd> +</dl><a NAME="DebugServer.clientUtDiscovered" ID="DebugServer.clientUtDiscovered"></a> +<h4>DebugServer.clientUtDiscovered</h4> +<b>clientUtDiscovered</b>(<i>testCases, exceptionType, exceptionValue</i>) +<p> + Public method to process the client unittest discover info. +</p><dl> +<dt><i>testCases</i> (str)</dt> +<dd> +list of detected test cases +</dd><dt><i>exceptionType</i> (str)</dt> +<dd> +exception type +</dd><dt><i>exceptionValue</i> (str)</dt> +<dd> +exception message +</dd> </dl><a NAME="DebugServer.clientUtFinished" ID="DebugServer.clientUtFinished"></a> <h4>DebugServer.clientUtFinished</h4> -<b>clientUtFinished</b>(<i></i>) +<b>clientUtFinished</b>(<i>status</i>) <p> Public method to process the client unit test finished info. -</p><a NAME="DebugServer.clientUtPrepared" ID="DebugServer.clientUtPrepared"></a> +</p><dl> +<dt><i>status</i> (int)</dt> +<dd> +exit status of the unit test +</dd> +</dl><a NAME="DebugServer.clientUtPrepared" ID="DebugServer.clientUtPrepared"></a> <h4>DebugServer.clientUtPrepared</h4> <b>clientUtPrepared</b>(<i>result, exceptionType, exceptionValue</i>) <p> @@ -1540,47 +1571,103 @@ <b>remoteThreadList</b>(<i></i>) <p> Public method to request the list of threads from the client. -</p><a NAME="DebugServer.remoteUTPrepare" ID="DebugServer.remoteUTPrepare"></a> +</p><a NAME="DebugServer.remoteUTDiscover" ID="DebugServer.remoteUTDiscover"></a> +<h4>DebugServer.remoteUTDiscover</h4> +<b>remoteUTDiscover</b>(<i>clientType, forProject, venvName, syspath, workdir, discoveryStart</i>) +<p> + Public method to perform a test case discovery. +</p><dl> +<dt><i>clientType</i> (str)</dt> +<dd> +client type to be used +</dd><dt><i>forProject</i> (bool)</dt> +<dd> +flag indicating a project related action +</dd><dt><i>venvName</i> (str)</dt> +<dd> +name of a virtual environment +</dd><dt><i>syspath</i> (list of str)</dt> +<dd> +list of directories to be added to sys.path on the + remote side +</dd><dt><i>workdir</i> (str)</dt> +<dd> +path name of the working directory +</dd><dt><i>discoveryStart</i> (str)</dt> +<dd> +directory to start auto-discovery at +</dd> +</dl><a NAME="DebugServer.remoteUTPrepare" ID="DebugServer.remoteUTPrepare"></a> <h4>DebugServer.remoteUTPrepare</h4> -<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase, clientType=""</i>) +<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase, clientType="", forProject=False, venvName="", syspath=None, workdir="", discover=False, discoveryStart="", testCases=None, debug=False</i>) <p> Public method to prepare a new unittest run. </p><dl> -<dt><i>fn</i></dt> +<dt><i>fn</i> (str)</dt> <dd> -the filename to load (string) -</dd><dt><i>tn</i></dt> +the filename to load +</dd><dt><i>tn</i> (str)</dt> <dd> -the testname to load (string) -</dd><dt><i>tfn</i></dt> +the testname to load +</dd><dt><i>tfn</i> (str)</dt> <dd> -the test function name to load tests from (string) -</dd><dt><i>failed</i></dt> +the test function name to load tests from +</dd><dt><i>failed</i> (list of str)</dt> <dd> list of failed test, if only failed test should be run - (list of strings) -</dd><dt><i>cov</i></dt> +</dd><dt><i>cov</i> (bool)</dt> <dd> flag indicating collection of coverage data is requested - (boolean) -</dd><dt><i>covname</i></dt> +</dd><dt><i>covname</i> (str)</dt> <dd> filename to be used to assemble the coverage caches - filename (string) -</dd><dt><i>coverase</i></dt> + filename +</dd><dt><i>coverase</i> (bool)</dt> <dd> flag indicating erasure of coverage data is requested - (boolean) -</dd><dt><i>clientType=</i></dt> +</dd><dt><i>clientType</i> (str)</dt> +<dd> +client type to be used +</dd><dt><i>forProject</i> (bool)</dt> +<dd> +flag indicating a project related action +</dd><dt><i>venvName</i> (str)</dt> +<dd> +name of a virtual environment +</dd><dt><i>syspath</i> (list of str)</dt> <dd> -client type to be used (string) +list of directories to be added to sys.path on the + remote side +</dd><dt><i>workdir</i> (str)</dt> +<dd> +path name of the working directory +</dd><dt><i>discover</i> (bool)</dt> +<dd> +flag indicating to discover the tests automatically +</dd><dt><i>discoveryStart</i> (str)</dt> +<dd> +directory to start auto-discovery at +</dd><dt><i>testCases</i> (list of str)</dt> +<dd> +list of test cases to be loaded +</dd><dt><i>debug</i> (bool)</dt> +<dd> +flag indicating to run unittest with debugging </dd> </dl><a NAME="DebugServer.remoteUTRun" ID="DebugServer.remoteUTRun"></a> <h4>DebugServer.remoteUTRun</h4> -<b>remoteUTRun</b>(<i></i>) +<b>remoteUTRun</b>(<i>debug=False, failfast=False</i>) <p> Public method to start a unittest run. -</p><a NAME="DebugServer.remoteUTStop" ID="DebugServer.remoteUTStop"></a> +</p><dl> +<dt><i>debug</i> (bool)</dt> +<dd> +flag indicating to run unittest with debugging +</dd><dt><i>failfast</i> (bool)</dt> +<dd> +flag indicating to stop at the first error +</dd> +</dl><a NAME="DebugServer.remoteUTStop" ID="DebugServer.remoteUTStop"></a> <h4>DebugServer.remoteUTStop</h4> <b>remoteUTStop</b>(<i></i>) <p>
--- a/Documentation/Source/eric6.Debugger.DebugUI.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Debugger.DebugUI.html Fri Apr 05 19:06:39 2019 +0200 @@ -394,7 +394,7 @@ </dd> </dl><a NAME="DebugUI.__clientExit" ID="DebugUI.__clientExit"></a> <h4>DebugUI.__clientExit</h4> -<b>__clientExit</b>(<i>status, message</i>) +<b>__clientExit</b>(<i>status, message, quiet</i>) <p> Private method to handle the debugged program terminating. </p><dl> @@ -404,6 +404,9 @@ </dd><dt><i>message</i> (str)</dt> <dd> exit message of the debugged program +</dd><dt><i>quiet</i> (bool)</dt> +<dd> +flag indicating to suppress exit info display </dd> </dl><a NAME="DebugUI.__clientGone" ID="DebugUI.__clientGone"></a> <h4>DebugUI.__clientGone</h4>
--- a/Documentation/Source/eric6.Debugger.DebuggerInterfaceNone.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Debugger.DebuggerInterfaceNone.html Fri Apr 05 19:06:39 2019 +0200 @@ -153,6 +153,9 @@ <td><a href="#DebuggerInterfaceNone.remoteThreadList">remoteThreadList</a></td> <td>Public method to request the list of threads from the client.</td> </tr><tr> +<td><a href="#DebuggerInterfaceNone.remoteUTDiscover">remoteUTDiscover</a></td> +<td>Public method to perform a test case discovery.</td> +</tr><tr> <td><a href="#DebuggerInterfaceNone.remoteUTPrepare">remoteUTPrepare</a></td> <td>Public method to prepare a new unittest run.</td> </tr><tr> @@ -568,44 +571,85 @@ <b>remoteThreadList</b>(<i></i>) <p> Public method to request the list of threads from the client. -</p><a NAME="DebuggerInterfaceNone.remoteUTPrepare" ID="DebuggerInterfaceNone.remoteUTPrepare"></a> +</p><a NAME="DebuggerInterfaceNone.remoteUTDiscover" ID="DebuggerInterfaceNone.remoteUTDiscover"></a> +<h4>DebuggerInterfaceNone.remoteUTDiscover</h4> +<b>remoteUTDiscover</b>(<i>syspath, workdir, discoveryStart</i>) +<p> + Public method to perform a test case discovery. +</p><dl> +<dt><i>syspath</i> (list of str)</dt> +<dd> +list of directories to be added to sys.path on the + remote side +</dd><dt><i>workdir</i> (str)</dt> +<dd> +path name of the working directory +</dd><dt><i>discoveryStart</i> (str)</dt> +<dd> +directory to start auto-discovery at +</dd> +</dl><a NAME="DebuggerInterfaceNone.remoteUTPrepare" ID="DebuggerInterfaceNone.remoteUTPrepare"></a> <h4>DebuggerInterfaceNone.remoteUTPrepare</h4> -<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase</i>) +<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug</i>) <p> Public method to prepare a new unittest run. </p><dl> -<dt><i>fn</i></dt> +<dt><i>fn</i> (str)</dt> <dd> -the filename to load (string) -</dd><dt><i>tn</i></dt> +name of file to load +</dd><dt><i>tn</i> (str)</dt> <dd> -the testname to load (string) -</dd><dt><i>tfn</i></dt> +name of test to load +</dd><dt><i>tfn</i> (str)</dt> <dd> -the test function name to load tests from (string) -</dd><dt><i>failed</i></dt> +test function name to load tests from +</dd><dt><i>failed</i> (list of str)</dt> <dd> list of failed test, if only failed test should be run - (list of strings) -</dd><dt><i>cov</i></dt> +</dd><dt><i>cov</i> (bool)</dt> <dd> flag indicating collection of coverage data is requested - (boolean) -</dd><dt><i>covname</i></dt> +</dd><dt><i>covname</i> (str)</dt> <dd> -filename to be used to assemble the coverage caches - filename (string) -</dd><dt><i>coverase</i></dt> +name of file to be used to assemble the coverage caches + filename +</dd><dt><i>coverase</i> (bool)</dt> <dd> flag indicating erasure of coverage data is requested - (boolean) +</dd><dt><i>syspath</i> (list of str)</dt> +<dd> +list of directories to be added to sys.path on the + remote side +</dd><dt><i>workdir</i> (str)</dt> +<dd> +path name of the working directory +</dd><dt><i>discover</i> (bool)</dt> +<dd> +flag indicating to discover the tests automatically +</dd><dt><i>discoveryStart</i> (str)</dt> +<dd> +directory to start auto-discovery at +</dd><dt><i>testCases</i> (list of str)</dt> +<dd> +list of test cases to be loaded +</dd><dt><i>debug</i> (bool)</dt> +<dd> +flag indicating to run unittest with debugging </dd> </dl><a NAME="DebuggerInterfaceNone.remoteUTRun" ID="DebuggerInterfaceNone.remoteUTRun"></a> <h4>DebuggerInterfaceNone.remoteUTRun</h4> -<b>remoteUTRun</b>(<i></i>) +<b>remoteUTRun</b>(<i>debug, failfast</i>) <p> Public method to start a unittest run. -</p><a NAME="DebuggerInterfaceNone.remoteUTStop" ID="DebuggerInterfaceNone.remoteUTStop"></a> +</p><dl> +<dt><i>debug</i> (bool)</dt> +<dd> +flag indicating to run unittest with debugging +</dd><dt><i>failfast</i> (bool)</dt> +<dd> +flag indicating to stop at the first error +</dd> +</dl><a NAME="DebuggerInterfaceNone.remoteUTStop" ID="DebuggerInterfaceNone.remoteUTStop"></a> <h4>DebuggerInterfaceNone.remoteUTStop</h4> <b>remoteUTStop</b>(<i></i>) <p>
--- a/Documentation/Source/eric6.Debugger.DebuggerInterfacePython.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Debugger.DebuggerInterfacePython.html Fri Apr 05 19:06:39 2019 +0200 @@ -178,6 +178,9 @@ <td><a href="#DebuggerInterfacePython.remoteThreadList">remoteThreadList</a></td> <td>Public method to request the list of threads from the client.</td> </tr><tr> +<td><a href="#DebuggerInterfacePython.remoteUTDiscover">remoteUTDiscover</a></td> +<td>Public method to perform a test case discovery.</td> +</tr><tr> <td><a href="#DebuggerInterfacePython.remoteUTPrepare">remoteUTPrepare</a></td> <td>Public method to prepare a new unittest run.</td> </tr><tr> @@ -697,44 +700,85 @@ <b>remoteThreadList</b>(<i></i>) <p> Public method to request the list of threads from the client. -</p><a NAME="DebuggerInterfacePython.remoteUTPrepare" ID="DebuggerInterfacePython.remoteUTPrepare"></a> +</p><a NAME="DebuggerInterfacePython.remoteUTDiscover" ID="DebuggerInterfacePython.remoteUTDiscover"></a> +<h4>DebuggerInterfacePython.remoteUTDiscover</h4> +<b>remoteUTDiscover</b>(<i>syspath, workdir, discoveryStart</i>) +<p> + Public method to perform a test case discovery. +</p><dl> +<dt><i>syspath</i> (list of str)</dt> +<dd> +list of directories to be added to sys.path on the + remote side +</dd><dt><i>workdir</i> (str)</dt> +<dd> +path name of the working directory +</dd><dt><i>discoveryStart</i> (str)</dt> +<dd> +directory to start auto-discovery at +</dd> +</dl><a NAME="DebuggerInterfacePython.remoteUTPrepare" ID="DebuggerInterfacePython.remoteUTPrepare"></a> <h4>DebuggerInterfacePython.remoteUTPrepare</h4> -<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase</i>) +<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug</i>) <p> Public method to prepare a new unittest run. </p><dl> -<dt><i>fn</i></dt> +<dt><i>fn</i> (str)</dt> <dd> -the filename to load (string) -</dd><dt><i>tn</i></dt> +name of file to load +</dd><dt><i>tn</i> (str)</dt> <dd> -the testname to load (string) -</dd><dt><i>tfn</i></dt> +name of test to load +</dd><dt><i>tfn</i> (str)</dt> <dd> -the test function name to load tests from (string) -</dd><dt><i>failed</i></dt> +test function name to load tests from +</dd><dt><i>failed</i> (list of str)</dt> <dd> list of failed test, if only failed test should be run - (list of strings) -</dd><dt><i>cov</i></dt> +</dd><dt><i>cov</i> (bool)</dt> <dd> flag indicating collection of coverage data is requested - (boolean) -</dd><dt><i>covname</i></dt> +</dd><dt><i>covname</i> (str)</dt> <dd> -filename to be used to assemble the coverage caches - filename (string) -</dd><dt><i>coverase</i></dt> +name of file to be used to assemble the coverage caches + filename +</dd><dt><i>coverase</i> (bool)</dt> <dd> flag indicating erasure of coverage data is requested - (boolean) +</dd><dt><i>syspath</i> (list of str)</dt> +<dd> +list of directories to be added to sys.path on the + remote side +</dd><dt><i>workdir</i> (str)</dt> +<dd> +path name of the working directory +</dd><dt><i>discover</i> (bool)</dt> +<dd> +flag indicating to discover the tests automatically +</dd><dt><i>discoveryStart</i> (str)</dt> +<dd> +directory to start auto-discovery at +</dd><dt><i>testCases</i> (list of str)</dt> +<dd> +list of test cases to be loaded +</dd><dt><i>debug</i> (bool)</dt> +<dd> +flag indicating to run unittest with debugging </dd> </dl><a NAME="DebuggerInterfacePython.remoteUTRun" ID="DebuggerInterfacePython.remoteUTRun"></a> <h4>DebuggerInterfacePython.remoteUTRun</h4> -<b>remoteUTRun</b>(<i></i>) +<b>remoteUTRun</b>(<i>debug, failfast</i>) <p> Public method to start a unittest run. -</p><a NAME="DebuggerInterfacePython.remoteUTStop" ID="DebuggerInterfacePython.remoteUTStop"></a> +</p><dl> +<dt><i>debug</i> (bool)</dt> +<dd> +flag indicating to run unittest with debugging +</dd><dt><i>failfast</i> (bool)</dt> +<dd> +flag indicating to stop at the first error +</dd> +</dl><a NAME="DebuggerInterfacePython.remoteUTStop" ID="DebuggerInterfacePython.remoteUTStop"></a> <h4>DebuggerInterfacePython.remoteUTStop</h4> <b>remoteUTStop</b>(<i></i>) <p>
--- a/Documentation/Source/eric6.E5Network.E5GoogleMail.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.E5Network.E5GoogleMail.html Fri Apr 05 19:06:39 2019 +0200 @@ -25,34 +25,290 @@ </p> <h3>Global Attributes</h3> <table> -<tr><td>APPLICATION_NAME</td></tr><tr><td>CLIENT_SECRET_FILE</td></tr><tr><td>CREDENTIALS_FILE</td></tr><tr><td>SCOPES</td></tr> +<tr><td>None</td></tr> </table> <h3>Classes</h3> <table> -<tr><td>None</td></tr> +<tr> +<td><a href="#E5GoogleMail">E5GoogleMail</a></td> +<td>Class implementing the logic to send emails via Google Mail.</td> +</tr><tr> +<td><a href="#E5GoogleMailAuthBrowser">E5GoogleMailAuthBrowser</a></td> +<td>Class implementing a simple web browser to perform the OAuth2 authentication process.</td> +</tr> </table> <h3>Functions</h3> <table> <tr> <td><a href="#GoogleMailHelp">GoogleMailHelp</a></td> <td>Module function to get some help about how to enable the Google Mail OAuth2 service.</td> -</tr><tr> -<td><a href="#GoogleMailSendMessage">GoogleMailSendMessage</a></td> -<td>Module function to send an email message via Google Mail.</td> -</tr><tr> -<td><a href="#_prepareMessage_v2">_prepareMessage_v2</a></td> -<td>Module function to prepare the message for sending (Python2 Variant).</td> +</tr> +</table> +<hr /><hr /> +<a NAME="E5GoogleMail" ID="E5GoogleMail"></a> +<h2>E5GoogleMail</h2> +<p> + Class implementing the logic to send emails via Google Mail. +</p><h3>Signals</h3> +<dl> +<dt>sendResult(bool, str)</dt> +<dd> +emitted to indicate the transmission result + and a result message +</dd> +</dl> +<h3>Derived from</h3> +QObject +<h3>Class Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> +<table> +<tr> +<td><a href="#E5GoogleMail.__init__">E5GoogleMail</a></td> +<td>Constructor</td> </tr><tr> -<td><a href="#_prepareMessage_v3">_prepareMessage_v3</a></td> -<td>Module function to prepare the message for sending (Python2 Variant).</td> +<td><a href="#E5GoogleMail.__credentialsFromSession">__credentialsFromSession</a></td> +<td>Private method to create a credentials object.</td> +</tr><tr> +<td><a href="#E5GoogleMail.__doSendMessages">__doSendMessages</a></td> +<td>Private method to send all queued messages.</td> +</tr><tr> +<td><a href="#E5GoogleMail.__loadToken">__loadToken</a></td> +<td>Private method to load a token from the token file.</td> +</tr><tr> +<td><a href="#E5GoogleMail.__prepareMessage_v2">__prepareMessage_v2</a></td> +<td>Private method to prepare the message for sending (Python2 Variant).</td> </tr><tr> -<td><a href="#getCredentials">getCredentials</a></td> -<td>Module function to get the Google credentials.</td> +<td><a href="#E5GoogleMail.__prepareMessage_v3">__prepareMessage_v3</a></td> +<td>Private method to prepare the message for sending (Python2 Variant).</td> +</tr><tr> +<td><a href="#E5GoogleMail.__processAuthorization">__processAuthorization</a></td> +<td>Private slot to process the received authorization code.</td> </tr><tr> -<td><a href="#isClientSecretFileAvailable">isClientSecretFileAvailable</a></td> -<td>Module function to check, if the client secret file has been installed.</td> +<td><a href="#E5GoogleMail.__saveToken">__saveToken</a></td> +<td>Private method to save a token to the token file.</td> +</tr><tr> +<td><a href="#E5GoogleMail.__startSession">__startSession</a></td> +<td>Private method to start an authorized session and optionally start the authorization flow.</td> +</tr><tr> +<td><a href="#E5GoogleMail.sendMessage">sendMessage</a></td> +<td>Public method to send a message via Google Mail.</td> </tr> </table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="E5GoogleMail.__init__" ID="E5GoogleMail.__init__"></a> +<h4>E5GoogleMail (Constructor)</h4> +<b>E5GoogleMail</b>(<i>parent=None</i>) +<p> + Constructor +</p><dl> +<dt><i>parent</i> (QObject)</dt> +<dd> +reference to the parent object +</dd> +</dl><a NAME="E5GoogleMail.__credentialsFromSession" ID="E5GoogleMail.__credentialsFromSession"></a> +<h4>E5GoogleMail.__credentialsFromSession</h4> +<b>__credentialsFromSession</b>(<i></i>) +<p> + Private method to create a credentials object. +</p><dl> +<dt>Returns:</dt> +<dd> +created credentials object +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +google.oauth2.credentials.Credentials +</dd> +</dl><a NAME="E5GoogleMail.__doSendMessages" ID="E5GoogleMail.__doSendMessages"></a> +<h4>E5GoogleMail.__doSendMessages</h4> +<b>__doSendMessages</b>(<i></i>) +<p> + Private method to send all queued messages. +</p><a NAME="E5GoogleMail.__loadToken" ID="E5GoogleMail.__loadToken"></a> +<h4>E5GoogleMail.__loadToken</h4> +<b>__loadToken</b>(<i></i>) +<p> + Private method to load a token from the token file. +</p><dl> +<dt>Returns:</dt> +<dd> +loaded token +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +dict or None +</dd> +</dl><a NAME="E5GoogleMail.__prepareMessage_v2" ID="E5GoogleMail.__prepareMessage_v2"></a> +<h4>E5GoogleMail.__prepareMessage_v2</h4> +<b>__prepareMessage_v2</b>(<i>message</i>) +<p> + Private method to prepare the message for sending (Python2 Variant). +</p><dl> +<dt><i>message</i> (email.mime.text.MIMEBase)</dt> +<dd> +message to be prepared +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +prepared message dictionary +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl><a NAME="E5GoogleMail.__prepareMessage_v3" ID="E5GoogleMail.__prepareMessage_v3"></a> +<h4>E5GoogleMail.__prepareMessage_v3</h4> +<b>__prepareMessage_v3</b>(<i>message</i>) +<p> + Private method to prepare the message for sending (Python2 Variant). +</p><dl> +<dt><i>message</i> (email.mime.text.MIMEBase)</dt> +<dd> +message to be prepared +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +prepared message dictionary +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl><a NAME="E5GoogleMail.__processAuthorization" ID="E5GoogleMail.__processAuthorization"></a> +<h4>E5GoogleMail.__processAuthorization</h4> +<b>__processAuthorization</b>(<i>authCode</i>) +<p> + Private slot to process the received authorization code. +</p><dl> +<dt><i>authCode</i> (str)</dt> +<dd> +received authorization code +</dd> +</dl><a NAME="E5GoogleMail.__saveToken" ID="E5GoogleMail.__saveToken"></a> +<h4>E5GoogleMail.__saveToken</h4> +<b>__saveToken</b>(<i>token</i>) +<p> + Private method to save a token to the token file. +</p><dl> +<dt><i>token</i> (dict)</dt> +<dd> +token to be saved +</dd> +</dl><a NAME="E5GoogleMail.__startSession" ID="E5GoogleMail.__startSession"></a> +<h4>E5GoogleMail.__startSession</h4> +<b>__startSession</b>(<i></i>) +<p> + Private method to start an authorized session and optionally start the + authorization flow. +</p><a NAME="E5GoogleMail.sendMessage" ID="E5GoogleMail.sendMessage"></a> +<h4>E5GoogleMail.sendMessage</h4> +<b>sendMessage</b>(<i>message</i>) +<p> + Public method to send a message via Google Mail. +</p><dl> +<dt><i>message</i> (email.mime.text.MIMEBase)</dt> +<dd> +email message to be sent +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="E5GoogleMailAuthBrowser" ID="E5GoogleMailAuthBrowser"></a> +<h2>E5GoogleMailAuthBrowser</h2> +<p> + Class implementing a simple web browser to perform the OAuth2 + authentication process. +</p><h3>Signals</h3> +<dl> +<dt>approvalCodeReceived(str)</dt> +<dd> +emitted to indicate the receipt of the + approval code +</dd> +</dl> +<h3>Derived from</h3> +QDialog +<h3>Class Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> +<table> +<tr> +<td><a href="#E5GoogleMailAuthBrowser.__init__">E5GoogleMailAuthBrowser</a></td> +<td>Constructor</td> +</tr><tr> +<td><a href="#E5GoogleMailAuthBrowser.__pageLoadFinished">__pageLoadFinished</a></td> +<td>Private slot handling the loadFinished signal.</td> +</tr><tr> +<td><a href="#E5GoogleMailAuthBrowser.__titleChanged">__titleChanged</a></td> +<td>Private slot handling changes of the web page title.</td> +</tr><tr> +<td><a href="#E5GoogleMailAuthBrowser.load">load</a></td> +<td>Public method to start the authorization flow by loading the given URL.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="E5GoogleMailAuthBrowser.__init__" ID="E5GoogleMailAuthBrowser.__init__"></a> +<h4>E5GoogleMailAuthBrowser (Constructor)</h4> +<b>E5GoogleMailAuthBrowser</b>(<i>parent=None</i>) +<p> + Constructor +</p><dl> +<dt><i>parent</i> (QWidget)</dt> +<dd> +reference to the parent widget +</dd> +</dl><a NAME="E5GoogleMailAuthBrowser.__pageLoadFinished" ID="E5GoogleMailAuthBrowser.__pageLoadFinished"></a> +<h4>E5GoogleMailAuthBrowser.__pageLoadFinished</h4> +<b>__pageLoadFinished</b>(<i></i>) +<p> + Private slot handling the loadFinished signal. +</p><a NAME="E5GoogleMailAuthBrowser.__titleChanged" ID="E5GoogleMailAuthBrowser.__titleChanged"></a> +<h4>E5GoogleMailAuthBrowser.__titleChanged</h4> +<b>__titleChanged</b>(<i>title</i>) +<p> + Private slot handling changes of the web page title. +</p><dl> +<dt><i>title</i> (str)</dt> +<dd> +web page title +</dd> +</dl><a NAME="E5GoogleMailAuthBrowser.load" ID="E5GoogleMailAuthBrowser.load"></a> +<h4>E5GoogleMailAuthBrowser.load</h4> +<b>load</b>(<i>url</i>) +<p> + Public method to start the authorization flow by loading the given URL. +</p><dl> +<dt><i>url</i> (str or QUrl)</dt> +<dd> +URL to be laoded +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> <hr /><hr /> <a NAME="GoogleMailHelp" ID="GoogleMailHelp"></a> <h2>GoogleMailHelp</h2> @@ -72,105 +328,5 @@ </dd> </dl> <div align="right"><a href="#top">Up</a></div> -<hr /><hr /> -<a NAME="GoogleMailSendMessage" ID="GoogleMailSendMessage"></a> -<h2>GoogleMailSendMessage</h2> -<b>GoogleMailSendMessage</b>(<i>message</i>) -<p> - Module function to send an email message via Google Mail. -</p><dl> -<dt><i>message</i> (email.mime.text.MIMEBase)</dt> -<dd> -email message to be sent -</dd> -</dl><dl> -<dt>Returns:</dt> -<dd> -tuple containing a success flag and a result or error message -</dd> -</dl><dl> -<dt>Return Type:</dt> -<dd> -tuple of (bool, str) -</dd> -</dl> -<div align="right"><a href="#top">Up</a></div> -<hr /><hr /> -<a NAME="_prepareMessage_v2" ID="_prepareMessage_v2"></a> -<h2>_prepareMessage_v2</h2> -<b>_prepareMessage_v2</b>(<i>message</i>) -<p> - Module function to prepare the message for sending (Python2 Variant). -</p><dl> -<dt><i>message</i> (email.mime.text.MIMEBase)</dt> -<dd> -message to be prepared -</dd> -</dl><dl> -<dt>Returns:</dt> -<dd> -prepared message dictionary -</dd> -</dl><dl> -<dt>Return Type:</dt> -<dd> -dict -</dd> -</dl> -<div align="right"><a href="#top">Up</a></div> -<hr /><hr /> -<a NAME="_prepareMessage_v3" ID="_prepareMessage_v3"></a> -<h2>_prepareMessage_v3</h2> -<b>_prepareMessage_v3</b>(<i>message</i>) -<p> - Module function to prepare the message for sending (Python2 Variant). -</p><dl> -<dt><i>message</i> (email.mime.text.MIMEBase)</dt> -<dd> -message to be prepared -</dd> -</dl><dl> -<dt>Returns:</dt> -<dd> -prepared message dictionary -</dd> -</dl><dl> -<dt>Return Type:</dt> -<dd> -dict -</dd> -</dl> -<div align="right"><a href="#top">Up</a></div> -<hr /><hr /> -<a NAME="getCredentials" ID="getCredentials"></a> -<h2>getCredentials</h2> -<b>getCredentials</b>(<i></i>) -<p> - Module function to get the Google credentials. -</p><dl> -<dt>Returns:</dt> -<dd> -Google Mail credentials -</dd> -</dl> -<div align="right"><a href="#top">Up</a></div> -<hr /><hr /> -<a NAME="isClientSecretFileAvailable" ID="isClientSecretFileAvailable"></a> -<h2>isClientSecretFileAvailable</h2> -<b>isClientSecretFileAvailable</b>(<i></i>) -<p> - Module function to check, if the client secret file has been installed. -</p><dl> -<dt>Returns:</dt> -<dd> -flag indicating, that the credentials file is there -</dd> -</dl><dl> -<dt>Return Type:</dt> -<dd> -bool -</dd> -</dl> -<div align="right"><a href="#top">Up</a></div> <hr /> </body></html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Documentation/Source/eric6.E5Network.E5GoogleMailHelpers.html Fri Apr 05 19:06:39 2019 +0200 @@ -0,0 +1,82 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.E5Network.E5GoogleMailHelpers</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body><a NAME="top" ID="top"></a> +<h1>eric6.E5Network.E5GoogleMailHelpers</h1> +<p> +Module implementing some helpers for Google mail. +</p> +<h3>Global Attributes</h3> +<table> +<tr><td>APPLICATION_NAME</td></tr><tr><td>CLIENT_SECRET_FILE</td></tr><tr><td>RequiredPackages</td></tr><tr><td>SCOPES</td></tr><tr><td>TOKEN_FILE</td></tr> +</table> +<h3>Classes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Functions</h3> +<table> +<tr> +<td><a href="#getInstallCommand">getInstallCommand</a></td> +<td>Module function to get the install command to get the Google mail support activated.</td> +</tr><tr> +<td><a href="#isClientSecretFileAvailable">isClientSecretFileAvailable</a></td> +<td>Module function to check, if the client secret file has been installed.</td> +</tr> +</table> +<hr /><hr /> +<a NAME="getInstallCommand" ID="getInstallCommand"></a> +<h2>getInstallCommand</h2> +<b>getInstallCommand</b>(<i></i>) +<p> + Module function to get the install command to get the Google mail support + activated. +</p><dl> +<dt>Returns:</dt> +<dd> +install command +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="isClientSecretFileAvailable" ID="isClientSecretFileAvailable"></a> +<h2>isClientSecretFileAvailable</h2> +<b>isClientSecretFileAvailable</b>(<i></i>) +<p> + Module function to check, if the client secret file has been installed. +</p><dl> +<dt>Returns:</dt> +<dd> +flag indicating, that the credentials file is there +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/Documentation/Source/eric6.MultiProject.MultiProject.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.MultiProject.MultiProject.html Fri Apr 05 19:06:39 2019 +0200 @@ -161,6 +161,9 @@ <td><a href="#MultiProject.closeMultiProject">closeMultiProject</a></td> <td>Public slot to close the current multi project.</td> </tr><tr> +<td><a href="#MultiProject.copyProject">copyProject</a></td> +<td>Public method to copy the project with given UID on disk.</td> +</tr><tr> <td><a href="#MultiProject.deleteProject">deleteProject</a></td> <td>Public slot to delete project(s) from the multi project and disk.</td> </tr><tr> @@ -434,6 +437,16 @@ <dd> flag indicating success (boolean) </dd> +</dl><a NAME="MultiProject.copyProject" ID="MultiProject.copyProject"></a> +<h4>MultiProject.copyProject</h4> +<b>copyProject</b>(<i>uid</i>) +<p> + Public method to copy the project with given UID on disk. +</p><dl> +<dt><i>uid</i> (str)</dt> +<dd> +UID of the project to copy +</dd> </dl><a NAME="MultiProject.deleteProject" ID="MultiProject.deleteProject"></a> <h4>MultiProject.deleteProject</h4> <b>deleteProject</b>(<i>uid</i>)
--- a/Documentation/Source/eric6.MultiProject.MultiProjectBrowser.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.MultiProject.MultiProjectBrowser.html Fri Apr 05 19:06:39 2019 +0200 @@ -72,6 +72,9 @@ <td><a href="#MultiProjectBrowser.__contextMenuRequested">__contextMenuRequested</a></td> <td>Private slot to show the context menu.</td> </tr><tr> +<td><a href="#MultiProjectBrowser.__copyProject">__copyProject</a></td> +<td>Private method to copy the selected project on disk.</td> +</tr><tr> <td><a href="#MultiProjectBrowser.__createPopupMenu">__createPopupMenu</a></td> <td>Private method to create the popup menu.</td> </tr><tr> @@ -171,7 +174,12 @@ <dd> the position of the mouse pointer (QPoint) </dd> -</dl><a NAME="MultiProjectBrowser.__createPopupMenu" ID="MultiProjectBrowser.__createPopupMenu"></a> +</dl><a NAME="MultiProjectBrowser.__copyProject" ID="MultiProjectBrowser.__copyProject"></a> +<h4>MultiProjectBrowser.__copyProject</h4> +<b>__copyProject</b>(<i></i>) +<p> + Private method to copy the selected project on disk. +</p><a NAME="MultiProjectBrowser.__createPopupMenu" ID="MultiProjectBrowser.__createPopupMenu"></a> <h4>MultiProjectBrowser.__createPopupMenu</h4> <b>__createPopupMenu</b>(<i></i>) <p>
--- a/Documentation/Source/eric6.PipInterface.Pip.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.PipInterface.Pip.html Fri Apr 05 19:06:39 2019 +0200 @@ -355,7 +355,7 @@ </dd> </dl><a NAME="Pip.installPackages" ID="Pip.installPackages"></a> <h4>Pip.installPackages</h4> -<b>installPackages</b>(<i>packages, venvName, userSite=False</i>) +<b>installPackages</b>(<i>packages, venvName="", userSite=False, interpreter=""</i>) <p> Public method to install the given list of packages. </p><dl> @@ -369,6 +369,9 @@ <dd> flag indicating an install to the user install directory +</dd><dt><i>interpreter</i> (str)</dt> +<dd> +interpreter to be used for execution </dd> </dl><a NAME="Pip.installPip" ID="Pip.installPip"></a> <h4>Pip.installPip</h4>
--- a/Documentation/Source/eric6.PipInterface.PipPackagesWidget.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.PipInterface.PipPackagesWidget.html Fri Apr 05 19:06:39 2019 +0200 @@ -235,11 +235,14 @@ </table> <a NAME="PipPackagesWidget.__init__" ID="PipPackagesWidget.__init__"></a> <h4>PipPackagesWidget (Constructor)</h4> -<b>PipPackagesWidget</b>(<i>parent=None</i>) +<b>PipPackagesWidget</b>(<i>pip, parent=None</i>) <p> Constructor </p><dl> -<dt><i>parent</i> (QWidget)</dt> +<dt><i>pip</i> (Pip)</dt> +<dd> +reference to the global pip interface +</dd><dt><i>parent</i> (QWidget)</dt> <dd> reference to the parent widget </dd>
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html Fri Apr 05 19:06:39 2019 +0200 @@ -42,6 +42,9 @@ <td><a href="#NameFinder">NameFinder</a></td> <td>Class to extract a name out of a tree of nodes.</td> </tr><tr> +<td><a href="#ReturnVisitor">ReturnVisitor</a></td> +<td>Class implementing a node visitor to check return statements.</td> +</tr><tr> <td><a href="#TextVisitor">TextVisitor</a></td> <td>Class implementing a node visitor for bytes and str instances.</td> </tr> @@ -434,6 +437,9 @@ <td><a href="#MiscellaneousChecker.__checkPrintStatements">__checkPrintStatements</a></td> <td>Private method to check for print statements.</td> </tr><tr> +<td><a href="#MiscellaneousChecker.__checkReturn">__checkReturn</a></td> +<td>Private method to check return statements.</td> +</tr><tr> <td><a href="#MiscellaneousChecker.__checkTuple">__checkTuple</a></td> <td>Private method to check for one element tuples.</td> </tr><tr> @@ -557,6 +563,11 @@ <b>__checkPrintStatements</b>(<i></i>) <p> Private method to check for print statements. +</p><a NAME="MiscellaneousChecker.__checkReturn" ID="MiscellaneousChecker.__checkReturn"></a> +<h4>MiscellaneousChecker.__checkReturn</h4> +<b>__checkReturn</b>(<i></i>) +<p> + Private method to check return statements. </p><a NAME="MiscellaneousChecker.__checkTuple" ID="MiscellaneousChecker.__checkTuple"></a> <h4>MiscellaneousChecker.__checkTuple</h4> <b>__checkTuple</b>(<i></i>) @@ -749,6 +760,306 @@ </dl> <div align="right"><a href="#top">Up</a></div> <hr /><hr /> +<a NAME="ReturnVisitor" ID="ReturnVisitor"></a> +<h2>ReturnVisitor</h2> +<p> + Class implementing a node visitor to check return statements. +</p> +<h3>Derived from</h3> +ast.NodeVisitor +<h3>Class Attributes</h3> +<table> +<tr><td>Assigns</td></tr><tr><td>Refs</td></tr><tr><td>Returns</td></tr> +</table> +<h3>Class Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> +<table> +<tr> +<td><a href="#ReturnVisitor.__init__">ReturnVisitor</a></td> +<td>Constructor</td> +</tr><tr> +<td><a href="#ReturnVisitor.__checkFunction">__checkFunction</a></td> +<td>Private method to check a function definition node.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__checkImplicitReturn">__checkImplicitReturn</a></td> +<td>Private method to check for an implicit return statement.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__checkImplicitReturnValue">__checkImplicitReturnValue</a></td> +<td>Private method to check for implicit return values.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__checkUnnecessaryAssign">__checkUnnecessaryAssign</a></td> +<td>Private method to check for an unnecessary assign statement.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__checkUnnecessaryReturnNone">__checkUnnecessaryReturnNone</a></td> +<td>Private method to check for an unnecessary 'return None' statement.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__hasRefsBeforeNextAssign">__hasRefsBeforeNextAssign</a></td> +<td>Private method to check for references before a following assign statement.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__isNone">__isNone</a></td> +<td>Private method to check, if a node value is None.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__resultExists">__resultExists</a></td> +<td>Private method to check the existance of a return result.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__visitAssignTarget">__visitAssignTarget</a></td> +<td>Private method to handle an assign target node.</td> +</tr><tr> +<td><a href="#ReturnVisitor.__visitWithStack">__visitWithStack</a></td> +<td>Private method to traverse a given function node using a stack.</td> +</tr><tr> +<td><a href="#ReturnVisitor.assigns">assigns</a></td> +<td>Public method to get the Assign nodes.</td> +</tr><tr> +<td><a href="#ReturnVisitor.refs">refs</a></td> +<td>Public method to get the References nodes.</td> +</tr><tr> +<td><a href="#ReturnVisitor.returns">returns</a></td> +<td>Public method to get the Return nodes.</td> +</tr><tr> +<td><a href="#ReturnVisitor.visit_Assign">visit_Assign</a></td> +<td>Public method to handle an assign node.</td> +</tr><tr> +<td><a href="#ReturnVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td> +<td>Public method to handle a function definition.</td> +</tr><tr> +<td><a href="#ReturnVisitor.visit_FunctionDef">visit_FunctionDef</a></td> +<td>Public method to handle a function definition.</td> +</tr><tr> +<td><a href="#ReturnVisitor.visit_Name">visit_Name</a></td> +<td>Public method to handle a name node.</td> +</tr><tr> +<td><a href="#ReturnVisitor.visit_Return">visit_Return</a></td> +<td>Public method to handle a return node.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="ReturnVisitor.__init__" ID="ReturnVisitor.__init__"></a> +<h4>ReturnVisitor (Constructor)</h4> +<b>ReturnVisitor</b>(<i></i>) +<p> + Constructor +</p><a NAME="ReturnVisitor.__checkFunction" ID="ReturnVisitor.__checkFunction"></a> +<h4>ReturnVisitor.__checkFunction</h4> +<b>__checkFunction</b>(<i>node</i>) +<p> + Private method to check a function definition node. +</p><dl> +<dt><i>node</i> (ast.AsyncFunctionDef or ast.FunctionDef)</dt> +<dd> +reference to the node to check +</dd> +</dl><a NAME="ReturnVisitor.__checkImplicitReturn" ID="ReturnVisitor.__checkImplicitReturn"></a> +<h4>ReturnVisitor.__checkImplicitReturn</h4> +<b>__checkImplicitReturn</b>(<i>node</i>) +<p> + Private method to check for an implicit return statement. +</p><dl> +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl><a NAME="ReturnVisitor.__checkImplicitReturnValue" ID="ReturnVisitor.__checkImplicitReturnValue"></a> +<h4>ReturnVisitor.__checkImplicitReturnValue</h4> +<b>__checkImplicitReturnValue</b>(<i></i>) +<p> + Private method to check for implicit return values. +</p><a NAME="ReturnVisitor.__checkUnnecessaryAssign" ID="ReturnVisitor.__checkUnnecessaryAssign"></a> +<h4>ReturnVisitor.__checkUnnecessaryAssign</h4> +<b>__checkUnnecessaryAssign</b>(<i>node</i>) +<p> + Private method to check for an unnecessary assign statement. +</p><dl> +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl><a NAME="ReturnVisitor.__checkUnnecessaryReturnNone" ID="ReturnVisitor.__checkUnnecessaryReturnNone"></a> +<h4>ReturnVisitor.__checkUnnecessaryReturnNone</h4> +<b>__checkUnnecessaryReturnNone</b>(<i></i>) +<p> + Private method to check for an unnecessary 'return None' statement. +</p><a NAME="ReturnVisitor.__hasRefsBeforeNextAssign" ID="ReturnVisitor.__hasRefsBeforeNextAssign"></a> +<h4>ReturnVisitor.__hasRefsBeforeNextAssign</h4> +<b>__hasRefsBeforeNextAssign</b>(<i>varname, returnLineno</i>) +<p> + Private method to check for references before a following assign + statement. +</p><dl> +<dt><i>varname</i> (str)</dt> +<dd> +variable name to check for +</dd><dt><i>returnLineno</i> (int)</dt> +<dd> +line number of the return statement +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating the existence of references +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="ReturnVisitor.__isNone" ID="ReturnVisitor.__isNone"></a> +<h4>ReturnVisitor.__isNone</h4> +<b>__isNone</b>(<i>node</i>) +<p> + Private method to check, if a node value is None. +</p><dl> +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to check +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating the node contains a None value +</dd> +</dl><a NAME="ReturnVisitor.__resultExists" ID="ReturnVisitor.__resultExists"></a> +<h4>ReturnVisitor.__resultExists</h4> +<b>__resultExists</b>(<i></i>) +<p> + Private method to check the existance of a return result. +</p><dl> +<dt>Returns:</dt> +<dd> +flag indicating the existence of a return result +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="ReturnVisitor.__visitAssignTarget" ID="ReturnVisitor.__visitAssignTarget"></a> +<h4>ReturnVisitor.__visitAssignTarget</h4> +<b>__visitAssignTarget</b>(<i>node</i>) +<p> + Private method to handle an assign target node. +</p><dl> +<dt><i>node</i> (ast.AST)</dt> +<dd> +reference to the node to handle +</dd> +</dl><a NAME="ReturnVisitor.__visitWithStack" ID="ReturnVisitor.__visitWithStack"></a> +<h4>ReturnVisitor.__visitWithStack</h4> +<b>__visitWithStack</b>(<i>node</i>) +<p> + Private method to traverse a given function node using a stack. +</p><dl> +<dt><i>node</i> (ast.FunctionDef or ast.AsyncFunctionDef)</dt> +<dd> +AST node to be traversed +</dd> +</dl><a NAME="ReturnVisitor.assigns" ID="ReturnVisitor.assigns"></a> +<h4>ReturnVisitor.assigns</h4> +<b>assigns</b>(<i></i>) +<p> + Public method to get the Assign nodes. +</p><dl> +<dt>Returns:</dt> +<dd> +dictionary containing the node name as key and line number + as value +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl><a NAME="ReturnVisitor.refs" ID="ReturnVisitor.refs"></a> +<h4>ReturnVisitor.refs</h4> +<b>refs</b>(<i></i>) +<p> + Public method to get the References nodes. +</p><dl> +<dt>Returns:</dt> +<dd> +dictionary containing the node name as key and line number + as value +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl><a NAME="ReturnVisitor.returns" ID="ReturnVisitor.returns"></a> +<h4>ReturnVisitor.returns</h4> +<b>returns</b>(<i></i>) +<p> + Public method to get the Return nodes. +</p><dl> +<dt>Returns:</dt> +<dd> +dictionary containing the node name as key and line number + as value +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl><a NAME="ReturnVisitor.visit_Assign" ID="ReturnVisitor.visit_Assign"></a> +<h4>ReturnVisitor.visit_Assign</h4> +<b>visit_Assign</b>(<i>node</i>) +<p> + Public method to handle an assign node. +</p><dl> +<dt><i>node</i> (ast.Assign)</dt> +<dd> +reference to the node to handle +</dd> +</dl><a NAME="ReturnVisitor.visit_AsyncFunctionDef" ID="ReturnVisitor.visit_AsyncFunctionDef"></a> +<h4>ReturnVisitor.visit_AsyncFunctionDef</h4> +<b>visit_AsyncFunctionDef</b>(<i>node</i>) +<p> + Public method to handle a function definition. +</p><dl> +<dt><i>node</i> (ast.AsyncFunctionDef)</dt> +<dd> +reference to the node to handle +</dd> +</dl><a NAME="ReturnVisitor.visit_FunctionDef" ID="ReturnVisitor.visit_FunctionDef"></a> +<h4>ReturnVisitor.visit_FunctionDef</h4> +<b>visit_FunctionDef</b>(<i>node</i>) +<p> + Public method to handle a function definition. +</p><dl> +<dt><i>node</i> (ast.FunctionDef)</dt> +<dd> +reference to the node to handle +</dd> +</dl><a NAME="ReturnVisitor.visit_Name" ID="ReturnVisitor.visit_Name"></a> +<h4>ReturnVisitor.visit_Name</h4> +<b>visit_Name</b>(<i>node</i>) +<p> + Public method to handle a name node. +</p><dl> +<dt><i>node</i> (ast.Name)</dt> +<dd> +reference to the node to handle +</dd> +</dl><a NAME="ReturnVisitor.visit_Return" ID="ReturnVisitor.visit_Return"></a> +<h4>ReturnVisitor.visit_Return</h4> +<b>visit_Return</b>(<i>node</i>) +<p> + Public method to handle a return node. +</p><dl> +<dt><i>node</i> (ast.Return)</dt> +<dd> +reference to the node to handle +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> <a NAME="TextVisitor" ID="TextVisitor"></a> <h2>TextVisitor</h2> <p>
--- a/Documentation/Source/eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Preferences.ConfigurationPages.EditorHighlightingStylesPage.html Fri Apr 05 19:06:39 2019 +0200 @@ -51,7 +51,7 @@ ConfigurationPageBase, Ui_EditorHighlightingStylesPage <h3>Class Attributes</h3> <table> -<tr><td>FAMILYANDSIZE</td></tr><tr><td>FAMILYONLY</td></tr><tr><td>FONT</td></tr><tr><td>SIZEONLY</td></tr> +<tr><td>FAMILYANDSIZE</td></tr><tr><td>FAMILYONLY</td></tr><tr><td>FONT</td></tr><tr><td>SIZEONLY</td></tr><tr><td>StyleRole</td></tr><tr><td>SubstyleRole</td></tr> </table> <h3>Class Methods</h3> <table> @@ -69,6 +69,9 @@ <td><a href="#EditorHighlightingStylesPage.__changeFont">__changeFont</a></td> <td>Private slot to change the highlighter font.</td> </tr><tr> +<td><a href="#EditorHighlightingStylesPage.__currentStyles">__currentStyles</a></td> +<td>Private method to get the styles of the current item.</td> +</tr><tr> <td><a href="#EditorHighlightingStylesPage.__exportStyles">__exportStyles</a></td> <td>Private method to export the styles of the given lexers.</td> </tr><tr> @@ -84,6 +87,15 @@ <td><a href="#EditorHighlightingStylesPage.__styleAllItems">__styleAllItems</a></td> <td>Private method to style all items of the style element list.</td> </tr><tr> +<td><a href="#EditorHighlightingStylesPage.__styleOneItem">__styleOneItem</a></td> +<td>Private method to style one item of the style element list.</td> +</tr><tr> +<td><a href="#EditorHighlightingStylesPage.__stylesForItem">__stylesForItem</a></td> +<td>Private method to get the style and sub-style number of the given item.</td> +</tr><tr> +<td><a href="#EditorHighlightingStylesPage.on_addSubstyleButton_clicked">on_addSubstyleButton_clicked</a></td> +<td>Private slot to add a new sub-style.</td> +</tr><tr> <td><a href="#EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked">on_allBackgroundColoursButton_clicked</a></td> <td>Private method used to select the background colour of all styles of a selected lexer.</td> </tr><tr> @@ -96,10 +108,22 @@ <td><a href="#EditorHighlightingStylesPage.on_backgroundButton_clicked">on_backgroundButton_clicked</a></td> <td>Private method used to select the background colour of the selected style and lexer.</td> </tr><tr> +<td><a href="#EditorHighlightingStylesPage.on_copySubstyleButton_clicked">on_copySubstyleButton_clicked</a></td> +<td>Private slot to copy the selected sub-style.</td> +</tr><tr> <td><a href="#EditorHighlightingStylesPage.on_defaultButton_clicked">on_defaultButton_clicked</a></td> <td>Private method to set the current style to its default values.</td> </tr><tr> -<td><a href="#EditorHighlightingStylesPage.on_eolfillCheckBox_toggled">on_eolfillCheckBox_toggled</a></td> +<td><a href="#EditorHighlightingStylesPage.on_defaultSubstylesButton_clicked">on_defaultSubstylesButton_clicked</a></td> +<td>Private slot to reset all substyles to default values.</td> +</tr><tr> +<td><a href="#EditorHighlightingStylesPage.on_deleteSubstyleButton_clicked">on_deleteSubstyleButton_clicked</a></td> +<td>Private slot to delete the selected sub-style.</td> +</tr><tr> +<td><a href="#EditorHighlightingStylesPage.on_editSubstyleButton_clicked">on_editSubstyleButton_clicked</a></td> +<td>Private slot to edit the selected sub-style entry.</td> +</tr><tr> +<td><a href="#EditorHighlightingStylesPage.on_eolfillCheckBox_clicked">on_eolfillCheckBox_clicked</a></td> <td>Private method used to set the eolfill for the selected style and lexer.</td> </tr><tr> <td><a href="#EditorHighlightingStylesPage.on_exportAllButton_clicked">on_exportAllButton_clicked</a></td> @@ -120,8 +144,8 @@ <td><a href="#EditorHighlightingStylesPage.on_lexerLanguageComboBox_activated">on_lexerLanguageComboBox_activated</a></td> <td>Private slot to fill the style combo of the source page.</td> </tr><tr> -<td><a href="#EditorHighlightingStylesPage.on_styleElementList_currentRowChanged">on_styleElementList_currentRowChanged</a></td> -<td>Private method to set up the style element part of the source page.</td> +<td><a href="#EditorHighlightingStylesPage.on_styleElementList_currentItemChanged">on_styleElementList_currentItemChanged</a></td> +<td>Private method to handle a change of the current row.</td> </tr><tr> <td><a href="#EditorHighlightingStylesPage.save">save</a></td> <td>Public slot to save the Editor Highlighting Styles configuration.</td> @@ -180,6 +204,21 @@ <dd> flag indicating to set the font size only (boolean </dd> +</dl><a NAME="EditorHighlightingStylesPage.__currentStyles" ID="EditorHighlightingStylesPage.__currentStyles"></a> +<h4>EditorHighlightingStylesPage.__currentStyles</h4> +<b>__currentStyles</b>(<i></i>) +<p> + Private method to get the styles of the current item. +</p><dl> +<dt>Returns:</dt> +<dd> +tuple containing the style and sub-style numbers +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +tuple of (int, int) +</dd> </dl><a NAME="EditorHighlightingStylesPage.__exportStyles" ID="EditorHighlightingStylesPage.__exportStyles"></a> <h4>EditorHighlightingStylesPage.__exportStyles</h4> <b>__exportStyles</b>(<i>lexers</i>) @@ -213,19 +252,63 @@ </dd> </dl><a NAME="EditorHighlightingStylesPage.__setToDefault" ID="EditorHighlightingStylesPage.__setToDefault"></a> <h4>EditorHighlightingStylesPage.__setToDefault</h4> -<b>__setToDefault</b>(<i>style</i>) +<b>__setToDefault</b>(<i>style, substyle</i>) <p> Private method to set a specific style to its default values. </p><dl> -<dt><i>style</i></dt> +<dt><i>style</i> (int)</dt> <dd> -style to be reset (integer) +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number </dd> </dl><a NAME="EditorHighlightingStylesPage.__styleAllItems" ID="EditorHighlightingStylesPage.__styleAllItems"></a> <h4>EditorHighlightingStylesPage.__styleAllItems</h4> <b>__styleAllItems</b>(<i></i>) <p> Private method to style all items of the style element list. +</p><a NAME="EditorHighlightingStylesPage.__styleOneItem" ID="EditorHighlightingStylesPage.__styleOneItem"></a> +<h4>EditorHighlightingStylesPage.__styleOneItem</h4> +<b>__styleOneItem</b>(<i>item, style, substyle</i>) +<p> + Private method to style one item of the style element list. +</p><dl> +<dt><i>item</i> (QTreeWidgetItem)</dt> +<dd> +reference to the item to be styled +</dd><dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><a NAME="EditorHighlightingStylesPage.__stylesForItem" ID="EditorHighlightingStylesPage.__stylesForItem"></a> +<h4>EditorHighlightingStylesPage.__stylesForItem</h4> +<b>__stylesForItem</b>(<i>itm</i>) +<p> + Private method to get the style and sub-style number of the given item. +</p><dl> +<dt><i>itm</i> (QTreeWidgetItem)</dt> +<dd> +reference to the item to extract the styles from +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +tuple containing the style and sub-style numbers +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +tuple of (int, int) +</dd> +</dl><a NAME="EditorHighlightingStylesPage.on_addSubstyleButton_clicked" ID="EditorHighlightingStylesPage.on_addSubstyleButton_clicked"></a> +<h4>EditorHighlightingStylesPage.on_addSubstyleButton_clicked</h4> +<b>on_addSubstyleButton_clicked</b>(<i></i>) +<p> + Private slot to add a new sub-style. </p><a NAME="EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked" ID="EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked"></a> <h4>EditorHighlightingStylesPage.on_allBackgroundColoursButton_clicked</h4> <b>on_allBackgroundColoursButton_clicked</b>(<i></i>) @@ -249,14 +332,34 @@ <p> Private method used to select the background colour of the selected style and lexer. +</p><a NAME="EditorHighlightingStylesPage.on_copySubstyleButton_clicked" ID="EditorHighlightingStylesPage.on_copySubstyleButton_clicked"></a> +<h4>EditorHighlightingStylesPage.on_copySubstyleButton_clicked</h4> +<b>on_copySubstyleButton_clicked</b>(<i></i>) +<p> + Private slot to copy the selected sub-style. </p><a NAME="EditorHighlightingStylesPage.on_defaultButton_clicked" ID="EditorHighlightingStylesPage.on_defaultButton_clicked"></a> <h4>EditorHighlightingStylesPage.on_defaultButton_clicked</h4> <b>on_defaultButton_clicked</b>(<i></i>) <p> Private method to set the current style to its default values. -</p><a NAME="EditorHighlightingStylesPage.on_eolfillCheckBox_toggled" ID="EditorHighlightingStylesPage.on_eolfillCheckBox_toggled"></a> -<h4>EditorHighlightingStylesPage.on_eolfillCheckBox_toggled</h4> -<b>on_eolfillCheckBox_toggled</b>(<i>on</i>) +</p><a NAME="EditorHighlightingStylesPage.on_defaultSubstylesButton_clicked" ID="EditorHighlightingStylesPage.on_defaultSubstylesButton_clicked"></a> +<h4>EditorHighlightingStylesPage.on_defaultSubstylesButton_clicked</h4> +<b>on_defaultSubstylesButton_clicked</b>(<i></i>) +<p> + Private slot to reset all substyles to default values. +</p><a NAME="EditorHighlightingStylesPage.on_deleteSubstyleButton_clicked" ID="EditorHighlightingStylesPage.on_deleteSubstyleButton_clicked"></a> +<h4>EditorHighlightingStylesPage.on_deleteSubstyleButton_clicked</h4> +<b>on_deleteSubstyleButton_clicked</b>(<i></i>) +<p> + Private slot to delete the selected sub-style. +</p><a NAME="EditorHighlightingStylesPage.on_editSubstyleButton_clicked" ID="EditorHighlightingStylesPage.on_editSubstyleButton_clicked"></a> +<h4>EditorHighlightingStylesPage.on_editSubstyleButton_clicked</h4> +<b>on_editSubstyleButton_clicked</b>(<i></i>) +<p> + Private slot to edit the selected sub-style entry. +</p><a NAME="EditorHighlightingStylesPage.on_eolfillCheckBox_clicked" ID="EditorHighlightingStylesPage.on_eolfillCheckBox_clicked"></a> +<h4>EditorHighlightingStylesPage.on_eolfillCheckBox_clicked</h4> +<b>on_eolfillCheckBox_clicked</b>(<i>on</i>) <p> Private method used to set the eolfill for the selected style and lexer. @@ -301,15 +404,18 @@ <dd> The lexer language (string) </dd> -</dl><a NAME="EditorHighlightingStylesPage.on_styleElementList_currentRowChanged" ID="EditorHighlightingStylesPage.on_styleElementList_currentRowChanged"></a> -<h4>EditorHighlightingStylesPage.on_styleElementList_currentRowChanged</h4> -<b>on_styleElementList_currentRowChanged</b>(<i>index</i>) +</dl><a NAME="EditorHighlightingStylesPage.on_styleElementList_currentItemChanged" ID="EditorHighlightingStylesPage.on_styleElementList_currentItemChanged"></a> +<h4>EditorHighlightingStylesPage.on_styleElementList_currentItemChanged</h4> +<b>on_styleElementList_currentItemChanged</b>(<i>current, previous</i>) <p> - Private method to set up the style element part of the source page. + Private method to handle a change of the current row. </p><dl> -<dt><i>index</i></dt> +<dt><i>current</i> (QTreeWidgetItem)</dt> <dd> -the style index. +reference to the current item +</dd><dt><i>previous</i> (QTreeWidgetItem)</dt> +<dd> +reference to the previous item </dd> </dl><a NAME="EditorHighlightingStylesPage.save" ID="EditorHighlightingStylesPage.save"></a> <h4>EditorHighlightingStylesPage.save</h4> @@ -324,28 +430,36 @@ </p><dl> <dt>Returns:</dt> <dd> -array containing the index of the selected lexer language - (integer) and the index of the selected lexer entry (integer) +list containing the index of the selected lexer language + and a tuple containing the index of the parent selected lexer + entry and the index of the selected entry +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +list of int and tuple of (int, int) </dd> </dl><a NAME="EditorHighlightingStylesPage.setFont" ID="EditorHighlightingStylesPage.setFont"></a> <h4>EditorHighlightingStylesPage.setFont</h4> -<b>setFont</b>(<i>style, familyOnly, sizeOnly</i>) +<b>setFont</b>(<i>style, substyle, familyOnly, sizeOnly</i>) <p> Local function to set the font. </p><dl> -<dt><i>font</i></dt> +<dt><i>font</i> (QFont)</dt> +<dd> +font to be set +</dd><dt><i>style</i> (int)</dt> <dd> -font to be set (QFont) -</dd><dt><i>style</i></dt> +style number +</dd><dt><i>substyle</i> (int)</dt> <dd> -style to set the font for (integer) -</dd><dt><i>familyOnly</i></dt> +sub-style number +</dd><dt><i>familyOnly</i> (bool)</dt> <dd> flag indicating to set the font family only - (boolean) -</dd><dt><i>sizeOnly</i></dt> +</dd><dt><i>sizeOnly</i> (bool)</dt> <dd> -flag indicating to set the font size only (boolean +flag indicating to set the font size only </dd> </dl><a NAME="EditorHighlightingStylesPage.setSampleFont" ID="EditorHighlightingStylesPage.setSampleFont"></a> <h4>EditorHighlightingStylesPage.setSampleFont</h4>
--- a/Documentation/Source/eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Preferences.ConfigurationPages.EditorKeywordsPage.html Fri Apr 05 19:06:39 2019 +0200 @@ -51,7 +51,7 @@ ConfigurationPageBase, Ui_EditorKeywordsPage <h3>Class Attributes</h3> <table> -<tr><td>None</td></tr> +<tr><td>MaxKeywordSets</td></tr> </table> <h3>Class Methods</h3> <table> @@ -63,6 +63,12 @@ <td><a href="#EditorKeywordsPage.__init__">EditorKeywordsPage</a></td> <td>Constructor</td> </tr><tr> +<td><a href="#EditorKeywordsPage.on_allDefaultButton_clicked">on_allDefaultButton_clicked</a></td> +<td>Private slot to set all keyword sets of the current language to default values.</td> +</tr><tr> +<td><a href="#EditorKeywordsPage.on_defaultButton_clicked">on_defaultButton_clicked</a></td> +<td>Private slot to set the current keyword set to default values.</td> +</tr><tr> <td><a href="#EditorKeywordsPage.on_languageCombo_activated">on_languageCombo_activated</a></td> <td>Private slot to fill the keywords edit.</td> </tr><tr> @@ -82,15 +88,26 @@ <b>EditorKeywordsPage</b>(<i></i>) <p> Constructor +</p><a NAME="EditorKeywordsPage.on_allDefaultButton_clicked" ID="EditorKeywordsPage.on_allDefaultButton_clicked"></a> +<h4>EditorKeywordsPage.on_allDefaultButton_clicked</h4> +<b>on_allDefaultButton_clicked</b>(<i></i>) +<p> + Private slot to set all keyword sets of the current language to default + values. +</p><a NAME="EditorKeywordsPage.on_defaultButton_clicked" ID="EditorKeywordsPage.on_defaultButton_clicked"></a> +<h4>EditorKeywordsPage.on_defaultButton_clicked</h4> +<b>on_defaultButton_clicked</b>(<i></i>) +<p> + Private slot to set the current keyword set to default values. </p><a NAME="EditorKeywordsPage.on_languageCombo_activated" ID="EditorKeywordsPage.on_languageCombo_activated"></a> <h4>EditorKeywordsPage.on_languageCombo_activated</h4> <b>on_languageCombo_activated</b>(<i>language</i>) <p> Private slot to fill the keywords edit. </p><dl> -<dt><i>language</i></dt> +<dt><i>language</i> (str)</dt> <dd> -selected language (string) +selected language </dd> </dl><a NAME="EditorKeywordsPage.on_setSpinBox_valueChanged" ID="EditorKeywordsPage.on_setSpinBox_valueChanged"></a> <h4>EditorKeywordsPage.on_setSpinBox_valueChanged</h4> @@ -98,9 +115,9 @@ <p> Private slot to fill the keywords edit. </p><dl> -<dt><i>kwSet</i></dt> +<dt><i>kwSet</i> (int)</dt> <dd> -number of the selected keyword set (integer) +number of the selected keyword set </dd> </dl><a NAME="EditorKeywordsPage.save" ID="EditorKeywordsPage.save"></a> <h4>EditorKeywordsPage.save</h4> @@ -116,14 +133,19 @@ <p> Module function to create the configuration page. </p><dl> -<dt><i>dlg</i></dt> +<dt><i>dlg</i> (ConfigurationWidget)</dt> <dd> reference to the configuration dialog </dd> </dl><dl> <dt>Returns:</dt> <dd> -reference to the instantiated page (ConfigurationPageBase) +reference to the instantiated page +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +ConfigurationPageBase </dd> </dl> <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.Preferences.ConfigurationPages.EmailPage.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Preferences.ConfigurationPages.EmailPage.html Fri Apr 05 19:06:39 2019 +0200 @@ -63,15 +63,24 @@ <td><a href="#EmailPage.__init__">EmailPage</a></td> <td>Constructor</td> </tr><tr> +<td><a href="#EmailPage.__checkGoogleMail">__checkGoogleMail</a></td> +<td>Private method to check the Google Mail availability and set the widgets accordingly.</td> +</tr><tr> <td><a href="#EmailPage.__updatePortSpin">__updatePortSpin</a></td> <td>Private slot to set the value of the port spin box depending upon the selected encryption method.</td> </tr><tr> <td><a href="#EmailPage.__updateTestButton">__updateTestButton</a></td> <td>Private slot to update the enabled state of the test button.</td> </tr><tr> +<td><a href="#EmailPage.on_googleCheckAgainButton_clicked">on_googleCheckAgainButton_clicked</a></td> +<td>Private slot to check again the availability of Google Mail.</td> +</tr><tr> <td><a href="#EmailPage.on_googleHelpButton_clicked">on_googleHelpButton_clicked</a></td> <td>Private slot to show some help text "how to turn on the Gmail API".</td> </tr><tr> +<td><a href="#EmailPage.on_googleInstallButton_clicked">on_googleInstallButton_clicked</a></td> +<td>Private slot to install the required packages for use of Google Mail.</td> +</tr><tr> <td><a href="#EmailPage.on_mailAuthenticationGroup_toggled">on_mailAuthenticationGroup_toggled</a></td> <td>Private slot to handle a change of the state of the authentication group.</td> </tr><tr> @@ -109,6 +118,12 @@ <b>EmailPage</b>(<i></i>) <p> Constructor +</p><a NAME="EmailPage.__checkGoogleMail" ID="EmailPage.__checkGoogleMail"></a> +<h4>EmailPage.__checkGoogleMail</h4> +<b>__checkGoogleMail</b>(<i></i>) +<p> + Private method to check the Google Mail availability and set the + widgets accordingly. </p><a NAME="EmailPage.__updatePortSpin" ID="EmailPage.__updatePortSpin"></a> <h4>EmailPage.__updatePortSpin</h4> <b>__updatePortSpin</b>(<i></i>) @@ -120,11 +135,21 @@ <b>__updateTestButton</b>(<i></i>) <p> Private slot to update the enabled state of the test button. +</p><a NAME="EmailPage.on_googleCheckAgainButton_clicked" ID="EmailPage.on_googleCheckAgainButton_clicked"></a> +<h4>EmailPage.on_googleCheckAgainButton_clicked</h4> +<b>on_googleCheckAgainButton_clicked</b>(<i></i>) +<p> + Private slot to check again the availability of Google Mail. </p><a NAME="EmailPage.on_googleHelpButton_clicked" ID="EmailPage.on_googleHelpButton_clicked"></a> <h4>EmailPage.on_googleHelpButton_clicked</h4> <b>on_googleHelpButton_clicked</b>(<i></i>) <p> Private slot to show some help text "how to turn on the Gmail API". +</p><a NAME="EmailPage.on_googleInstallButton_clicked" ID="EmailPage.on_googleInstallButton_clicked"></a> +<h4>EmailPage.on_googleInstallButton_clicked</h4> +<b>on_googleInstallButton_clicked</b>(<i></i>) +<p> + Private slot to install the required packages for use of Google Mail. </p><a NAME="EmailPage.on_mailAuthenticationGroup_toggled" ID="EmailPage.on_mailAuthenticationGroup_toggled"></a> <h4>EmailPage.on_mailAuthenticationGroup_toggled</h4> <b>on_mailAuthenticationGroup_toggled</b>(<i>checked</i>)
--- a/Documentation/Source/eric6.Preferences.PreferencesLexer.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Preferences.PreferencesLexer.html Fri Apr 05 19:06:39 2019 +0200 @@ -21,7 +21,7 @@ <body><a NAME="top" ID="top"></a> <h1>eric6.Preferences.PreferencesLexer</h1> <p> -Module implementing a special QextScintilla lexer to handle the preferences. +Module implementing a special QScintilla lexer to handle the preferences. </p> <h3>Global Attributes</h3> <table> @@ -31,7 +31,7 @@ <table> <tr> <td><a href="#PreferencesLexer">PreferencesLexer</a></td> -<td>Subclass of QsciLexer to implement preferences specific lexer methods.</td> +<td>Class implementing a Lexer facade for the highlighting styles configuration.</td> </tr><tr> <td><a href="#PreferencesLexerError">PreferencesLexerError</a></td> <td>Class defining a special error for the PreferencesLexer class.</td> @@ -48,10 +48,11 @@ <a NAME="PreferencesLexer" ID="PreferencesLexer"></a> <h2>PreferencesLexer</h2> <p> - Subclass of QsciLexer to implement preferences specific lexer methods. + Class implementing a Lexer facade for the highlighting styles + configuration. </p> <h3>Derived from</h3> -QsciLexer +QObject <h3>Class Attributes</h3> <table> <tr><td>None</td></tr> @@ -66,14 +67,20 @@ <td><a href="#PreferencesLexer.__init__">PreferencesLexer</a></td> <td>Constructor</td> </tr><tr> -<td><a href="#PreferencesLexer.color">color</a></td> -<td>Public method to get the colour of a style.</td> +<td><a href="#PreferencesLexer.addSubstyle">addSubstyle</a></td> +<td>Public method to add an empty sub-style to a given style.</td> </tr><tr> -<td><a href="#PreferencesLexer.defaulEolFill">defaulEolFill</a></td> -<td>Public method to get the default eolFill flag for a style.</td> +<td><a href="#PreferencesLexer.color">color</a></td> +<td>Public method to get the color of a style.</td> </tr><tr> <td><a href="#PreferencesLexer.defaultColor">defaultColor</a></td> -<td>Public method to get the default colour of a style.</td> +<td>Public method to get the default color of a style.</td> +</tr><tr> +<td><a href="#PreferencesLexer.defaultDescription">defaultDescription</a></td> +<td>Public method to get the default descriptive string for a style.</td> +</tr><tr> +<td><a href="#PreferencesLexer.defaultEolFill">defaultEolFill</a></td> +<td>Public method to get the default eolFill flag for a style.</td> </tr><tr> <td><a href="#PreferencesLexer.defaultFont">defaultFont</a></td> <td>Public method to get the default font for a style.</td> @@ -81,6 +88,12 @@ <td><a href="#PreferencesLexer.defaultPaper">defaultPaper</a></td> <td>Public method to get the default background for a style.</td> </tr><tr> +<td><a href="#PreferencesLexer.defaultWords">defaultWords</a></td> +<td>Public method to get the default list of words for a style.</td> +</tr><tr> +<td><a href="#PreferencesLexer.delSubstyle">delSubstyle</a></td> +<td>Public method to delete a given sub-style definition.</td> +</tr><tr> <td><a href="#PreferencesLexer.description">description</a></td> <td>Public method to get a descriptive string for a style.</td> </tr><tr> @@ -90,14 +103,32 @@ <td><a href="#PreferencesLexer.font">font</a></td> <td>Public method to get the font for a style.</td> </tr><tr> +<td><a href="#PreferencesLexer.getStyles">getStyles</a></td> +<td>Public method to get a list of all supported styles.</td> +</tr><tr> +<td><a href="#PreferencesLexer.getSubStyles">getSubStyles</a></td> +<td>Public method to get a list of all sub-styles of a style.</td> +</tr><tr> +<td><a href="#PreferencesLexer.hasStyle">hasStyle</a></td> +<td>Public method to test for a given style definition.</td> +</tr><tr> +<td><a href="#PreferencesLexer.isBaseStyle">isBaseStyle</a></td> +<td>Public method to test, if a given style may have sub-styles.</td> +</tr><tr> <td><a href="#PreferencesLexer.language">language</a></td> <td>Public method to get the lexers programming language.</td> </tr><tr> +<td><a href="#PreferencesLexer.loadDefaultSubStyles">loadDefaultSubStyles</a></td> +<td>Public method to load the default sub-styles for a given base style.</td> +</tr><tr> <td><a href="#PreferencesLexer.paper">paper</a></td> <td>Public method to get the background for a style.</td> </tr><tr> <td><a href="#PreferencesLexer.setColor">setColor</a></td> -<td>Public method to set the colour for a style.</td> +<td>Public method to set the color for a style.</td> +</tr><tr> +<td><a href="#PreferencesLexer.setDescription">setDescription</a></td> +<td>Public method to set a descriptive string for a style.</td> </tr><tr> <td><a href="#PreferencesLexer.setEolFill">setEolFill</a></td> <td>Public method to set the eolFill flag for a style.</td> @@ -107,6 +138,15 @@ </tr><tr> <td><a href="#PreferencesLexer.setPaper">setPaper</a></td> <td>Public method to set the background for a style.</td> +</tr><tr> +<td><a href="#PreferencesLexer.setWords">setWords</a></td> +<td>Public method to set the list of words for a style.</td> +</tr><tr> +<td><a href="#PreferencesLexer.words">words</a></td> +<td>Public method to get the list of words for a style.</td> +</tr><tr> +<td><a href="#PreferencesLexer.writeSettings">writeSettings</a></td> +<td>Public method to write the lexer settings.</td> </tr> </table> <h3>Static Methods</h3> @@ -119,12 +159,12 @@ <p> Constructor </p><dl> -<dt><i>language</i></dt> +<dt><i>language</i> (str)</dt> <dd> -The lexer language. (string) +language of the lexer </dd><dt><i>parent</i></dt> <dd> -The parent widget of this lexer. (QextScintilla) +parent widget of this lexer (QWidget) </dd> </dl><dl> <dt>Raises <b>PreferencesLexerLanguageError</b>:</dt> @@ -132,125 +172,358 @@ raised to indicate an invalid lexer language </dd> +</dl><a NAME="PreferencesLexer.addSubstyle" ID="PreferencesLexer.addSubstyle"></a> +<h4>PreferencesLexer.addSubstyle</h4> +<b>addSubstyle</b>(<i>style</i>) +<p> + Public method to add an empty sub-style to a given style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +allocated sub-style number or -1 to indicate an error +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +int +</dd> </dl><a NAME="PreferencesLexer.color" ID="PreferencesLexer.color"></a> <h4>PreferencesLexer.color</h4> -<b>color</b>(<i>style</i>) +<b>color</b>(<i>style, substyle=-1</i>) <p> - Public method to get the colour of a style. + Public method to get the color of a style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +color +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QColor +</dd> +</dl><a NAME="PreferencesLexer.defaultColor" ID="PreferencesLexer.defaultColor"></a> +<h4>PreferencesLexer.defaultColor</h4> +<b>defaultColor</b>(<i>style, substyle=-1</i>) +<p> + Public method to get the default color of a style. </p><dl> -<dt><i>style</i></dt> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +default color +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QColor +</dd> +</dl><a NAME="PreferencesLexer.defaultDescription" ID="PreferencesLexer.defaultDescription"></a> +<h4>PreferencesLexer.defaultDescription</h4> +<b>defaultDescription</b>(<i>style, substyle=-1</i>) +<p> + Public method to get the default descriptive string for a style. +</p><dl> +<dt><i>style</i> (int)</dt> <dd> -the style number (int) +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +default description of the style +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="PreferencesLexer.defaultEolFill" ID="PreferencesLexer.defaultEolFill"></a> +<h4>PreferencesLexer.defaultEolFill</h4> +<b>defaultEolFill</b>(<i>style, substyle=-1</i>) +<p> + Public method to get the default eolFill flag for a style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number </dd> </dl><dl> <dt>Returns:</dt> <dd> -colour +default eolFill flag +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="PreferencesLexer.defaultFont" ID="PreferencesLexer.defaultFont"></a> +<h4>PreferencesLexer.defaultFont</h4> +<b>defaultFont</b>(<i>style, substyle=-1</i>) +<p> + Public method to get the default font for a style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +default font </dd> -</dl><a NAME="PreferencesLexer.defaulEolFill" ID="PreferencesLexer.defaulEolFill"></a> -<h4>PreferencesLexer.defaulEolFill</h4> -<b>defaulEolFill</b>(<i>style</i>) +</dl><dl> +<dt>Return Type:</dt> +<dd> +QFont +</dd> +</dl><a NAME="PreferencesLexer.defaultPaper" ID="PreferencesLexer.defaultPaper"></a> +<h4>PreferencesLexer.defaultPaper</h4> +<b>defaultPaper</b>(<i>style, substyle=-1</i>) +<p> + Public method to get the default background for a style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +default background color +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QColor +</dd> +</dl><a NAME="PreferencesLexer.defaultWords" ID="PreferencesLexer.defaultWords"></a> +<h4>PreferencesLexer.defaultWords</h4> +<b>defaultWords</b>(<i>style, substyle=-1</i>) <p> - Public method to get the default eolFill flag for a style. + Public method to get the default list of words for a style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +whitespace separated default list of words +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="PreferencesLexer.delSubstyle" ID="PreferencesLexer.delSubstyle"></a> +<h4>PreferencesLexer.delSubstyle</h4> +<b>delSubstyle</b>(<i>style, substyle</i>) +<p> + Public method to delete a given sub-style definition. </p><dl> -<dt><i>style</i></dt> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating successful deletion +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="PreferencesLexer.description" ID="PreferencesLexer.description"></a> +<h4>PreferencesLexer.description</h4> +<b>description</b>(<i>style, substyle=-1</i>) +<p> + Public method to get a descriptive string for a style. +</p><dl> +<dt><i>style</i> (int)</dt> <dd> -the style number (int) +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +description of the style +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="PreferencesLexer.eolFill" ID="PreferencesLexer.eolFill"></a> +<h4>PreferencesLexer.eolFill</h4> +<b>eolFill</b>(<i>style, substyle=-1</i>) +<p> + Public method to get the eolFill flag for a style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number </dd> </dl><dl> <dt>Returns:</dt> <dd> eolFill flag </dd> -</dl><a NAME="PreferencesLexer.defaultColor" ID="PreferencesLexer.defaultColor"></a> -<h4>PreferencesLexer.defaultColor</h4> -<b>defaultColor</b>(<i>style</i>) -<p> - Public method to get the default colour of a style. -</p><dl> -<dt><i>style</i></dt> +</dl><dl> +<dt>Return Type:</dt> <dd> -the style number (int) +bool </dd> -</dl><dl> -<dt>Returns:</dt> +</dl><a NAME="PreferencesLexer.font" ID="PreferencesLexer.font"></a> +<h4>PreferencesLexer.font</h4> +<b>font</b>(<i>style, substyle=-1</i>) +<p> + Public method to get the font for a style. +</p><dl> +<dt><i>style</i> (int)</dt> <dd> -colour -</dd> -</dl><a NAME="PreferencesLexer.defaultFont" ID="PreferencesLexer.defaultFont"></a> -<h4>PreferencesLexer.defaultFont</h4> -<b>defaultFont</b>(<i>style</i>) -<p> - Public method to get the default font for a style. -</p><dl> -<dt><i>style</i></dt> +style number +</dd><dt><i>substyle</i> (int)</dt> <dd> -the style number (int) +sub-style number </dd> </dl><dl> <dt>Returns:</dt> <dd> font </dd> -</dl><a NAME="PreferencesLexer.defaultPaper" ID="PreferencesLexer.defaultPaper"></a> -<h4>PreferencesLexer.defaultPaper</h4> -<b>defaultPaper</b>(<i>style</i>) +</dl><dl> +<dt>Return Type:</dt> +<dd> +QFont +</dd> +</dl><a NAME="PreferencesLexer.getStyles" ID="PreferencesLexer.getStyles"></a> +<h4>PreferencesLexer.getStyles</h4> +<b>getStyles</b>(<i></i>) <p> - Public method to get the default background for a style. + Public method to get a list of all supported styles. </p><dl> -<dt><i>style</i></dt> +<dt>Returns:</dt> <dd> -the style number (int) +list of tuples each containing the description of the style, + style number and sub-style number (or -1 for no sub-style) </dd> </dl><dl> -<dt>Returns:</dt> +<dt>Return Type:</dt> <dd> -colour +list of tuples of (str, int, int) </dd> -</dl><a NAME="PreferencesLexer.description" ID="PreferencesLexer.description"></a> -<h4>PreferencesLexer.description</h4> -<b>description</b>(<i>style</i>) +</dl><a NAME="PreferencesLexer.getSubStyles" ID="PreferencesLexer.getSubStyles"></a> +<h4>PreferencesLexer.getSubStyles</h4> +<b>getSubStyles</b>(<i>style</i>) <p> - Public method to get a descriptive string for a style. + Public method to get a list of all sub-styles of a style. </p><dl> -<dt><i>style</i></dt> +<dt><i>style</i> (int)</dt> <dd> -the style number (int) +style number </dd> </dl><dl> <dt>Returns:</dt> <dd> -description of the style (string) +list of tuples each containing the description of the style, + style number and sub-style number (or -1 for no sub-style) </dd> -</dl><a NAME="PreferencesLexer.eolFill" ID="PreferencesLexer.eolFill"></a> -<h4>PreferencesLexer.eolFill</h4> -<b>eolFill</b>(<i>style</i>) +</dl><dl> +<dt>Return Type:</dt> +<dd> +list of tuples of (str, int, int) +</dd> +</dl><a NAME="PreferencesLexer.hasStyle" ID="PreferencesLexer.hasStyle"></a> +<h4>PreferencesLexer.hasStyle</h4> +<b>hasStyle</b>(<i>style, substyle</i>) <p> - Public method to get the eolFill flag for a style. + Public method to test for a given style definition. </p><dl> -<dt><i>style</i></dt> +<dt><i>style</i> (int)</dt> <dd> -the style number (int) +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number </dd> </dl><dl> <dt>Returns:</dt> <dd> -eolFill flag +flag indicating the existence of a style definition </dd> -</dl><a NAME="PreferencesLexer.font" ID="PreferencesLexer.font"></a> -<h4>PreferencesLexer.font</h4> -<b>font</b>(<i>style</i>) +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="PreferencesLexer.isBaseStyle" ID="PreferencesLexer.isBaseStyle"></a> +<h4>PreferencesLexer.isBaseStyle</h4> +<b>isBaseStyle</b>(<i>style</i>) <p> - Public method to get the font for a style. + Public method to test, if a given style may have sub-styles. </p><dl> -<dt><i>style</i></dt> +<dt><i>style</i> (int)</dt> <dd> -the style number (int) +base style number </dd> </dl><dl> <dt>Returns:</dt> <dd> -font +flag indicating that the style may have sub-styles +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool </dd> </dl><a NAME="PreferencesLexer.language" ID="PreferencesLexer.language"></a> <h4>PreferencesLexer.language</h4> @@ -260,76 +533,171 @@ </p><dl> <dt>Returns:</dt> <dd> -language +lexer programming language +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="PreferencesLexer.loadDefaultSubStyles" ID="PreferencesLexer.loadDefaultSubStyles"></a> +<h4>PreferencesLexer.loadDefaultSubStyles</h4> +<b>loadDefaultSubStyles</b>(<i>style</i>) +<p> + Public method to load the default sub-styles for a given base style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number </dd> </dl><a NAME="PreferencesLexer.paper" ID="PreferencesLexer.paper"></a> <h4>PreferencesLexer.paper</h4> -<b>paper</b>(<i>style</i>) +<b>paper</b>(<i>style, substyle=-1</i>) <p> Public method to get the background for a style. </p><dl> -<dt><i>style</i></dt> +<dt><i>style</i> (int)</dt> <dd> -the style number (int) +the style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number </dd> </dl><dl> <dt>Returns:</dt> <dd> -colour +background color +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QColor </dd> </dl><a NAME="PreferencesLexer.setColor" ID="PreferencesLexer.setColor"></a> <h4>PreferencesLexer.setColor</h4> -<b>setColor</b>(<i>c, style</i>) +<b>setColor</b>(<i>c, style, substyle=-1</i>) <p> - Public method to set the colour for a style. + Public method to set the color for a style. </p><dl> -<dt><i>c</i></dt> +<dt><i>c</i> (QColor)</dt> +<dd> +color +</dd><dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> <dd> -colour (int) -</dd><dt><i>style</i></dt> +sub-style number +</dd> +</dl><a NAME="PreferencesLexer.setDescription" ID="PreferencesLexer.setDescription"></a> +<h4>PreferencesLexer.setDescription</h4> +<b>setDescription</b>(<i>description, style, substyle=-1</i>) +<p> + Public method to set a descriptive string for a style. +</p><dl> +<dt><i>description</i> (str)</dt> <dd> -the style number (int) +description for the style +</dd><dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number </dd> </dl><a NAME="PreferencesLexer.setEolFill" ID="PreferencesLexer.setEolFill"></a> <h4>PreferencesLexer.setEolFill</h4> -<b>setEolFill</b>(<i>eolfill, style</i>) +<b>setEolFill</b>(<i>eolfill, style, substyle=-1</i>) <p> Public method to set the eolFill flag for a style. </p><dl> -<dt><i>eolfill</i></dt> +<dt><i>eolfill</i> (bool)</dt> +<dd> +eolFill flag +</dd><dt><i>style</i> (int)</dt> <dd> -eolFill flag (boolean) -</dd><dt><i>style</i></dt> +style number +</dd><dt><i>substyle</i> (int)</dt> <dd> -the style number (int) +sub-style number </dd> </dl><a NAME="PreferencesLexer.setFont" ID="PreferencesLexer.setFont"></a> <h4>PreferencesLexer.setFont</h4> -<b>setFont</b>(<i>f, style</i>) +<b>setFont</b>(<i>f, style, substyle=-1</i>) <p> Public method to set the font for a style. </p><dl> -<dt><i>f</i></dt> +<dt><i>f</i> (QFont)</dt> <dd> font -</dd><dt><i>style</i></dt> +</dd><dt><i>style</i> (int)</dt> <dd> -the style number (int) +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number </dd> </dl><a NAME="PreferencesLexer.setPaper" ID="PreferencesLexer.setPaper"></a> <h4>PreferencesLexer.setPaper</h4> -<b>setPaper</b>(<i>c, style</i>) +<b>setPaper</b>(<i>c, style, substyle=-1</i>) <p> Public method to set the background for a style. </p><dl> -<dt><i>c</i></dt> +<dt><i>c</i> (QColor)</dt> +<dd> +background color +</dd><dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><a NAME="PreferencesLexer.setWords" ID="PreferencesLexer.setWords"></a> +<h4>PreferencesLexer.setWords</h4> +<b>setWords</b>(<i>words, style, substyle=-1</i>) +<p> + Public method to set the list of words for a style. +</p><dl> +<dt><i>words</i> (str)</dt> +<dd> +whitespace separated list of words +</dd><dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> <dd> -colour (int) -</dd><dt><i>style</i></dt> +sub-style number +</dd> +</dl><a NAME="PreferencesLexer.words" ID="PreferencesLexer.words"></a> +<h4>PreferencesLexer.words</h4> +<b>words</b>(<i>style, substyle=-1</i>) +<p> + Public method to get the list of words for a style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> <dd> -the style number (int) +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +whitespace separated list of words </dd> -</dl> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="PreferencesLexer.writeSettings" ID="PreferencesLexer.writeSettings"></a> +<h4>PreferencesLexer.writeSettings</h4> +<b>writeSettings</b>(<i></i>) +<p> + Public method to write the lexer settings. +</p> <div align="right"><a href="#top">Up</a></div> <hr /><hr /> <a NAME="PreferencesLexerError" ID="PreferencesLexerError"></a> @@ -379,6 +747,11 @@ <dd> string representing the error message </dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> </dl><a NAME="PreferencesLexerError.__str__" ID="PreferencesLexerError.__str__"></a> <h4>PreferencesLexerError.__str__</h4> <b>__str__</b>(<i></i>) @@ -389,6 +762,11 @@ <dd> string representing the error message </dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> </dl> <div align="right"><a href="#top">Up</a></div> <hr /><hr /> @@ -424,9 +802,9 @@ <p> Constructor </p><dl> -<dt><i>language</i></dt> +<dt><i>language</i> (str)</dt> <dd> -lexer language (string) +lexer language </dd> </dl> <div align="right"><a href="#top">Up</a></div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Documentation/Source/eric6.Preferences.SubstyleDefinitionDialog.html Fri Apr 05 19:06:39 2019 +0200 @@ -0,0 +1,153 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.Preferences.SubstyleDefinitionDialog</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body><a NAME="top" ID="top"></a> +<h1>eric6.Preferences.SubstyleDefinitionDialog</h1> +<p> +Module implementing the sub-style definition dialog. +</p> +<h3>Global Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> +<table> +<tr> +<td><a href="#SubstyleDefinitionDialog">SubstyleDefinitionDialog</a></td> +<td>Class implementing the sub-style definition dialog.</td> +</tr> +</table> +<h3>Functions</h3> +<table> +<tr><td>None</td></tr> +</table> +<hr /><hr /> +<a NAME="SubstyleDefinitionDialog" ID="SubstyleDefinitionDialog"></a> +<h2>SubstyleDefinitionDialog</h2> +<p> + Class implementing the sub-style definition dialog. +</p> +<h3>Derived from</h3> +QDialog, Ui_SubstyleDefinitionDialog +<h3>Class Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> +<table> +<tr> +<td><a href="#SubstyleDefinitionDialog.__init__">SubstyleDefinitionDialog</a></td> +<td>Constructor</td> +</tr><tr> +<td><a href="#SubstyleDefinitionDialog.__updateOk">__updateOk</a></td> +<td>Private slot to update the state of the OK button.</td> +</tr><tr> +<td><a href="#SubstyleDefinitionDialog.getData">getData</a></td> +<td>Public method to get the entered data.</td> +</tr><tr> +<td><a href="#SubstyleDefinitionDialog.on_defaultButton_clicked">on_defaultButton_clicked</a></td> +<td>Private slot to set the dialog contents to default values.</td> +</tr><tr> +<td><a href="#SubstyleDefinitionDialog.on_descriptionEdit_textChanged">on_descriptionEdit_textChanged</a></td> +<td>Private slot handling changes of the description.</td> +</tr><tr> +<td><a href="#SubstyleDefinitionDialog.on_resetButton_clicked">on_resetButton_clicked</a></td> +<td>Private slot to reset the dialog contents.</td> +</tr><tr> +<td><a href="#SubstyleDefinitionDialog.on_wordsEdit_textChanged">on_wordsEdit_textChanged</a></td> +<td>Private slot handling changes of the word list.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="SubstyleDefinitionDialog.__init__" ID="SubstyleDefinitionDialog.__init__"></a> +<h4>SubstyleDefinitionDialog (Constructor)</h4> +<b>SubstyleDefinitionDialog</b>(<i>lexer, style, substyle, parent=None</i>) +<p> + Constructor +</p><dl> +<dt><i>lexer</i> (PreferencesLexer)</dt> +<dd> +reference to the lexer object +</dd><dt><i>style</i> (int)</dt> +<dd> +style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd><dt><i>parent</i> (QWidget)</dt> +<dd> +reference to the parent widget +</dd> +</dl><a NAME="SubstyleDefinitionDialog.__updateOk" ID="SubstyleDefinitionDialog.__updateOk"></a> +<h4>SubstyleDefinitionDialog.__updateOk</h4> +<b>__updateOk</b>(<i></i>) +<p> + Private slot to update the state of the OK button. +</p><a NAME="SubstyleDefinitionDialog.getData" ID="SubstyleDefinitionDialog.getData"></a> +<h4>SubstyleDefinitionDialog.getData</h4> +<b>getData</b>(<i></i>) +<p> + Public method to get the entered data. +</p><dl> +<dt>Returns:</dt> +<dd> +tuple containing the sub-style description and words list. +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +tuple of (str, str) +</dd> +</dl><a NAME="SubstyleDefinitionDialog.on_defaultButton_clicked" ID="SubstyleDefinitionDialog.on_defaultButton_clicked"></a> +<h4>SubstyleDefinitionDialog.on_defaultButton_clicked</h4> +<b>on_defaultButton_clicked</b>(<i></i>) +<p> + Private slot to set the dialog contents to default values. +</p><a NAME="SubstyleDefinitionDialog.on_descriptionEdit_textChanged" ID="SubstyleDefinitionDialog.on_descriptionEdit_textChanged"></a> +<h4>SubstyleDefinitionDialog.on_descriptionEdit_textChanged</h4> +<b>on_descriptionEdit_textChanged</b>(<i>txt</i>) +<p> + Private slot handling changes of the description. +</p><dl> +<dt><i>txt</i> (str)</dt> +<dd> +text of the description +</dd> +</dl><a NAME="SubstyleDefinitionDialog.on_resetButton_clicked" ID="SubstyleDefinitionDialog.on_resetButton_clicked"></a> +<h4>SubstyleDefinitionDialog.on_resetButton_clicked</h4> +<b>on_resetButton_clicked</b>(<i></i>) +<p> + Private slot to reset the dialog contents. +</p><a NAME="SubstyleDefinitionDialog.on_wordsEdit_textChanged" ID="SubstyleDefinitionDialog.on_wordsEdit_textChanged"></a> +<h4>SubstyleDefinitionDialog.on_wordsEdit_textChanged</h4> +<b>on_wordsEdit_textChanged</b>(<i></i>) +<p> + Private slot handling changes of the word list. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/Documentation/Source/eric6.Preferences.ViewProfileDialog.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.Preferences.ViewProfileDialog.html Fri Apr 05 19:06:39 2019 +0200 @@ -103,7 +103,7 @@ <dt>Returns:</dt> <dd> tuple of two lists giving the visibilities of the - various parts ( two lists of boolean) + various parts (two lists of boolean) </dd> </dl> <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.PyUnit.UnittestDialog.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.PyUnit.UnittestDialog.html Fri Apr 05 19:06:39 2019 +0200 @@ -96,13 +96,16 @@ </table> <a NAME="QtTestResult.__init__" ID="QtTestResult.__init__"></a> <h4>QtTestResult (Constructor)</h4> -<b>QtTestResult</b>(<i>parent</i>) +<b>QtTestResult</b>(<i>parent, failfast</i>) <p> Constructor </p><dl> -<dt><i>parent</i></dt> +<dt><i>parent</i> (UnittestDialog)</dt> <dd> -The parent widget. +reference to the parent widget +</dd><dt><i>failfast</i> (bool)</dt> +<dd> +flag indicating to stop at the first error </dd> </dl><a NAME="QtTestResult.addError" ID="QtTestResult.addError"></a> <h4>QtTestResult.addError</h4> @@ -195,7 +198,7 @@ Class implementing the UI to the pyunit package. </p><h3>Signals</h3> <dl> -<dt>unittestFile(str, int, int)</dt> +<dt>unittestFile(str, int, bool)</dt> <dd> emitted to show the source of a unittest file @@ -208,7 +211,7 @@ QWidget, Ui_UnittestDialog <h3>Class Attributes</h3> <table> -<tr><td>None</td></tr> +<tr><td>ErrorsInfoRole</td></tr><tr><td>TestCaseFileRole</td></tr><tr><td>TestCaseNameRole</td></tr> </table> <h3>Class Methods</h3> <table> @@ -220,12 +223,33 @@ <td><a href="#UnittestDialog.__init__">UnittestDialog</a></td> <td>Constructor</td> </tr><tr> +<td><a href="#UnittestDialog.__UTDiscovered">__UTDiscovered</a></td> +<td>Private slot to handle the utDiscovered signal.</td> +</tr><tr> <td><a href="#UnittestDialog.__UTPrepared">__UTPrepared</a></td> <td>Private slot to handle the utPrepared signal.</td> </tr><tr> +<td><a href="#UnittestDialog.__assembleTestCasesList">__assembleTestCasesList</a></td> +<td>Private method to assemble a list of test cases included in a test suite.</td> +</tr><tr> +<td><a href="#UnittestDialog.__discover">__discover</a></td> +<td>Private slot to discover unit test but don't run them.</td> +</tr><tr> +<td><a href="#UnittestDialog.__findDiscoveryItem">__findDiscoveryItem</a></td> +<td>Private method to find an item given the module path.</td> +</tr><tr> <td><a href="#UnittestDialog.__openEditor">__openEditor</a></td> <td>Private method to open an editor window for the given file.</td> </tr><tr> +<td><a href="#UnittestDialog.__populateDiscoveryResults">__populateDiscoveryResults</a></td> +<td>Private method to populate the test discovery results list.</td> +</tr><tr> +<td><a href="#UnittestDialog.__populateVenvComboBox">__populateVenvComboBox</a></td> +<td>Private method to (re-)populate the virtual environments selector.</td> +</tr><tr> +<td><a href="#UnittestDialog.__selectedTestCases">__selectedTestCases</a></td> +<td>Private method to assemble the list of selected test cases and suites.</td> +</tr><tr> <td><a href="#UnittestDialog.__setProgressColor">__setProgressColor</a></td> <td>Private methode to set the color of the progress color label.</td> </tr><tr> @@ -238,12 +262,18 @@ <td><a href="#UnittestDialog.__showSource">__showSource</a></td> <td>Private slot to show the source of a traceback in an eric6 editor.</td> </tr><tr> +<td><a href="#UnittestDialog.__stopTests">__stopTests</a></td> +<td>Private slot to stop the test.</td> +</tr><tr> <td><a href="#UnittestDialog.closeEvent">closeEvent</a></td> <td>Protected method to handle the close event.</td> </tr><tr> <td><a href="#UnittestDialog.hasFailedTests">hasFailedTests</a></td> <td>Public method to check, if there are failed tests from the last run.</td> </tr><tr> +<td><a href="#UnittestDialog.insertDiscovery">insertDiscovery</a></td> +<td>Public slot to insert the discovery start directory into the discoveryPicker object.</td> +</tr><tr> <td><a href="#UnittestDialog.insertProg">insertProg</a></td> <td>Public slot to insert the filename prog into the testsuitePicker object.</td> </tr><tr> @@ -256,27 +286,33 @@ <td><a href="#UnittestDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td> <td>Private slot called by a button of the button box clicked.</td> </tr><tr> +<td><a href="#UnittestDialog.on_discoverCheckBox_toggled">on_discoverCheckBox_toggled</a></td> +<td>Private slot handling state changes of the 'discover' checkbox.</td> +</tr><tr> +<td><a href="#UnittestDialog.on_discoveryList_itemDoubleClicked">on_discoveryList_itemDoubleClicked</a></td> +<td>Private slot handling the user double clicking an item.</td> +</tr><tr> <td><a href="#UnittestDialog.on_errorsListWidget_currentTextChanged">on_errorsListWidget_currentTextChanged</a></td> <td>Private slot to handle the highlighted signal.</td> </tr><tr> <td><a href="#UnittestDialog.on_errorsListWidget_itemDoubleClicked">on_errorsListWidget_itemDoubleClicked</a></td> <td>Private slot called by doubleclicking an errorlist entry.</td> </tr><tr> -<td><a href="#UnittestDialog.on_startButton_clicked">on_startButton_clicked</a></td> -<td>Private slot to start the test.</td> -</tr><tr> -<td><a href="#UnittestDialog.on_stopButton_clicked">on_stopButton_clicked</a></td> -<td>Private slot to stop the test.</td> -</tr><tr> <td><a href="#UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog">on_testsuitePicker_aboutToShowPathPickerDialog</a></td> <td>Private slot called before the test suite selection dialog is shown.</td> </tr><tr> <td><a href="#UnittestDialog.on_testsuitePicker_editTextChanged">on_testsuitePicker_editTextChanged</a></td> -<td>Private slot to handle changes of the test file name.</td> +<td>Private slot handling changes of the test suite path.</td> </tr><tr> <td><a href="#UnittestDialog.on_testsuitePicker_pathSelected">on_testsuitePicker_pathSelected</a></td> <td>Private slot called after a test suite has been selected.</td> </tr><tr> +<td><a href="#UnittestDialog.setProjectMode">setProjectMode</a></td> +<td>Public method to set the project mode of the dialog.</td> +</tr><tr> +<td><a href="#UnittestDialog.startTests">startTests</a></td> +<td>Public slot to start the test.</td> +</tr><tr> <td><a href="#UnittestDialog.testErrored">testErrored</a></td> <td>Public method called if a test errors.</td> </tr><tr> @@ -305,30 +341,45 @@ </table> <a NAME="UnittestDialog.__init__" ID="UnittestDialog.__init__"></a> <h4>UnittestDialog (Constructor)</h4> -<b>UnittestDialog</b>(<i>prog=None, dbs=None, ui=None, fromEric=False, parent=None, name=None</i>) +<b>UnittestDialog</b>(<i>prog=None, dbs=None, ui=None, parent=None, name=None</i>) <p> Constructor </p><dl> -<dt><i>prog</i></dt> +<dt><i>prog</i> (str)</dt> <dd> filename of the program to open -</dd><dt><i>dbs</i></dt> +</dd><dt><i>dbs</i> (DebugServer)</dt> <dd> reference to the debug server object. It is an indication - whether we were called from within the eric6 IDE -</dd><dt><i>ui</i></dt> + whether we were called from within the eric6 IDE. +</dd><dt><i>ui</i> (UserInterface)</dt> <dd> reference to the UI object -</dd><dt><i>fromEric</i></dt> +</dd><dt><i>parent</i> (QWidget)</dt> +<dd> +parent widget of this dialog +</dd><dt><i>name</i> (str)</dt> <dd> -flag indicating an instantiation from within the - eric IDE (boolean) -</dd><dt><i>parent</i></dt> +name of this dialog +</dd> +</dl><a NAME="UnittestDialog.__UTDiscovered" ID="UnittestDialog.__UTDiscovered"></a> +<h4>UnittestDialog.__UTDiscovered</h4> +<b>__UTDiscovered</b>(<i>testCases, exc_type, exc_value</i>) +<p> + Private slot to handle the utDiscovered signal. +</p><p> + If the unittest suite was loaded successfully, we ask the + client to run the test suite. +</p><dl> +<dt><i>testCases</i> (str)</dt> <dd> -parent widget of this dialog (QWidget) -</dd><dt><i>name</i></dt> +list of detected test cases +</dd><dt><i>exc_type</i> (str)</dt> <dd> -name of this dialog (string) +exception type occured during discovery +</dd><dt><i>exc_value</i> (str)</dt> +<dd> +value of exception occured during discovery </dd> </dl><a NAME="UnittestDialog.__UTPrepared" ID="UnittestDialog.__UTPrepared"></a> <h4>UnittestDialog.__UTPrepared</h4> @@ -349,6 +400,56 @@ <dd> value of exception occured during preparation (string) </dd> +</dl><a NAME="UnittestDialog.__assembleTestCasesList" ID="UnittestDialog.__assembleTestCasesList"></a> +<h4>UnittestDialog.__assembleTestCasesList</h4> +<b>__assembleTestCasesList</b>(<i>suite, start</i>) +<p> + Private method to assemble a list of test cases included in a test + suite. +</p><dl> +<dt><i>suite</i> (unittest.TestSuite)</dt> +<dd> +test suite to be inspected +</dd><dt><i>start</i> (str)</dt> +<dd> +name of directory discovery was started at +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +list of tuples containing the test case ID, a short description + and the path of the test file name +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +list of tuples of (str, str, str) +</dd> +</dl><a NAME="UnittestDialog.__discover" ID="UnittestDialog.__discover"></a> +<h4>UnittestDialog.__discover</h4> +<b>__discover</b>(<i></i>) +<p> + Private slot to discover unit test but don't run them. +</p><a NAME="UnittestDialog.__findDiscoveryItem" ID="UnittestDialog.__findDiscoveryItem"></a> +<h4>UnittestDialog.__findDiscoveryItem</h4> +<b>__findDiscoveryItem</b>(<i>modulePath</i>) +<p> + Private method to find an item given the module path. +</p><dl> +<dt><i>modulePath</i> (str)</dt> +<dd> +path of the module in dotted notation +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +reference to the item or None +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QTreeWidgetItem or None +</dd> </dl><a NAME="UnittestDialog.__openEditor" ID="UnittestDialog.__openEditor"></a> <h4>UnittestDialog.__openEditor</h4> <b>__openEditor</b>(<i>filename, linenumber</i>) @@ -365,6 +466,41 @@ <dd> line number to place the cursor at </dd> +</dl><a NAME="UnittestDialog.__populateDiscoveryResults" ID="UnittestDialog.__populateDiscoveryResults"></a> +<h4>UnittestDialog.__populateDiscoveryResults</h4> +<b>__populateDiscoveryResults</b>(<i>tests</i>) +<p> + Private method to populate the test discovery results list. +</p><dl> +<dt><i>tests</i> (list of tuples of (str, str, str))</dt> +<dd> +list of tuples containing the discovery results +</dd> +</dl><a NAME="UnittestDialog.__populateVenvComboBox" ID="UnittestDialog.__populateVenvComboBox"></a> +<h4>UnittestDialog.__populateVenvComboBox</h4> +<b>__populateVenvComboBox</b>(<i></i>) +<p> + Private method to (re-)populate the virtual environments selector. +</p><a NAME="UnittestDialog.__selectedTestCases" ID="UnittestDialog.__selectedTestCases"></a> +<h4>UnittestDialog.__selectedTestCases</h4> +<b>__selectedTestCases</b>(<i>parent=None</i>) +<p> + Private method to assemble the list of selected test cases and suites. +</p><dl> +<dt><i>parent</i> (QTreeWidgetItem)</dt> +<dd> +reference to the parent item +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +list of selected test cases +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +list of str +</dd> </dl><a NAME="UnittestDialog.__setProgressColor" ID="UnittestDialog.__setProgressColor"></a> <h4>UnittestDialog.__setProgressColor</h4> <b>__setProgressColor</b>(<i>color</i>) @@ -390,6 +526,11 @@ <b>__showSource</b>(<i></i>) <p> Private slot to show the source of a traceback in an eric6 editor. +</p><a NAME="UnittestDialog.__stopTests" ID="UnittestDialog.__stopTests"></a> +<h4>UnittestDialog.__stopTests</h4> +<b>__stopTests</b>(<i></i>) +<p> + Private slot to stop the test. </p><a NAME="UnittestDialog.closeEvent" ID="UnittestDialog.closeEvent"></a> <h4>UnittestDialog.closeEvent</h4> <b>closeEvent</b>(<i>event</i>) @@ -410,6 +551,17 @@ <dd> flag indicating the presence of failed tests (boolean) </dd> +</dl><a NAME="UnittestDialog.insertDiscovery" ID="UnittestDialog.insertDiscovery"></a> +<h4>UnittestDialog.insertDiscovery</h4> +<b>insertDiscovery</b>(<i>start</i>) +<p> + Public slot to insert the discovery start directory into the + discoveryPicker object. +</p><dl> +<dt><i>start</i> (str)</dt> +<dd> +start directory name to be inserted +</dd> </dl><a NAME="UnittestDialog.insertProg" ID="UnittestDialog.insertProg"></a> <h4>UnittestDialog.insertProg</h4> <b>insertProg</b>(<i>prog</i>) @@ -451,6 +603,29 @@ <dd> button that was clicked (QAbstractButton) </dd> +</dl><a NAME="UnittestDialog.on_discoverCheckBox_toggled" ID="UnittestDialog.on_discoverCheckBox_toggled"></a> +<h4>UnittestDialog.on_discoverCheckBox_toggled</h4> +<b>on_discoverCheckBox_toggled</b>(<i>checked</i>) +<p> + Private slot handling state changes of the 'discover' checkbox. +</p><dl> +<dt><i>checked</i> (bool)</dt> +<dd> +state of the checkbox +</dd> +</dl><a NAME="UnittestDialog.on_discoveryList_itemDoubleClicked" ID="UnittestDialog.on_discoveryList_itemDoubleClicked"></a> +<h4>UnittestDialog.on_discoveryList_itemDoubleClicked</h4> +<b>on_discoveryList_itemDoubleClicked</b>(<i>item, column</i>) +<p> + Private slot handling the user double clicking an item. +</p><dl> +<dt><i>item</i> (QTreeWidgetItem)</dt> +<dd> +reference to the item +</dd><dt><i>column</i> (int)</dt> +<dd> +column of the double click +</dd> </dl><a NAME="UnittestDialog.on_errorsListWidget_currentTextChanged" ID="UnittestDialog.on_errorsListWidget_currentTextChanged"></a> <h4>UnittestDialog.on_errorsListWidget_currentTextChanged</h4> <b>on_errorsListWidget_currentTextChanged</b>(<i>text</i>) @@ -476,35 +651,20 @@ <dd> the listbox item that was double clicked </dd> -</dl><a NAME="UnittestDialog.on_startButton_clicked" ID="UnittestDialog.on_startButton_clicked"></a> -<h4>UnittestDialog.on_startButton_clicked</h4> -<b>on_startButton_clicked</b>(<i>failedOnly=False</i>) -<p> - Private slot to start the test. -</p><dl> -<dt><i>failedOnly=</i></dt> -<dd> -flag indicating to run only failed tests (boolean) -</dd> -</dl><a NAME="UnittestDialog.on_stopButton_clicked" ID="UnittestDialog.on_stopButton_clicked"></a> -<h4>UnittestDialog.on_stopButton_clicked</h4> -<b>on_stopButton_clicked</b>(<i></i>) -<p> - Private slot to stop the test. -</p><a NAME="UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog" ID="UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog"></a> +</dl><a NAME="UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog" ID="UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog"></a> <h4>UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog</h4> <b>on_testsuitePicker_aboutToShowPathPickerDialog</b>(<i></i>) <p> Private slot called before the test suite selection dialog is shown. </p><a NAME="UnittestDialog.on_testsuitePicker_editTextChanged" ID="UnittestDialog.on_testsuitePicker_editTextChanged"></a> <h4>UnittestDialog.on_testsuitePicker_editTextChanged</h4> -<b>on_testsuitePicker_editTextChanged</b>(<i>txt</i>) +<b>on_testsuitePicker_editTextChanged</b>(<i>path</i>) <p> - Private slot to handle changes of the test file name. + Private slot handling changes of the test suite path. </p><dl> -<dt><i>txt</i></dt> +<dt><i>path</i> (str)</dt> <dd> -name of the test file (string) +path of the test suite file </dd> </dl><a NAME="UnittestDialog.on_testsuitePicker_pathSelected" ID="UnittestDialog.on_testsuitePicker_pathSelected"></a> <h4>UnittestDialog.on_testsuitePicker_pathSelected</h4> @@ -516,6 +676,26 @@ <dd> file name of the test suite </dd> +</dl><a NAME="UnittestDialog.setProjectMode" ID="UnittestDialog.setProjectMode"></a> +<h4>UnittestDialog.setProjectMode</h4> +<b>setProjectMode</b>(<i>forProject</i>) +<p> + Public method to set the project mode of the dialog. +</p><dl> +<dt><i>forProject</i> (bool)</dt> +<dd> +flag indicating to run for the open project +</dd> +</dl><a NAME="UnittestDialog.startTests" ID="UnittestDialog.startTests"></a> +<h4>UnittestDialog.startTests</h4> +<b>startTests</b>(<i>failedOnly=False</i>) +<p> + Public slot to start the test. +</p><dl> +<dt><i>failedOnly=</i></dt> +<dd> +flag indicating to run only failed tests (boolean) +</dd> </dl><a NAME="UnittestDialog.testErrored" ID="UnittestDialog.testErrored"></a> <h4>UnittestDialog.testErrored</h4> <b>testErrored</b>(<i>test, exc, testId</i>)
--- a/Documentation/Source/eric6.QScintilla.Lexers.Lexer.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.QScintilla.Lexers.Lexer.html Fri Apr 05 19:06:39 2019 +0200 @@ -81,9 +81,15 @@ <td><a href="#Lexer.commentStr">commentStr</a></td> <td>Public method to return the comment string.</td> </tr><tr> +<td><a href="#Lexer.defaultKeywords">defaultKeywords</a></td> +<td>Public method to get the default keywords.</td> +</tr><tr> <td><a href="#Lexer.hasSmartIndent">hasSmartIndent</a></td> <td>Public method indicating whether lexer can do smart indentation.</td> </tr><tr> +<td><a href="#Lexer.hasSubstyles">hasSubstyles</a></td> +<td>Public method to indicate the support of sub-styles.</td> +</tr><tr> <td><a href="#Lexer.initProperties">initProperties</a></td> <td>Public slot to initialize the properties.</td> </tr><tr> @@ -96,6 +102,9 @@ <td><a href="#Lexer.keywords">keywords</a></td> <td>Public method to get the keywords.</td> </tr><tr> +<td><a href="#Lexer.keywordsDescription">keywordsDescription</a></td> +<td>Public method to get the description for a keywords set.</td> +</tr><tr> <td><a href="#Lexer.lexerName">lexerName</a></td> <td>Public method to return the lexer name.</td> </tr><tr> @@ -194,6 +203,26 @@ <dd> comment string (string) </dd> +</dl><a NAME="Lexer.defaultKeywords" ID="Lexer.defaultKeywords"></a> +<h4>Lexer.defaultKeywords</h4> +<b>defaultKeywords</b>(<i>kwSet</i>) +<p> + Public method to get the default keywords. +</p><dl> +<dt><i>kwSet</i> (int)</dt> +<dd> +number of the keyword set +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +space separated list of keywords +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str or None +</dd> </dl><a NAME="Lexer.hasSmartIndent" ID="Lexer.hasSmartIndent"></a> <h4>Lexer.hasSmartIndent</h4> <b>hasSmartIndent</b>(<i></i>) @@ -205,6 +234,21 @@ flag indicating availability of smartIndentLine and smartIndentSelection methods (boolean) </dd> +</dl><a NAME="Lexer.hasSubstyles" ID="Lexer.hasSubstyles"></a> +<h4>Lexer.hasSubstyles</h4> +<b>hasSubstyles</b>(<i></i>) +<p> + Public method to indicate the support of sub-styles. +</p><dl> +<dt>Returns:</dt> +<dd> +flag indicating sub-styling support +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> </dl><a NAME="Lexer.initProperties" ID="Lexer.initProperties"></a> <h4>Lexer.initProperties</h4> <b>initProperties</b>(<i></i>) @@ -246,14 +290,39 @@ <p> Public method to get the keywords. </p><dl> -<dt><i>kwSet</i></dt> +<dt><i>kwSet</i> (int)</dt> <dd> -number of the keyword set (integer) +number of the keyword set </dd> </dl><dl> <dt>Returns:</dt> <dd> -string giving the keywords (string) or None +space separated list of keywords +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str or None +</dd> +</dl><a NAME="Lexer.keywordsDescription" ID="Lexer.keywordsDescription"></a> +<h4>Lexer.keywordsDescription</h4> +<b>keywordsDescription</b>(<i>kwSet</i>) +<p> + Public method to get the description for a keywords set. +</p><dl> +<dt><i>kwSet</i> (int)</dt> +<dd> +number of the keyword set +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +description of the keyword set +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str </dd> </dl><a NAME="Lexer.lexerName" ID="Lexer.lexerName"></a> <h4>Lexer.lexerName</h4> @@ -275,7 +344,12 @@ </p><dl> <dt>Returns:</dt> <dd> -maximum keyword set (integer) +maximum keyword set +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +int </dd> </dl><a NAME="Lexer.smartIndentLine" ID="Lexer.smartIndentLine"></a> <h4>Lexer.smartIndentLine</h4>
--- a/Documentation/Source/eric6.QScintilla.Lexers.LexerCPP.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.QScintilla.Lexers.LexerCPP.html Fri Apr 05 19:06:39 2019 +0200 @@ -45,7 +45,7 @@ Subclass to implement some additional lexer dependant methods. </p> <h3>Derived from</h3> -Lexer, QsciLexerCPP +SubstyledLexer, QsciLexerCPP <h3>Class Attributes</h3> <table> <tr><td>None</td></tr>
--- a/Documentation/Source/eric6.QScintilla.Lexers.LexerPython.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.QScintilla.Lexers.LexerPython.html Fri Apr 05 19:06:39 2019 +0200 @@ -45,7 +45,7 @@ Subclass to implement some additional lexer dependant methods. </p> <h3>Derived from</h3> -Lexer, QsciLexerPython +SubstyledLexer, QsciLexerPython <h3>Class Attributes</h3> <table> <tr><td>None</td></tr> @@ -58,7 +58,7 @@ <table> <tr> <td><a href="#LexerPython.__init__">LexerPython</a></td> -<td>Constructor</td> +<td>PyQt5 Qsci Qt QtCore QtDBus QtDesigner QtGui QtHelp QtLocation QtMacExtras QtMultimedia QtMultimediaWidgets QtNetwork QtNetworkAuth QtNfc QtOpenGL QtPositioning QtPrintSupport QtQml QtQuick QtQuickWidgets QtRemoteObjects QtSensors QtSerialPort QtSql QtSvg QtTest QtWebChannel QtWebEngine QtWebEngineCore QtWebEngineWidgets QtWebSockets QtWidgets QtWinExtras QtX11Extras QtXml QtXmlPatterns sip QtWebKit QtWebKitWidgets</td> </tr><tr> <td><a href="#LexerPython.autoCompletionWordSeparators">autoCompletionWordSeparators</a></td> <td>Public method to return the list of separators for autocompletion.</td> @@ -93,16 +93,13 @@ <h4>LexerPython (Constructor)</h4> <b>LexerPython</b>(<i>variant="", parent=None</i>) <p> - Constructor -</p><dl> -<dt><i>variant</i></dt> -<dd> -name of the language variant (string) -</dd><dt><i>parent</i></dt> -<dd> -parent widget of this lexer -</dd> -</dl><a NAME="LexerPython.autoCompletionWordSeparators" ID="LexerPython.autoCompletionWordSeparators"></a> + PyQt5 Qsci Qt QtCore QtDBus QtDesigner QtGui QtHelp QtLocation QtMacExtras + QtMultimedia QtMultimediaWidgets QtNetwork QtNetworkAuth QtNfc QtOpenGL + QtPositioning QtPrintSupport QtQml QtQuick QtQuickWidgets QtRemoteObjects + QtSensors QtSerialPort QtSql QtSvg QtTest QtWebChannel QtWebEngine + QtWebEngineCore QtWebEngineWidgets QtWebSockets QtWidgets QtWinExtras + QtX11Extras QtXml QtXmlPatterns sip QtWebKit QtWebKitWidgets +</p><a NAME="LexerPython.autoCompletionWordSeparators" ID="LexerPython.autoCompletionWordSeparators"></a> <h4>LexerPython.autoCompletionWordSeparators</h4> <b>autoCompletionWordSeparators</b>(<i></i>) <p>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Documentation/Source/eric6.QScintilla.Lexers.SubstyledLexer.html Fri Apr 05 19:06:39 2019 +0200 @@ -0,0 +1,709 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.QScintilla.Lexers.SubstyledLexer</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body><a NAME="top" ID="top"></a> +<h1>eric6.QScintilla.Lexers.SubstyledLexer</h1> +<p> +Module implementing the lexer mixin class. +</p> +<h3>Global Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> +<table> +<tr> +<td><a href="#SubstyledLexer">SubstyledLexer</a></td> +<td>Class to implement the sub-styled lexer mixin class.</td> +</tr> +</table> +<h3>Functions</h3> +<table> +<tr><td>None</td></tr> +</table> +<hr /><hr /> +<a NAME="SubstyledLexer" ID="SubstyledLexer"></a> +<h2>SubstyledLexer</h2> +<p> + Class to implement the sub-styled lexer mixin class. +</p> +<h3>Derived from</h3> +Lexer +<h3>Class Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> +<table> +<tr> +<td><a href="#SubstyledLexer.__init__">SubstyledLexer</a></td> +<td>Constructor</td> +</tr><tr> +<td><a href="#SubstyledLexer.addSubstyle">addSubstyle</a></td> +<td>Public method to add an empty sub-style to a given base style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.delSubstyle">delSubstyle</a></td> +<td>Public method to delete a given sub-style definition.</td> +</tr><tr> +<td><a href="#SubstyledLexer.getBaseStyles">getBaseStyles</a></td> +<td>Public method to get the list of supported base styles.</td> +</tr><tr> +<td><a href="#SubstyledLexer.hasSubstyle">hasSubstyle</a></td> +<td>Public method to test for a given sub-style definition.</td> +</tr><tr> +<td><a href="#SubstyledLexer.hasSubstyles">hasSubstyles</a></td> +<td>Public method to indicate the support of sub-styles.</td> +</tr><tr> +<td><a href="#SubstyledLexer.isBaseStyle">isBaseStyle</a></td> +<td>Public method to test, if a given style may have sub-styles.</td> +</tr><tr> +<td><a href="#SubstyledLexer.loadAllDefaultSubStyles">loadAllDefaultSubStyles</a></td> +<td>Public method to load the default sub-style definitions.</td> +</tr><tr> +<td><a href="#SubstyledLexer.loadDefaultSubStyles">loadDefaultSubStyles</a></td> +<td>Public method to load the default sub-styles for a given base style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.loadSubstyles">loadSubstyles</a></td> +<td>Public method to load the sub-styles from the settings file.</td> +</tr><tr> +<td><a href="#SubstyledLexer.readSubstyles">readSubstyles</a></td> +<td>Public method to load the sub-styles and configure the editor.</td> +</tr><tr> +<td><a href="#SubstyledLexer.setSubstyleColor">setSubstyleColor</a></td> +<td>Public method to set the foreground color of a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.setSubstyleDescription">setSubstyleDescription</a></td> +<td>Public method to set the description for a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.setSubstyleEolFill">setSubstyleEolFill</a></td> +<td>Public method to set the eolfill flag of a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.setSubstyleFont">setSubstyleFont</a></td> +<td>Public method to set the font of a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.setSubstylePaper">setSubstylePaper</a></td> +<td>Public method to set the background color of a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.setSubstyleWords">setSubstyleWords</a></td> +<td>Public method to set the words for a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleColor">substyleColor</a></td> +<td>Public method to get the sub-style foreground color.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleDefaultColor">substyleDefaultColor</a></td> +<td>Public method to get the sub-style default foreground color.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleDefaultDescription">substyleDefaultDescription</a></td> +<td>Public method to get the default description of a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleDefaultEolFill">substyleDefaultEolFill</a></td> +<td>Public method to get the default eolfill flag.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleDefaultFont">substyleDefaultFont</a></td> +<td>Public method to get the default sub-style font.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleDefaultPaper">substyleDefaultPaper</a></td> +<td>Public method to get the sub-style default background color.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleDefaultWords">substyleDefaultWords</a></td> +<td>Public method to get the default words of a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleDescription">substyleDescription</a></td> +<td>Public method to get the description of a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleEolFill">substyleEolFill</a></td> +<td>Public method to get the eolfill flag.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleFont">substyleFont</a></td> +<td>Public method to get the sub-style font.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substylePaper">substylePaper</a></td> +<td>Public method to get the sub-style background color.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substyleWords">substyleWords</a></td> +<td>Public method to get the words of a sub-style.</td> +</tr><tr> +<td><a href="#SubstyledLexer.substylesCount">substylesCount</a></td> +<td>Public method to get the number of defined sub-styles.</td> +</tr><tr> +<td><a href="#SubstyledLexer.writeSubstyles">writeSubstyles</a></td> +<td>Public method to save the sub-styles.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="SubstyledLexer.__init__" ID="SubstyledLexer.__init__"></a> +<h4>SubstyledLexer (Constructor)</h4> +<b>SubstyledLexer</b>(<i></i>) +<p> + Constructor +</p><a NAME="SubstyledLexer.addSubstyle" ID="SubstyledLexer.addSubstyle"></a> +<h4>SubstyledLexer.addSubstyle</h4> +<b>addSubstyle</b>(<i>style</i>) +<p> + Public method to add an empty sub-style to a given base style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +allocated sub-style number or -1 to indicate an error +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +int +</dd> +</dl><a NAME="SubstyledLexer.delSubstyle" ID="SubstyledLexer.delSubstyle"></a> +<h4>SubstyledLexer.delSubstyle</h4> +<b>delSubstyle</b>(<i>style, substyle</i>) +<p> + Public method to delete a given sub-style definition. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating successful deletion +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="SubstyledLexer.getBaseStyles" ID="SubstyledLexer.getBaseStyles"></a> +<h4>SubstyledLexer.getBaseStyles</h4> +<b>getBaseStyles</b>(<i></i>) +<p> + Public method to get the list of supported base styles. +</p><dl> +<dt>Returns:</dt> +<dd> +list of base styles +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +list of int +</dd> +</dl><a NAME="SubstyledLexer.hasSubstyle" ID="SubstyledLexer.hasSubstyle"></a> +<h4>SubstyledLexer.hasSubstyle</h4> +<b>hasSubstyle</b>(<i>style, substyle</i>) +<p> + Public method to test for a given sub-style definition. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating the existence of a sub-style definition +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="SubstyledLexer.hasSubstyles" ID="SubstyledLexer.hasSubstyles"></a> +<h4>SubstyledLexer.hasSubstyles</h4> +<b>hasSubstyles</b>(<i></i>) +<p> + Public method to indicate the support of sub-styles. +</p><dl> +<dt>Returns:</dt> +<dd> +flag indicating sub-styling support +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="SubstyledLexer.isBaseStyle" ID="SubstyledLexer.isBaseStyle"></a> +<h4>SubstyledLexer.isBaseStyle</h4> +<b>isBaseStyle</b>(<i>style</i>) +<p> + Public method to test, if a given style may have sub-styles. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating that the style may have sub-styles +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="SubstyledLexer.loadAllDefaultSubStyles" ID="SubstyledLexer.loadAllDefaultSubStyles"></a> +<h4>SubstyledLexer.loadAllDefaultSubStyles</h4> +<b>loadAllDefaultSubStyles</b>(<i></i>) +<p> + Public method to load the default sub-style definitions. +</p><a NAME="SubstyledLexer.loadDefaultSubStyles" ID="SubstyledLexer.loadDefaultSubStyles"></a> +<h4>SubstyledLexer.loadDefaultSubStyles</h4> +<b>loadDefaultSubStyles</b>(<i>style</i>) +<p> + Public method to load the default sub-styles for a given base style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +style number +</dd> +</dl><a NAME="SubstyledLexer.loadSubstyles" ID="SubstyledLexer.loadSubstyles"></a> +<h4>SubstyledLexer.loadSubstyles</h4> +<b>loadSubstyles</b>(<i></i>) +<p> + Public method to load the sub-styles from the settings file. +</p><a NAME="SubstyledLexer.readSubstyles" ID="SubstyledLexer.readSubstyles"></a> +<h4>SubstyledLexer.readSubstyles</h4> +<b>readSubstyles</b>(<i>editor</i>) +<p> + Public method to load the sub-styles and configure the editor. +</p><dl> +<dt><i>editor</i> (QsciScintilla)</dt> +<dd> +reference to the editor object +</dd> +</dl><a NAME="SubstyledLexer.setSubstyleColor" ID="SubstyledLexer.setSubstyleColor"></a> +<h4>SubstyledLexer.setSubstyleColor</h4> +<b>setSubstyleColor</b>(<i>color, style, substyle</i>) +<p> + Public method to set the foreground color of a sub-style. +</p><dl> +<dt><i>color</i> (QColor)</dt> +<dd> +foreground color to be set +</dd><dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><a NAME="SubstyledLexer.setSubstyleDescription" ID="SubstyledLexer.setSubstyleDescription"></a> +<h4>SubstyledLexer.setSubstyleDescription</h4> +<b>setSubstyleDescription</b>(<i>description, style, substyle</i>) +<p> + Public method to set the description for a sub-style. +</p><dl> +<dt><i>description</i> (str)</dt> +<dd> +description to be set +</dd><dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><a NAME="SubstyledLexer.setSubstyleEolFill" ID="SubstyledLexer.setSubstyleEolFill"></a> +<h4>SubstyledLexer.setSubstyleEolFill</h4> +<b>setSubstyleEolFill</b>(<i>eolFill, style, substyle</i>) +<p> + Public method to set the eolfill flag of a sub-style. +</p><dl> +<dt><i>eolFill</i> (bool)</dt> +<dd> +eolfill flag to be set +</dd><dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><a NAME="SubstyledLexer.setSubstyleFont" ID="SubstyledLexer.setSubstyleFont"></a> +<h4>SubstyledLexer.setSubstyleFont</h4> +<b>setSubstyleFont</b>(<i>font, style, substyle</i>) +<p> + Public method to set the font of a sub-style. +</p><dl> +<dt><i>font</i> (QFont)</dt> +<dd> +font to be set +</dd><dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><a NAME="SubstyledLexer.setSubstylePaper" ID="SubstyledLexer.setSubstylePaper"></a> +<h4>SubstyledLexer.setSubstylePaper</h4> +<b>setSubstylePaper</b>(<i>color, style, substyle</i>) +<p> + Public method to set the background color of a sub-style. +</p><dl> +<dt><i>color</i> (QColor)</dt> +<dd> +background color to be set +</dd><dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><a NAME="SubstyledLexer.setSubstyleWords" ID="SubstyledLexer.setSubstyleWords"></a> +<h4>SubstyledLexer.setSubstyleWords</h4> +<b>setSubstyleWords</b>(<i>words, style, substyle</i>) +<p> + Public method to set the words for a sub-style. +</p><dl> +<dt><i>words</i> (str)</dt> +<dd> +words to be set separated by white-space +</dd><dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><a NAME="SubstyledLexer.substyleColor" ID="SubstyledLexer.substyleColor"></a> +<h4>SubstyledLexer.substyleColor</h4> +<b>substyleColor</b>(<i>style, substyle</i>) +<p> + Public method to get the sub-style foreground color. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +foreground color +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QColor +</dd> +</dl><a NAME="SubstyledLexer.substyleDefaultColor" ID="SubstyledLexer.substyleDefaultColor"></a> +<h4>SubstyledLexer.substyleDefaultColor</h4> +<b>substyleDefaultColor</b>(<i>style, substyle</i>) +<p> + Public method to get the sub-style default foreground color. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +default foreground color +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QColor +</dd> +</dl><a NAME="SubstyledLexer.substyleDefaultDescription" ID="SubstyledLexer.substyleDefaultDescription"></a> +<h4>SubstyledLexer.substyleDefaultDescription</h4> +<b>substyleDefaultDescription</b>(<i>style, substyle</i>) +<p> + Public method to get the default description of a sub-style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +sub-style default description +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="SubstyledLexer.substyleDefaultEolFill" ID="SubstyledLexer.substyleDefaultEolFill"></a> +<h4>SubstyledLexer.substyleDefaultEolFill</h4> +<b>substyleDefaultEolFill</b>(<i>style, substyle</i>) +<p> + Public method to get the default eolfill flag. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +default eolfill flag +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="SubstyledLexer.substyleDefaultFont" ID="SubstyledLexer.substyleDefaultFont"></a> +<h4>SubstyledLexer.substyleDefaultFont</h4> +<b>substyleDefaultFont</b>(<i>style, substyle</i>) +<p> + Public method to get the default sub-style font. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +default font +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QFont +</dd> +</dl><a NAME="SubstyledLexer.substyleDefaultPaper" ID="SubstyledLexer.substyleDefaultPaper"></a> +<h4>SubstyledLexer.substyleDefaultPaper</h4> +<b>substyleDefaultPaper</b>(<i>style, substyle</i>) +<p> + Public method to get the sub-style default background color. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +default background color +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QColor +</dd> +</dl><a NAME="SubstyledLexer.substyleDefaultWords" ID="SubstyledLexer.substyleDefaultWords"></a> +<h4>SubstyledLexer.substyleDefaultWords</h4> +<b>substyleDefaultWords</b>(<i>style, substyle</i>) +<p> + Public method to get the default words of a sub-style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +white-space separated default word list +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="SubstyledLexer.substyleDescription" ID="SubstyledLexer.substyleDescription"></a> +<h4>SubstyledLexer.substyleDescription</h4> +<b>substyleDescription</b>(<i>style, substyle</i>) +<p> + Public method to get the description of a sub-style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +sub-style description +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="SubstyledLexer.substyleEolFill" ID="SubstyledLexer.substyleEolFill"></a> +<h4>SubstyledLexer.substyleEolFill</h4> +<b>substyleEolFill</b>(<i>style, substyle</i>) +<p> + Public method to get the eolfill flag. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +eolfill flag +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="SubstyledLexer.substyleFont" ID="SubstyledLexer.substyleFont"></a> +<h4>SubstyledLexer.substyleFont</h4> +<b>substyleFont</b>(<i>style, substyle</i>) +<p> + Public method to get the sub-style font. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +font +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QFont +</dd> +</dl><a NAME="SubstyledLexer.substylePaper" ID="SubstyledLexer.substylePaper"></a> +<h4>SubstyledLexer.substylePaper</h4> +<b>substylePaper</b>(<i>style, substyle</i>) +<p> + Public method to get the sub-style background color. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +background color +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +QColor +</dd> +</dl><a NAME="SubstyledLexer.substyleWords" ID="SubstyledLexer.substyleWords"></a> +<h4>SubstyledLexer.substyleWords</h4> +<b>substyleWords</b>(<i>style, substyle</i>) +<p> + Public method to get the words of a sub-style. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd><dt><i>substyle</i> (int)</dt> +<dd> +sub-style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +white-space separated word list +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="SubstyledLexer.substylesCount" ID="SubstyledLexer.substylesCount"></a> +<h4>SubstyledLexer.substylesCount</h4> +<b>substylesCount</b>(<i>style</i>) +<p> + Public method to get the number of defined sub-styles. +</p><dl> +<dt><i>style</i> (int)</dt> +<dd> +base style number +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +number of defined sub-styles +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +int +</dd> +</dl><a NAME="SubstyledLexer.writeSubstyles" ID="SubstyledLexer.writeSubstyles"></a> +<h4>SubstyledLexer.writeSubstyles</h4> +<b>writeSubstyles</b>(<i></i>) +<p> + Public method to save the sub-styles. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/Documentation/Source/eric6.QScintilla.Printer.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.QScintilla.Printer.html Fri Apr 05 19:06:39 2019 +0200 @@ -31,7 +31,7 @@ <table> <tr> <td><a href="#Printer">Printer</a></td> -<td>Class implementing the QextScintillaPrinter with a header.</td> +<td>Class implementing the QsciPrinter with a header.</td> </tr> </table> <h3>Functions</h3> @@ -42,7 +42,7 @@ <a NAME="Printer" ID="Printer"></a> <h2>Printer</h2> <p> - Class implementing the QextScintillaPrinter with a header. + Class implementing the QsciPrinter with a header. </p> <h3>Derived from</h3> QsciPrinter
--- a/Documentation/Source/eric6.QScintilla.QsciScintillaCompat.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.QScintilla.QsciScintillaCompat.html Fri Apr 05 19:06:39 2019 +0200 @@ -178,6 +178,9 @@ <td><a href="#QsciScintillaCompat.extendSelectionWordRight">extendSelectionWordRight</a></td> <td>Public method to extend the selection one word to the right.</td> </tr><tr> +<td><a href="#QsciScintillaCompat.findFirst">findFirst</a></td> +<td>Public method to search in the current editor text.</td> +</tr><tr> <td><a href="#QsciScintillaCompat.findFirstTarget">findFirstTarget</a></td> <td>Public method to search in a specified range of text without setting the selection.</td> </tr><tr> @@ -385,6 +388,9 @@ <td><a href="#QsciScintillaCompat.setVirtualSpaceOptions">setVirtualSpaceOptions</a></td> <td>Public method to set the virtual space usage options.</td> </tr><tr> +<td><a href="#QsciScintillaCompat.setWrapStartIndent">setWrapStartIndent</a></td> +<td>Public method to set a the amount of characters wrapped sublines shall be indented.</td> +</tr><tr> <td><a href="#QsciScintillaCompat.showFindIndicator">showFindIndicator</a></td> <td>Public method to show the find indicator for the given range.</td> </tr><tr> @@ -757,49 +763,109 @@ <b>extendSelectionWordRight</b>(<i></i>) <p> Public method to extend the selection one word to the right. -</p><a NAME="QsciScintillaCompat.findFirstTarget" ID="QsciScintillaCompat.findFirstTarget"></a> +</p><a NAME="QsciScintillaCompat.findFirst" ID="QsciScintillaCompat.findFirst"></a> +<h4>QsciScintillaCompat.findFirst</h4> +<b>findFirst</b>(<i>expression, regexp, caseSensitive, word, wrap, forward=True, line=-1, index=-1, show=True, posix=False, cxx11=False</i>) +<p> + Public method to search in the current editor text. +</p><dl> +<dt><i>expression</i> (str)</dt> +<dd> +search expression +</dd><dt><i>regexp</i> (bool)</dt> +<dd> +flag indicating a regular expression +</dd><dt><i>caseSensitive</i> (bool)</dt> +<dd> +flag indicating a case sensitive search +</dd><dt><i>word</i> (bool)</dt> +<dd> +flag indicating a word only search +</dd><dt><i>wrap</i> (bool)</dt> +<dd> +flag indicating to warp around +</dd><dt><i>forward</i> (bool)</dt> +<dd> +flag indicating the search direction +</dd><dt><i>line</i> (int)</dt> +<dd> +line to start the search on +</dd><dt><i>index</i> (int)</dt> +<dd> +index to start the search on +</dd><dt><i>show</i> (bool)</dt> +<dd> +flag indicating to set the selection to the found + expression +</dd><dt><i>posix</i> (bool)</dt> +<dd> +flag indicating the POSIX regular expression search mode +</dd><dt><i>cxx11</i> (bool)</dt> +<dd> +flag indicating the CXX11 regular expression search mode +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating a successful search +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl><a NAME="QsciScintillaCompat.findFirstTarget" ID="QsciScintillaCompat.findFirstTarget"></a> <h4>QsciScintillaCompat.findFirstTarget</h4> -<b>findFirstTarget</b>(<i>expr_, re_, cs_, wo_, begline=-1, begindex=-1, endline=-1, endindex=-1, ws_=False</i>) +<b>findFirstTarget</b>(<i>expr_, re_, cs_, wo_, begline=-1, begindex=-1, endline=-1, endindex=-1, ws_=False, posix=False, cxx11=False</i>) <p> Public method to search in a specified range of text without setting the selection. </p><dl> -<dt><i>expr_</i></dt> +<dt><i>expr_</i> (str)</dt> <dd> -search expression (string) -</dd><dt><i>re_</i></dt> +search expression +</dd><dt><i>re_</i> (bool)</dt> <dd> -flag indicating a regular expression (boolean) -</dd><dt><i>cs_</i></dt> +flag indicating a regular expression +</dd><dt><i>cs_</i> (bool)</dt> <dd> -flag indicating a case sensitive search (boolean) -</dd><dt><i>wo_</i></dt> +flag indicating a case sensitive search +</dd><dt><i>wo_</i> (bool)</dt> <dd> -flag indicating a word only search (boolean) -</dd><dt><i>begline=</i></dt> +flag indicating a word only search +</dd><dt><i>begline</i> (int)</dt> <dd> line number to start from (-1 to indicate current - position) (integer) -</dd><dt><i>begindex=</i></dt> + position) +</dd><dt><i>begindex</i> (int)</dt> <dd> -index to start from (-1 to indicate current - position) (integer) -</dd><dt><i>endline=</i></dt> +index to start from (-1 to indicate current position) +</dd><dt><i>endline</i> (int)</dt> <dd> -line number to stop at (-1 to indicate end of - document) (integer) -</dd><dt><i>endindex=</i></dt> +line number to stop at (-1 to indicate end of document) +</dd><dt><i>endindex</i> (int)</dt> <dd> index number to stop at (-1 to indicate end of - document) (integer) -</dd><dt><i>ws_=</i></dt> + document) +</dd><dt><i>ws_</i> (bool)</dt> <dd> flag indicating a word start search (boolean) +</dd><dt><i>posix</i> (bool)</dt> +<dd> + +</dd><dt><i>cxx11</i> (bool)</dt> +<dd> + </dd> </dl><dl> <dt>Returns:</dt> <dd> -flag indicating a successful search (boolean) +flag indicating a successful search +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool </dd> </dl><a NAME="QsciScintillaCompat.findNextTarget" ID="QsciScintillaCompat.findNextTarget"></a> <h4>QsciScintillaCompat.findNextTarget</h4> @@ -1705,6 +1771,17 @@ <dd> usage options to set (integer, 0 to 3) </dd> +</dl><a NAME="QsciScintillaCompat.setWrapStartIndent" ID="QsciScintillaCompat.setWrapStartIndent"></a> +<h4>QsciScintillaCompat.setWrapStartIndent</h4> +<b>setWrapStartIndent</b>(<i>indent</i>) +<p> + Public method to set a the amount of characters wrapped sublines + shall be indented. +</p><dl> +<dt><i>indent</i> (int)</dt> +<dd> +amount of characters to indent +</dd> </dl><a NAME="QsciScintillaCompat.showFindIndicator" ID="QsciScintillaCompat.showFindIndicator"></a> <h4>QsciScintillaCompat.showFindIndicator</h4> <b>showFindIndicator</b>(<i>sline, sindex, eline, eindex</i>)
--- a/Documentation/Source/eric6.UI.EmailDialog.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.UI.EmailDialog.html Fri Apr 05 19:06:39 2019 +0200 @@ -36,10 +36,7 @@ </table> <h3>Functions</h3> <table> -<tr> -<td><a href="#_encode_base64">_encode_base64</a></td> -<td>Function to encode the message's payload in Base64.</td> -</tr> +<tr><td>None</td></tr> </table> <hr /><hr /> <a NAME="EmailDialog" ID="EmailDialog"></a> @@ -69,12 +66,18 @@ <td><a href="#EmailDialog.__createSimpleMail">__createSimpleMail</a></td> <td>Private method to create a simple mail message.</td> </tr><tr> +<td><a href="#EmailDialog.__deleteAttachedFiles">__deleteAttachedFiles</a></td> +<td>Private method to delete attached files.</td> +</tr><tr> <td><a href="#EmailDialog.__encodedHeader">__encodedHeader</a></td> <td>Private method to create a correctly encoded mail header.</td> </tr><tr> <td><a href="#EmailDialog.__encodedText">__encodedText</a></td> <td>Private method to create a MIMEText message with correct encoding.</td> </tr><tr> +<td><a href="#EmailDialog.__gmailSendResult">__gmailSendResult</a></td> +<td>Private slot handling the send result reported by the Google Mail interface.</td> +</tr><tr> <td><a href="#EmailDialog.__sendmail">__sendmail</a></td> <td>Private method to actually send the message.</td> </tr><tr> @@ -159,7 +162,12 @@ <dd> email.mime.text.MIMEText </dd> -</dl><a NAME="EmailDialog.__encodedHeader" ID="EmailDialog.__encodedHeader"></a> +</dl><a NAME="EmailDialog.__deleteAttachedFiles" ID="EmailDialog.__deleteAttachedFiles"></a> +<h4>EmailDialog.__deleteAttachedFiles</h4> +<b>__deleteAttachedFiles</b>(<i></i>) +<p> + Private method to delete attached files. +</p><a NAME="EmailDialog.__encodedHeader" ID="EmailDialog.__encodedHeader"></a> <h4>EmailDialog.__encodedHeader</h4> <b>__encodedHeader</b>(<i>txt</i>) <p> @@ -189,6 +197,20 @@ <dd> MIMEText object </dd> +</dl><a NAME="EmailDialog.__gmailSendResult" ID="EmailDialog.__gmailSendResult"></a> +<h4>EmailDialog.__gmailSendResult</h4> +<b>__gmailSendResult</b>(<i>ok, message</i>) +<p> + Private slot handling the send result reported by the Google Mail + interface. +</p><dl> +<dt><i>ok</i> (bool)</dt> +<dd> +flag indicating success +</dd><dt><i>message</i> (str)</dt> +<dd> +message from the interface +</dd> </dl><a NAME="EmailDialog.__sendmail" ID="EmailDialog.__sendmail"></a> <h4>EmailDialog.__sendmail</h4> <b>__sendmail</b>(<i>msg</i>) @@ -214,16 +236,6 @@ <dd> email message to be sent </dd> -</dl><dl> -<dt>Returns:</dt> -<dd> -flag indicating success -</dd> -</dl><dl> -<dt>Return Type:</dt> -<dd> -bool -</dd> </dl><a NAME="EmailDialog.attachFile" ID="EmailDialog.attachFile"></a> <h4>EmailDialog.attachFile</h4> <b>attachFile</b>(<i>fname, deleteFile</i>) @@ -300,20 +312,5 @@ </dd> </dl> <div align="right"><a href="#top">Up</a></div> -<hr /><hr /> -<a NAME="_encode_base64" ID="_encode_base64"></a> -<h2>_encode_base64</h2> -<b>_encode_base64</b>(<i>msg</i>) -<p> - Function to encode the message's payload in Base64. -</p><p> - Note: It adds an appropriate Content-Transfer-Encoding header. -</p><dl> -<dt><i>msg</i></dt> -<dd> -reference to the message object (email.Message) -</dd> -</dl> -<div align="right"><a href="#top">Up</a></div> <hr /> </body></html> \ No newline at end of file
--- a/Documentation/Source/eric6.VirtualEnv.VirtualenvManager.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/eric6.VirtualEnv.VirtualenvManager.html Fri Apr 05 19:06:39 2019 +0200 @@ -114,6 +114,9 @@ <td><a href="#VirtualenvManager.getVirtualenvNamesForVariant">getVirtualenvNamesForVariant</a></td> <td>Public method to get a list of virtual environments for a given Python variant.</td> </tr><tr> +<td><a href="#VirtualenvManager.getVirtualenvVariant">getVirtualenvVariant</a></td> +<td>Public method to get the variant of a virtual environment.</td> +</tr><tr> <td><a href="#VirtualenvManager.isCondaEnvironment">isCondaEnvironment</a></td> <td>Public method to test, if a given environment is an Anaconda environment.</td> </tr><tr> @@ -367,6 +370,26 @@ <dd> list of str </dd> +</dl><a NAME="VirtualenvManager.getVirtualenvVariant" ID="VirtualenvManager.getVirtualenvVariant"></a> +<h4>VirtualenvManager.getVirtualenvVariant</h4> +<b>getVirtualenvVariant</b>(<i>venvName</i>) +<p> + Public method to get the variant of a virtual environment. +</p><dl> +<dt><i>venvName</i> (str)</dt> +<dd> +logical name for the virtual environment +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +Python variant of the environment +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> </dl><a NAME="VirtualenvManager.isCondaEnvironment" ID="VirtualenvManager.isCondaEnvironment"></a> <h4>VirtualenvManager.isCondaEnvironment</h4> <b>isCondaEnvironment</b>(<i>venvName</i>)
--- a/Documentation/Source/index-eric6.E5Network.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/index-eric6.E5Network.html Fri Apr 05 19:06:39 2019 +0200 @@ -41,6 +41,9 @@ <td><a href="eric6.E5Network.E5GoogleMail.html">E5GoogleMail</a></td> <td>Module implementing a dialog to send bug reports.</td> </tr><tr> +<td><a href="eric6.E5Network.E5GoogleMailHelpers.html">E5GoogleMailHelpers</a></td> +<td>Module implementing some helpers for Google mail.</td> +</tr><tr> <td><a href="eric6.E5Network.E5NetworkHeaderDetailsDialog.html">E5NetworkHeaderDetailsDialog</a></td> <td>Module implementing a dialog to show the data of a response or reply header.</td> </tr><tr>
--- a/Documentation/Source/index-eric6.Preferences.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/index-eric6.Preferences.html Fri Apr 05 19:06:39 2019 +0200 @@ -51,7 +51,7 @@ <td>Module implementing a dialog for the configuration of a mouse click sequence.</td> </tr><tr> <td><a href="eric6.Preferences.PreferencesLexer.html">PreferencesLexer</a></td> -<td>Module implementing a special QextScintilla lexer to handle the preferences.</td> +<td>Module implementing a special QScintilla lexer to handle the preferences.</td> </tr><tr> <td><a href="eric6.Preferences.ProgramsDialog.html">ProgramsDialog</a></td> <td>Module implementing the Programs page.</td> @@ -65,6 +65,9 @@ <td><a href="eric6.Preferences.ShortcutsDialog.html">ShortcutsDialog</a></td> <td>Module implementing a dialog for the configuration of eric6's keyboard shortcuts.</td> </tr><tr> +<td><a href="eric6.Preferences.SubstyleDefinitionDialog.html">SubstyleDefinitionDialog</a></td> +<td>Module implementing the sub-style definition dialog.</td> +</tr><tr> <td><a href="eric6.Preferences.ToolConfigurationDialog.html">ToolConfigurationDialog</a></td> <td>Module implementing a configuration dialog for the tools menu.</td> </tr><tr>
--- a/Documentation/Source/index-eric6.QScintilla.Lexers.html Sat Mar 02 11:17:15 2019 +0100 +++ b/Documentation/Source/index-eric6.QScintilla.Lexers.html Fri Apr 05 19:06:39 2019 +0200 @@ -145,6 +145,9 @@ <td><a href="eric6.QScintilla.Lexers.LexerYAML.html">LexerYAML</a></td> <td>Module implementing a YAML lexer with some additional methods.</td> </tr><tr> +<td><a href="eric6.QScintilla.Lexers.SubstyledLexer.html">SubstyledLexer</a></td> +<td>Module implementing the lexer mixin class.</td> +</tr><tr> <td><a href="eric6.QScintilla.Lexers.__init__.html">Lexers</a></td> <td>Package implementing lexers for the various supported programming languages.</td> </tr>
--- a/E5Gui/E5PassivePopup.py Sat Mar 02 11:17:15 2019 +0100 +++ b/E5Gui/E5PassivePopup.py Fri Apr 05 19:06:39 2019 +0200 @@ -13,6 +13,8 @@ from PyQt5.QtCore import pyqtSignal, Qt, QTimer, QPoint, QRect from PyQt5.QtWidgets import QFrame, QVBoxLayout, QApplication +from Globals import qVersionTuple + class E5PassivePopup(QFrame): """ @@ -189,8 +191,12 @@ w = self.minimumSizeHint().width() h = self.minimumSizeHint().height() - r = QApplication.desktop().screenGeometry( - QPoint(x + w // 2, y + h // 2)) + if qVersionTuple() >= (5, 10, 0): + r = QApplication.screenAt(QPoint(x + w // 2, y + h // 2))\ + .geometry() + else: + r = QApplication.desktop().screenGeometry( + QPoint(x + w // 2, y + h // 2)) if x < r.center().x(): x += target.width()
--- a/E5Network/E5GoogleMail.py Sat Mar 02 11:17:15 2019 +0100 +++ b/E5Network/E5GoogleMail.py Fri Apr 05 19:06:39 2019 +0200 @@ -16,125 +16,343 @@ import os import sys import base64 -import pickle +import json +import datetime from googleapiclient import discovery -from google_auth_oauthlib.flow import InstalledAppFlow -from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from requests_oauthlib import OAuth2Session -from PyQt5.QtCore import QCoreApplication +from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject, QUrl +from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout + +from E5Gui.E5TextInputDialog import E5TextInputDialog import Globals - -SCOPES = 'https://www.googleapis.com/auth/gmail.send' -CLIENT_SECRET_FILE = 'eric_client_secret.json' -CREDENTIALS_FILE = 'eric-python-email-send.pickle' -APPLICATION_NAME = 'Eric Python Send Email' - - -def isClientSecretFileAvailable(): - """ - Module function to check, if the client secret file has been installed. - - @return flag indicating, that the credentials file is there - @rtype bool - """ - return os.path.exists( - os.path.join(Globals.getConfigDir(), CLIENT_SECRET_FILE)) +from .E5GoogleMailHelpers import CLIENT_SECRET_FILE, SCOPES, TOKEN_FILE, \ + APPLICATION_NAME -def getCredentials(): +class E5GoogleMailAuthBrowser(QDialog): """ - Module function to get the Google credentials. + Class implementing a simple web browser to perform the OAuth2 + authentication process. - @return Google Mail credentials + @signal approvalCodeReceived(str) emitted to indicate the receipt of the + approval code """ - homeDir = os.path.expanduser('~') - credentialsDir = os.path.join(homeDir, '.credentials') - if not os.path.exists(credentialsDir): - os.makedirs(credentialsDir) - credentialsPath = os.path.join(credentialsDir, CREDENTIALS_FILE) - - credentials = None - # The file eric-python-email-send.pickle stores the user's access and - # refresh tokens, and is created automatically when the authorization - # flow completes for the first time. - if os.path.exists(credentialsPath): - with open(credentialsPath, 'rb') as token: - credentials = pickle.load(token) - # If there are no (valid) credentials available, let the user log in. - if not credentials or not credentials.valid: - if credentials and credentials.expired and credentials.refresh_token: - credentials.refresh(Request()) - else: - flow = InstalledAppFlow.from_client_secrets_file( - os.path.join(Globals.getConfigDir(), CLIENT_SECRET_FILE), - SCOPES) - credentials = flow.run_local_server() - # Save the credentials for the next run - with open(credentialsPath, 'wb') as credentialsFile: - pickle.dump(credentials, credentialsFile) - return credentials + approvalCodeReceived = pyqtSignal(str) + + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget + @type QWidget + """ + super(E5GoogleMailAuthBrowser, self).__init__(parent) + + self.__layout = QVBoxLayout(self) + + try: + from PyQt5.QtWebEngineWidgets import QWebEngineView + self.__browser = QWebEngineView(self) + self.__browser.titleChanged.connect(self.__titleChanged) + self.__browser.loadFinished.connect(self.__pageLoadFinished) + except ImportError: + from PyQt5.QtWebKitWidgets import QWebView + self.__browser = QWebView(self) + self.__browser.titleChanged.connect(self.__titleChanged) + self.__browser.loadFinished.connect(self.__pageLoadFinished) + self.__layout.addWidget(self.__browser) + + self.__buttonBox = QDialogButtonBox(QDialogButtonBox.Close) + self.__buttonBox.rejected.connect(self.reject) + self.__layout.addWidget(self.__buttonBox) + + self.resize(600, 700) + + @pyqtSlot(str) + def __titleChanged(self, title): + """ + Private slot handling changes of the web page title. + + @param title web page title + @type str + """ + self.setWindowTitle(title) + + @pyqtSlot() + def __pageLoadFinished(self): + """ + Private slot handling the loadFinished signal. + """ + url = self.__browser.url() + if url.toString().startswith( + "https://accounts.google.com/o/oauth2/approval/v2"): + if Globals.qVersionTuple() >= (5, 0, 0): + from PyQt5.QtCore import QUrlQuery + urlQuery = QUrlQuery(url) + approvalCode = urlQuery.queryItemValue( + "approvalCode", QUrl.FullyDecoded) + else: + approvalCode = QUrl.fromPercentEncoding( + url.encodedQueryItemValue(b"approvalCode")) + if approvalCode: + self.approvalCodeReceived.emit(approvalCode) + self.close() + + def load(self, url): + """ + Public method to start the authorization flow by loading the given URL. + + @param url URL to be laoded + @type str or QUrl + """ + self.__browser.setUrl(QUrl(url)) -def GoogleMailSendMessage(message): +class E5GoogleMail(QObject): """ - Module function to send an email message via Google Mail. + Class implementing the logic to send emails via Google Mail. - @param message email message to be sent - @type email.mime.text.MIMEBase - @return tuple containing a success flag and a result or error message - @rtype tuple of (bool, str) + @signal sendResult(bool, str) emitted to indicate the transmission result + and a result message """ - # check for secrets file first - if not os.path.exists(os.path.join(Globals.getConfigDir(), - CLIENT_SECRET_FILE)): - return False, QCoreApplication.translate( - "GoogleMailSendMessage", - "The credentials file is not present. Has the Gmail API" - " been enabled?") + sendResult = pyqtSignal(bool, str) + + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent object + @type QObject + """ + super(E5GoogleMail, self).__init__(parent=parent) + + self.__messages = [] + + self.__session = None + self.__clientConfig = {} + + self.__browser = None + + def sendMessage(self, message): + """ + Public method to send a message via Google Mail. + + @param message email message to be sent + @type email.mime.text.MIMEBase + """ + self.__messages.append(message) + + if not self.__session: + self.__startSession() + else: + self.__doSendMessages() + + def __prepareMessage_v2(self, message): + """ + Private method to prepare the message for sending (Python2 Variant). + + @param message message to be prepared + @type email.mime.text.MIMEBase + @return prepared message dictionary + @rtype dict + """ + raw = base64.urlsafe_b64encode(message.as_string()) + return {'raw': raw} + + def __prepareMessage_v3(self, message): + """ + Private method to prepare the message for sending (Python2 Variant). + + @param message message to be prepared + @type email.mime.text.MIMEBase + @return prepared message dictionary + @rtype dict + """ + messageAsBase64 = base64.urlsafe_b64encode(message.as_bytes()) + raw = messageAsBase64.decode() + return {'raw': raw} - try: - credentials = getCredentials() - service = discovery.build('gmail', 'v1', credentials=credentials) - if sys.version_info[0] == 2: - message1 = _prepareMessage_v2(message) + def __startSession(self): + """ + Private method to start an authorized session and optionally start the + authorization flow. + """ + # check for availability of secrets file + if not os.path.exists(os.path.join(Globals.getConfigDir(), + CLIENT_SECRET_FILE)): + self.sendResult.emit( + False, + self.tr("The client secrets file is not present. Has the Gmail" + " API been enabled?") + ) + return + + with open(os.path.join(Globals.getConfigDir(), CLIENT_SECRET_FILE), + "r") as clientSecret: + clientData = json.load(clientSecret) + self.__clientConfig = clientData['installed'] + token = self.__loadToken() + if token is None: + # no valid OAuth2 token available + self.__session = OAuth2Session( + self.__clientConfig['client_id'], + scope=SCOPES, + redirect_uri=self.__clientConfig['redirect_uris'][0] + ) + authorizationUrl, _ = self.__session.authorization_url( + self.__clientConfig['auth_uri'], + access_type="offline", + prompt="select_account" + ) + if self.__browser is None: + try: + self.__browser = E5GoogleMailAuthBrowser() + self.__browser.approvalCodeReceived.connect( + self.__processAuthorization) + except ImportError: + pass + if self.__browser: + self.__browser.show() + self.__browser.load(QUrl(authorizationUrl)) + else: + from PyQt5.QtGui import QDesktopServices + QDesktopServices.openUrl(QUrl(authorizationUrl)) + ok, authCode = E5TextInputDialog.getText( + None, + self.tr("OAuth2 Authorization Code"), + self.tr("Enter the OAuth2 authorization code:")) + if ok and authCode: + self.__processAuthorization(authCode) + else: + self.__session = None else: - message1 = _prepareMessage_v3(message) - result = service.users().messages()\ - .send(userId="me", body=message1).execute() + self.__session = OAuth2Session( + self.__clientConfig['client_id'], + scope=SCOPES, + redirect_uri=self.__clientConfig['redirect_uris'][0], + token=token, + auto_refresh_kwargs={ + 'client_id': self.__clientConfig['client_id'], + 'client_secret': self.__clientConfig['client_secret'], + }, + auto_refresh_url=self.__clientConfig['token_uri'], + token_updater=self.__saveToken) + self.__doSendMessages() + + @pyqtSlot(str) + def __processAuthorization(self, authCode): + """ + Private slot to process the received authorization code. + + @param authCode received authorization code + @type str + """ + self.__session.fetch_token( + self.__clientConfig['token_uri'], + client_secret=self.__clientConfig['client_secret'], + code=authCode) + self.__saveToken(self.__session.token) + + # authorization completed; now send all queued messages + self.__doSendMessages() + + def __doSendMessages(self): + """ + Private method to send all queued messages. + """ + if not self.__session: + self.sendResult.emit( + False, + self.tr("No authorized session available.") + ) + return + + try: + results = [] + credentials = self.__credentialsFromSession() + service = discovery.build('gmail', 'v1', credentials=credentials, + cache_discovery=False) + count = 0 + while self.__messages: + count += 1 + message = self.__messages.pop(0) + if sys.version_info[0] == 2: + message1 = self.__prepareMessage_v2(message) + else: + message1 = self.__prepareMessage_v3(message) + service.users().messages()\ + .send(userId="me", body=message1).execute() + results.append(self.tr("Message #{0} sent.").format(count)) - return True, result - except Exception as error: - return False, str(error) - - -def _prepareMessage_v2(message): - """ - Module function to prepare the message for sending (Python2 Variant). + self.sendResult.emit(True, "\n\n".join(results)) + except Exception as error: + self.sendResult.emit(False, str(error)) + + def __loadToken(self): + """ + Private method to load a token from the token file. + + @return loaded token + @rtype dict or None + """ + homeDir = os.path.expanduser('~') + credentialsDir = os.path.join(homeDir, '.credentials') + if not os.path.exists(credentialsDir): + os.makedirs(credentialsDir) + tokenPath = os.path.join(credentialsDir, TOKEN_FILE) + + if os.path.exists(tokenPath): + with open(tokenPath, "r") as tokenFile: + return json.load(tokenFile) + else: + return None - @param message message to be prepared - @type email.mime.text.MIMEBase - @return prepared message dictionary - @rtype dict - """ - raw = base64.urlsafe_b64encode(message.as_string()) - return {'raw': raw} - - -def _prepareMessage_v3(message): - """ - Module function to prepare the message for sending (Python2 Variant). + def __saveToken(self, token): + """ + Private method to save a token to the token file. + + @param token token to be saved + @type dict + """ + homeDir = os.path.expanduser('~') + credentialsDir = os.path.join(homeDir, '.credentials') + if not os.path.exists(credentialsDir): + os.makedirs(credentialsDir) + tokenPath = os.path.join(credentialsDir, TOKEN_FILE) + + with open(tokenPath, "w") as tokenFile: + json.dump(token, tokenFile) - @param message message to be prepared - @type email.mime.text.MIMEBase - @return prepared message dictionary - @rtype dict - """ - messageAsBase64 = base64.urlsafe_b64encode(message.as_bytes()) - raw = messageAsBase64.decode() - return {'raw': raw} + def __credentialsFromSession(self): + """ + Private method to create a credentials object. + + @return created credentials object + @rtype google.oauth2.credentials.Credentials + """ + credentials = None + + if self.__clientConfig and self.__session: + token = self.__session.token + if token: + credentials = Credentials( + token['access_token'], + refresh_token=token.get('refresh_token'), + id_token=token.get('id_token'), + token_uri=self.__clientConfig['token_uri'], + client_id=self.__clientConfig['client_id'], + client_secret=self.__clientConfig['client_secret'], + scopes=SCOPES + ) + credentials.expiry = datetime.datetime.fromtimestamp( + token['expires_at']) + + return credentials def GoogleMailHelp():
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/E5Network/E5GoogleMailHelpers.py Fri Apr 05 19:06:39 2019 +0200 @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing some helpers for Google mail. +""" + +from __future__ import unicode_literals + +import os + +import Globals + +SCOPES = 'https://www.googleapis.com/auth/gmail.send' +CLIENT_SECRET_FILE = 'eric_client_secret.json' +TOKEN_FILE = 'eric_python_email_send_token.json' +APPLICATION_NAME = 'Eric Python Send Email' + +RequiredPackages = ( + "google-api-python-client", + "requests-oauthlib", +) + + +def isClientSecretFileAvailable(): + """ + Module function to check, if the client secret file has been installed. + + @return flag indicating, that the credentials file is there + @rtype bool + """ + return os.path.exists( + os.path.join(Globals.getConfigDir(), CLIENT_SECRET_FILE)) + + +def getInstallCommand(): + """ + Module function to get the install command to get the Google mail support + activated. + + @return install command + @rtype str + """ + pipCommand = "pip install --upgrade {0}".format( + " ".join(RequiredPackages)) + + return pipCommand
--- a/E5Network/E5RFC6266.py Sat Mar 02 11:17:15 2019 +0100 +++ b/E5Network/E5RFC6266.py Fri Apr 05 19:06:39 2019 +0200 @@ -251,6 +251,8 @@ elif 'filename' in self.assocs: # XXX Reject non-ascii (parsed via qdtext) here? return self.assocs['filename'] + else: + return None def is_inline(self): """
--- a/E5XML/Config.py Sat Mar 02 11:17:15 2019 +0100 +++ b/E5XML/Config.py Fri Apr 05 19:06:39 2019 +0200 @@ -40,7 +40,7 @@ pluginRepositoryFileFormatVersion = "4.2" # version number of the highlighting styles file -highlightingStylesFileFormatVersion = "4.3" +highlightingStylesFileFormatVersion = "6.0" # version number of the web browser spell check dictionaries list file dictionariesListFileFormatVersion = "1.0"
--- a/E5XML/HighlightingStylesReader.py Sat Mar 02 11:17:15 2019 +0100 +++ b/E5XML/HighlightingStylesReader.py Fri Apr 05 19:06:39 2019 +0200 @@ -20,7 +20,7 @@ """ Class for reading a highlighting styles XML file. """ - supportedVersions = ["4.3"] + supportedVersions = ["4.3", "6.0"] def __init__(self, device, lexers): """ @@ -86,42 +86,65 @@ style = self.attribute("style") if style: style = int(style) + substyle = int(self.attribute("substyle", "-1")) + # -1 is default for base styles + + # add sub-style if not already there + if not lexer.hasStyle(style, substyle): + substyle = lexer.addSubstyle(style) color = self.attribute("color") if color: color = QColor(color) else: - color = lexer.defaultColor(style) - lexer.setColor(color, style) + color = lexer.defaultColor(style, substyle) + lexer.setColor(color, style, substyle) paper = self.attribute("paper") if paper: paper = QColor(paper) else: - paper = lexer.defaultPaper(style) - lexer.setPaper(paper, style) + paper = lexer.defaultPaper(style, substyle) + lexer.setPaper(paper, style, substyle) fontStr = self.attribute("font") if fontStr: font = QFont() font.fromString(fontStr) else: - font = lexer.defaultFont(style) - lexer.setFont(font, style) + font = lexer.defaultFont(style, substyle) + lexer.setFont(font, style, substyle) eolfill = self.attribute("eolfill") if eolfill: eolfill = self.toBool(eolfill) if eolfill is None: - eolfill = lexer.defaulEolFill(style) + eolfill = lexer.defaulEolFill(style, substyle) else: - eolfill = lexer.defaulEolFill(style) - lexer.setEolFill(eolfill, style) + eolfill = lexer.defaulEolFill(style, substyle) + lexer.setEolFill(eolfill, style, substyle) + + while not self.atEnd(): + self.readNext() + if self.isStartElement(): + if self.name() == "Description" and substyle >= 0: + # description can only be set for sub-styles + description = self.readElementText().strip() + if not description: + description = lexer.defaultDescription( + style, substyle) + lexer.setDescription(description, style, substyle) + elif self.name() == "Words" and substyle >= 0: + # words can only be set for sub-styles + words = self.readElementText().strip() + if not words: + words = lexer.defaultWords(style, substyle) + lexer.setWords(words, style, substyle) + + if self.isEndElement() and self.name() == "Style": + return while not self.atEnd(): self.readNext() if self.isEndElement() and self.name() == "Style": break - - if self.isStartElement(): - self.raiseUnexpectedStartTag(self.name())
--- a/E5XML/HighlightingStylesWriter.py Sat Mar 02 11:17:15 2019 +0100 +++ b/E5XML/HighlightingStylesWriter.py Fri Apr 05 19:06:39 2019 +0200 @@ -59,16 +59,27 @@ for lexer in self.lexers: self.writeStartElement("Lexer") self.writeAttribute("name", lexer.language()) - for style in lexer.descriptions: + for description, style, substyle in lexer.getStyles(): self.writeStartElement("Style") self.writeAttribute("style", str(style)) - self.writeAttribute("color", lexer.color(style).name()) - self.writeAttribute("paper", lexer.paper(style).name()) - self.writeAttribute("font", lexer.font(style).toString()) - self.writeAttribute("eolfill", str(lexer.eolFill(style))) - self.writeCharacters(lexer.description(style)) - self.writeEndElement() - self.writeEndElement() + self.writeAttribute("substyle", str(substyle)) + self.writeAttribute("color", + lexer.color(style, substyle).name()) + self.writeAttribute("paper", + lexer.paper(style, substyle).name()) + self.writeAttribute("font", + lexer.font(style, substyle).toString()) + self.writeAttribute("eolfill", + str(lexer.eolFill(style, substyle))) + self.writeStartElement("Description") + self.writeCharacters(description) + self.writeEndElement() # Description + if substyle >= 0: + self.writeStartElement("Words") + self.writeCharacters(lexer.words(style, substyle).strip()) + self.writeEndElement() # Words + self.writeEndElement() # Style + self.writeEndElement() # Lexer - self.writeEndElement() + self.writeEndElement() # HighlightingStyles self.writeEndDocument()
--- a/Helpviewer/AdBlock/AdBlockBlockedNetworkReply.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Helpviewer/AdBlock/AdBlockBlockedNetworkReply.py Fri Apr 05 19:06:39 2019 +0200 @@ -52,7 +52,7 @@ @param maxlen maximum number of bytes to read (integer) @return string containing the data (string) """ - return None + return "" def abort(self): """
--- a/Helpviewer/Network/FileReply.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Helpviewer/Network/FileReply.py Fri Apr 05 19:06:39 2019 +0200 @@ -158,6 +158,8 @@ buffer = bytes(self.__content[:len_]) self.__content.remove(0, len_) return buffer + else: + return b"" def __cssLinkClass(self, icon, size=32): """
--- a/Helpviewer/Network/FtpReply.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Helpviewer/Network/FtpReply.py Fri Apr 05 19:06:39 2019 +0200 @@ -194,6 +194,8 @@ buffer = bytes(self.__content[:len_]) self.__content.remove(0, len_) return buffer + else: + return b"" def __doFtpCommands(self): """
--- a/Helpviewer/OfflineStorage/WebDatabasesModel.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Helpviewer/OfflineStorage/WebDatabasesModel.py Fri Apr 05 19:06:39 2019 +0200 @@ -124,6 +124,8 @@ db.displayName(), db.name()) elif index.column() == 1: return self.__dataString(db.size()) + + return None def columnCount(self, parent=None): """
--- a/Helpviewer/OpenSearch/OpenSearchManager.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Helpviewer/OpenSearch/OpenSearchManager.py Fri Apr 05 19:06:39 2019 +0200 @@ -168,7 +168,7 @@ @return flag indicating success (boolean) """ if not url.isValid(): - return + return False from Helpviewer.HelpWindow import HelpWindow
--- a/HexEdit/HexEditChunks.py Sat Mar 02 11:17:15 2019 +0100 +++ b/HexEdit/HexEditChunks.py Fri Apr 05 19:06:39 2019 +0200 @@ -351,7 +351,7 @@ """ if pos < 0 or pos >= self.__size: # position is out of range, do nothing - return + return False chunkIdx = self.__getChunkIndex(pos) chunk = self.__chunks[chunkIdx]
--- a/HexEdit/HexEditSearchReplaceWidget.py Sat Mar 02 11:17:15 2019 +0100 +++ b/HexEdit/HexEditSearchReplaceWidget.py Fri Apr 05 19:06:39 2019 +0200 @@ -242,7 +242,7 @@ """ if not self.__havefound or not self.__ui.findtextCombo.currentText(): self.show() - return + return False self.__findBackwards = prev ba, txt = self.__getContent()
--- a/MultiProject/MultiProject.py Sat Mar 02 11:17:15 2019 +0100 +++ b/MultiProject/MultiProject.py Fri Apr 05 19:06:39 2019 +0200 @@ -13,14 +13,15 @@ import shutil from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QFileInfo, QFile, \ - QIODevice, QObject + QIODevice, QObject, QUuid from PyQt5.QtGui import QCursor from PyQt5.QtWidgets import QMenu, QApplication, QDialog, QToolBar from Globals import recentNameMultiProject from E5Gui.E5Action import E5Action, createActionGroup -from E5Gui import E5FileDialog, E5MessageBox +from E5Gui import E5FileDialog, E5MessageBox, E5PathPickerDialog +from E5Gui.E5PathPickerDialog import E5PathPickerModes import UI.PixmapCache @@ -353,6 +354,56 @@ self.projectAdded.emit(project) self.setDirty(True) + def copyProject(self, uid): + """ + Public method to copy the project with given UID on disk. + + @param uid UID of the project to copy + @type str + """ + if uid in self.__projects: + startdir = self.ppath + if not startdir: + startdir = Preferences.getMultiProject("Workspace") + srcProject = self.__projects[uid] + srcProjectDirectory = os.path.dirname(srcProject["file"]) + dstProjectDirectory, ok = E5PathPickerDialog.getPath( + self.parent(), + self.tr("Copy Project"), + self.tr("Enter directory for the new project (must not exist" + " already):"), + mode=E5PathPickerModes.DirectoryMode, + path=srcProjectDirectory, + defaultDirectory=startdir, + ) + if ok and dstProjectDirectory and \ + not os.path.exists(dstProjectDirectory): + try: + shutil.copytree(srcProjectDirectory, dstProjectDirectory) + except shutil.Error: + E5MessageBox.critical( + self.parent(), + self.tr("Copy Project"), + self.tr("<p>The source project <b>{0}</b> could not" + " be copied to its destination <b>{1}</b>." + "</p>").format(srcProjectDirectory, + dstProjectDirectory)) + return + + dstUid = QUuid.createUuid().toString() + dstProject = { + 'name': self.tr("{0} - Copy").format(srcProject["name"]), + 'file': os.path.join(dstProjectDirectory, + os.path.basename(srcProject["file"])), + 'master': False, + 'description': srcProject["description"], + 'category': srcProject["category"], + 'uid': dstUid, + } + self.__projects[dstUid] = dstProject + self.projectAdded.emit(dstProject) + self.setDirty(True) + def changeProjectProperties(self, pro): """ Public method to change the data of a project entry.
--- a/MultiProject/MultiProjectBrowser.py Sat Mar 02 11:17:15 2019 +0100 +++ b/MultiProject/MultiProjectBrowser.py Fri Apr 05 19:06:39 2019 +0200 @@ -21,7 +21,6 @@ import UI.PixmapCache -# TODO: add action to copy a project on disk class MultiProjectBrowser(QTreeWidget): """ Class implementing the multi project browser. @@ -397,6 +396,17 @@ category = "" self.multiProject.addNewProject(category=category) + def __copyProject(self): + """ + Private method to copy the selected project on disk. + """ + itm = self.currentItem() + if itm and itm.parent(): + # it is a project item and not a category + uid = itm.data(0, MultiProjectBrowser.ProjectUidRole) + if uid: + self.multiProject.copyProject(uid) + def __createPopupMenu(self): """ Private method to create the popup menu. @@ -412,6 +422,8 @@ self.__menu.addSeparator() self.__menu.addAction(self.tr("Add Project..."), self.__addNewProject) + self.__menu.addAction(self.tr("Copy Project..."), + self.__copyProject) self.__menu.addSeparator() self.__menu.addAction(self.tr("Configure..."), self.__configure)
--- a/PipInterface/Pip.py Sat Mar 02 11:17:15 2019 +0100 +++ b/PipInterface/Pip.py Fri Apr 05 19:06:39 2019 +0200 @@ -343,7 +343,8 @@ dia.exec_() return res - def installPackages(self, packages, venvName, userSite=False): + def installPackages(self, packages, venvName="", userSite=False, + interpreter=""): """ Public method to install the given list of packages. @@ -354,12 +355,15 @@ @param userSite flag indicating an install to the user install directory @type bool + @param interpreter interpreter to be used for execution + @type str """ if venvName: interpreter = self.getVirtualenvInterpreter(venvName) if not interpreter: return - + + if interpreter: if Preferences.getPip("PipSearchIndex"): indexUrl = Preferences.getPip("PipSearchIndex") + "/simple" args = ["-m", "pip", "install", "--index-url", indexUrl] @@ -427,7 +431,7 @@ if dlg.exec_() == QDialog.Accepted: interpreter = self.getVirtualenvInterpreter(venvName) if not interpreter: - return + return False args = ["-m", "pip", "uninstall", "--yes"] + packages dia = PipDialog(self.tr('Uninstall Packages')) res = dia.startProcess(interpreter, args)
--- a/PipInterface/PipPackagesWidget.py Sat Mar 02 11:17:15 2019 +0100 +++ b/PipInterface/PipPackagesWidget.py Fri Apr 05 19:06:39 2019 +0200 @@ -26,8 +26,6 @@ import UI.PixmapCache -from .Pip import Pip - class PipPackagesWidget(QWidget, Ui_PipPackagesWidget): """ @@ -47,10 +45,12 @@ } SearchVersionRole = Qt.UserRole + 1 - def __init__(self, parent=None): + def __init__(self, pip, parent=None): """ Constructor + @param pip reference to the global pip interface + @type Pip @param parent reference to the parent widget @type QWidget """ @@ -78,7 +78,7 @@ self.installUserSiteButton.setIcon(UI.PixmapCache.getIcon("addUser")) self.showDetailsButton.setIcon(UI.PixmapCache.getIcon("info")) - self.__pip = Pip(self) + self.__pip = pip self.__client = E5XmlRpcClient(self.__pip.getIndexUrlXml(), self) self.packagesList.header().setSortIndicator(0, Qt.AscendingOrder)
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py Fri Apr 05 19:06:39 2019 +0200 @@ -208,7 +208,7 @@ if not self.__modified: # no need to write - return + return None if self.__createBackup: # create a backup file before writing any changes @@ -239,7 +239,8 @@ except (IOError, UnicodeError) as err: # Could not save the file! Skipping it. Reason: {0} return ("FWRITE_ERROR", (str(err),)) - return + + return None def __codeMatch(self, code): """ @@ -1954,6 +1955,8 @@ """ if line < len(self.after): return self.after[line] + + return "" def getline(self): """ @@ -2106,7 +2109,7 @@ # pycodestyle.py:continuation_line_indentation. All of the comments # have been stripped and the 'yield' statements replaced with 'pass'. if not self.tokens: - return + return [] first_row = self.tokens[0][2][0] nrows = 1 + self.tokens[-1][2][0] - first_row
--- a/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py Fri Apr 05 19:06:39 2019 +0200 @@ -516,6 +516,8 @@ return DocStyleContext(value, line - 1, "docstring") else: return None + + return None def __parseDocstring(self, context, what=''): """ @@ -613,6 +615,8 @@ indent -= 1 if indent == 0: return kind, value, start, end, raw + + return None def __parseMethods(self): """
--- a/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py Fri Apr 05 19:06:39 2019 +0200 @@ -12,6 +12,7 @@ import re import itertools from string import Formatter +from collections import defaultdict def composeCallPath(node): @@ -60,6 +61,7 @@ "M801", "M811", "M821", "M822", + "M831", "M832", "M833", "M834", "M901", ] @@ -139,6 +141,7 @@ (self.__checkPrintStatements, ("M801",)), (self.__checkTuple, ("M811", )), (self.__checkMutableDefault, ("M821", "M822")), + (self.__checkReturn, ("M831", "M832", "M833", "M834")), ] self.__defaultArgs = { @@ -737,6 +740,17 @@ reason = violation[1] params = violation[2:] self.__error(node.lineno - 1, node.col_offset, reason, *params) + + def __checkReturn(self): + """ + Private method to check return statements. + """ + visitor = ReturnVisitor() + visitor.visit(self.__tree) + for violation in visitor.violations: + node = violation[0] + reason = violation[1] + self.__error(node.lineno - 1, node.col_offset, reason) class TextVisitor(ast.NodeVisitor): @@ -1289,5 +1303,304 @@ """ return self.__names + +class ReturnVisitor(ast.NodeVisitor): + """ + Class implementing a node visitor to check return statements. + """ + Assigns = 'assigns' + Refs = 'refs' + Returns = 'returns' + + def __init__(self): + """ + Constructor + """ + super(ReturnVisitor, self).__init__() + + self.__stack = [] + self.violations = [] + + @property + def assigns(self): + """ + Public method to get the Assign nodes. + + @return dictionary containing the node name as key and line number + as value + @rtype dict + """ + return self.__stack[-1][ReturnVisitor.Assigns] + + @property + def refs(self): + """ + Public method to get the References nodes. + + @return dictionary containing the node name as key and line number + as value + @rtype dict + """ + return self.__stack[-1][ReturnVisitor.Refs] + + @property + def returns(self): + """ + Public method to get the Return nodes. + + @return dictionary containing the node name as key and line number + as value + @rtype dict + """ + return self.__stack[-1][ReturnVisitor.Returns] + + def __visitWithStack(self, node): + """ + Private method to traverse a given function node using a stack. + + @param node AST node to be traversed + @type ast.FunctionDef or ast.AsyncFunctionDef + """ + self.__stack.append({ + ReturnVisitor.Assigns: defaultdict(list), + ReturnVisitor.Refs: defaultdict(list), + ReturnVisitor.Returns: [] + }) + + self.generic_visit(node) + self.__checkFunction(node) + self.__stack.pop() + + def visit_FunctionDef(self, node): + """ + Public method to handle a function definition. + + @param node reference to the node to handle + @type ast.FunctionDef + """ + self.__visitWithStack(node) + + def visit_AsyncFunctionDef(self, node): + """ + Public method to handle a function definition. + + @param node reference to the node to handle + @type ast.AsyncFunctionDef + """ + self.__visitWithStack(node) + + def visit_Return(self, node): + """ + Public method to handle a return node. + + @param node reference to the node to handle + @type ast.Return + """ + self.returns.append(node) + self.generic_visit(node) + + def visit_Assign(self, node): + """ + Public method to handle an assign node. + + @param node reference to the node to handle + @type ast.Assign + """ + if not self.__stack: + return + + for target in node.targets: + self.__visitAssignTarget(target) + self.generic_visit(node.value) + + def visit_Name(self, node): + """ + Public method to handle a name node. + + @param node reference to the node to handle + @type ast.Name + """ + if self.__stack: + self.refs[node.id].append(node.lineno) + + def __visitAssignTarget(self, node): + """ + Private method to handle an assign target node. + + @param node reference to the node to handle + @type ast.AST + """ + if isinstance(node, ast.Tuple): + for elt in node.elts: + self.__visitAssignTarget(elt) + return + + if isinstance(node, ast.Name): + self.assigns[node.id].append(node.lineno) + return + + self.generic_visit(node) + + def __checkFunction(self, node): + """ + Private method to check a function definition node. + + @param node reference to the node to check + @type ast.AsyncFunctionDef or ast.FunctionDef + """ + if not self.returns or not node.body: + return + + if len(node.body) == 1 and isinstance(node.body[-1], ast.Return): + # skip functions that consist of `return None` only + return + + if not self.__resultExists(): + self.__checkUnnecessaryReturnNone() + return + + self.__checkImplicitReturnValue() + self.__checkImplicitReturn(node.body[-1]) + + for n in self.returns: + if n.value: + self.__checkUnnecessaryAssign(n.value) + + def __isNone(self, node): + """ + Private method to check, if a node value is None. + + @param node reference to the node to check + @type ast.AST + @return flag indicating the node contains a None value + """ + try: + return isinstance(node, ast.NameConstant) and node.value is None + except AttributeError: + # try Py2 + return isinstance(node, ast.Name) and node.id == "None" + + def __resultExists(self): + """ + Private method to check the existance of a return result. + + @return flag indicating the existence of a return result + @rtype bool + """ + for node in self.returns: + value = node.value + if value and not self.__isNone(value): + return True + + return False + + def __checkImplicitReturnValue(self): + """ + Private method to check for implicit return values. + """ + for node in self.returns: + if not node.value: + self.violations.append((node, "M832")) + + def __checkUnnecessaryReturnNone(self): + """ + Private method to check for an unnecessary 'return None' statement. + """ + for node in self.returns: + if self.__isNone(node.value): + self.violations.append((node, "M831")) + + def __checkImplicitReturn(self, node): + """ + Private method to check for an implicit return statement. + + @param node reference to the node to check + @type ast.AST + """ + if isinstance(node, ast.If): + if not node.body or not node.orelse: + self.violations.append((node, "M833")) + return + + self.__checkImplicitReturn(node.body[-1]) + self.__checkImplicitReturn(node.orelse[-1]) + return + + if isinstance(node, ast.For) and node.orelse: + self.__checkImplicitReturn(node.orelse[-1]) + return + + if isinstance(node, ast.With): + self.__checkImplicitReturn(node.body[-1]) + return + + try: + okNodes = (ast.Return, ast.Raise, ast.While, ast.Try) + except AttributeError: + # Py2 + okNodes = (ast.Return, ast.Raise, ast.While) + if not isinstance(node, okNodes): + self.violations.append((node, "M833")) + + def __checkUnnecessaryAssign(self, node): + """ + Private method to check for an unnecessary assign statement. + + @param node reference to the node to check + @type ast.AST + """ + if not isinstance(node, ast.Name): + return + + varname = node.id + returnLineno = node.lineno + + if varname not in self.assigns: + return + + if varname not in self.refs: + self.violations.append((node, "M834")) + return + + if self.__hasRefsBeforeNextAssign(varname, returnLineno): + return + + self.violations.append((node, "M834")) + + def __hasRefsBeforeNextAssign(self, varname, returnLineno): + """ + Private method to check for references before a following assign + statement. + + @param varname variable name to check for + @type str + @param returnLineno line number of the return statement + @type int + @return flag indicating the existence of references + @rtype bool + """ + beforeAssign = 0 + afterAssign = None + + for lineno in sorted(self.assigns[varname]): + if lineno > returnLineno: + afterAssign = lineno + break + + if lineno <= returnLineno: + beforeAssign = lineno + + for lineno in self.refs[varname]: + if lineno == returnLineno: + continue + + if afterAssign: + if beforeAssign < lineno <= afterAssign: + return True + + elif beforeAssign < lineno: + return True + + return False # # eflag: noqa = M702
--- a/Plugins/CheckerPlugins/CodeStyleChecker/translations.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/CheckerPlugins/CodeStyleChecker/translations.py Fri Apr 05 19:06:39 2019 +0200 @@ -564,7 +564,6 @@ "MiscellaneousChecker", "'__metaclass__' does nothing on Python 3 -" " use 'class MyClass(BaseClass, metaclass=...)'"), - "M601": QCoreApplication.translate( "MiscellaneousChecker", "found {0} formatter"), @@ -637,6 +636,22 @@ "M823": QCoreApplication.translate( "MiscellaneousChecker", "mutable default argument of function call '{0}'"), + "M831": QCoreApplication.translate( + "MiscellaneousChecker", + "None should not be added at any return if function has no return" + " value except None"), + "M832": QCoreApplication.translate( + "MiscellaneousChecker", + "an explicit value at every return should be added if function has" + " a return value except None"), + "M833": QCoreApplication.translate( + "MiscellaneousChecker", + "an explicit return at the end of the function should be added if" + " it has a return value except None"), + "M834": QCoreApplication.translate( + "MiscellaneousChecker", + "a value should not be assigned to a variable if it will be used as a" + " return value only"), "M901": QCoreApplication.translate( "MiscellaneousChecker", "{0}: {1}"),
--- a/Plugins/VcsPlugins/vcsGit/GitRevisionsSelectionDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsGit/GitRevisionsSelectionDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -210,6 +210,8 @@ return "HEAD^" elif noneButton.isChecked(): return "" + + return "" def getRevisions(self): """
--- a/Plugins/VcsPlugins/vcsGit/git.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsGit/git.py Fri Apr 05 19:06:39 2019 +0200 @@ -817,7 +817,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False args = self.initCommand("reset") args.append("HEAD") @@ -1525,7 +1525,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False args = self.initCommand("cat-file") args.append("blob") @@ -1797,7 +1797,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False args = self.initCommand("merge") args.append("--abort") @@ -1922,7 +1922,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False from .GitTagDialog import GitTagDialog dlg = GitTagDialog(self.gitGetTagsList(repodir), revision, tagName)
--- a/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py Fri Apr 05 19:06:39 2019 +0200 @@ -146,7 +146,7 @@ while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False self.process.kill() self.process.setWorkingDirectory(repodir)
--- a/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -271,6 +271,8 @@ return "." elif noneButton.isChecked(): return "" + + return "" def getRevisions(self): """
--- a/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditConfigDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditConfigDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -216,6 +216,8 @@ return self.branchCombo.currentText() elif self.bookmarkButton.isChecked(): return self.bookmarkCombo.currentText() + + return "" def getData(self): """
--- a/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -269,6 +269,8 @@ return bookmarkCombo.currentText() elif tipButton and tipButton.isChecked(): return "" + + return "" def getData(self): """
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/hg.py Fri Apr 05 19:06:39 2019 +0200 @@ -903,7 +903,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False from .HgTagDialog import HgTagDialog dlg = HgTagDialog(self.hgGetTagsList(repodir, withType=True), @@ -1750,7 +1750,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return "", "" process = QProcess() process.setWorkingDirectory(repodir) @@ -2145,7 +2145,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False if self.version >= (4, 5, 0): args = self.initCommand("merge") @@ -2625,7 +2625,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False res = False if not files: @@ -2850,7 +2850,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False from .HgImportDialog import HgImportDialog dlg = HgImportDialog() @@ -3060,7 +3060,7 @@ while not os.path.isdir(os.path.join(repodir, self.adminDir)): repodir = os.path.dirname(repodir) if os.path.splitdrive(repodir)[1] == os.sep: - return + return False args = self.initCommand("graft") args.append(subcommand)
--- a/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -82,6 +82,8 @@ elif prevButton.isChecked(): return "PREV" + return "" + def getRevisions(self): """ Public method to get the revisions.
--- a/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -82,6 +82,8 @@ elif prevButton.isChecked(): return "PREV" + return "" + def getRevisions(self): """ Public method to get the revisions.
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -85,3 +85,5 @@ repsMin = self.lowerSpin.value() repsMax = self.upperSpin.value() return "{{{0:d},{1:d}}}{2}".format(repsMin, repsMax, minimal) + + return ""
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -614,6 +614,8 @@ else: return formatIdentifier + return "" + def getCharacters(self): """ Public method to return the character string assembled via the dialog.
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -80,3 +80,5 @@ repsMin = self.lowerSpin.value() repsMax = self.upperSpin.value() return "{{{0:d},{1:d}}}".format(repsMin, repsMax) + + return ""
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardRepeatDialog.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardRepeatDialog.py Fri Apr 05 19:06:39 2019 +0200 @@ -90,3 +90,5 @@ repsMin = self.lowerSpin.value() repsMax = self.upperSpin.value() return "{{{0:d},{1:d}}}{2}".format(repsMin, repsMax, greedy) + + return ""
--- a/Preferences/ConfigurationPages/EditorFilePage.ui Sat Mar 02 11:17:15 2019 +0100 +++ b/Preferences/ConfigurationPages/EditorFilePage.ui Fri Apr 05 19:06:39 2019 +0200 @@ -501,7 +501,7 @@ <item row="1" column="0" colspan="3"> <widget class="QCheckBox" name="previewMarkdownNLtoBreakCheckBox"> <property name="toolTip"> - <string>Select this to convert a new line character to an HTML <br/> tag.</string> + <string>Select this to convert a new line character to an HTML &lt;br/&gt; tag.</string> </property> <property name="text"> <string>Convert New Line to HTML Break</string>
--- a/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py Sat Mar 02 11:17:15 2019 +0100 +++ b/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py Fri Apr 05 19:06:39 2019 +0200 @@ -11,16 +11,19 @@ from PyQt5.QtCore import pyqtSlot, Qt, QFileInfo, QFile, QIODevice from PyQt5.QtGui import QPalette, QFont -from PyQt5.QtWidgets import QColorDialog, QFontDialog, QInputDialog, QMenu +from PyQt5.QtWidgets import QColorDialog, QFontDialog, QInputDialog, QMenu, \ + QTreeWidgetItem, QDialog from .ConfigurationPageBase import ConfigurationPageBase from .Ui_EditorHighlightingStylesPage import Ui_EditorHighlightingStylesPage +from ..SubstyleDefinitionDialog import SubstyleDefinitionDialog from E5Gui import E5MessageBox, E5FileDialog -import Preferences from Globals import qVersionTuple +import UI.PixmapCache + try: MonospacedFontsOption = QFontDialog.MonospacedFonts except AttributeError: @@ -38,6 +41,9 @@ FAMILYANDSIZE = 2 FONT = 99 + StyleRole = Qt.UserRole + 1 + SubstyleRole = Qt.UserRole + 2 + def __init__(self, lexers): """ Constructor @@ -48,6 +54,12 @@ self.setupUi(self) self.setObjectName("EditorHighlightingStylesPage") + self.defaultSubstylesButton.setIcon(UI.PixmapCache.getIcon("editUndo")) + self.addSubstyleButton.setIcon(UI.PixmapCache.getIcon("plus")) + self.deleteSubstyleButton.setIcon(UI.PixmapCache.getIcon("minus")) + self.editSubstyleButton.setIcon(UI.PixmapCache.getIcon("edit")) + self.copySubstyleButton.setIcon(UI.PixmapCache.getIcon("editCopy")) + if qVersionTuple() < (5, 0, 0): self.monospacedButton.setChecked(False) self.monospacedButton.hide() @@ -92,14 +104,14 @@ QScintilla.Lexers.getLanguageIcon(language, False), language) self.on_lexerLanguageComboBox_activated("") - + def save(self): """ Public slot to save the Editor Highlighting Styles configuration. """ for lexer in list(self.lexers.values()): - lexer.writeSettings(Preferences.Prefs.settings, "Scintilla") - + lexer.writeSettings() + @pyqtSlot(str) def on_lexerLanguageComboBox_activated(self, language): """ @@ -123,45 +135,101 @@ return self.styleGroup.setEnabled(True) - self.styleElementList.addItems(self.lexer.styles) + for description, styleNo, subStyleNo in self.lexer.getStyles(): + if subStyleNo >= 0: + parent = self.styleElementList.findItems( + self.lexer.description(styleNo), Qt.MatchExactly)[0] + parent.setExpanded(True) + else: + parent = self.styleElementList + itm = QTreeWidgetItem(parent, [description]) + itm.setData(0, self.StyleRole, styleNo) + itm.setData(0, self.SubstyleRole, subStyleNo) self.__styleAllItems() - self.styleElementList.setCurrentRow(0) + self.styleElementList.setCurrentItem( + self.styleElementList.topLevelItem(0)) + + def __stylesForItem(self, itm): + """ + Private method to get the style and sub-style number of the given item. + + @param itm reference to the item to extract the styles from + @type QTreeWidgetItem + @return tuple containing the style and sub-style numbers + @rtype tuple of (int, int) + """ + style = itm.data(0, self.StyleRole) + substyle = itm.data(0, self.SubstyleRole) + + return (style, substyle) + + def __currentStyles(self): + """ + Private method to get the styles of the current item. + @return tuple containing the style and sub-style numbers + @rtype tuple of (int, int) + """ + itm = self.styleElementList.currentItem() + if itm is None: + styles = (0, -1) # return default style + else: + styles = self.__stylesForItem(itm) + + return styles + + def __styleOneItem(self, item, style, substyle): + """ + Private method to style one item of the style element list. + + @param item reference to the item to be styled + @type QTreeWidgetItem + @param style base style number + @type int + @param substyle sub-style number + @type int + """ + colour = self.lexer.color(style, substyle) + paper = self.lexer.paper(style, substyle) + font = self.lexer.font(style, substyle) + eolfill = self.lexer.eolFill(style, substyle) + + item.setFont(0, font) + item.setBackground(0, paper) + item.setForeground(0, colour) + if eolfill: + item.setCheckState(0, Qt.Checked) + else: + item.setCheckState(0, Qt.Unchecked) + def __styleAllItems(self): """ Private method to style all items of the style element list. """ - for row in range(self.styleElementList.count()): - style = self.lexer.ind2style[row] - colour = self.lexer.color(style) - paper = self.lexer.paper(style) - font = self.lexer.font(style) - eolfill = self.lexer.eolFill(style) - - itm = self.styleElementList.item(row) - itm.setFont(font) - itm.setBackground(paper) - itm.setForeground(colour) - if eolfill: - itm.setCheckState(Qt.Checked) - else: - itm.setCheckState(Qt.Unchecked) + itm = self.styleElementList.topLevelItem(0) + while itm is not None: + style, substyle = self.__stylesForItem(itm) + self.__styleOneItem(itm, style, substyle) + itm = self.styleElementList.itemBelow(itm) + + @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) + def on_styleElementList_currentItemChanged(self, current, previous): + """ + Private method to handle a change of the current row. - def on_styleElementList_currentRowChanged(self, index): + @param current reference to the current item + @type QTreeWidgetItem + @param previous reference to the previous item + @type QTreeWidgetItem """ - Private method to set up the style element part of the source page. - - @param index the style index. - """ - try: - self.style = self.lexer.ind2style[index] - except KeyError: + if current is None: return - colour = self.lexer.color(self.style) - paper = self.lexer.paper(self.style) - eolfill = self.lexer.eolFill(self.style) - font = self.lexer.font(self.style) + style, substyle = self.__stylesForItem(current) + colour = self.lexer.color(style, substyle) + paper = self.lexer.paper(style, substyle) + eolfill = self.lexer.eolFill(style, substyle) + font = self.lexer.font(style, substyle) self.sampleText.setFont(font) pl = self.sampleText.palette() @@ -171,66 +239,72 @@ self.sampleText.repaint() self.eolfillCheckBox.setChecked(eolfill) + selectedOne = len(self.styleElementList.selectedItems()) == 1 + self.defaultSubstylesButton.setEnabled( + selectedOne and substyle < 0 and self.lexer.isBaseStyle(style)) + self.addSubstyleButton.setEnabled( + selectedOne and substyle < 0 and self.lexer.isBaseStyle(style)) + self.deleteSubstyleButton.setEnabled(selectedOne and substyle >= 0) + self.editSubstyleButton.setEnabled(selectedOne and substyle >= 0) + self.copySubstyleButton.setEnabled(selectedOne and substyle >= 0) + @pyqtSlot() def on_foregroundButton_clicked(self): """ Private method used to select the foreground colour of the selected style and lexer. """ - colour = QColorDialog.getColor(self.lexer.color(self.style)) + style, substyle = self.__currentStyles() + colour = QColorDialog.getColor(self.lexer.color(style, substyle)) if colour.isValid(): pl = self.sampleText.palette() pl.setColor(QPalette.Text, colour) self.sampleText.setPalette(pl) self.sampleText.repaint() - if len(self.styleElementList.selectedItems()) > 1: - for selItem in self.styleElementList.selectedItems(): - style = self.lexer.ind2style[ - self.styleElementList.row(selItem)] - self.lexer.setColor(colour, style) - selItem.setForeground(colour) - else: - self.lexer.setColor(colour, self.style) - self.styleElementList.currentItem().setForeground(colour) - + for selItem in self.styleElementList.selectedItems(): + style, substyle = self.__stylesForItem(selItem) + self.lexer.setColor(colour, style, substyle) + selItem.setForeground(0, colour) + @pyqtSlot() def on_backgroundButton_clicked(self): """ Private method used to select the background colour of the selected style and lexer. """ - colour = QColorDialog.getColor(self.lexer.paper(self.style)) + style, substyle = self.__currentStyles() + colour = QColorDialog.getColor(self.lexer.paper(style, substyle)) if colour.isValid(): pl = self.sampleText.palette() pl.setColor(QPalette.Base, colour) self.sampleText.setPalette(pl) self.sampleText.repaint() - if len(self.styleElementList.selectedItems()) > 1: - for selItem in self.styleElementList.selectedItems(): - style = self.lexer.ind2style[ - self.styleElementList.row(selItem)] - self.lexer.setPaper(colour, style) - selItem.setBackground(colour) - else: - self.lexer.setPaper(colour, self.style) - self.styleElementList.currentItem().setBackground(colour) - + for selItem in self.styleElementList.selectedItems(): + style, substyle = self.__stylesForItem(selItem) + self.lexer.setPaper(colour, style, substyle) + selItem.setBackground(0, colour) + @pyqtSlot() def on_allBackgroundColoursButton_clicked(self): """ Private method used to select the background colour of all styles of a selected lexer. """ - colour = QColorDialog.getColor(self.lexer.paper(self.style)) + style, substyle = self.__currentStyles() + colour = QColorDialog.getColor(self.lexer.paper(style, substyle)) if colour.isValid(): pl = self.sampleText.palette() pl.setColor(QPalette.Base, colour) self.sampleText.setPalette(pl) self.sampleText.repaint() - for style in list(self.lexer.ind2style.values()): - self.lexer.setPaper(colour, style) + + itm = self.styleElementList.topLevelItem(0) + while itm is not None: + style, substyle = self.__stylesForItem(itm) + self.lexer.setPaper(colour, style, substyle) + itm = self.styleElementList.itemBelow(itm) self.__styleAllItems() - + def __changeFont(self, doAll, familyOnly, sizeOnly): """ Private slot to change the highlighter font. @@ -240,15 +314,20 @@ @param familyOnly flag indicating to set the font family only (boolean) @param sizeOnly flag indicating to set the font size only (boolean """ - def setFont(font, style, familyOnly, sizeOnly): + def setFont(font, style, substyle, familyOnly, sizeOnly): """ Local function to set the font. - @param font font to be set (QFont) - @param style style to set the font for (integer) + @param font font to be set + @type QFont + @param style style number + @type int + @param substyle sub-style number + @type int @param familyOnly flag indicating to set the font family only - (boolean) - @param sizeOnly flag indicating to set the font size only (boolean + @type bool + @param sizeOnly flag indicating to set the font size only + @type bool """ if familyOnly or sizeOnly: newFont = QFont(self.lexer.font(style)) @@ -256,9 +335,9 @@ newFont.setFamily(font.family()) if sizeOnly: newFont.setPointSize(font.pointSize()) - self.lexer.setFont(newFont, style) + self.lexer.setFont(newFont, style, substyle) else: - self.lexer.setFont(font, style) + self.lexer.setFont(font, style, substyle) def setSampleFont(font, familyOnly, sizeOnly): """ @@ -270,7 +349,8 @@ @param sizeOnly flag indicating to set the font size only (boolean """ if familyOnly or sizeOnly: - newFont = QFont(self.lexer.font(self.style)) + style, substyle = self.__currentStyles() + newFont = QFont(self.lexer.font(style, substyle)) if familyOnly: newFont.setFamily(font.family()) if sizeOnly: @@ -279,30 +359,29 @@ else: self.sampleText.setFont(font) + style, substyle = self.__currentStyles() if self.monospacedButton.isChecked(): options = MonospacedFontsOption else: options = NoFontsOption - font, ok = QFontDialog.getFont(self.lexer.font(self.style), self, + font, ok = QFontDialog.getFont(self.lexer.font(style, substyle), self, "", options) if ok: setSampleFont(font, familyOnly, sizeOnly) if doAll: - for style in list(self.lexer.ind2style.values()): - setFont(font, style, familyOnly, sizeOnly) + itm = self.styleElementList.topLevelItem(0) + while itm is not None: + style, substyle = self.__stylesForItem(itm) + setFont(font, style, substyle, familyOnly, sizeOnly) + itm = self.styleElementList.itemBelow(itm) self.__styleAllItems() - elif len(self.styleElementList.selectedItems()) > 1: + else: for selItem in self.styleElementList.selectedItems(): - style = self.lexer.ind2style[ - self.styleElementList.row(selItem)] - setFont(font, style, familyOnly, sizeOnly) - itmFont = self.lexer.font(style) - selItem.setFont(itmFont) - else: - setFont(font, self.style, familyOnly, sizeOnly) - itmFont = self.lexer.font(self.style) - self.styleElementList.currentItem().setFont(itmFont) - + style, substyle = self.__stylesForItem(selItem) + setFont(font, style, substyle, familyOnly, sizeOnly) + itmFont = self.lexer.font(style, substyle) + selItem.setFont(0, itmFont) + def __fontButtonMenuTriggered(self, act): """ Private slot used to select the font of the selected style and lexer. @@ -315,7 +394,7 @@ familyOnly = act.data() in [self.FAMILYANDSIZE, self.FAMILYONLY] sizeOnly = act.data() in [self.FAMILYANDSIZE, self.SIZEONLY] self.__changeFont(False, familyOnly, sizeOnly) - + def __allFontsButtonMenuTriggered(self, act): """ Private slot used to change the font of all styles of a selected lexer. @@ -328,25 +407,22 @@ familyOnly = act.data() in [self.FAMILYANDSIZE, self.FAMILYONLY] sizeOnly = act.data() in [self.FAMILYANDSIZE, self.SIZEONLY] self.__changeFont(True, familyOnly, sizeOnly) - - def on_eolfillCheckBox_toggled(self, on): + + @pyqtSlot(bool) + def on_eolfillCheckBox_clicked(self, on): """ Private method used to set the eolfill for the selected style and lexer. @param on flag indicating enabled or disabled state (boolean) """ + style, substyle = self.__currentStyles() checkState = Qt.Checked if on else Qt.Unchecked - if len(self.styleElementList.selectedItems()) > 1: - for selItem in self.styleElementList.selectedItems(): - style = self.lexer.ind2style[ - self.styleElementList.row(selItem)] - self.lexer.setEolFill(on, style) - selItem.setCheckState(checkState) - else: - self.lexer.setEolFill(on, self.style) - self.styleElementList.currentItem().setCheckState(checkState) - + for selItem in self.styleElementList.selectedItems(): + style, substyle = self.__stylesForItem(selItem) + self.lexer.setEolFill(on, style, substyle) + selItem.setCheckState(0, checkState) + @pyqtSlot() def on_allEolFillButton_clicked(self): """ @@ -364,87 +440,104 @@ if ok: enabled = selection == on self.eolfillCheckBox.setChecked(enabled) - for style in list(self.lexer.ind2style.values()): - self.lexer.setEolFill(enabled, style) + + itm = self.styleElementList.topLevelItem(0) + while itm is not None: + style, substyle = self.__stylesForItem(itm) + self.lexer.setEolFill(enabled, style, substyle) + itm = self.styleElementList.itemBelow(itm) self.__styleAllItems() - + @pyqtSlot() def on_defaultButton_clicked(self): """ Private method to set the current style to its default values. """ - if len(self.styleElementList.selectedItems()) > 1: - for selItem in self.styleElementList.selectedItems(): - style = self.lexer.ind2style[ - self.styleElementList.row(selItem)] - self.__setToDefault(style) - else: - self.__setToDefault(self.style) - self.on_styleElementList_currentRowChanged( - self.styleElementList.currentRow()) + for selItem in self.styleElementList.selectedItems(): + style, substyle = self.__stylesForItem(selItem) + self.__setToDefault(style, substyle) + self.on_styleElementList_currentItemChanged( + self.styleElementList.currentItem(), None) self.__styleAllItems() - + @pyqtSlot() def on_allDefaultButton_clicked(self): """ Private method to set all styles to their default values. """ - for style in list(self.lexer.ind2style.values()): - self.__setToDefault(style) - self.on_styleElementList_currentRowChanged( - self.styleElementList.currentRow()) + itm = self.styleElementList.topLevelItem(0) + while itm is not None: + style, substyle = self.__stylesForItem(itm) + self.__setToDefault(style, substyle) + itm = self.styleElementList.itemBelow(itm) + self.on_styleElementList_currentItemChanged( + self.styleElementList.currentItem(), None) self.__styleAllItems() - - def __setToDefault(self, style): + + def __setToDefault(self, style, substyle): """ Private method to set a specific style to its default values. - @param style style to be reset (integer) + @param style style number + @type int + @param substyle sub-style number + @type int """ - self.lexer.setColor(self.lexer.defaultColor(style), style) - self.lexer.setPaper(self.lexer.defaultPaper(style), style) - self.lexer.setFont(self.lexer.defaultFont(style), style) - self.lexer.setEolFill(self.lexer.defaultEolFill(style), style) - + self.lexer.setColor(self.lexer.defaultColor(style, substyle), + style, substyle) + self.lexer.setPaper(self.lexer.defaultPaper(style, substyle), + style, substyle) + self.lexer.setFont(self.lexer.defaultFont(style, substyle), + style, substyle) + self.lexer.setEolFill(self.lexer.defaultEolFill(style, substyle), + style, substyle) + + ####################################################################### + ## Importing and exporting of styles + ####################################################################### + @pyqtSlot() def on_importCurrentButton_clicked(self): """ Private slot to import the styles of the current lexer. """ self.__importStyles({self.lexer.language(): self.lexer}) - + @pyqtSlot() def on_exportCurrentButton_clicked(self): """ Private slot to export the styles of the current lexer. """ self.__exportStyles([self.lexer]) - + @pyqtSlot() def on_importAllButton_clicked(self): """ Private slot to import the styles of all lexers. """ self.__importStyles(self.lexers) - + @pyqtSlot() def on_exportAllButton_clicked(self): """ Private slot to export the styles of all lexers. """ self.__exportStyles(list(self.lexers.values())) - + def __exportStyles(self, lexers): """ Private method to export the styles of the given lexers. @param lexers list of lexer objects for which to export the styles """ + from eric6config import getConfig + stylesDir = getConfig("ericStylesDir") + fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( self, self.tr("Export Highlighting Styles"), - "", - self.tr("Highlighting styles file (*.e4h)"), + stylesDir, + self.tr("Highlighting styles file (*.e6h)"), "", E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) @@ -471,7 +564,7 @@ """ to file <b>{0}</b>.</p><p>Reason: {1}</p>""") .format(fn, f.errorString()) ) - + def __importStyles(self, lexers): """ Private method to import the styles of the given lexers. @@ -486,7 +579,7 @@ self, self.tr("Import Highlighting Styles"), stylesDir, - self.tr("Highlighting styles file (*.e4h)")) + self.tr("Highlighting styles file (*.e6h *.e4h)")) if not fn: return @@ -508,35 +601,39 @@ ) return - if self.lexer: - colour = self.lexer.color(self.style) - paper = self.lexer.paper(self.style) - eolfill = self.lexer.eolFill(self.style) - font = self.lexer.font(self.style) - - self.sampleText.setFont(font) - pl = self.sampleText.palette() - pl.setColor(QPalette.Text, colour) - pl.setColor(QPalette.Base, paper) - self.sampleText.setPalette(pl) - self.sampleText.repaint() - self.eolfillCheckBox.setChecked(eolfill)