Fri, 03 Mar 2017 18:34:21 +0100
Merged with default branch.
--- a/APIs/Python3/eric6.api Sun Feb 26 15:54:49 2017 +0100 +++ b/APIs/Python3/eric6.api Fri Mar 03 18:34:21 2017 +0100 @@ -182,7 +182,7 @@ eric6.DebugClients.Python.DebugBase.DebugBase.pathsToSkip?7 eric6.DebugClients.Python.DebugBase.DebugBase.profile?4(frame, event, arg) eric6.DebugClients.Python.DebugBase.DebugBase.profileWithRecursion?4(frame, event, arg) -eric6.DebugClients.Python.DebugBase.DebugBase.run?4(cmd, globals=None, locals=None) +eric6.DebugClients.Python.DebugBase.DebugBase.run?4(cmd, globals=None, locals=None, debug=True) eric6.DebugClients.Python.DebugBase.DebugBase.setRecursionDepth?4(frame) eric6.DebugClients.Python.DebugBase.DebugBase.set_continue?4(special) eric6.DebugClients.Python.DebugBase.DebugBase.set_next?4(frame) @@ -196,7 +196,7 @@ eric6.DebugClients.Python.DebugBase.DebugBase.storeFrameLocals?4(frmnr=0) eric6.DebugClients.Python.DebugBase.DebugBase.tracePythonLibs?4(enable) eric6.DebugClients.Python.DebugBase.DebugBase.trace_dispatch?4(frame, event, arg) -eric6.DebugClients.Python.DebugBase.DebugBase.user_exception?4(frame, excinfo, unhandled=False) +eric6.DebugClients.Python.DebugBase.DebugBase.user_exception?4(excinfo, unhandled=False) eric6.DebugClients.Python.DebugBase.DebugBase.user_line?4(frame) eric6.DebugClients.Python.DebugBase.DebugBase?1(dbgClient) eric6.DebugClients.Python.DebugBase.gRecursionLimit?7 @@ -300,6 +300,8 @@ eric6.DebugClients.Python.PyProfile.PyProfile.trace_dispatch_call?4(frame, t) eric6.DebugClients.Python.PyProfile.PyProfile?1(basename, timer=None, bias=None) eric6.DebugClients.Python.ThreadExtension.QThreadWrapper?1(*args, **kwargs) +eric6.DebugClients.Python.ThreadExtension.ThreadExtension._bootstrap?5(run) +eric6.DebugClients.Python.ThreadExtension.ThreadExtension._bootstrapQThread?5(run) eric6.DebugClients.Python.ThreadExtension.ThreadExtension.attachThread?4(target=None, args=None, kwargs={}, mainThread=False) eric6.DebugClients.Python.ThreadExtension.ThreadExtension.dumpThreadList?4() eric6.DebugClients.Python.ThreadExtension.ThreadExtension.find_module?4(fullname, path=None) @@ -311,6 +313,8 @@ eric6.DebugClients.Python.ThreadExtension.ThreadExtension.unlockClient?4() eric6.DebugClients.Python.ThreadExtension.ThreadExtension.updateThreadList?4() eric6.DebugClients.Python.ThreadExtension.ThreadExtension?1() +eric6.DebugClients.Python.ThreadExtension.ThreadWrapper?1(*args, **kwargs) +eric6.DebugClients.Python.ThreadExtension._qtThreadNumber?8 eric6.DebugClients.Python.eric6dbgstub.debugger?7 eric6.DebugClients.Python.eric6dbgstub.ericpath?7 eric6.DebugClients.Python.eric6dbgstub.initDebugger?4(kind="standard") @@ -3832,6 +3836,7 @@ eric6.PluginManager.PluginManager.PluginManager.allPlugginsActivated?7 eric6.PluginManager.PluginManager.PluginManager.checkPluginEntry?4(name, short, description, url, author, version, filename, status) eric6.PluginManager.PluginManager.PluginManager.checkPluginUpdatesAvailable?4() +eric6.PluginManager.PluginManager.PluginManager.clearPluginsPrivateData?4(type_) eric6.PluginManager.PluginManager.PluginManager.deactivatePlugin?4(name, onDemand=False) eric6.PluginManager.PluginManager.PluginManager.deactivateVcsPlugins?4() eric6.PluginManager.PluginManager.PluginManager.doShutdown?4() @@ -4049,6 +4054,7 @@ eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DEFAULT_EXCLUDE?7 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DEFAULT_IGNORE?7 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DOCSTRING_REGEX?7 +eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DUNDER_REGEX?7 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DiffReport.error?4(line_number, offset, text, check) eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DiffReport?1(options) eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.ERRORCODE_REGEX?7 @@ -4070,6 +4076,9 @@ eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SINGLETONS?7 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SKIP_COMMENTS?7 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SKIP_TOKENS?7 +eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.STARTSWITH_DEF_REGEX?7 +eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.STARTSWITH_INDENT_STATEMENT_REGEX?7 +eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.STARTSWITH_TOP_LEVEL_REGEX?7 eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.error?4(line_number, offset, text, check) eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.error_args?4(line_number, offset, code, check, *args) eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.get_file_results?4() @@ -4364,6 +4373,7 @@ eric6.Plugins.PluginTabnanny.python2Compatible?7 eric6.Plugins.PluginTabnanny.shortDescription?7 eric6.Plugins.PluginTabnanny.version?7 +eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.MercurialDefaults?7 eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.activate?4() eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.deactivate?4() eric6.Plugins.PluginVcsMercurial.VcsMercurialPlugin.getConfigPath?4() @@ -4378,6 +4388,7 @@ eric6.Plugins.PluginVcsMercurial.author?7 eric6.Plugins.PluginVcsMercurial.autoactivate?7 eric6.Plugins.PluginVcsMercurial.className?7 +eric6.Plugins.PluginVcsMercurial.clearPrivateData?4() eric6.Plugins.PluginVcsMercurial.createConfigurationPage?4(configDlg) eric6.Plugins.PluginVcsMercurial.deactivateable?7 eric6.Plugins.PluginVcsMercurial.displayString?4() @@ -4633,18 +4644,18 @@ eric6.Plugins.PluginWizardQRegularExpression.python2Compatible?7 eric6.Plugins.PluginWizardQRegularExpression.shortDescription?7 eric6.Plugins.PluginWizardQRegularExpression.version?7 -eric6.Plugins.VcsPlugins.vcsMercurial.Config.ConfigHgProtocols?7 +eric6.Plugins.VcsPlugins.vcsMercurial.Config.ConfigHgSchemes?7 eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.on_configButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.save?4() eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage?1(plugin) eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog.getData?4() eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog.on_recentComboBox_activated?4(txt) -eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog?1(parent=None) +eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog?1(vcs, parent=None) eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.initActions?4() eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.initMenu?4(mainMenu) eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.menuTitle?4() eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper?1() -eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.Fetch.hgFetch?4(name) +eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.Fetch.hgFetch?4(name, revisions=None) eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.Fetch?1(vcs) eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.HgGpgSignDialog.getData?4() eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.HgGpgSignDialog.on_bookmarkButton_toggled?4(checked) @@ -4672,7 +4683,7 @@ eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper.initMenu?4(mainMenu) eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper.menuTitle?4() eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper?1() -eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSign?4(path) +eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSign?4(path, revisions=None) eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSignatures?4(path) eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgVerifySignatures?4(path, rev=None) eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.shutdown?4() @@ -4881,11 +4892,10 @@ eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.keyPressEvent?4(evt) eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_branchCombo_activated?4(txt) eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_buttonBox_clicked?4(button) -eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_diffP1Button_clicked?4() -eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_diffP2Button_clicked?4() -eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_diffRevisionsButton_clicked?4() +eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_diffSelectLabel_linkActivated?4(link) eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_downButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_fieldCombo_activated?4(txt) +eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_filesTree_currentItemChanged?4(current, previous) eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_findNextButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_findPrevButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_fromDate_dateChanged?4(date) @@ -4898,6 +4908,8 @@ eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_refreshButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_rxEdit_returnPressed?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_rxEdit_textChanged?4(txt) +eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_saveLabel_linkActivated?4(link) +eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_sbsSelectLabel_linkActivated?4(link) eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_sendButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_stopCheckBox_clicked?4(checked) eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_toDate_dateChanged?4(date) @@ -4916,8 +4928,8 @@ eric6.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.on_tagCombo_editTextChanged?4(txt) eric6.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog?1(tagsList, branchesList, bookmarksList=None, parent=None) eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.getData?4() -eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.on_protocolCombo_activated?4(protocol) eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged?4(txt) +eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged?4(txt) eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.HgNewProjectOptionsDialog?1(vcs, parent=None) eric6.Plugins.VcsPlugins.vcsMercurial.HgOptionsDialog.HgOptionsDialog.getData?4() @@ -4967,20 +4979,12 @@ eric6.Plugins.VcsPlugins.vcsMercurial.HgServeDialog.HgServeDialog?1(vcs, path, parent=None) eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.closeEvent?4(e) eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.keyPressEvent?4(evt) -eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_addButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_buttonBox_clicked?4(button) -eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_commitButton_clicked?4() -eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_diffButton_clicked?4() -eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_forgetButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_input_returnPressed?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_passwordCheckBox_toggled?4(isOn) eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_refreshButton_clicked?4() -eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_restoreButton_clicked?4() -eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_revertButton_clicked?4() -eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_sbsDiffButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_sendButton_clicked?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusFilterCombo_activated?4(txt) -eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusList_itemChanged?4(item, column) eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusList_itemSelectionChanged?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.show?4() eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.start?4(fn) @@ -5324,7 +5328,7 @@ eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkPush?4(name, current=False, bookmark=None) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkRename?4(name, renameInfo=None) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBranch?4(name) -eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBundle?4(name) +eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBundle?4(name, bundleData=None) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCancelMerge?4(name) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgConflicts?4(name) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCopy?4(name, project) @@ -5351,7 +5355,7 @@ eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgOutgoing?4(name) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPhase?4(name, data=None) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPreviewBundle?4(name) -eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPull?4(name) +eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPull?4(name, revisions=None) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPush?4(name, force=False, newBranch=False, rev=None) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgReMerge?4(name) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRecover?4(name) @@ -5365,7 +5369,7 @@ eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowConfig?4(name) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowPaths?4(name) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgSummary?4(mq=False, largefiles=False) -eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgUnbundle?4(name) +eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgUnbundle?4(name, files=None) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgVerify?4(name) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.iniFileChanged?7 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.initCommand?4(command) @@ -5388,7 +5392,7 @@ eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsInit?4(vcsDir, noDialog=False) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsInitConfig?4(project) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsLogBrowser?4(name, isFile=False) -eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsMerge?4(name) +eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsMerge?4(name, rev="") eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsMove?4(name, project, target=None, noDialog=False) eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsName?4() eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsNewProjectOptionsDialog?4(parent=None) @@ -6511,6 +6515,10 @@ eric6.Preferences.ConfigurationPages.WebBrowserPage.WebBrowserPage.save?4() eric6.Preferences.ConfigurationPages.WebBrowserPage.WebBrowserPage?1(configDialog) eric6.Preferences.ConfigurationPages.WebBrowserPage.create?4(dlg) +eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked?4() +eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage.save?4() +eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.WebBrowserSpellCheckingPage?1() +eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.create?4(dlg) eric6.Preferences.MouseClickDialog.MouseClickDialog.eventFilter?4(watched, event) eric6.Preferences.MouseClickDialog.MouseClickDialog.getClick?4() eric6.Preferences.MouseClickDialog.MouseClickDialog.on_clearButton_clicked?4() @@ -6756,7 +6764,9 @@ eric6.Project.CreateDialogCodeDialog.pythonSignatureRole?7 eric6.Project.CreateDialogCodeDialog.returnTypeRole?7 eric6.Project.CreateDialogCodeDialog.rubySignatureRole?7 +eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked?4() eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog?4() +eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked?4() eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.storeData?4() eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog?1(project, parent=None, name=None) eric6.Project.FiletypeAssociationDialog.FiletypeAssociationDialog.on_addAssociationButton_clicked?4() @@ -6800,6 +6810,7 @@ eric6.Project.Project.Project.checkDirty?4() eric6.Project.Project.Project.checkLanguageFiles?4() eric6.Project.Project.Project.checkVCSStatus?4() +eric6.Project.Project.Project.clearHistories?4() eric6.Project.Project.Project.clearRecent?4() eric6.Project.Project.Project.clearStatusMonitorCachedState?4(name) eric6.Project.Project.Project.closeProject?4(reopen=False, noSave=False) @@ -10679,6 +10690,7 @@ eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.mediaUrl?4() eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.pos?4() eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.tagName?4() +eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.updateWithContextMenuData?4(data) eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult.viewportPos?4() eric6.WebBrowser.Tools.WebHitTestResult.WebHitTestResult?1(page, pos) eric6.WebBrowser.Tools.WebIconDialog.WebIconDialog.getUrls?4() @@ -10810,11 +10822,13 @@ eric6.WebBrowser.WebBrowserPage.WebBrowserPage.acceptNavigationRequest?4(url, type_, isMainFrame) eric6.WebBrowser.WebBrowserPage.WebBrowserPage.certificateError?4(error) eric6.WebBrowser.WebBrowserPage.WebBrowserPage.execJavaScript?4(script, worldId=QWebEngineScript.MainWorld, timeout=500) +eric6.WebBrowser.WebBrowserPage.WebBrowserPage.execPrintPage?4(printer, timeout=1000) eric6.WebBrowser.WebBrowserPage.WebBrowserPage.hitTestContent?4(pos) eric6.WebBrowser.WebBrowserPage.WebBrowserPage.icon?4() eric6.WebBrowser.WebBrowserPage.WebBrowserPage.isJavaScriptEnabled?4() eric6.WebBrowser.WebBrowserPage.WebBrowserPage.javaScriptConsoleMessage?4(level, message, lineNumber, sourceId) eric6.WebBrowser.WebBrowserPage.WebBrowserPage.mapToViewport?4(pos) +eric6.WebBrowser.WebBrowserPage.WebBrowserPage.printCallback?4(resDict=resultDict) eric6.WebBrowser.WebBrowserPage.WebBrowserPage.resultCallback?4(resDict=resultDict) eric6.WebBrowser.WebBrowserPage.WebBrowserPage.runJavaScript?4(script, worldId=-1, callback=None) eric6.WebBrowser.WebBrowserPage.WebBrowserPage.scroll?4(x, y)
--- a/APIs/Python3/eric6.bas Sun Feb 26 15:54:49 2017 +0100 +++ b/APIs/Python3/eric6.bas Fri Mar 03 18:34:21 2017 +0100 @@ -802,6 +802,7 @@ TemplatesReader XMLStreamReaderBase TemplatesWriter XMLStreamWriterBase TextVisitor ast.NodeVisitor +ThreadWrapper module.Thread Token str ToolConfigurationDialog QDialog Ui_ToolConfigurationDialog ToolGroupConfigurationDialog QDialog Ui_ToolGroupConfigurationDialog @@ -865,6 +866,7 @@ WebBrowserJavaScriptConsole QTextEdit WebBrowserLanguagesDialog QDialog Ui_WebBrowserLanguagesDialog WebBrowserPage QWebEnginePage +WebBrowserSpellCheckingPage ConfigurationPageBase Ui_WebBrowserSpellCheckingPage WebBrowserTabBar E5WheelTabBar WebBrowserTabWidget E5TabWidget WebBrowserView QWebEngineView
--- a/DataViews/CodeMetricsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/DataViews/CodeMetricsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -171,7 +171,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/DataViews/PyCoverageDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/DataViews/PyCoverageDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -205,7 +205,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>excludeCombo</tabstop>
--- a/DataViews/PyProfileDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/DataViews/PyProfileDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -154,7 +154,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>resultList</tabstop>
--- a/DebugClients/Python/BreakpointWatch.py Sun Feb 26 15:54:49 2017 +0100 +++ b/DebugClients/Python/BreakpointWatch.py Fri Mar 03 18:34:21 2017 +0100 @@ -50,21 +50,21 @@ self.enabled = True self.ignore = 0 self.hits = 0 - self.breaks[filename, lineno] = self - lines = self.breakInFile.setdefault(filename, []) + Breakpoint.breaks[(filename, lineno)] = self + lines = Breakpoint.breakInFile.setdefault(filename, []) if lineno not in lines: lines.append(lineno) - self.breakInFrameCache.clear() + Breakpoint.breakInFrameCache.clear() def deleteMe(self): """ Public method to clear this breakpoint. """ try: - del self.breaks[(self.file, self.line)] - self.breakInFile[self.file].remove(self.line) - if not self.breakInFile[self.file]: - del self.breakInFile[self.file] + del Breakpoint.breaks[(self.file, self.line)] + Breakpoint.breakInFile[self.file].remove(self.line) + if not Breakpoint.breakInFile[self.file]: + del Breakpoint.breakInFile[self.file] except KeyError: pass @@ -100,8 +100,8 @@ """ Public method to clear all breakpoints. """ - for bp in Breakpoint.breaks.copy(): - bp.deleteMe() + Breakpoint.breaks.clear() + Breakpoint.breakInFile.clear() Breakpoint.breakInFrameCache.clear() @staticmethod @@ -222,14 +222,14 @@ self.changed = True self.values = {} - self.watches.append(self) + Watch.watches.append(self) def deleteMe(self): """ Public method to clear this watch expression. """ try: - del self.watches[self] + del Watch.watches[self] except ValueError: pass
--- a/DebugClients/Python/DebugBase.py Sun Feb 26 15:54:49 2017 +0100 +++ b/DebugClients/Python/DebugBase.py Fri Mar 03 18:34:21 2017 +0100 @@ -92,7 +92,6 @@ self.currentFrame = None # frames, where we want to stop or release debugger - self.botframe = None self.stopframe = None self.returnframe = None self.stop_everywhere = False @@ -308,39 +307,28 @@ if event == 'line': if self.stop_here(frame) or self.break_here(frame): - self.user_line(frame) + if (self.stop_everywhere and + frame.f_back.f_code.co_name == "prepareJsonCommand"): + # Just stepped into print statement, so skip these frames + self._set_stopinfo(None, frame.f_back) + else: + self.user_line(frame) return self.trace_dispatch if event == 'call': - if self.botframe is None and frame.f_lineno >= 1: - self.botframe = frame - frame.f_trace = self.trace_dispatch - - self.user_line(frame) - return self.trace_dispatch - - if not (self.stop_here(frame) or + if (self.stop_here(frame) or self.__checkBreakInFrame(frame) or Watch.watches != []): + return self.trace_dispatch + else: # No need to trace this function return - return self.trace_dispatch if event == 'return': - if self.stop_here(frame) or frame == self.botframe: - # Ignore return events in generator except when stepping. - if self.stopframe and frame.f_code.co_flags & CO_GENERATOR: - return - # The program has finished if we have just left the first frame - if frame == self.botframe: - if self.isMainThread: - atexit._run_exitfuncs() - self._dbgClient.progTerminated(arg) - else: - self._dbgClient.threadTerminated(self.id) - - if self.quitting and not self._dbgClient.passive: - raise SystemExit + 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 if event == 'exception': @@ -351,7 +339,7 @@ # statement. if not (frame.f_code.co_flags & CO_GENERATOR and arg[0] is StopIteration and arg[2] is None): - self.user_exception(frame, arg) + self.user_exception(arg) # Stop at the StopIteration or GeneratorExit exception when the # user has set stopframe in a generator by issuing a return # command, or a next/until command at the last statement in the @@ -359,7 +347,7 @@ elif (self.stopframe and frame is not self.stopframe and self.stopframe.f_code.co_flags & CO_GENERATOR and arg[0] in (StopIteration, GeneratorExit)): - self.user_exception(frame, arg) + self.user_exception(arg) return if event == 'c_call': @@ -398,7 +386,6 @@ # stop at erics debugger frame or a threading bootstrap if (frame.f_back.f_code == stopOnHandleLine): frame.f_trace = self.trace_dispatch - self.botframe = frame break frame = frame.f_back @@ -422,25 +409,19 @@ @type dict """ try: - frame = sys._getframe() - self.botframe = frame - # First time the dispach function is called, a "base debug" - # function has to be returned, which is called at every user code - # function call. Because of setting botframe manually, the - # specific branch returning the trace_dispatch itself is skipped. - # Because the next step is always in threading.py and we assume - # that there is no breakpoint in it, it's save to return - # trace_dispatch unconditionally. - sys.settrace(lambda frame, event, arg: self.trace_dispatch) - frame.f_trace = self.trace_dispatch + # Because in the initial run method the "base debug" function is + # set up, it's also valid for the threads afterwards. + sys.settrace(self.trace_dispatch) target(*args, **kwargs) - except SystemExit: - pass + except Exception: + excinfo = sys.exc_info() + self.user_exception(excinfo, True) finally: + sys.settrace(None) sys.setprofile(None) - def run(self, cmd, globals=None, locals=None): + def run(self, cmd, globals=None, locals=None, debug=True): """ Public method to start a given command under debugger control. @@ -448,8 +429,10 @@ @type str or CodeType @keyparam globals dictionary of global variables for cmd @type dict - @keyparam locals dictionary of local variables for cmd + @keyparam locals dictionary of local variables for cmd @type dict + @keyparam debug flag if command should run under debugger control + @type bool """ if globals is None: import __main__ @@ -458,14 +441,28 @@ if locals is None: locals = globals - sys.settrace(self.trace_dispatch) if not isinstance(cmd, types.CodeType): cmd = compile(cmd, "<string>", "exec") + if debug: + # First time the trace_dispatch function is called, a "base debug" + # function has to be returned, which is called at every user code + # function call. This is ensured by setting stop_everywhere. + self.stop_everywhere = True + sys.settrace(self.trace_dispatch) + try: exec(cmd, globals, locals) + atexit._run_exitfuncs() + self._dbgClient.progTerminated(0) except SystemExit: - pass + atexit._run_exitfuncs() + excinfo = sys.exc_info() + exitcode, message = self.__extractSystemExitMessage(excinfo) + self._dbgClient.progTerminated(exitcode, message) + except Exception: + excinfo = sys.exc_info() + self.user_exception(excinfo, True) finally: self.quitting = True sys.settrace(None) @@ -481,6 +478,9 @@ """ self.stopframe = stopframe self.returnframe = returnframe + if returnframe is not None: + # Ensure to be able to stop on the return frame + returnframe.f_trace = self.trace_dispatch self.stop_everywhere = False def set_continue(self, special): @@ -514,7 +514,6 @@ @type frame object """ self._set_stopinfo(frame, frame.f_back) - frame.f_back.f_trace = self.trace_dispatch frame.f_trace = self.trace_dispatch def set_return(self, frame): @@ -767,12 +766,10 @@ self.isBroken = False self._dbgClient.unlockClient() - def user_exception(self, frame, excinfo, unhandled=False): + def user_exception(self, excinfo, unhandled=False): """ Public method reimplemented to report an exception to the debug server. - @param frame the frame object - @type frame object @param excinfo details about the exception @type tuple(Exception, excval object, traceback frame object) @keyparam unhandled flag indicating an uncaught exception @@ -780,44 +777,10 @@ """ exctype, excval, exctb = excinfo - if exctype in [GeneratorExit, StopIteration]: + if exctype in [GeneratorExit, StopIteration, SystemExit]: # ignore these return - if exctype == SystemExit: - atexit._run_exitfuncs() - if excval is None: - exitcode = 0 - message = "" - elif isinstance(excval, basestring): - exitcode = 1 - message = excval - elif isinstance(excval, bytes): - exitcode = 1 - message = excval.decode() - elif isinstance(excval, int): - exitcode = excval - message = "" - elif isinstance(excval, SystemExit): - code = excval.code - if isinstance(code, basestring): - exitcode = 1 - message = code - elif isinstance(code, bytes): - exitcode = 1 - message = code.decode() - elif isinstance(code, int): - exitcode = code - message = "" - else: - exitcode = 1 - message = str(code) - else: - exitcode = 1 - message = str(excval) - self._dbgClient.progTerminated(exitcode, message) - return - if exctype in [SyntaxError, IndentationError]: try: # tuple could only occure on Python 2, but not always! @@ -894,14 +857,24 @@ stack = self.getStack(frlist[self.skipFrames:]) + self.isBroken = True + self._dbgClient.lockClient() + self._dbgClient.currentThread = self + self._dbgClient.currentThreadExec = self self._dbgClient.sendException(exctypetxt, excvaltxt, stack) + self._dbgClient.dumpThreadList() - if exctb is None: - return + if exctb is not None: + # When polling kept enabled, it isn't possible to resume after an + # unhandled exception without further user interaction. + self._dbgClient.eventLoop(True) - self._dbgClient.eventLoop() self.skipFrames = 0 + self.isBroken = False + self.eventPollFlag = False + self._dbgClient.unlockClient() + def __extractExceptionName(self, exctype): """ Private method to extract the exception name given the exception @@ -934,6 +907,48 @@ tb = None return stack + def __extractSystemExitMessage(self, excinfo): + """ + Private method to get the SystemExit code and message. + + @param excinfo details about the SystemExit exception + @type tuple(Exception, excval object, traceback frame object) + @return SystemExit code and message + @rtype int, str + """ + exctype, excval, exctb = excinfo + if excval is None: + exitcode = 0 + message = "" + elif isinstance(excval, basestring): + exitcode = 1 + message = excval + elif isinstance(excval, bytes): + exitcode = 1 + message = excval.decode() + elif isinstance(excval, int): + exitcode = excval + message = "" + elif isinstance(excval, SystemExit): + code = excval.code + if isinstance(code, basestring): + exitcode = 1 + message = code + elif isinstance(code, bytes): + exitcode = 1 + message = code.decode() + elif isinstance(code, int): + exitcode = code + message = "" + else: + exitcode = 1 + message = str(code) + else: + exitcode = 1 + message = str(excval) + + return exitcode, message + def stop_here(self, frame): """ Public method reimplemented to filter out debugger files.
--- a/DebugClients/Python/DebugClientBase.py Sun Feb 26 15:54:49 2017 +0100 +++ b/DebugClients/Python/DebugClientBase.py Fri Mar 03 18:34:21 2017 +0100 @@ -494,8 +494,7 @@ code = self.__compileFileSource(self.running) if code: sys.setprofile(self.callTraceEnabled) - res = self.mainThread.run(code, self.debugMod.__dict__) - self.progTerminated(res) + self.mainThread.run(code, self.debugMod.__dict__, debug=True) elif method == "RequestRun": sys.argv = [] @@ -529,13 +528,7 @@ res = 0 code = self.__compileFileSource(self.running) if code: - try: - exec(code, self.debugMod.__dict__) - except SystemExit as exc: - res = exc.code - atexit._run_exitfuncs() - self.writestream.flush() - self.progTerminated(res) + self.mainThread.run(code, self.debugMod.__dict__, debug=False) elif method == "RequestCoverage": from coverage import coverage @@ -567,17 +560,10 @@ code = self.__compileFileSource(sys.argv[0]) if code: self.running = sys.argv[0] - res = 0 self.cover.start() - try: - exec(code, self.debugMod.__dict__) - except SystemExit as exc: - res = exc.code - atexit._run_exitfuncs() + self.mainThread.run(code, self.debugMod.__dict__, debug=False) self.cover.stop() self.cover.save() - self.writestream.flush() - self.progTerminated(res) elif method == "RequestProfile": sys.setprofile(None) @@ -618,12 +604,15 @@ res = 0 try: self.prof.run(script) + atexit._run_exitfuncs() except SystemExit as exc: res = exc.code - - atexit._run_exitfuncs() + atexit._run_exitfuncs() + except Exception: + excinfo = sys.exc_info() + self.__unhandled_exception(*excinfo) + self.prof.save() - self.writestream.flush() self.progTerminated(res) elif method == "ExecuteStatement": @@ -738,7 +727,7 @@ self.eventExit = True elif method == "RequestContinue": - self.currentThread.go(params["special"]) + self.currentThreadExec.go(params["special"]) self.eventExit = True elif method == "RawInput": @@ -1189,7 +1178,7 @@ @param excval data about the exception @param exctb traceback for the exception """ - self.mainThread.user_exception(None, (exctype, excval, exctb), True) + self.mainThread.user_exception((exctype, excval, exctb), True) def __interceptSignals(self): """
--- a/DebugClients/Python/ThreadExtension.py Sun Feb 26 15:54:49 2017 +0100 +++ b/DebugClients/Python/ThreadExtension.py Fri Mar 03 18:34:21 2017 +0100 @@ -20,6 +20,8 @@ from DebugBase import DebugBase +_qtThreadNumber = 1 + class ThreadExtension(object): """ @@ -35,7 +37,8 @@ self.threadNumber = 1 self.enableImportHooks = True self._original_start_new_thread = None - self._qtThread = None + self.threadingAttached = False + self.qtThreadAttached = False self.clientLock = threading.RLock() @@ -229,7 +232,10 @@ # adjust current frame if "__pypy__" not in sys.builtin_module_names: - self.threads[id].currentFrame = self.getExecutedFrame(frame) + # Don't update with None + currentFrame = self.getExecutedFrame(frame) + if currentFrame is not None: + self.threads[id].currentFrame = currentFrame # Clean up obsolet because terminated threads self.threads = {id_: thrd for id_, thrd in self.threads.items() @@ -250,7 +256,8 @@ return None if fullname in [self.threadModName, 'PyQt4.QtCore', 'PyQt5.QtCore', - 'PySide.QtCore'] and self.enableImportHooks: + 'PySide.QtCore', 'PySide2.QtCore', + 'threading'] and self.enableImportHooks: # Disable hook to be able to import original module self.enableImportHooks = False return self @@ -273,49 +280,99 @@ # make thread hooks available to system self._original_start_new_thread = module.start_new_thread module.start_new_thread = self.attachThread - elif fullname in ['PyQt4.QtCore', 'PyQt5.QtCore', - 'PySide.QtCore'] and self._qtThread is None: - self._qtThread = module.QThread + + # Add hook for threading.run() + elif (fullname == "threading" and self.threadingAttached is False): + self.threadingAttached = True + # _debugClient as a class attribute can't be accessed in following # class. Therefore we need a global variable. _debugClient = self + def _bootstrap(self, run): + """ + Bootstrap for threading, which reports exceptions correctly. + + @param run the run method of threading.Thread + @type method pointer + """ + newThread = _debugClient.threads[self.ident] + newThread.name = self.name + # see DebugBase.bootstrap + sys.settrace(newThread.trace_dispatch) + try: + run() + except Exception: + excinfo = sys.exc_info() + newThread.user_exception(excinfo, True) + + class ThreadWrapper(module.Thread): + """ Wrapper class for threading.Thread. """ + + def __init__(self, *args, **kwargs): + # Overwrite the provided run method with our own, to + # intercept the thread creation by threading.Thread + self.run = lambda s=self, run=self.run: _bootstrap(s, run) + + super(ThreadWrapper, self).__init__(*args, **kwargs) + + module.Thread = ThreadWrapper + + # Add hook for *.QThread + elif (fullname in ['PyQt4.QtCore', 'PyQt5.QtCore', + 'PySide.QtCore', 'PySide2.QtCore'] and + self.qtThreadAttached is False): + self.qtThreadAttached = True + # _debugClient as a class attribute can't be accessed in following + # class. Therefore we need a global variable. + _debugClient = self + + def _bootstrapQThread(self, run): + """ + Bootstrap for QThread, which reports exceptions correctly. + + @param run the run method of *.QThread + @type method pointer + """ + global _qtThreadNumber + + newThread = DebugBase(_debugClient) + ident = _thread.get_ident() + name = 'QtThread-{0}'.format(_qtThreadNumber) + + _qtThreadNumber += 1 + + newThread.id = ident + newThread.name = name + + _debugClient.threads[ident] = newThread + + # see DebugBase.bootstrap + sys.settrace(newThread.trace_dispatch) + try: + run() + except SystemExit: + # *.QThreads doesn't like SystemExit + pass + except Exception: + excinfo = sys.exc_info() + newThread.user_exception(excinfo, True) + class QThreadWrapper(module.QThread): - __qtThreadNumber = 1 + """ Wrapper class for *.QThread. """ def __init__(self, *args, **kwargs): # Overwrite the provided run method with our own, to # intercept the thread creation by Qt - self._ApplicationRun = self.run - self.run = self.__bootstrapQThread + self.run = lambda s=self, run=self.run: ( + _bootstrapQThread(s, run)) super(QThreadWrapper, self).__init__(*args, **kwargs) - - def __bootstrapQThread(self): - newThread = DebugBase(_debugClient) - ident = _thread.get_ident() - name = 'QtThread-{0}'.format(self.__qtThreadNumber) - self.__qtThreadNumber += 1 - - newThread.id = ident - newThread.name = name - - _debugClient.threads[ident] = newThread - - frame = sys._getframe() - newThread.botframe = frame - frame.f_trace = newThread.trace_dispatch - # see DebugBase.bootstrap - sys.settrace( - lambda frame, event, arg: newThread.trace_dispatch) - - return self._ApplicationRun() module.QThread = QThreadWrapper self.enableImportHooks = True return module - # # eflag: noqa = M702
--- a/Debugger/EditBreakpointDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/EditBreakpointDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -167,7 +167,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Debugger/EditWatchpointDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/EditWatchpointDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -144,7 +144,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>conditionButton</tabstop>
--- a/Debugger/ExceptionsFilterDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/ExceptionsFilterDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -100,7 +100,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>exceptionList</tabstop>
--- a/Debugger/StartCoverageDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/StartCoverageDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -213,7 +213,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Debugger/StartDebugDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/StartDebugDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -265,7 +265,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Debugger/StartProfileDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/StartProfileDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -213,7 +213,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Debugger/StartRunDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/StartRunDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -236,7 +236,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Debugger/VariableDetailDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/VariableDetailDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -79,7 +79,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>eName</tabstop>
--- a/Debugger/VariablesFilterDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Debugger/VariablesFilterDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -104,7 +104,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>localsList</tabstop>
--- a/Documentation/Help/source.qhp Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Help/source.qhp Fri Mar 03 18:34:21 2017 +0100 @@ -826,6 +826,7 @@ <section title="eric6.Preferences.ConfigurationPages.ViewmanagerPage" ref="eric6.Preferences.ConfigurationPages.ViewmanagerPage.html" /> <section title="eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage" ref="eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html" /> <section title="eric6.Preferences.ConfigurationPages.WebBrowserPage" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html" /> + <section title="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html" /> </section> <section title="eric6.Preferences.ConfigurationDialog" ref="eric6.Preferences.ConfigurationDialog.html" /> <section title="eric6.Preferences.MouseClickDialog" ref="eric6.Preferences.MouseClickDialog.html" /> @@ -3289,6 +3290,7 @@ <keyword name="DebugBase.__do_clearWatch" id="DebugBase.__do_clearWatch" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__do_clearWatch" /> <keyword name="DebugBase.__eventPollTimer" id="DebugBase.__eventPollTimer" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__eventPollTimer" /> <keyword name="DebugBase.__extractExceptionName" id="DebugBase.__extractExceptionName" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__extractExceptionName" /> + <keyword name="DebugBase.__extractSystemExitMessage" id="DebugBase.__extractSystemExitMessage" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__extractSystemExitMessage" /> <keyword name="DebugBase.__extract_stack" id="DebugBase.__extract_stack" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__extract_stack" /> <keyword name="DebugBase.__sendCallTrace" id="DebugBase.__sendCallTrace" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__sendCallTrace" /> <keyword name="DebugBase.__skipFrame" id="DebugBase.__skipFrame" ref="eric6.DebugClients.Python.DebugBase.html#DebugBase.__skipFrame" /> @@ -3729,7 +3731,11 @@ <keyword name="DebuggerPropertiesDialog" id="DebuggerPropertiesDialog" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog" /> <keyword name="DebuggerPropertiesDialog (Constructor)" id="DebuggerPropertiesDialog (Constructor)" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__init__" /> <keyword name="DebuggerPropertiesDialog (Module)" id="DebuggerPropertiesDialog (Module)" ref="eric6.Project.DebuggerPropertiesDialog.html" /> + <keyword name="DebuggerPropertiesDialog.__clearHistory" id="DebuggerPropertiesDialog.__clearHistory" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__clearHistory" /> + <keyword name="DebuggerPropertiesDialog.__saveHistories" id="DebuggerPropertiesDialog.__saveHistories" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__saveHistories" /> + <keyword name="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" id="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" /> <keyword name="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" id="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" /> + <keyword name="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" id="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" /> <keyword name="DebuggerPropertiesDialog.storeData" id="DebuggerPropertiesDialog.storeData" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.storeData" /> <keyword name="DebuggerPropertiesReader" id="DebuggerPropertiesReader" ref="eric6.E5XML.DebuggerPropertiesReader.html#DebuggerPropertiesReader" /> <keyword name="DebuggerPropertiesReader (Constructor)" id="DebuggerPropertiesReader (Constructor)" ref="eric6.E5XML.DebuggerPropertiesReader.html#DebuggerPropertiesReader.__init__" /> @@ -3911,6 +3917,7 @@ <keyword name="DownloadItem.__readyRead" id="DownloadItem.__readyRead" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__readyRead" /> <keyword name="DownloadItem.__saveFileName" id="DownloadItem.__saveFileName" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__saveFileName" /> <keyword name="DownloadItem.__saveFileName" id="DownloadItem.__saveFileName" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__saveFileName" /> + <keyword name="DownloadItem.__setFileName" id="DownloadItem.__setFileName" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__setFileName" /> <keyword name="DownloadItem.__updateInfoLabel" id="DownloadItem.__updateInfoLabel" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__updateInfoLabel" /> <keyword name="DownloadItem.__updateInfoLabel" id="DownloadItem.__updateInfoLabel" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__updateInfoLabel" /> <keyword name="DownloadItem.absoluteFilePath" id="DownloadItem.absoluteFilePath" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.absoluteFilePath" /> @@ -7065,7 +7072,6 @@ <keyword name="Hg.__getInOutBookmarks" id="Hg.__getInOutBookmarks" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__getInOutBookmarks" /> <keyword name="Hg.__getMostRecentCommitMessage" id="Hg.__getMostRecentCommitMessage" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__getMostRecentCommitMessage" /> <keyword name="Hg.__hgGetFileForRevision" id="Hg.__hgGetFileForRevision" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__hgGetFileForRevision" /> - <keyword name="Hg.__hgURL" id="Hg.__hgURL" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__hgURL" /> <keyword name="Hg.__iniFileChanged" id="Hg.__iniFileChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__iniFileChanged" /> <keyword name="Hg.__monitorRepoIniFile" id="Hg.__monitorRepoIniFile" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__monitorRepoIniFile" /> <keyword name="Hg.__vcsCommit_Step2" id="Hg.__vcsCommit_Step2" ref="eric6.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__vcsCommit_Step2" /> @@ -7552,29 +7558,35 @@ <keyword name="HgLogBrowserDialog (Constructor)" id="HgLogBrowserDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__init__" /> <keyword name="HgLogBrowserDialog (Module)" id="HgLogBrowserDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html" /> <keyword name="HgLogBrowserDialog.__actionMode" id="HgLogBrowserDialog.__actionMode" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__actionMode" /> + <keyword name="HgLogBrowserDialog.__actionsMenuHovered" id="HgLogBrowserDialog.__actionsMenuHovered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__actionsMenuHovered" /> <keyword name="HgLogBrowserDialog.__addFinishCallback" id="HgLogBrowserDialog.__addFinishCallback" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__addFinishCallback" /> <keyword name="HgLogBrowserDialog.__bookmarkActTriggered" id="HgLogBrowserDialog.__bookmarkActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__bookmarkActTriggered" /> <keyword name="HgLogBrowserDialog.__bookmarkMoveActTriggered" id="HgLogBrowserDialog.__bookmarkMoveActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__bookmarkMoveActTriggered" /> <keyword name="HgLogBrowserDialog.__branchColor" id="HgLogBrowserDialog.__branchColor" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__branchColor" /> - <keyword name="HgLogBrowserDialog.__diffRevisions" id="HgLogBrowserDialog.__diffRevisions" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__diffRevisions" /> + <keyword name="HgLogBrowserDialog.__bundleActTriggered" id="HgLogBrowserDialog.__bundleActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__bundleActTriggered" /> <keyword name="HgLogBrowserDialog.__fetchActTriggered" id="HgLogBrowserDialog.__fetchActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__fetchActTriggered" /> <keyword name="HgLogBrowserDialog.__filterLogs" id="HgLogBrowserDialog.__filterLogs" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__filterLogs" /> <keyword name="HgLogBrowserDialog.__findItem" id="HgLogBrowserDialog.__findItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__findItem" /> <keyword name="HgLogBrowserDialog.__finish" id="HgLogBrowserDialog.__finish" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__finish" /> + <keyword name="HgLogBrowserDialog.__generateDetailsTableText" id="HgLogBrowserDialog.__generateDetailsTableText" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateDetailsTableText" /> + <keyword name="HgLogBrowserDialog.__generateDiffs" id="HgLogBrowserDialog.__generateDiffs" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateDiffs" /> <keyword name="HgLogBrowserDialog.__generateEdges" id="HgLogBrowserDialog.__generateEdges" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateEdges" /> - <keyword name="HgLogBrowserDialog.__generateFileItem" id="HgLogBrowserDialog.__generateFileItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateFileItem" /> <keyword name="HgLogBrowserDialog.__generateIcon" id="HgLogBrowserDialog.__generateIcon" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateIcon" /> <keyword name="HgLogBrowserDialog.__generateLogItem" id="HgLogBrowserDialog.__generateLogItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generateLogItem" /> + <keyword name="HgLogBrowserDialog.__generatorFinished" id="HgLogBrowserDialog.__generatorFinished" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__generatorFinished" /> <keyword name="HgLogBrowserDialog.__getClosedBranches" id="HgLogBrowserDialog.__getClosedBranches" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getClosedBranches" /> <keyword name="HgLogBrowserDialog.__getColor" id="HgLogBrowserDialog.__getColor" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getColor" /> <keyword name="HgLogBrowserDialog.__getLogEntries" id="HgLogBrowserDialog.__getLogEntries" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getLogEntries" /> <keyword name="HgLogBrowserDialog.__getParents" id="HgLogBrowserDialog.__getParents" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getParents" /> <keyword name="HgLogBrowserDialog.__getRevisionOfTag" id="HgLogBrowserDialog.__getRevisionOfTag" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getRevisionOfTag" /> + <keyword name="HgLogBrowserDialog.__gpgSignActTriggered" id="HgLogBrowserDialog.__gpgSignActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__gpgSignActTriggered" /> + <keyword name="HgLogBrowserDialog.__gpgVerifyActTriggered" id="HgLogBrowserDialog.__gpgVerifyActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__gpgVerifyActTriggered" /> <keyword name="HgLogBrowserDialog.__graftActTriggered" id="HgLogBrowserDialog.__graftActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__graftActTriggered" /> <keyword name="HgLogBrowserDialog.__identifyProject" id="HgLogBrowserDialog.__identifyProject" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__identifyProject" /> <keyword name="HgLogBrowserDialog.__initActionsMenu" id="HgLogBrowserDialog.__initActionsMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__initActionsMenu" /> <keyword name="HgLogBrowserDialog.__initData" id="HgLogBrowserDialog.__initData" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__initData" /> <keyword name="HgLogBrowserDialog.__lfPullActTriggered" id="HgLogBrowserDialog.__lfPullActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__lfPullActTriggered" /> + <keyword name="HgLogBrowserDialog.__mergeActTriggered" id="HgLogBrowserDialog.__mergeActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__mergeActTriggered" /> <keyword name="HgLogBrowserDialog.__modifyForLargeFiles" id="HgLogBrowserDialog.__modifyForLargeFiles" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__modifyForLargeFiles" /> <keyword name="HgLogBrowserDialog.__phaseActTriggered" id="HgLogBrowserDialog.__phaseActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__phaseActTriggered" /> <keyword name="HgLogBrowserDialog.__prepareFieldSearch" id="HgLogBrowserDialog.__prepareFieldSearch" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__prepareFieldSearch" /> @@ -7585,28 +7597,32 @@ <keyword name="HgLogBrowserDialog.__pushAllActTriggered" id="HgLogBrowserDialog.__pushAllActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__pushAllActTriggered" /> <keyword name="HgLogBrowserDialog.__readStderr" id="HgLogBrowserDialog.__readStderr" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__readStderr" /> <keyword name="HgLogBrowserDialog.__readStdout" id="HgLogBrowserDialog.__readStdout" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__readStdout" /> + <keyword name="HgLogBrowserDialog.__reloadGeometry" id="HgLogBrowserDialog.__reloadGeometry" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__reloadGeometry" /> <keyword name="HgLogBrowserDialog.__resetUI" id="HgLogBrowserDialog.__resetUI" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__resetUI" /> <keyword name="HgLogBrowserDialog.__resizeColumnsFiles" id="HgLogBrowserDialog.__resizeColumnsFiles" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__resizeColumnsFiles" /> <keyword name="HgLogBrowserDialog.__resizeColumnsLog" id="HgLogBrowserDialog.__resizeColumnsLog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__resizeColumnsLog" /> <keyword name="HgLogBrowserDialog.__resortFiles" id="HgLogBrowserDialog.__resortFiles" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__resortFiles" /> + <keyword name="HgLogBrowserDialog.__restoreSplitterStates" id="HgLogBrowserDialog.__restoreSplitterStates" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__restoreSplitterStates" /> <keyword name="HgLogBrowserDialog.__revisionClicked" id="HgLogBrowserDialog.__revisionClicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__revisionClicked" /> + <keyword name="HgLogBrowserDialog.__selectAllActTriggered" id="HgLogBrowserDialog.__selectAllActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__selectAllActTriggered" /> <keyword name="HgLogBrowserDialog.__showError" id="HgLogBrowserDialog.__showError" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__showError" /> <keyword name="HgLogBrowserDialog.__stripActTriggered" id="HgLogBrowserDialog.__stripActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__stripActTriggered" /> <keyword name="HgLogBrowserDialog.__switchActTriggered" id="HgLogBrowserDialog.__switchActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__switchActTriggered" /> <keyword name="HgLogBrowserDialog.__tagActTriggered" id="HgLogBrowserDialog.__tagActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__tagActTriggered" /> - <keyword name="HgLogBrowserDialog.__updateDiffButtons" id="HgLogBrowserDialog.__updateDiffButtons" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateDiffButtons" /> - <keyword name="HgLogBrowserDialog.__updateGui" id="HgLogBrowserDialog.__updateGui" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateGui" /> + <keyword name="HgLogBrowserDialog.__unbundleActTriggered" id="HgLogBrowserDialog.__unbundleActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__unbundleActTriggered" /> + <keyword name="HgLogBrowserDialog.__updateDetailsAndFiles" id="HgLogBrowserDialog.__updateDetailsAndFiles" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateDetailsAndFiles" /> + <keyword name="HgLogBrowserDialog.__updateFilesTree" id="HgLogBrowserDialog.__updateFilesTree" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateFilesTree" /> + <keyword name="HgLogBrowserDialog.__updateSbsSelectLabel" id="HgLogBrowserDialog.__updateSbsSelectLabel" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateSbsSelectLabel" /> <keyword name="HgLogBrowserDialog.__updateToolMenuActions" id="HgLogBrowserDialog.__updateToolMenuActions" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__updateToolMenuActions" /> <keyword name="HgLogBrowserDialog.closeEvent" id="HgLogBrowserDialog.closeEvent" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.closeEvent" /> <keyword name="HgLogBrowserDialog.col2x" id="HgLogBrowserDialog.col2x" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.col2x" /> <keyword name="HgLogBrowserDialog.keyPressEvent" id="HgLogBrowserDialog.keyPressEvent" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.keyPressEvent" /> <keyword name="HgLogBrowserDialog.on_branchCombo_activated" id="HgLogBrowserDialog.on_branchCombo_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_branchCombo_activated" /> <keyword name="HgLogBrowserDialog.on_buttonBox_clicked" id="HgLogBrowserDialog.on_buttonBox_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_buttonBox_clicked" /> - <keyword name="HgLogBrowserDialog.on_diffP1Button_clicked" id="HgLogBrowserDialog.on_diffP1Button_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_diffP1Button_clicked" /> - <keyword name="HgLogBrowserDialog.on_diffP2Button_clicked" id="HgLogBrowserDialog.on_diffP2Button_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_diffP2Button_clicked" /> - <keyword name="HgLogBrowserDialog.on_diffRevisionsButton_clicked" id="HgLogBrowserDialog.on_diffRevisionsButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_diffRevisionsButton_clicked" /> + <keyword name="HgLogBrowserDialog.on_diffSelectLabel_linkActivated" id="HgLogBrowserDialog.on_diffSelectLabel_linkActivated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_diffSelectLabel_linkActivated" /> <keyword name="HgLogBrowserDialog.on_downButton_clicked" id="HgLogBrowserDialog.on_downButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_downButton_clicked" /> <keyword name="HgLogBrowserDialog.on_fieldCombo_activated" id="HgLogBrowserDialog.on_fieldCombo_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_fieldCombo_activated" /> + <keyword name="HgLogBrowserDialog.on_filesTree_currentItemChanged" id="HgLogBrowserDialog.on_filesTree_currentItemChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_filesTree_currentItemChanged" /> <keyword name="HgLogBrowserDialog.on_findNextButton_clicked" id="HgLogBrowserDialog.on_findNextButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_findNextButton_clicked" /> <keyword name="HgLogBrowserDialog.on_findPrevButton_clicked" id="HgLogBrowserDialog.on_findPrevButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_findPrevButton_clicked" /> <keyword name="HgLogBrowserDialog.on_fromDate_dateChanged" id="HgLogBrowserDialog.on_fromDate_dateChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_fromDate_dateChanged" /> @@ -7619,6 +7635,8 @@ <keyword name="HgLogBrowserDialog.on_refreshButton_clicked" id="HgLogBrowserDialog.on_refreshButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_refreshButton_clicked" /> <keyword name="HgLogBrowserDialog.on_rxEdit_returnPressed" id="HgLogBrowserDialog.on_rxEdit_returnPressed" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_rxEdit_returnPressed" /> <keyword name="HgLogBrowserDialog.on_rxEdit_textChanged" id="HgLogBrowserDialog.on_rxEdit_textChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_rxEdit_textChanged" /> + <keyword name="HgLogBrowserDialog.on_saveLabel_linkActivated" id="HgLogBrowserDialog.on_saveLabel_linkActivated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_saveLabel_linkActivated" /> + <keyword name="HgLogBrowserDialog.on_sbsSelectLabel_linkActivated" id="HgLogBrowserDialog.on_sbsSelectLabel_linkActivated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_sbsSelectLabel_linkActivated" /> <keyword name="HgLogBrowserDialog.on_sendButton_clicked" id="HgLogBrowserDialog.on_sendButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_sendButton_clicked" /> <keyword name="HgLogBrowserDialog.on_stopCheckBox_clicked" id="HgLogBrowserDialog.on_stopCheckBox_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_stopCheckBox_clicked" /> <keyword name="HgLogBrowserDialog.on_toDate_dateChanged" id="HgLogBrowserDialog.on_toDate_dateChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.on_toDate_dateChanged" /> @@ -7641,9 +7659,10 @@ <keyword name="HgNewProjectOptionsDialog" id="HgNewProjectOptionsDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog" /> <keyword name="HgNewProjectOptionsDialog (Constructor)" id="HgNewProjectOptionsDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.__init__" /> <keyword name="HgNewProjectOptionsDialog (Module)" id="HgNewProjectOptionsDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html" /> + <keyword name="HgNewProjectOptionsDialog.__saveHistory" id="HgNewProjectOptionsDialog.__saveHistory" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.__saveHistory" /> <keyword name="HgNewProjectOptionsDialog.getData" id="HgNewProjectOptionsDialog.getData" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.getData" /> - <keyword name="HgNewProjectOptionsDialog.on_protocolCombo_activated" id="HgNewProjectOptionsDialog.on_protocolCombo_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.on_protocolCombo_activated" /> <keyword name="HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged" id="HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged" /> + <keyword name="HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked" id="HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked" /> <keyword name="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" id="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html#HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" /> <keyword name="HgOptionsDialog" id="HgOptionsDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgOptionsDialog.html#HgOptionsDialog" /> <keyword name="HgOptionsDialog (Constructor)" id="HgOptionsDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgOptionsDialog.html#HgOptionsDialog.__init__" /> @@ -7977,7 +7996,7 @@ <keyword name="HgStatusDialog" id="HgStatusDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog" /> <keyword name="HgStatusDialog (Constructor)" id="HgStatusDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__init__" /> <keyword name="HgStatusDialog (Module)" id="HgStatusDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html" /> - <keyword name="HgStatusDialog.__activeExtensionsChanged" id="HgStatusDialog.__activeExtensionsChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__activeExtensionsChanged" /> + <keyword name="HgStatusDialog.__actionsMenuHovered" id="HgStatusDialog.__actionsMenuHovered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__actionsMenuHovered" /> <keyword name="HgStatusDialog.__add" id="HgStatusDialog.__add" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__add" /> <keyword name="HgStatusDialog.__commit" id="HgStatusDialog.__commit" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__commit" /> <keyword name="HgStatusDialog.__commitDeselectAll" id="HgStatusDialog.__commitDeselectAll" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__commitDeselectAll" /> @@ -7991,9 +8010,11 @@ <keyword name="HgStatusDialog.__generateItem" id="HgStatusDialog.__generateItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__generateItem" /> <keyword name="HgStatusDialog.__generatorFinished" id="HgStatusDialog.__generatorFinished" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__generatorFinished" /> <keyword name="HgStatusDialog.__getCommitableItems" id="HgStatusDialog.__getCommitableItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getCommitableItems" /> + <keyword name="HgStatusDialog.__getCommitableUnselectedItems" id="HgStatusDialog.__getCommitableUnselectedItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getCommitableUnselectedItems" /> <keyword name="HgStatusDialog.__getMissingItems" id="HgStatusDialog.__getMissingItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getMissingItems" /> <keyword name="HgStatusDialog.__getModifiedItems" id="HgStatusDialog.__getModifiedItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getModifiedItems" /> <keyword name="HgStatusDialog.__getUnversionedItems" id="HgStatusDialog.__getUnversionedItems" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__getUnversionedItems" /> + <keyword name="HgStatusDialog.__initActionsMenu" id="HgStatusDialog.__initActionsMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__initActionsMenu" /> <keyword name="HgStatusDialog.__lfAdd" id="HgStatusDialog.__lfAdd" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__lfAdd" /> <keyword name="HgStatusDialog.__procFinished" id="HgStatusDialog.__procFinished" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__procFinished" /> <keyword name="HgStatusDialog.__processOutputLine" id="HgStatusDialog.__processOutputLine" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__processOutputLine" /> @@ -8005,27 +8026,16 @@ <keyword name="HgStatusDialog.__restoreMissing" id="HgStatusDialog.__restoreMissing" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__restoreMissing" /> <keyword name="HgStatusDialog.__revert" id="HgStatusDialog.__revert" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__revert" /> <keyword name="HgStatusDialog.__sbsDiff" id="HgStatusDialog.__sbsDiff" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__sbsDiff" /> - <keyword name="HgStatusDialog.__showAddMenu" id="HgStatusDialog.__showAddMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showAddMenu" /> - <keyword name="HgStatusDialog.__showContextMenu" id="HgStatusDialog.__showContextMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showContextMenu" /> + <keyword name="HgStatusDialog.__showActionsMenu" id="HgStatusDialog.__showActionsMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showActionsMenu" /> <keyword name="HgStatusDialog.__showError" id="HgStatusDialog.__showError" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showError" /> - <keyword name="HgStatusDialog.__updateButtons" id="HgStatusDialog.__updateButtons" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__updateButtons" /> - <keyword name="HgStatusDialog.__updateCommitButton" id="HgStatusDialog.__updateCommitButton" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__updateCommitButton" /> <keyword name="HgStatusDialog.closeEvent" id="HgStatusDialog.closeEvent" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.closeEvent" /> <keyword name="HgStatusDialog.keyPressEvent" id="HgStatusDialog.keyPressEvent" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.keyPressEvent" /> - <keyword name="HgStatusDialog.on_addButton_clicked" id="HgStatusDialog.on_addButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_addButton_clicked" /> <keyword name="HgStatusDialog.on_buttonBox_clicked" id="HgStatusDialog.on_buttonBox_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_buttonBox_clicked" /> - <keyword name="HgStatusDialog.on_commitButton_clicked" id="HgStatusDialog.on_commitButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_commitButton_clicked" /> - <keyword name="HgStatusDialog.on_diffButton_clicked" id="HgStatusDialog.on_diffButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_diffButton_clicked" /> - <keyword name="HgStatusDialog.on_forgetButton_clicked" id="HgStatusDialog.on_forgetButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_forgetButton_clicked" /> <keyword name="HgStatusDialog.on_input_returnPressed" id="HgStatusDialog.on_input_returnPressed" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_input_returnPressed" /> <keyword name="HgStatusDialog.on_passwordCheckBox_toggled" id="HgStatusDialog.on_passwordCheckBox_toggled" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_passwordCheckBox_toggled" /> <keyword name="HgStatusDialog.on_refreshButton_clicked" id="HgStatusDialog.on_refreshButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_refreshButton_clicked" /> - <keyword name="HgStatusDialog.on_restoreButton_clicked" id="HgStatusDialog.on_restoreButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_restoreButton_clicked" /> - <keyword name="HgStatusDialog.on_revertButton_clicked" id="HgStatusDialog.on_revertButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_revertButton_clicked" /> - <keyword name="HgStatusDialog.on_sbsDiffButton_clicked" id="HgStatusDialog.on_sbsDiffButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_sbsDiffButton_clicked" /> <keyword name="HgStatusDialog.on_sendButton_clicked" id="HgStatusDialog.on_sendButton_clicked" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_sendButton_clicked" /> <keyword name="HgStatusDialog.on_statusFilterCombo_activated" id="HgStatusDialog.on_statusFilterCombo_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_statusFilterCombo_activated" /> - <keyword name="HgStatusDialog.on_statusList_itemChanged" id="HgStatusDialog.on_statusList_itemChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_statusList_itemChanged" /> <keyword name="HgStatusDialog.on_statusList_itemSelectionChanged" id="HgStatusDialog.on_statusList_itemSelectionChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_statusList_itemSelectionChanged" /> <keyword name="HgStatusDialog.show" id="HgStatusDialog.show" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.show" /> <keyword name="HgStatusDialog.start" id="HgStatusDialog.start" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.start" /> @@ -10711,6 +10721,7 @@ <keyword name="PluginManager.activatePlugins" id="PluginManager.activatePlugins" ref="eric6.PluginManager.PluginManager.html#PluginManager.activatePlugins" /> <keyword name="PluginManager.checkPluginEntry" id="PluginManager.checkPluginEntry" ref="eric6.PluginManager.PluginManager.html#PluginManager.checkPluginEntry" /> <keyword name="PluginManager.checkPluginUpdatesAvailable" id="PluginManager.checkPluginUpdatesAvailable" ref="eric6.PluginManager.PluginManager.html#PluginManager.checkPluginUpdatesAvailable" /> + <keyword name="PluginManager.clearPluginsPrivateData" id="PluginManager.clearPluginsPrivateData" ref="eric6.PluginManager.PluginManager.html#PluginManager.clearPluginsPrivateData" /> <keyword name="PluginManager.deactivatePlugin" id="PluginManager.deactivatePlugin" ref="eric6.PluginManager.PluginManager.html#PluginManager.deactivatePlugin" /> <keyword name="PluginManager.deactivateVcsPlugins" id="PluginManager.deactivateVcsPlugins" ref="eric6.PluginManager.PluginManager.html#PluginManager.deactivateVcsPlugins" /> <keyword name="PluginManager.doShutdown" id="PluginManager.doShutdown" ref="eric6.PluginManager.PluginManager.html#PluginManager.doShutdown" /> @@ -11002,6 +11013,7 @@ <keyword name="Project.checkDirty" id="Project.checkDirty" ref="eric6.Project.Project.html#Project.checkDirty" /> <keyword name="Project.checkLanguageFiles" id="Project.checkLanguageFiles" ref="eric6.Project.Project.html#Project.checkLanguageFiles" /> <keyword name="Project.checkVCSStatus" id="Project.checkVCSStatus" ref="eric6.Project.Project.html#Project.checkVCSStatus" /> + <keyword name="Project.clearHistories" id="Project.clearHistories" ref="eric6.Project.Project.html#Project.clearHistories" /> <keyword name="Project.clearRecent" id="Project.clearRecent" ref="eric6.Project.Project.html#Project.clearRecent" /> <keyword name="Project.clearStatusMonitorCachedState" id="Project.clearStatusMonitorCachedState" ref="eric6.Project.Project.html#Project.clearStatusMonitorCachedState" /> <keyword name="Project.closeProject" id="Project.closeProject" ref="eric6.Project.Project.html#Project.closeProject" /> @@ -11746,7 +11758,6 @@ <keyword name="QScintilla (Package)" id="QScintilla (Package)" ref="index-eric6.QScintilla.html" /> <keyword name="QThreadWrapper" id="QThreadWrapper" ref="eric6.DebugClients.Python.ThreadExtension.html#QThreadWrapper" /> <keyword name="QThreadWrapper (Constructor)" id="QThreadWrapper (Constructor)" ref="eric6.DebugClients.Python.ThreadExtension.html#QThreadWrapper.__init__" /> - <keyword name="QThreadWrapper.__bootstrapQThread" id="QThreadWrapper.__bootstrapQThread" ref="eric6.DebugClients.Python.ThreadExtension.html#QThreadWrapper.__bootstrapQThread" /> <keyword name="QsciScintillaCompat" id="QsciScintillaCompat" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat" /> <keyword name="QsciScintillaCompat (Constructor)" id="QsciScintillaCompat (Constructor)" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__init__" /> <keyword name="QsciScintillaCompat (Module)" id="QsciScintillaCompat (Module)" ref="eric6.QScintilla.QsciScintillaCompat.html" /> @@ -14276,6 +14287,8 @@ <keyword name="ThreadExtension" id="ThreadExtension" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension" /> <keyword name="ThreadExtension (Constructor)" id="ThreadExtension (Constructor)" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.__init__" /> <keyword name="ThreadExtension (Module)" id="ThreadExtension (Module)" ref="eric6.DebugClients.Python.ThreadExtension.html" /> + <keyword name="ThreadExtension._bootstrap" id="ThreadExtension._bootstrap" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension._bootstrap" /> + <keyword name="ThreadExtension._bootstrapQThread" id="ThreadExtension._bootstrapQThread" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension._bootstrapQThread" /> <keyword name="ThreadExtension.attachThread" id="ThreadExtension.attachThread" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.attachThread" /> <keyword name="ThreadExtension.dumpThreadList" id="ThreadExtension.dumpThreadList" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.dumpThreadList" /> <keyword name="ThreadExtension.find_module" id="ThreadExtension.find_module" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.find_module" /> @@ -14286,6 +14299,8 @@ <keyword name="ThreadExtension.threadTerminated" id="ThreadExtension.threadTerminated" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.threadTerminated" /> <keyword name="ThreadExtension.unlockClient" id="ThreadExtension.unlockClient" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.unlockClient" /> <keyword name="ThreadExtension.updateThreadList" id="ThreadExtension.updateThreadList" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadExtension.updateThreadList" /> + <keyword name="ThreadWrapper" id="ThreadWrapper" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadWrapper" /> + <keyword name="ThreadWrapper (Constructor)" id="ThreadWrapper (Constructor)" ref="eric6.DebugClients.Python.ThreadExtension.html#ThreadWrapper.__init__" /> <keyword name="Token" id="Token" ref="eric6.DataViews.CodeMetrics.html#Token" /> <keyword name="Token" id="Token" ref="eric6.E5Network.E5RFC6266.html#Token" /> <keyword name="Token (Constructor)" id="Token (Constructor)" ref="eric6.DataViews.CodeMetrics.html#Token.__init__" /> @@ -15581,6 +15596,7 @@ <keyword name="WebBrowserPage.acceptNavigationRequest" id="WebBrowserPage.acceptNavigationRequest" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.acceptNavigationRequest" /> <keyword name="WebBrowserPage.certificateError" id="WebBrowserPage.certificateError" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.certificateError" /> <keyword name="WebBrowserPage.execJavaScript" id="WebBrowserPage.execJavaScript" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.execJavaScript" /> + <keyword name="WebBrowserPage.execPrintPage" id="WebBrowserPage.execPrintPage" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.execPrintPage" /> <keyword name="WebBrowserPage.hitTestContent" id="WebBrowserPage.hitTestContent" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.hitTestContent" /> <keyword name="WebBrowserPage.icon" id="WebBrowserPage.icon" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.icon" /> <keyword name="WebBrowserPage.isJavaScriptEnabled" id="WebBrowserPage.isJavaScriptEnabled" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.isJavaScriptEnabled" /> @@ -15590,6 +15606,7 @@ <keyword name="WebBrowserPage.on_refererWhitelistButton_clicked" id="WebBrowserPage.on_refererWhitelistButton_clicked" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#WebBrowserPage.on_refererWhitelistButton_clicked" /> <keyword name="WebBrowserPage.on_setCurrentPageButton_clicked" id="WebBrowserPage.on_setCurrentPageButton_clicked" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#WebBrowserPage.on_setCurrentPageButton_clicked" /> <keyword name="WebBrowserPage.on_startupCombo_currentIndexChanged" id="WebBrowserPage.on_startupCombo_currentIndexChanged" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#WebBrowserPage.on_startupCombo_currentIndexChanged" /> + <keyword name="WebBrowserPage.printCallback" id="WebBrowserPage.printCallback" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.printCallback" /> <keyword name="WebBrowserPage.resultCallback" id="WebBrowserPage.resultCallback" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.resultCallback" /> <keyword name="WebBrowserPage.runJavaScript" id="WebBrowserPage.runJavaScript" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.runJavaScript" /> <keyword name="WebBrowserPage.save" id="WebBrowserPage.save" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#WebBrowserPage.save" /> @@ -15599,6 +15616,12 @@ <keyword name="WebBrowserPage.userAgent" id="WebBrowserPage.userAgent" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.userAgent" /> <keyword name="WebBrowserPage.userAgentForUrl" id="WebBrowserPage.userAgentForUrl" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.userAgentForUrl" /> <keyword name="WebBrowserSnap (Module)" id="WebBrowserSnap (Module)" ref="eric6.WebBrowser.WebBrowserSnap.html" /> + <keyword name="WebBrowserSpellCheckingPage" id="WebBrowserSpellCheckingPage" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage" /> + <keyword name="WebBrowserSpellCheckingPage (Constructor)" id="WebBrowserSpellCheckingPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.__init__" /> + <keyword name="WebBrowserSpellCheckingPage (Module)" id="WebBrowserSpellCheckingPage (Module)" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html" /> + <keyword name="WebBrowserSpellCheckingPage.__createLanguageString" id="WebBrowserSpellCheckingPage.__createLanguageString" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.__createLanguageString" /> + <keyword name="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" id="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" /> + <keyword name="WebBrowserSpellCheckingPage.save" id="WebBrowserSpellCheckingPage.save" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#WebBrowserSpellCheckingPage.save" /> <keyword name="WebBrowserTabBar" id="WebBrowserTabBar" ref="eric6.WebBrowser.WebBrowserTabBar.html#WebBrowserTabBar" /> <keyword name="WebBrowserTabBar (Constructor)" id="WebBrowserTabBar (Constructor)" ref="eric6.WebBrowser.WebBrowserTabBar.html#WebBrowserTabBar.__init__" /> <keyword name="WebBrowserTabBar (Module)" id="WebBrowserTabBar (Module)" ref="eric6.WebBrowser.WebBrowserTabBar.html" /> @@ -15626,6 +15649,7 @@ <keyword name="WebBrowserTabWidget.__pathSelected" id="WebBrowserTabWidget.__pathSelected" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__pathSelected" /> <keyword name="WebBrowserTabWidget.__pdfGeneratedForPrinting" id="WebBrowserTabWidget.__pdfGeneratedForPrinting" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__pdfGeneratedForPrinting" /> <keyword name="WebBrowserTabWidget.__pdfGeneratedForSave" id="WebBrowserTabWidget.__pdfGeneratedForSave" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__pdfGeneratedForSave" /> + <keyword name="WebBrowserTabWidget.__printPreviewRequested" id="WebBrowserTabWidget.__printPreviewRequested" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__printPreviewRequested" /> <keyword name="WebBrowserTabWidget.__recentlyAudibleChanged" id="WebBrowserTabWidget.__recentlyAudibleChanged" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__recentlyAudibleChanged" /> <keyword name="WebBrowserTabWidget.__showContextMenu" id="WebBrowserTabWidget.__showContextMenu" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__showContextMenu" /> <keyword name="WebBrowserTabWidget.__showNavigationMenu" id="WebBrowserTabWidget.__showNavigationMenu" ref="eric6.WebBrowser.WebBrowserTabWidget.html#WebBrowserTabWidget.__showNavigationMenu" /> @@ -15688,6 +15712,7 @@ <keyword name="WebBrowserView.__downloadImage" id="WebBrowserView.__downloadImage" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__downloadImage" /> <keyword name="WebBrowserView.__downloadLink" id="WebBrowserView.__downloadLink" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__downloadLink" /> <keyword name="WebBrowserView.__downloadMedia" id="WebBrowserView.__downloadMedia" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__downloadMedia" /> + <keyword name="WebBrowserView.__getSavePageFileNameAndFormat" id="WebBrowserView.__getSavePageFileNameAndFormat" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__getSavePageFileNameAndFormat" /> <keyword name="WebBrowserView.__iconLoaded" id="WebBrowserView.__iconLoaded" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__iconLoaded" /> <keyword name="WebBrowserView.__iconUrlChanged" id="WebBrowserView.__iconUrlChanged" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__iconUrlChanged" /> <keyword name="WebBrowserView.__isUrlValid" id="WebBrowserView.__isUrlValid" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__isUrlValid" /> @@ -15704,6 +15729,7 @@ <keyword name="WebBrowserView.__reloadAllSpeedDials" id="WebBrowserView.__reloadAllSpeedDials" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__reloadAllSpeedDials" /> <keyword name="WebBrowserView.__renderPreview" id="WebBrowserView.__renderPreview" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__renderPreview" /> <keyword name="WebBrowserView.__renderProcessTerminated" id="WebBrowserView.__renderProcessTerminated" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__renderProcessTerminated" /> + <keyword name="WebBrowserView.__replaceMisspelledWord" id="WebBrowserView.__replaceMisspelledWord" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__replaceMisspelledWord" /> <keyword name="WebBrowserView.__resetSpeedDials" id="WebBrowserView.__resetSpeedDials" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__resetSpeedDials" /> <keyword name="WebBrowserView.__searchDefaultRequested" id="WebBrowserView.__searchDefaultRequested" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__searchDefaultRequested" /> <keyword name="WebBrowserView.__searchImage" id="WebBrowserView.__searchImage" ref="eric6.WebBrowser.WebBrowserView.html#WebBrowserView.__searchImage" /> @@ -16000,6 +16026,7 @@ <keyword name="WebHitTestResult.mediaUrl" id="WebHitTestResult.mediaUrl" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.mediaUrl" /> <keyword name="WebHitTestResult.pos" id="WebHitTestResult.pos" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.pos" /> <keyword name="WebHitTestResult.tagName" id="WebHitTestResult.tagName" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.tagName" /> + <keyword name="WebHitTestResult.updateWithContextMenuData" id="WebHitTestResult.updateWithContextMenuData" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.updateWithContextMenuData" /> <keyword name="WebHitTestResult.viewportPos" id="WebHitTestResult.viewportPos" ref="eric6.WebBrowser.Tools.WebHitTestResult.html#WebHitTestResult.viewportPos" /> <keyword name="WebIconDialog" id="WebIconDialog" ref="eric6.WebBrowser.Tools.WebIconDialog.html#WebIconDialog" /> <keyword name="WebIconDialog (Constructor)" id="WebIconDialog (Constructor)" ref="eric6.WebBrowser.Tools.WebIconDialog.html#WebIconDialog.__init__" /> @@ -16287,6 +16314,7 @@ <keyword name="cleanupSource" id="cleanupSource" ref="eric6.install-debugclients.html#cleanupSource" /> <keyword name="cleanupSource" id="cleanupSource" ref="eric6.install.html#cleanupSource" /> <keyword name="cleanupSource (Module)" id="cleanupSource (Module)" ref="eric6.cleanupSource.html" /> + <keyword name="clearPrivateData" id="clearPrivateData" ref="eric6.Plugins.PluginVcsMercurial.html#clearPrivateData" /> <keyword name="codeStyleBatchCheck" id="codeStyleBatchCheck" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#codeStyleBatchCheck" /> <keyword name="codeStyleCheck" id="codeStyleCheck" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#codeStyleCheck" /> <keyword name="compactPath" id="compactPath" ref="eric6.Utilities.__init__.html#compactPath" /> @@ -16368,6 +16396,7 @@ <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.ViewmanagerPage.html#create" /> <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html#create" /> <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.WebBrowserPage.html#create" /> + <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html#create" /> <keyword name="createActionGroup" id="createActionGroup" ref="eric6.E5Gui.E5Action.html#createActionGroup" /> <keyword name="createConfig" id="createConfig" ref="eric6.install.html#createConfig" /> <keyword name="createConfigurationPage" id="createConfigurationPage" ref="eric6.Plugins.PluginVcsMercurial.html#createConfigurationPage" /> @@ -17650,6 +17679,7 @@ <file>eric6.Preferences.ConfigurationPages.ViewmanagerPage.html</file> <file>eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html</file> <file>eric6.Preferences.ConfigurationPages.WebBrowserPage.html</file> + <file>eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html</file> <file>eric6.Preferences.MouseClickDialog.html</file> <file>eric6.Preferences.PreferencesLexer.html</file> <file>eric6.Preferences.ProgramsDialog.html</file>
--- a/Documentation/Source/eric6.DebugClients.Python.DebugBase.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.DebugClients.Python.DebugBase.html Fri Mar 03 18:34:21 2017 +0100 @@ -83,6 +83,9 @@ <td><a href="#DebugBase.__extractExceptionName">__extractExceptionName</a></td> <td>Private method to extract the exception name given the exception type object.</td> </tr><tr> +<td><a href="#DebugBase.__extractSystemExitMessage">__extractSystemExitMessage</a></td> +<td>Private method to get the SystemExit code and message.</td> +</tr><tr> <td><a href="#DebugBase.__extract_stack">__extract_stack</a></td> <td>Private member to return a list of stack frames.</td> </tr><tr> @@ -250,6 +253,26 @@ <dd> exception name (string) </dd> +</dl><a NAME="DebugBase.__extractSystemExitMessage" ID="DebugBase.__extractSystemExitMessage"></a> +<h4>DebugBase.__extractSystemExitMessage</h4> +<b>__extractSystemExitMessage</b>(<i>excinfo</i>) +<p> + Private method to get the SystemExit code and message. +</p><dl> +<dt><i>excinfo</i> (tuple(Exception, excval object, traceback frame object))</dt> +<dd> +details about the SystemExit exception +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +SystemExit code and message +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +int, str +</dd> </dl><a NAME="DebugBase.__extract_stack" ID="DebugBase.__extract_stack"></a> <h4>DebugBase.__extract_stack</h4> <b>__extract_stack</b>(<i>exctb</i>) @@ -494,7 +517,7 @@ </dd> </dl><a NAME="DebugBase.run" ID="DebugBase.run"></a> <h4>DebugBase.run</h4> -<b>run</b>(<i>cmd, globals=None, locals=None</i>) +<b>run</b>(<i>cmd, globals=None, locals=None, debug=True</i>) <p> Public method to start a given command under debugger control. </p><dl> @@ -507,6 +530,9 @@ </dd><dt><i>locals=</i> (dict)</dt> <dd> dictionary of local variables for cmd +</dd><dt><i>debug=</i> (bool)</dt> +<dd> +flag if command should run under debugger control </dd> </dl><a NAME="DebugBase.setRecursionDepth" ID="DebugBase.setRecursionDepth"></a> <h4>DebugBase.setRecursionDepth</h4> @@ -672,14 +698,11 @@ </dd> </dl><a NAME="DebugBase.user_exception" ID="DebugBase.user_exception"></a> <h4>DebugBase.user_exception</h4> -<b>user_exception</b>(<i>frame, excinfo, unhandled=False</i>) +<b>user_exception</b>(<i>excinfo, unhandled=False</i>) <p> Public method reimplemented to report an exception to the debug server. </p><dl> -<dt><i>frame</i> (frame object)</dt> -<dd> -the frame object -</dd><dt><i>excinfo</i> (tuple(Exception, excval object, traceback frame object))</dt> +<dt><i>excinfo</i> (tuple(Exception, excval object, traceback frame object))</dt> <dd> details about the exception </dd><dt><i>unhandled=</i> (bool)</dt>
--- a/Documentation/Source/eric6.DebugClients.Python.ThreadExtension.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.DebugClients.Python.ThreadExtension.html Fri Mar 03 18:34:21 2017 +0100 @@ -25,16 +25,19 @@ </p> <h3>Global Attributes</h3> <table> -<tr><td>None</td></tr> +<tr><td>_qtThreadNumber</td></tr> </table> <h3>Classes</h3> <table> <tr> <td><a href="#QThreadWrapper">QThreadWrapper</a></td> -<td></td> +<td>Wrapper class for *.QThread.</td> </tr><tr> <td><a href="#ThreadExtension">ThreadExtension</a></td> <td>Class implementing the thread support for the debugger.</td> +</tr><tr> +<td><a href="#ThreadWrapper">ThreadWrapper</a></td> +<td>Wrapper class for threading.Thread.</td> </tr> </table> <h3>Functions</h3> @@ -44,12 +47,14 @@ <hr /><hr /> <a NAME="QThreadWrapper" ID="QThreadWrapper"></a> <h2>QThreadWrapper</h2> - +<p> + Wrapper class for *.QThread. +</p> <h3>Derived from</h3> module.QThread <h3>Class Attributes</h3> <table> -<tr><td>__qtThreadNumber</td></tr> +<tr><td>None</td></tr> </table> <h3>Class Methods</h3> <table> @@ -60,9 +65,6 @@ <tr> <td><a href="#QThreadWrapper.__init__">QThreadWrapper</a></td> <td></td> -</tr><tr> -<td><a href="#QThreadWrapper.__bootstrapQThread">__bootstrapQThread</a></td> -<td></td> </tr> </table> <h3>Static Methods</h3> @@ -72,9 +74,6 @@ <a NAME="QThreadWrapper.__init__" ID="QThreadWrapper.__init__"></a> <h4>QThreadWrapper (Constructor)</h4> <b>QThreadWrapper</b>(<i>*args, **kwargs</i>) -<a NAME="QThreadWrapper.__bootstrapQThread" ID="QThreadWrapper.__bootstrapQThread"></a> -<h4>QThreadWrapper.__bootstrapQThread</h4> -<b>__bootstrapQThread</b>(<i></i>) <div align="right"><a href="#top">Up</a></div> <hr /><hr /> @@ -102,6 +101,12 @@ <td><a href="#ThreadExtension.__init__">ThreadExtension</a></td> <td>Constructor</td> </tr><tr> +<td><a href="#ThreadExtension._bootstrap">_bootstrap</a></td> +<td>Bootstrap for threading, which reports exceptions correctly.</td> +</tr><tr> +<td><a href="#ThreadExtension._bootstrapQThread">_bootstrapQThread</a></td> +<td>Bootstrap for QThread, which reports exceptions correctly.</td> +</tr><tr> <td><a href="#ThreadExtension.attachThread">attachThread</a></td> <td>Public method to setup a standard thread for DebugClient to debug.</td> </tr><tr> @@ -142,7 +147,27 @@ <b>ThreadExtension</b>(<i></i>) <p> Constructor -</p><a NAME="ThreadExtension.attachThread" ID="ThreadExtension.attachThread"></a> +</p><a NAME="ThreadExtension._bootstrap" ID="ThreadExtension._bootstrap"></a> +<h4>ThreadExtension._bootstrap</h4> +<b>_bootstrap</b>(<i>run</i>) +<p> + Bootstrap for threading, which reports exceptions correctly. +</p><dl> +<dt><i>run</i> (method pointer)</dt> +<dd> +the run method of threading.Thread +</dd> +</dl><a NAME="ThreadExtension._bootstrapQThread" ID="ThreadExtension._bootstrapQThread"></a> +<h4>ThreadExtension._bootstrapQThread</h4> +<b>_bootstrapQThread</b>(<i>run</i>) +<p> + Bootstrap for QThread, which reports exceptions correctly. +</p><dl> +<dt><i>run</i> (method pointer)</dt> +<dd> +the run method of *.QThread +</dd> +</dl><a NAME="ThreadExtension.attachThread" ID="ThreadExtension.attachThread"></a> <h4>ThreadExtension.attachThread</h4> <b>attachThread</b>(<i>target=None, args=None, kwargs={}, mainThread=False</i>) <p> @@ -291,5 +316,37 @@ Public method to update the list of running threads. </p> <div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="ThreadWrapper" ID="ThreadWrapper"></a> +<h2>ThreadWrapper</h2> +<p> + Wrapper class for threading.Thread. +</p> +<h3>Derived from</h3> +module.Thread +<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="#ThreadWrapper.__init__">ThreadWrapper</a></td> +<td></td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="ThreadWrapper.__init__" ID="ThreadWrapper.__init__"></a> +<h4>ThreadWrapper (Constructor)</h4> +<b>ThreadWrapper</b>(<i>*args, **kwargs</i>) + +<div align="right"><a href="#top">Up</a></div> <hr /> </body></html> \ No newline at end of file
--- a/Documentation/Source/eric6.PluginManager.PluginManager.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.PluginManager.PluginManager.html Fri Mar 03 18:34:21 2017 +0100 @@ -131,6 +131,9 @@ <td><a href="#PluginManager.checkPluginUpdatesAvailable">checkPluginUpdatesAvailable</a></td> <td>Public method to check the availability of updates of plug-ins.</td> </tr><tr> +<td><a href="#PluginManager.clearPluginsPrivateData">clearPluginsPrivateData</a></td> +<td>Public method to clear the private data of plug-ins of a specified type.</td> +</tr><tr> <td><a href="#PluginManager.deactivatePlugin">deactivatePlugin</a></td> <td>Public method to deactivate a plugin.</td> </tr><tr> @@ -437,7 +440,21 @@ <b>checkPluginUpdatesAvailable</b>(<i></i>) <p> Public method to check the availability of updates of plug-ins. -</p><a NAME="PluginManager.deactivatePlugin" ID="PluginManager.deactivatePlugin"></a> +</p><a NAME="PluginManager.clearPluginsPrivateData" ID="PluginManager.clearPluginsPrivateData"></a> +<h4>PluginManager.clearPluginsPrivateData</h4> +<b>clearPluginsPrivateData</b>(<i>type_</i>) +<p> + Public method to clear the private data of plug-ins of a specified + type. +</p><p> + Plugins supporting this functionality must support the module function + clearPrivateData() and have the module level attribute pluginType. +</p><dl> +<dt><i>type_</i></dt> +<dd> +type of the plugin to be activated (string) +</dd> +</dl><a NAME="PluginManager.deactivatePlugin" ID="PluginManager.deactivatePlugin"></a> <h4>PluginManager.deactivatePlugin</h4> <b>deactivatePlugin</b>(<i>name, onDemand=False</i>) <p>
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html Fri Mar 03 18:34:21 2017 +0100 @@ -23,7 +23,7 @@ <h3>Global Attributes</h3> <table> -<tr><td>ARITHMETIC_OP</td></tr><tr><td>BENCHMARK_KEYS</td></tr><tr><td>COMMENT_WITH_NL</td></tr><tr><td>COMPARE_NEGATIVE_REGEX</td></tr><tr><td>COMPARE_SINGLETON_REGEX</td></tr><tr><td>COMPARE_TYPE_REGEX</td></tr><tr><td>DEFAULT_EXCLUDE</td></tr><tr><td>DEFAULT_IGNORE</td></tr><tr><td>DOCSTRING_REGEX</td></tr><tr><td>ERRORCODE_REGEX</td></tr><tr><td>EXTRANEOUS_WHITESPACE_REGEX</td></tr><tr><td>HUNK_REGEX</td></tr><tr><td>INDENT_REGEX</td></tr><tr><td>KEYWORDS</td></tr><tr><td>KEYWORD_REGEX</td></tr><tr><td>LAMBDA_REGEX</td></tr><tr><td>MAX_LINE_LENGTH</td></tr><tr><td>NEWLINE</td></tr><tr><td>OPERATOR_REGEX</td></tr><tr><td>PROJECT_CONFIG</td></tr><tr><td>PyCF_ONLY_AST</td></tr><tr><td>RAISE_COMMA_REGEX</td></tr><tr><td>REPORT_FORMAT</td></tr><tr><td>RERAISE_COMMA_REGEX</td></tr><tr><td>SINGLETONS</td></tr><tr><td>SKIP_COMMENTS</td></tr><tr><td>SKIP_TOKENS</td></tr><tr><td>TESTSUITE_PATH</td></tr><tr><td>UNARY_OPERATORS</td></tr><tr><td>WHITESPACE</td></tr><tr><td>WHITESPACE_AFTER_COMMA_REGEX</td></tr><tr><td>WS_NEEDED_OPERATORS</td></tr><tr><td>WS_OPTIONAL_OPERATORS</td></tr><tr><td>__version__</td></tr><tr><td>_checks</td></tr><tr><td>noqa</td></tr> +<tr><td>ARITHMETIC_OP</td></tr><tr><td>BENCHMARK_KEYS</td></tr><tr><td>COMMENT_WITH_NL</td></tr><tr><td>COMPARE_NEGATIVE_REGEX</td></tr><tr><td>COMPARE_SINGLETON_REGEX</td></tr><tr><td>COMPARE_TYPE_REGEX</td></tr><tr><td>DEFAULT_EXCLUDE</td></tr><tr><td>DEFAULT_IGNORE</td></tr><tr><td>DOCSTRING_REGEX</td></tr><tr><td>DUNDER_REGEX</td></tr><tr><td>ERRORCODE_REGEX</td></tr><tr><td>EXTRANEOUS_WHITESPACE_REGEX</td></tr><tr><td>HUNK_REGEX</td></tr><tr><td>INDENT_REGEX</td></tr><tr><td>KEYWORDS</td></tr><tr><td>KEYWORD_REGEX</td></tr><tr><td>LAMBDA_REGEX</td></tr><tr><td>MAX_LINE_LENGTH</td></tr><tr><td>NEWLINE</td></tr><tr><td>OPERATOR_REGEX</td></tr><tr><td>PROJECT_CONFIG</td></tr><tr><td>PyCF_ONLY_AST</td></tr><tr><td>RAISE_COMMA_REGEX</td></tr><tr><td>REPORT_FORMAT</td></tr><tr><td>RERAISE_COMMA_REGEX</td></tr><tr><td>SINGLETONS</td></tr><tr><td>SKIP_COMMENTS</td></tr><tr><td>SKIP_TOKENS</td></tr><tr><td>STARTSWITH_DEF_REGEX</td></tr><tr><td>STARTSWITH_INDENT_STATEMENT_REGEX</td></tr><tr><td>STARTSWITH_TOP_LEVEL_REGEX</td></tr><tr><td>TESTSUITE_PATH</td></tr><tr><td>UNARY_OPERATORS</td></tr><tr><td>WHITESPACE</td></tr><tr><td>WHITESPACE_AFTER_COMMA_REGEX</td></tr><tr><td>WS_NEEDED_OPERATORS</td></tr><tr><td>WS_OPTIONAL_OPERATORS</td></tr><tr><td>__version__</td></tr><tr><td>_checks</td></tr><tr><td>noqa</td></tr> </table> <h3>Classes</h3> <table> @@ -801,6 +801,7 @@ E303: def a():\n\n\n\n pass E304: @decorator\n\ndef a():\n pass E305: def a():\n pass\na() + E306: def a():\n def b():\n pass\n def c():\n pass </p> <div align="right"><a href="#top">Up</a></div> <hr /><hr /> @@ -916,7 +917,6 @@ E702: do_one(); do_two(); do_three() E703: do_four(); # useless semicolon E704: def f(x): return 2*x - E705: async def f(x): return 2*x E731: f = lambda x: 2*x </p> <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.Plugins.PluginVcsMercurial.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.PluginVcsMercurial.html Fri Mar 03 18:34:21 2017 +0100 @@ -37,6 +37,9 @@ <h3>Functions</h3> <table> <tr> +<td><a href="#clearPrivateData">clearPrivateData</a></td> +<td>Module function to clear the private data of the plug-in.</td> +</tr><tr> <td><a href="#createConfigurationPage">createConfigurationPage</a></td> <td>Module function to create the configuration page.</td> </tr><tr> @@ -66,11 +69,17 @@ QObject <h3>Class Attributes</h3> <table> -<tr><td>None</td></tr> +<tr><td>MercurialDefaults</td></tr> </table> <h3>Class Methods</h3> <table> -<tr><td>None</td></tr> +<tr> +<td><a href="#VcsMercurialPlugin.getPreferences">getPreferences</a></td> +<td>Class method to retrieve the various settings.</td> +</tr><tr> +<td><a href="#VcsMercurialPlugin.setPreferences">setPreferences</a></td> +<td>Class method to store the various settings.</td> +</tr> </table> <h3>Methods</h3> <table> @@ -90,9 +99,6 @@ <td><a href="#VcsMercurialPlugin.getGlobalOptions">getGlobalOptions</a></td> <td>Public method to build a list of global options.</td> </tr><tr> -<td><a href="#VcsMercurialPlugin.getPreferences">getPreferences</a></td> -<td>Public method to retrieve the various settings.</td> -</tr><tr> <td><a href="#VcsMercurialPlugin.getProjectHelper">getProjectHelper</a></td> <td>Public method to get a reference to the project helper object.</td> </tr><tr> @@ -104,16 +110,41 @@ </tr><tr> <td><a href="#VcsMercurialPlugin.prepareUnload">prepareUnload</a></td> <td>Public method to prepare for an unload.</td> -</tr><tr> -<td><a href="#VcsMercurialPlugin.setPreferences">setPreferences</a></td> -<td>Public method to store the various settings.</td> </tr> </table> <h3>Static Methods</h3> <table> <tr><td>None</td></tr> </table> -<a NAME="VcsMercurialPlugin.__init__" ID="VcsMercurialPlugin.__init__"></a> +<a NAME="VcsMercurialPlugin.getPreferences" ID="VcsMercurialPlugin.getPreferences"></a> +<h4>VcsMercurialPlugin.getPreferences (class method)</h4> +<b>getPreferences</b>(<i>key</i>) +<p> + Class method to retrieve the various settings. +</p><dl> +<dt><i>key</i></dt> +<dd> +the key of the value to get +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +the requested setting +</dd> +</dl><a NAME="VcsMercurialPlugin.setPreferences" ID="VcsMercurialPlugin.setPreferences"></a> +<h4>VcsMercurialPlugin.setPreferences (class method)</h4> +<b>setPreferences</b>(<i>key, value</i>) +<p> + Class method to store the various settings. +</p><dl> +<dt><i>key</i></dt> +<dd> +the key of the setting to be set +</dd><dt><i>value</i></dt> +<dd> +the value to be set +</dd> +</dl><a NAME="VcsMercurialPlugin.__init__" ID="VcsMercurialPlugin.__init__"></a> <h4>VcsMercurialPlugin (Constructor)</h4> <b>VcsMercurialPlugin</b>(<i>ui</i>) <p> @@ -159,21 +190,6 @@ <dd> list of global options (list of string) </dd> -</dl><a NAME="VcsMercurialPlugin.getPreferences" ID="VcsMercurialPlugin.getPreferences"></a> -<h4>VcsMercurialPlugin.getPreferences</h4> -<b>getPreferences</b>(<i>key</i>) -<p> - Public method to retrieve the various settings. -</p><dl> -<dt><i>key</i></dt> -<dd> -the key of the value to get -</dd> -</dl><dl> -<dt>Returns:</dt> -<dd> -the requested setting -</dd> </dl><a NAME="VcsMercurialPlugin.getProjectHelper" ID="VcsMercurialPlugin.getProjectHelper"></a> <h4>VcsMercurialPlugin.getProjectHelper</h4> <b>getProjectHelper</b>(<i></i>) @@ -208,20 +224,15 @@ <b>prepareUnload</b>(<i></i>) <p> Public method to prepare for an unload. -</p><a NAME="VcsMercurialPlugin.setPreferences" ID="VcsMercurialPlugin.setPreferences"></a> -<h4>VcsMercurialPlugin.setPreferences</h4> -<b>setPreferences</b>(<i>key, value</i>) +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="clearPrivateData" ID="clearPrivateData"></a> +<h2>clearPrivateData</h2> +<b>clearPrivateData</b>(<i></i>) <p> - Public method to store the various settings. -</p><dl> -<dt><i>key</i></dt> -<dd> -the key of the setting to be set -</dd><dt><i>value</i></dt> -<dd> -the value to be set -</dd> -</dl> + Module function to clear the private data of the plug-in. +</p> <div align="right"><a href="#top">Up</a></div> <hr /><hr /> <a NAME="createConfigurationPage" ID="createConfigurationPage"></a>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.Config.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.Config.html Fri Mar 03 18:34:21 2017 +0100 @@ -25,7 +25,7 @@ </p> <h3>Global Attributes</h3> <table> -<tr><td>ConfigHgProtocols</td></tr> +<tr><td>ConfigHgSchemes</td></tr> </table> <h3>Classes</h3> <table>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html Fri Mar 03 18:34:21 2017 +0100 @@ -73,13 +73,16 @@ </table> <a NAME="HgFetchDialog.__init__" ID="HgFetchDialog.__init__"></a> <h4>HgFetchDialog (Constructor)</h4> -<b>HgFetchDialog</b>(<i>parent=None</i>) +<b>HgFetchDialog</b>(<i>vcs, parent=None</i>) <p> Constructor </p><dl> -<dt><i>parent</i></dt> +<dt><i>vcs</i> (Hg)</dt> <dd> -reference to the parent widget (QWidget) +reference to the Mercurial vcs object +</dd><dt><i>parent</i> (QWidget)</dt> +<dd> +reference to the parent widget </dd> </dl><a NAME="HgFetchDialog.getData" ID="HgFetchDialog.getData"></a> <h4>HgFetchDialog.getData</h4>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html Fri Mar 03 18:34:21 2017 +0100 @@ -80,18 +80,27 @@ </dd> </dl><a NAME="Fetch.hgFetch" ID="Fetch.hgFetch"></a> <h4>Fetch.hgFetch</h4> -<b>hgFetch</b>(<i>name</i>) +<b>hgFetch</b>(<i>name, revisions=None</i>) <p> Public method to fetch changes from a remote repository. </p><dl> -<dt><i>name</i></dt> +<dt><i>name</i> (str)</dt> <dd> -file/directory name (string) +directory name of the project to be fetched to +</dd><dt><i>revisions</i> (list of str)</dt> +<dd> +list of revisions to be pulled </dd> </dl><dl> <dt>Returns:</dt> <dd> -flag indicating that the project should be reread (boolean) +flag indicating, that the update contained an add + or delete +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool </dd> </dl> <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.html Fri Mar 03 18:34:21 2017 +0100 @@ -89,13 +89,16 @@ </dd> </dl><a NAME="Gpg.hgGpgSign" ID="Gpg.hgGpgSign"></a> <h4>Gpg.hgGpgSign</h4> -<b>hgGpgSign</b>(<i>path</i>) +<b>hgGpgSign</b>(<i>path, revisions=None</i>) <p> Public method used to list the available bookmarks. </p><dl> -<dt><i>path</i></dt> +<dt><i>path</i> (str)</dt> <dd> -directory name of the project (string) +directory name of the project +</dd><dt><i>revisions</i> (list of str)</dt> +<dd> +list containing the revisions to be signed </dd> </dl><a NAME="Gpg.hgGpgSignatures" ID="Gpg.hgGpgSignatures"></a> <h4>Gpg.hgGpgSignatures</h4>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html Fri Mar 03 18:34:21 2017 +0100 @@ -63,6 +63,9 @@ <td><a href="#HgLogBrowserDialog.__actionMode">__actionMode</a></td> <td>Private method to get the selected action mode.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.__actionsMenuHovered">__actionsMenuHovered</a></td> +<td>Private slot to show the tooltip for an action menu entry.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.__addFinishCallback">__addFinishCallback</a></td> <td>Private method to add a method to be called once the process finished.</td> </tr><tr> @@ -75,8 +78,8 @@ <td><a href="#HgLogBrowserDialog.__branchColor">__branchColor</a></td> <td>Private method to calculate a color for a given branch name.</td> </tr><tr> -<td><a href="#HgLogBrowserDialog.__diffRevisions">__diffRevisions</a></td> -<td>Private method to do a diff of two revisions.</td> +<td><a href="#HgLogBrowserDialog.__bundleActTriggered">__bundleActTriggered</a></td> +<td>Private slot to create a changegroup file.</td> </tr><tr> <td><a href="#HgLogBrowserDialog.__fetchActTriggered">__fetchActTriggered</a></td> <td>Private slot to fetch changes from a remote repository.</td> @@ -90,18 +93,24 @@ <td><a href="#HgLogBrowserDialog.__finish">__finish</a></td> <td>Private slot called when the process finished or the user pressed the button.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.__generateDetailsTableText">__generateDetailsTableText</a></td> +<td>Private method to generate an HTML table with the details of the given changeset.</td> +</tr><tr> +<td><a href="#HgLogBrowserDialog.__generateDiffs">__generateDiffs</a></td> +<td>Private slot to generate diff outputs for the selected item.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.__generateEdges">__generateEdges</a></td> <td>Private method to generate edge info for the give data.</td> </tr><tr> -<td><a href="#HgLogBrowserDialog.__generateFileItem">__generateFileItem</a></td> -<td>Private method to generate a changed files tree entry.</td> -</tr><tr> <td><a href="#HgLogBrowserDialog.__generateIcon">__generateIcon</a></td> <td>Private method to generate an icon containing the revision tree for the given data.</td> </tr><tr> <td><a href="#HgLogBrowserDialog.__generateLogItem">__generateLogItem</a></td> <td>Private method to generate a log tree entry.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.__generatorFinished">__generatorFinished</a></td> +<td>Private slot connected to the finished signal of the diff generator.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.__getClosedBranches">__getClosedBranches</a></td> <td>Private method to get the list of closed branches.</td> </tr><tr> @@ -117,6 +126,12 @@ <td><a href="#HgLogBrowserDialog.__getRevisionOfTag">__getRevisionOfTag</a></td> <td>Private method to get the revision of a tag.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.__gpgSignActTriggered">__gpgSignActTriggered</a></td> +<td>Private slot to sign the selected revisions.</td> +</tr><tr> +<td><a href="#HgLogBrowserDialog.__gpgVerifyActTriggered">__gpgVerifyActTriggered</a></td> +<td>Private slot to verify the signatures of a selected revisions.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.__graftActTriggered">__graftActTriggered</a></td> <td>Private slot to handle the Copy Changesets action.</td> </tr><tr> @@ -132,6 +147,9 @@ <td><a href="#HgLogBrowserDialog.__lfPullActTriggered">__lfPullActTriggered</a></td> <td>Private slot to pull large files of selected revisions.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.__mergeActTriggered">__mergeActTriggered</a></td> +<td>Private slot to merge the working directory with the selected changeset.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.__modifyForLargeFiles">__modifyForLargeFiles</a></td> <td>Private method to convert the displayed file name for a large file.</td> </tr><tr> @@ -162,6 +180,9 @@ <td><a href="#HgLogBrowserDialog.__readStdout">__readStdout</a></td> <td>Private slot to handle the readyReadStandardOutput signal.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.__reloadGeometry">__reloadGeometry</a></td> +<td>Private method to restore the geometry.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.__resetUI">__resetUI</a></td> <td>Private method to reset the user interface.</td> </tr><tr> @@ -174,9 +195,15 @@ <td><a href="#HgLogBrowserDialog.__resortFiles">__resortFiles</a></td> <td>Private method to resort the changed files tree.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.__restoreSplitterStates">__restoreSplitterStates</a></td> +<td>Private method to restore the state of the various splitters.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.__revisionClicked">__revisionClicked</a></td> <td>Private slot to handle the anchorClicked signal of the changeset details pane.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.__selectAllActTriggered">__selectAllActTriggered</a></td> +<td>Private method to select or unselect all log entries.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.__showError">__showError</a></td> <td>Private slot to show some error.</td> </tr><tr> @@ -189,11 +216,17 @@ <td><a href="#HgLogBrowserDialog.__tagActTriggered">__tagActTriggered</a></td> <td>Private slot to tag the selected revision.</td> </tr><tr> -<td><a href="#HgLogBrowserDialog.__updateDiffButtons">__updateDiffButtons</a></td> -<td>Private slot to update the enabled status of the diff buttons.</td> +<td><a href="#HgLogBrowserDialog.__unbundleActTriggered">__unbundleActTriggered</a></td> +<td>Private slot to apply the currently previewed bundle file.</td> +</tr><tr> +<td><a href="#HgLogBrowserDialog.__updateDetailsAndFiles">__updateDetailsAndFiles</a></td> +<td>Private slot to update the details and file changes panes.</td> </tr><tr> -<td><a href="#HgLogBrowserDialog.__updateGui">__updateGui</a></td> -<td>Private slot to update GUI elements except tool menu actions.</td> +<td><a href="#HgLogBrowserDialog.__updateFilesTree">__updateFilesTree</a></td> +<td>Private method to update the files tree with changes of the given item.</td> +</tr><tr> +<td><a href="#HgLogBrowserDialog.__updateSbsSelectLabel">__updateSbsSelectLabel</a></td> +<td>Private slot to update the enabled status of the diff buttons.</td> </tr><tr> <td><a href="#HgLogBrowserDialog.__updateToolMenuActions">__updateToolMenuActions</a></td> <td>Private slot to update the status of the tool menu actions and the tool menu button.</td> @@ -213,14 +246,8 @@ <td><a href="#HgLogBrowserDialog.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="#HgLogBrowserDialog.on_diffP1Button_clicked">on_diffP1Button_clicked</a></td> -<td>Private slot to handle the Diff to Parent 1 button.</td> -</tr><tr> -<td><a href="#HgLogBrowserDialog.on_diffP2Button_clicked">on_diffP2Button_clicked</a></td> -<td>Private slot to handle the Diff to Parent 2 button.</td> -</tr><tr> -<td><a href="#HgLogBrowserDialog.on_diffRevisionsButton_clicked">on_diffRevisionsButton_clicked</a></td> -<td>Private slot to handle the Compare Revisions button.</td> +<td><a href="#HgLogBrowserDialog.on_diffSelectLabel_linkActivated">on_diffSelectLabel_linkActivated</a></td> +<td>Private slot to handle the selection of a diff target.</td> </tr><tr> <td><a href="#HgLogBrowserDialog.on_downButton_clicked">on_downButton_clicked</a></td> <td>Private slot to move the current item down one entry.</td> @@ -228,6 +255,9 @@ <td><a href="#HgLogBrowserDialog.on_fieldCombo_activated">on_fieldCombo_activated</a></td> <td>Private slot called, when a new filter field is selected.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.on_filesTree_currentItemChanged">on_filesTree_currentItemChanged</a></td> +<td>Private slot called, when the current item of the files tree changes.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.on_findNextButton_clicked">on_findNextButton_clicked</a></td> <td>Private slot to find the next item matching the entered criteria.</td> </tr><tr> @@ -264,6 +294,12 @@ <td><a href="#HgLogBrowserDialog.on_rxEdit_textChanged">on_rxEdit_textChanged</a></td> <td>Private slot called, when a filter expression is entered.</td> </tr><tr> +<td><a href="#HgLogBrowserDialog.on_saveLabel_linkActivated">on_saveLabel_linkActivated</a></td> +<td>Private slot to handle the selection of the save link.</td> +</tr><tr> +<td><a href="#HgLogBrowserDialog.on_sbsSelectLabel_linkActivated">on_sbsSelectLabel_linkActivated</a></td> +<td>Private slot to handle selection of a side-by-side link.</td> +</tr><tr> <td><a href="#HgLogBrowserDialog.on_sendButton_clicked">on_sendButton_clicked</a></td> <td>Private slot to send the input to the mercurial process.</td> </tr><tr> @@ -313,6 +349,16 @@ <dd> selected action mode (string, one of filter or find) </dd> +</dl><a NAME="HgLogBrowserDialog.__actionsMenuHovered" ID="HgLogBrowserDialog.__actionsMenuHovered"></a> +<h4>HgLogBrowserDialog.__actionsMenuHovered</h4> +<b>__actionsMenuHovered</b>(<i>action</i>) +<p> + Private slot to show the tooltip for an action menu entry. +</p><dl> +<dt><i>action</i> (QAction)</dt> +<dd> +action to show tooltip for +</dd> </dl><a NAME="HgLogBrowserDialog.__addFinishCallback" ID="HgLogBrowserDialog.__addFinishCallback"></a> <h4>HgLogBrowserDialog.__addFinishCallback</h4> <b>__addFinishCallback</b>(<i>callback</i>) @@ -351,20 +397,12 @@ <dd> name of the color to use (string) </dd> -</dl><a NAME="HgLogBrowserDialog.__diffRevisions" ID="HgLogBrowserDialog.__diffRevisions"></a> -<h4>HgLogBrowserDialog.__diffRevisions</h4> -<b>__diffRevisions</b>(<i>rev1, rev2</i>) +</dl><a NAME="HgLogBrowserDialog.__bundleActTriggered" ID="HgLogBrowserDialog.__bundleActTriggered"></a> +<h4>HgLogBrowserDialog.__bundleActTriggered</h4> +<b>__bundleActTriggered</b>(<i></i>) <p> - Private method to do a diff of two revisions. -</p><dl> -<dt><i>rev1</i></dt> -<dd> -first revision number (integer) -</dd><dt><i>rev2</i></dt> -<dd> -second revision number (integer) -</dd> -</dl><a NAME="HgLogBrowserDialog.__fetchActTriggered" ID="HgLogBrowserDialog.__fetchActTriggered"></a> + Private slot to create a changegroup file. +</p><a NAME="HgLogBrowserDialog.__fetchActTriggered" ID="HgLogBrowserDialog.__fetchActTriggered"></a> <h4>HgLogBrowserDialog.__fetchActTriggered</h4> <b>__fetchActTriggered</b>(<i></i>) <p> @@ -393,7 +431,38 @@ <p> Private slot called when the process finished or the user pressed the button. -</p><a NAME="HgLogBrowserDialog.__generateEdges" ID="HgLogBrowserDialog.__generateEdges"></a> +</p><a NAME="HgLogBrowserDialog.__generateDetailsTableText" ID="HgLogBrowserDialog.__generateDetailsTableText"></a> +<h4>HgLogBrowserDialog.__generateDetailsTableText</h4> +<b>__generateDetailsTableText</b>(<i>itm</i>) +<p> + Private method to generate an HTML table with the details of the given + changeset. +</p><dl> +<dt><i>itm</i> (QTreeWidgetItem)</dt> +<dd> +reference to the item the table should be based on +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +HTML table containing details +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="HgLogBrowserDialog.__generateDiffs" ID="HgLogBrowserDialog.__generateDiffs"></a> +<h4>HgLogBrowserDialog.__generateDiffs</h4> +<b>__generateDiffs</b>(<i>parent=1</i>) +<p> + Private slot to generate diff outputs for the selected item. +</p><dl> +<dt><i>parent</i> (int)</dt> +<dd> +number of parent to diff against +</dd> +</dl><a NAME="HgLogBrowserDialog.__generateEdges" ID="HgLogBrowserDialog.__generateEdges"></a> <h4>HgLogBrowserDialog.__generateEdges</h4> <b>__generateEdges</b>(<i>rev, parents</i>) <p> @@ -414,27 +483,6 @@ between the given node and its parents (integer, integer, [(integer, integer, integer), ...]) </dd> -</dl><a NAME="HgLogBrowserDialog.__generateFileItem" ID="HgLogBrowserDialog.__generateFileItem"></a> -<h4>HgLogBrowserDialog.__generateFileItem</h4> -<b>__generateFileItem</b>(<i>action, path, copyfrom</i>) -<p> - Private method to generate a changed files tree entry. -</p><dl> -<dt><i>action</i></dt> -<dd> -indicator for the change action ("A", "D" or "M") -</dd><dt><i>path</i></dt> -<dd> -path of the file in the repository (string) -</dd><dt><i>copyfrom</i></dt> -<dd> -path the file was copied from (string) -</dd> -</dl><dl> -<dt>Returns:</dt> -<dd> -reference to the generated item (QTreeWidgetItem) -</dd> </dl><a NAME="HgLogBrowserDialog.__generateIcon" ID="HgLogBrowserDialog.__generateIcon"></a> <h4>HgLogBrowserDialog.__generateIcon</h4> <b>__generateIcon</b>(<i>column, color, bottomedges, topedges, dotColor, currentRev, closed</i>) @@ -520,7 +568,12 @@ <dd> reference to the generated item (QTreeWidgetItem) </dd> -</dl><a NAME="HgLogBrowserDialog.__getClosedBranches" ID="HgLogBrowserDialog.__getClosedBranches"></a> +</dl><a NAME="HgLogBrowserDialog.__generatorFinished" ID="HgLogBrowserDialog.__generatorFinished"></a> +<h4>HgLogBrowserDialog.__generatorFinished</h4> +<b>__generatorFinished</b>(<i></i>) +<p> + Private slot connected to the finished signal of the diff generator. +</p><a NAME="HgLogBrowserDialog.__getClosedBranches" ID="HgLogBrowserDialog.__getClosedBranches"></a> <h4>HgLogBrowserDialog.__getClosedBranches</h4> <b>__getClosedBranches</b>(<i></i>) <p> @@ -589,7 +642,17 @@ <dd> tuple of (str, str) </dd> -</dl><a NAME="HgLogBrowserDialog.__graftActTriggered" ID="HgLogBrowserDialog.__graftActTriggered"></a> +</dl><a NAME="HgLogBrowserDialog.__gpgSignActTriggered" ID="HgLogBrowserDialog.__gpgSignActTriggered"></a> +<h4>HgLogBrowserDialog.__gpgSignActTriggered</h4> +<b>__gpgSignActTriggered</b>(<i></i>) +<p> + Private slot to sign the selected revisions. +</p><a NAME="HgLogBrowserDialog.__gpgVerifyActTriggered" ID="HgLogBrowserDialog.__gpgVerifyActTriggered"></a> +<h4>HgLogBrowserDialog.__gpgVerifyActTriggered</h4> +<b>__gpgVerifyActTriggered</b>(<i></i>) +<p> + Private slot to verify the signatures of a selected revisions. +</p><a NAME="HgLogBrowserDialog.__graftActTriggered" ID="HgLogBrowserDialog.__graftActTriggered"></a> <h4>HgLogBrowserDialog.__graftActTriggered</h4> <b>__graftActTriggered</b>(<i></i>) <p> @@ -614,6 +677,12 @@ <b>__lfPullActTriggered</b>(<i></i>) <p> Private slot to pull large files of selected revisions. +</p><a NAME="HgLogBrowserDialog.__mergeActTriggered" ID="HgLogBrowserDialog.__mergeActTriggered"></a> +<h4>HgLogBrowserDialog.__mergeActTriggered</h4> +<b>__mergeActTriggered</b>(<i></i>) +<p> + Private slot to merge the working directory with the selected + changeset. </p><a NAME="HgLogBrowserDialog.__modifyForLargeFiles" ID="HgLogBrowserDialog.__modifyForLargeFiles"></a> <h4>HgLogBrowserDialog.__modifyForLargeFiles</h4> <b>__modifyForLargeFiles</b>(<i>filename</i>) @@ -694,6 +763,11 @@ Private slot to handle the readyReadStandardOutput signal. </p><p> It reads the output of the process and inserts it into a buffer. +</p><a NAME="HgLogBrowserDialog.__reloadGeometry" ID="HgLogBrowserDialog.__reloadGeometry"></a> +<h4>HgLogBrowserDialog.__reloadGeometry</h4> +<b>__reloadGeometry</b>(<i></i>) +<p> + Private method to restore the geometry. </p><a NAME="HgLogBrowserDialog.__resetUI" ID="HgLogBrowserDialog.__resetUI"></a> <h4>HgLogBrowserDialog.__resetUI</h4> <b>__resetUI</b>(<i></i>) @@ -714,6 +788,11 @@ <b>__resortFiles</b>(<i></i>) <p> Private method to resort the changed files tree. +</p><a NAME="HgLogBrowserDialog.__restoreSplitterStates" ID="HgLogBrowserDialog.__restoreSplitterStates"></a> +<h4>HgLogBrowserDialog.__restoreSplitterStates</h4> +<b>__restoreSplitterStates</b>(<i></i>) +<p> + Private method to restore the state of the various splitters. </p><a NAME="HgLogBrowserDialog.__revisionClicked" ID="HgLogBrowserDialog.__revisionClicked"></a> <h4>HgLogBrowserDialog.__revisionClicked</h4> <b>__revisionClicked</b>(<i>url</i>) @@ -725,6 +804,16 @@ <dd> URL that was clicked </dd> +</dl><a NAME="HgLogBrowserDialog.__selectAllActTriggered" ID="HgLogBrowserDialog.__selectAllActTriggered"></a> +<h4>HgLogBrowserDialog.__selectAllActTriggered</h4> +<b>__selectAllActTriggered</b>(<i>select=True</i>) +<p> + Private method to select or unselect all log entries. +</p><dl> +<dt><i>select</i> (bool)</dt> +<dd> +flag indicating to select all entries +</dd> </dl><a NAME="HgLogBrowserDialog.__showError" ID="HgLogBrowserDialog.__showError"></a> <h4>HgLogBrowserDialog.__showError</h4> <b>__showError</b>(<i>out</i>) @@ -751,23 +840,35 @@ <b>__tagActTriggered</b>(<i></i>) <p> Private slot to tag the selected revision. -</p><a NAME="HgLogBrowserDialog.__updateDiffButtons" ID="HgLogBrowserDialog.__updateDiffButtons"></a> -<h4>HgLogBrowserDialog.__updateDiffButtons</h4> -<b>__updateDiffButtons</b>(<i></i>) +</p><a NAME="HgLogBrowserDialog.__unbundleActTriggered" ID="HgLogBrowserDialog.__unbundleActTriggered"></a> +<h4>HgLogBrowserDialog.__unbundleActTriggered</h4> +<b>__unbundleActTriggered</b>(<i></i>) +<p> + Private slot to apply the currently previewed bundle file. +</p><a NAME="HgLogBrowserDialog.__updateDetailsAndFiles" ID="HgLogBrowserDialog.__updateDetailsAndFiles"></a> +<h4>HgLogBrowserDialog.__updateDetailsAndFiles</h4> +<b>__updateDetailsAndFiles</b>(<i></i>) +<p> + Private slot to update the details and file changes panes. +</p><a NAME="HgLogBrowserDialog.__updateFilesTree" ID="HgLogBrowserDialog.__updateFilesTree"></a> +<h4>HgLogBrowserDialog.__updateFilesTree</h4> +<b>__updateFilesTree</b>(<i>parent, itm</i>) +<p> + Private method to update the files tree with changes of the given item. +</p><dl> +<dt><i>parent</i> (QTreeWidget or QTreeWidgetItem)</dt> +<dd> +parent for the items to be added +</dd><dt><i>itm</i> (QTreeWidgetItem)</dt> +<dd> +reference to the item the update should be based on +</dd> +</dl><a NAME="HgLogBrowserDialog.__updateSbsSelectLabel" ID="HgLogBrowserDialog.__updateSbsSelectLabel"></a> +<h4>HgLogBrowserDialog.__updateSbsSelectLabel</h4> +<b>__updateSbsSelectLabel</b>(<i></i>) <p> Private slot to update the enabled status of the diff buttons. -</p><a NAME="HgLogBrowserDialog.__updateGui" ID="HgLogBrowserDialog.__updateGui"></a> -<h4>HgLogBrowserDialog.__updateGui</h4> -<b>__updateGui</b>(<i>itm</i>) -<p> - Private slot to update GUI elements except tool menu actions. -</p><dl> -<dt><i>itm</i></dt> -<dd> -reference to the item the update should be based on - (QTreeWidgetItem) -</dd> -</dl><a NAME="HgLogBrowserDialog.__updateToolMenuActions" ID="HgLogBrowserDialog.__updateToolMenuActions"></a> +</p><a NAME="HgLogBrowserDialog.__updateToolMenuActions" ID="HgLogBrowserDialog.__updateToolMenuActions"></a> <h4>HgLogBrowserDialog.__updateToolMenuActions</h4> <b>__updateToolMenuActions</b>(<i></i>) <p> @@ -826,22 +927,17 @@ <dd> button that was clicked (QAbstractButton) </dd> -</dl><a NAME="HgLogBrowserDialog.on_diffP1Button_clicked" ID="HgLogBrowserDialog.on_diffP1Button_clicked"></a> -<h4>HgLogBrowserDialog.on_diffP1Button_clicked</h4> -<b>on_diffP1Button_clicked</b>(<i></i>) +</dl><a NAME="HgLogBrowserDialog.on_diffSelectLabel_linkActivated" ID="HgLogBrowserDialog.on_diffSelectLabel_linkActivated"></a> +<h4>HgLogBrowserDialog.on_diffSelectLabel_linkActivated</h4> +<b>on_diffSelectLabel_linkActivated</b>(<i>link</i>) <p> - Private slot to handle the Diff to Parent 1 button. -</p><a NAME="HgLogBrowserDialog.on_diffP2Button_clicked" ID="HgLogBrowserDialog.on_diffP2Button_clicked"></a> -<h4>HgLogBrowserDialog.on_diffP2Button_clicked</h4> -<b>on_diffP2Button_clicked</b>(<i></i>) -<p> - Private slot to handle the Diff to Parent 2 button. -</p><a NAME="HgLogBrowserDialog.on_diffRevisionsButton_clicked" ID="HgLogBrowserDialog.on_diffRevisionsButton_clicked"></a> -<h4>HgLogBrowserDialog.on_diffRevisionsButton_clicked</h4> -<b>on_diffRevisionsButton_clicked</b>(<i></i>) -<p> - Private slot to handle the Compare Revisions button. -</p><a NAME="HgLogBrowserDialog.on_downButton_clicked" ID="HgLogBrowserDialog.on_downButton_clicked"></a> + Private slot to handle the selection of a diff target. +</p><dl> +<dt><i>link</i> (str)</dt> +<dd> +activated link +</dd> +</dl><a NAME="HgLogBrowserDialog.on_downButton_clicked" ID="HgLogBrowserDialog.on_downButton_clicked"></a> <h4>HgLogBrowserDialog.on_downButton_clicked</h4> <b>on_downButton_clicked</b>(<i></i>) <p> @@ -856,6 +952,19 @@ <dd> text of the selected field (string) </dd> +</dl><a NAME="HgLogBrowserDialog.on_filesTree_currentItemChanged" ID="HgLogBrowserDialog.on_filesTree_currentItemChanged"></a> +<h4>HgLogBrowserDialog.on_filesTree_currentItemChanged</h4> +<b>on_filesTree_currentItemChanged</b>(<i>current, previous</i>) +<p> + Private slot called, when the current item of the files tree changes. +</p><dl> +<dt><i>current</i></dt> +<dd> +reference to the new current item (QTreeWidgetItem) +</dd><dt><i>previous</i></dt> +<dd> +reference to the old current item (QTreeWidgetItem) +</dd> </dl><a NAME="HgLogBrowserDialog.on_findNextButton_clicked" ID="HgLogBrowserDialog.on_findNextButton_clicked"></a> <h4>HgLogBrowserDialog.on_findNextButton_clicked</h4> <b>on_findNextButton_clicked</b>(<i></i>) @@ -944,6 +1053,26 @@ <dd> filter expression (string) </dd> +</dl><a NAME="HgLogBrowserDialog.on_saveLabel_linkActivated" ID="HgLogBrowserDialog.on_saveLabel_linkActivated"></a> +<h4>HgLogBrowserDialog.on_saveLabel_linkActivated</h4> +<b>on_saveLabel_linkActivated</b>(<i>link</i>) +<p> + Private slot to handle the selection of the save link. +</p><dl> +<dt><i>link</i> (str)</dt> +<dd> +activated link +</dd> +</dl><a NAME="HgLogBrowserDialog.on_sbsSelectLabel_linkActivated" ID="HgLogBrowserDialog.on_sbsSelectLabel_linkActivated"></a> +<h4>HgLogBrowserDialog.on_sbsSelectLabel_linkActivated</h4> +<b>on_sbsSelectLabel_linkActivated</b>(<i>link</i>) +<p> + Private slot to handle selection of a side-by-side link. +</p><dl> +<dt><i>link</i> (str)</dt> +<dd> +text of the selected link +</dd> </dl><a NAME="HgLogBrowserDialog.on_sendButton_clicked" ID="HgLogBrowserDialog.on_sendButton_clicked"></a> <h4>HgLogBrowserDialog.on_sendButton_clicked</h4> <b>on_sendButton_clicked</b>(<i></i>)
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgNewProjectOptionsDialog.html Fri Mar 03 18:34:21 2017 +0100 @@ -62,15 +62,18 @@ <td><a href="#HgNewProjectOptionsDialog.__init__">HgNewProjectOptionsDialog</a></td> <td>Constructor</td> </tr><tr> -<td><a href="#HgNewProjectOptionsDialog.getData">getData</a></td> -<td>Public slot to retrieve the data entered into the dialog.</td> +<td><a href="#HgNewProjectOptionsDialog.__saveHistory">__saveHistory</a></td> +<td>Private method to save the repository URL history.</td> </tr><tr> -<td><a href="#HgNewProjectOptionsDialog.on_protocolCombo_activated">on_protocolCombo_activated</a></td> -<td>Private slot to switch the status of the directory selection button.</td> +<td><a href="#HgNewProjectOptionsDialog.getData">getData</a></td> +<td>Public slot to retrieve the data entered into the dialog and to save the history of entered repository URLs.</td> </tr><tr> <td><a href="#HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged">on_vcsProjectDirPicker_textChanged</a></td> <td>Private slot to handle a change of the project directory.</td> </tr><tr> +<td><a href="#HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked">on_vcsUrlClearHistoryButton_clicked</a></td> +<td>Private slot to clear the history of entered repository URLs.</td> +</tr><tr> <td><a href="#HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged">on_vcsUrlPicker_textChanged</a></td> <td>Private slot to handle changes of the URL.</td> </tr> @@ -92,27 +95,23 @@ <dd> parent widget (QWidget) </dd> -</dl><a NAME="HgNewProjectOptionsDialog.getData" ID="HgNewProjectOptionsDialog.getData"></a> +</dl><a NAME="HgNewProjectOptionsDialog.__saveHistory" ID="HgNewProjectOptionsDialog.__saveHistory"></a> +<h4>HgNewProjectOptionsDialog.__saveHistory</h4> +<b>__saveHistory</b>(<i></i>) +<p> + Private method to save the repository URL history. +</p><a NAME="HgNewProjectOptionsDialog.getData" ID="HgNewProjectOptionsDialog.getData"></a> <h4>HgNewProjectOptionsDialog.getData</h4> <b>getData</b>(<i></i>) <p> - Public slot to retrieve the data entered into the dialog. + Public slot to retrieve the data entered into the dialog and to + save the history of entered repository URLs. </p><dl> <dt>Returns:</dt> <dd> a tuple of a string (project directory) and a dictionary containing the data entered. </dd> -</dl><a NAME="HgNewProjectOptionsDialog.on_protocolCombo_activated" ID="HgNewProjectOptionsDialog.on_protocolCombo_activated"></a> -<h4>HgNewProjectOptionsDialog.on_protocolCombo_activated</h4> -<b>on_protocolCombo_activated</b>(<i>protocol</i>) -<p> - Private slot to switch the status of the directory selection button. -</p><dl> -<dt><i>protocol</i></dt> -<dd> -name of the selected protocol (string) -</dd> </dl><a NAME="HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged" ID="HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged"></a> <h4>HgNewProjectOptionsDialog.on_vcsProjectDirPicker_textChanged</h4> <b>on_vcsProjectDirPicker_textChanged</b>(<i>txt</i>) @@ -123,7 +122,12 @@ <dd> name of the project directory (string) </dd> -</dl><a NAME="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" ID="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged"></a> +</dl><a NAME="HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked" ID="HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked"></a> +<h4>HgNewProjectOptionsDialog.on_vcsUrlClearHistoryButton_clicked</h4> +<b>on_vcsUrlClearHistoryButton_clicked</b>(<i></i>) +<p> + Private slot to clear the history of entered repository URLs. +</p><a NAME="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged" ID="HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged"></a> <h4>HgNewProjectOptionsDialog.on_vcsUrlPicker_textChanged</h4> <b>on_vcsUrlPicker_textChanged</b>(<i>txt</i>) <p>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html Fri Mar 03 18:34:21 2017 +0100 @@ -62,8 +62,8 @@ <td><a href="#HgStatusDialog.__init__">HgStatusDialog</a></td> <td>Constructor</td> </tr><tr> -<td><a href="#HgStatusDialog.__activeExtensionsChanged">__activeExtensionsChanged</a></td> -<td>Private slot handling a change in the activated extensions.</td> +<td><a href="#HgStatusDialog.__actionsMenuHovered">__actionsMenuHovered</a></td> +<td>Private slot to show the tooltip for an action menu entry.</td> </tr><tr> <td><a href="#HgStatusDialog.__add">__add</a></td> <td>Private slot to handle the Add context menu entry.</td> @@ -104,6 +104,9 @@ <td><a href="#HgStatusDialog.__getCommitableItems">__getCommitableItems</a></td> <td>Private method to retrieve all entries the user wants to commit.</td> </tr><tr> +<td><a href="#HgStatusDialog.__getCommitableUnselectedItems">__getCommitableUnselectedItems</a></td> +<td>Private method to retrieve all entries the user may commit but hasn't selected.</td> +</tr><tr> <td><a href="#HgStatusDialog.__getMissingItems">__getMissingItems</a></td> <td>Private method to retrieve all entries, that have a missing status.</td> </tr><tr> @@ -113,6 +116,9 @@ <td><a href="#HgStatusDialog.__getUnversionedItems">__getUnversionedItems</a></td> <td>Private method to retrieve all entries, that have an unversioned status.</td> </tr><tr> +<td><a href="#HgStatusDialog.__initActionsMenu">__initActionsMenu</a></td> +<td>Private method to initialize the actions menu.</td> +</tr><tr> <td><a href="#HgStatusDialog.__lfAdd">__lfAdd</a></td> <td>Private slot to add a file to the repository.</td> </tr><tr> @@ -146,42 +152,21 @@ <td><a href="#HgStatusDialog.__sbsDiff">__sbsDiff</a></td> <td>Private slot to handle the Diff context menu entry.</td> </tr><tr> -<td><a href="#HgStatusDialog.__showAddMenu">__showAddMenu</a></td> -<td>Private slot to prepare the Add button menu before it is shown.</td> -</tr><tr> -<td><a href="#HgStatusDialog.__showContextMenu">__showContextMenu</a></td> -<td>Private slot to show the context menu of the status list.</td> +<td><a href="#HgStatusDialog.__showActionsMenu">__showActionsMenu</a></td> +<td>Private slot to prepare the actions button menu before it is shown.</td> </tr><tr> <td><a href="#HgStatusDialog.__showError">__showError</a></td> <td>Private slot to show some error.</td> </tr><tr> -<td><a href="#HgStatusDialog.__updateButtons">__updateButtons</a></td> -<td>Private method to update the VCS buttons status.</td> -</tr><tr> -<td><a href="#HgStatusDialog.__updateCommitButton">__updateCommitButton</a></td> -<td>Private method to update the Commit button status.</td> -</tr><tr> <td><a href="#HgStatusDialog.closeEvent">closeEvent</a></td> <td>Protected slot implementing a close event handler.</td> </tr><tr> <td><a href="#HgStatusDialog.keyPressEvent">keyPressEvent</a></td> <td>Protected slot to handle a key press event.</td> </tr><tr> -<td><a href="#HgStatusDialog.on_addButton_clicked">on_addButton_clicked</a></td> -<td>Private slot to handle the press of the Add button.</td> -</tr><tr> <td><a href="#HgStatusDialog.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="#HgStatusDialog.on_commitButton_clicked">on_commitButton_clicked</a></td> -<td>Private slot to handle the press of the Commit button.</td> -</tr><tr> -<td><a href="#HgStatusDialog.on_diffButton_clicked">on_diffButton_clicked</a></td> -<td>Private slot to handle the press of the Differences button.</td> -</tr><tr> -<td><a href="#HgStatusDialog.on_forgetButton_clicked">on_forgetButton_clicked</a></td> -<td>Private slot to handle the press of the Forget button.</td> -</tr><tr> <td><a href="#HgStatusDialog.on_input_returnPressed">on_input_returnPressed</a></td> <td>Private slot to handle the press of the return key in the input field.</td> </tr><tr> @@ -191,24 +176,12 @@ <td><a href="#HgStatusDialog.on_refreshButton_clicked">on_refreshButton_clicked</a></td> <td>Private slot to refresh the status display.</td> </tr><tr> -<td><a href="#HgStatusDialog.on_restoreButton_clicked">on_restoreButton_clicked</a></td> -<td>Private slot to handle the press of the Restore button.</td> -</tr><tr> -<td><a href="#HgStatusDialog.on_revertButton_clicked">on_revertButton_clicked</a></td> -<td>Private slot to handle the press of the Revert button.</td> -</tr><tr> -<td><a href="#HgStatusDialog.on_sbsDiffButton_clicked">on_sbsDiffButton_clicked</a></td> -<td>Private slot to handle the press of the Side-by-Side Diff button.</td> -</tr><tr> <td><a href="#HgStatusDialog.on_sendButton_clicked">on_sendButton_clicked</a></td> <td>Private slot to send the input to the subversion process.</td> </tr><tr> <td><a href="#HgStatusDialog.on_statusFilterCombo_activated">on_statusFilterCombo_activated</a></td> <td>Private slot to react to the selection of a status filter.</td> </tr><tr> -<td><a href="#HgStatusDialog.on_statusList_itemChanged">on_statusList_itemChanged</a></td> -<td>Private slot to act upon item changes.</td> -</tr><tr> <td><a href="#HgStatusDialog.on_statusList_itemSelectionChanged">on_statusList_itemSelectionChanged</a></td> <td>Private slot to act upon changes of selected items.</td> </tr><tr> @@ -239,12 +212,17 @@ <dd> parent widget (QWidget) </dd> -</dl><a NAME="HgStatusDialog.__activeExtensionsChanged" ID="HgStatusDialog.__activeExtensionsChanged"></a> -<h4>HgStatusDialog.__activeExtensionsChanged</h4> -<b>__activeExtensionsChanged</b>(<i></i>) +</dl><a NAME="HgStatusDialog.__actionsMenuHovered" ID="HgStatusDialog.__actionsMenuHovered"></a> +<h4>HgStatusDialog.__actionsMenuHovered</h4> +<b>__actionsMenuHovered</b>(<i>action</i>) <p> - Private slot handling a change in the activated extensions. -</p><a NAME="HgStatusDialog.__add" ID="HgStatusDialog.__add"></a> + Private slot to show the tooltip for an action menu entry. +</p><dl> +<dt><i>action</i> (QAction)</dt> +<dd> +action to show tooltip for +</dd> +</dl><a NAME="HgStatusDialog.__add" ID="HgStatusDialog.__add"></a> <h4>HgStatusDialog.__add</h4> <b>__add</b>(<i></i>) <p> @@ -328,6 +306,17 @@ <dd> list of all items, the user has checked </dd> +</dl><a NAME="HgStatusDialog.__getCommitableUnselectedItems" ID="HgStatusDialog.__getCommitableUnselectedItems"></a> +<h4>HgStatusDialog.__getCommitableUnselectedItems</h4> +<b>__getCommitableUnselectedItems</b>(<i></i>) +<p> + Private method to retrieve all entries the user may commit but hasn't + selected. +</p><dl> +<dt>Returns:</dt> +<dd> +list of all items, the user has checked +</dd> </dl><a NAME="HgStatusDialog.__getMissingItems" ID="HgStatusDialog.__getMissingItems"></a> <h4>HgStatusDialog.__getMissingItems</h4> <b>__getMissingItems</b>(<i></i>) @@ -359,7 +348,12 @@ <dd> list of all items with an unversioned status </dd> -</dl><a NAME="HgStatusDialog.__lfAdd" ID="HgStatusDialog.__lfAdd"></a> +</dl><a NAME="HgStatusDialog.__initActionsMenu" ID="HgStatusDialog.__initActionsMenu"></a> +<h4>HgStatusDialog.__initActionsMenu</h4> +<b>__initActionsMenu</b>(<i></i>) +<p> + Private method to initialize the actions menu. +</p><a NAME="HgStatusDialog.__lfAdd" ID="HgStatusDialog.__lfAdd"></a> <h4>HgStatusDialog.__lfAdd</h4> <b>__lfAdd</b>(<i>mode</i>) <p> @@ -438,22 +432,12 @@ <b>__sbsDiff</b>(<i></i>) <p> Private slot to handle the Diff context menu entry. -</p><a NAME="HgStatusDialog.__showAddMenu" ID="HgStatusDialog.__showAddMenu"></a> -<h4>HgStatusDialog.__showAddMenu</h4> -<b>__showAddMenu</b>(<i></i>) +</p><a NAME="HgStatusDialog.__showActionsMenu" ID="HgStatusDialog.__showActionsMenu"></a> +<h4>HgStatusDialog.__showActionsMenu</h4> +<b>__showActionsMenu</b>(<i></i>) <p> - Private slot to prepare the Add button menu before it is shown. -</p><a NAME="HgStatusDialog.__showContextMenu" ID="HgStatusDialog.__showContextMenu"></a> -<h4>HgStatusDialog.__showContextMenu</h4> -<b>__showContextMenu</b>(<i>coord</i>) -<p> - Private slot to show the context menu of the status list. -</p><dl> -<dt><i>coord</i></dt> -<dd> -the position of the mouse pointer (QPoint) -</dd> -</dl><a NAME="HgStatusDialog.__showError" ID="HgStatusDialog.__showError"></a> + Private slot to prepare the actions button menu before it is shown. +</p><a NAME="HgStatusDialog.__showError" ID="HgStatusDialog.__showError"></a> <h4>HgStatusDialog.__showError</h4> <b>__showError</b>(<i>out</i>) <p> @@ -463,17 +447,7 @@ <dd> error to be shown (string) </dd> -</dl><a NAME="HgStatusDialog.__updateButtons" ID="HgStatusDialog.__updateButtons"></a> -<h4>HgStatusDialog.__updateButtons</h4> -<b>__updateButtons</b>(<i></i>) -<p> - Private method to update the VCS buttons status. -</p><a NAME="HgStatusDialog.__updateCommitButton" ID="HgStatusDialog.__updateCommitButton"></a> -<h4>HgStatusDialog.__updateCommitButton</h4> -<b>__updateCommitButton</b>(<i></i>) -<p> - Private method to update the Commit button status. -</p><a NAME="HgStatusDialog.closeEvent" ID="HgStatusDialog.closeEvent"></a> +</dl><a NAME="HgStatusDialog.closeEvent" ID="HgStatusDialog.closeEvent"></a> <h4>HgStatusDialog.closeEvent</h4> <b>closeEvent</b>(<i>e</i>) <p> @@ -493,12 +467,7 @@ <dd> the key press event (QKeyEvent) </dd> -</dl><a NAME="HgStatusDialog.on_addButton_clicked" ID="HgStatusDialog.on_addButton_clicked"></a> -<h4>HgStatusDialog.on_addButton_clicked</h4> -<b>on_addButton_clicked</b>(<i></i>) -<p> - Private slot to handle the press of the Add button. -</p><a NAME="HgStatusDialog.on_buttonBox_clicked" ID="HgStatusDialog.on_buttonBox_clicked"></a> +</dl><a NAME="HgStatusDialog.on_buttonBox_clicked" ID="HgStatusDialog.on_buttonBox_clicked"></a> <h4>HgStatusDialog.on_buttonBox_clicked</h4> <b>on_buttonBox_clicked</b>(<i>button</i>) <p> @@ -508,22 +477,7 @@ <dd> button that was clicked (QAbstractButton) </dd> -</dl><a NAME="HgStatusDialog.on_commitButton_clicked" ID="HgStatusDialog.on_commitButton_clicked"></a> -<h4>HgStatusDialog.on_commitButton_clicked</h4> -<b>on_commitButton_clicked</b>(<i></i>) -<p> - Private slot to handle the press of the Commit button. -</p><a NAME="HgStatusDialog.on_diffButton_clicked" ID="HgStatusDialog.on_diffButton_clicked"></a> -<h4>HgStatusDialog.on_diffButton_clicked</h4> -<b>on_diffButton_clicked</b>(<i></i>) -<p> - Private slot to handle the press of the Differences button. -</p><a NAME="HgStatusDialog.on_forgetButton_clicked" ID="HgStatusDialog.on_forgetButton_clicked"></a> -<h4>HgStatusDialog.on_forgetButton_clicked</h4> -<b>on_forgetButton_clicked</b>(<i></i>) -<p> - Private slot to handle the press of the Forget button. -</p><a NAME="HgStatusDialog.on_input_returnPressed" ID="HgStatusDialog.on_input_returnPressed"></a> +</dl><a NAME="HgStatusDialog.on_input_returnPressed" ID="HgStatusDialog.on_input_returnPressed"></a> <h4>HgStatusDialog.on_input_returnPressed</h4> <b>on_input_returnPressed</b>(<i></i>) <p> @@ -543,21 +497,6 @@ <b>on_refreshButton_clicked</b>(<i></i>) <p> Private slot to refresh the status display. -</p><a NAME="HgStatusDialog.on_restoreButton_clicked" ID="HgStatusDialog.on_restoreButton_clicked"></a> -<h4>HgStatusDialog.on_restoreButton_clicked</h4> -<b>on_restoreButton_clicked</b>(<i></i>) -<p> - Private slot to handle the press of the Restore button. -</p><a NAME="HgStatusDialog.on_revertButton_clicked" ID="HgStatusDialog.on_revertButton_clicked"></a> -<h4>HgStatusDialog.on_revertButton_clicked</h4> -<b>on_revertButton_clicked</b>(<i></i>) -<p> - Private slot to handle the press of the Revert button. -</p><a NAME="HgStatusDialog.on_sbsDiffButton_clicked" ID="HgStatusDialog.on_sbsDiffButton_clicked"></a> -<h4>HgStatusDialog.on_sbsDiffButton_clicked</h4> -<b>on_sbsDiffButton_clicked</b>(<i></i>) -<p> - Private slot to handle the press of the Side-by-Side Diff button. </p><a NAME="HgStatusDialog.on_sendButton_clicked" ID="HgStatusDialog.on_sendButton_clicked"></a> <h4>HgStatusDialog.on_sendButton_clicked</h4> <b>on_sendButton_clicked</b>(<i></i>) @@ -573,19 +512,6 @@ <dd> selected status filter (string) </dd> -</dl><a NAME="HgStatusDialog.on_statusList_itemChanged" ID="HgStatusDialog.on_statusList_itemChanged"></a> -<h4>HgStatusDialog.on_statusList_itemChanged</h4> -<b>on_statusList_itemChanged</b>(<i>item, column</i>) -<p> - Private slot to act upon item changes. -</p><dl> -<dt><i>item</i></dt> -<dd> -reference to the changed item (QTreeWidgetItem) -</dd><dt><i>column</i></dt> -<dd> -index of column that changed (integer) -</dd> </dl><a NAME="HgStatusDialog.on_statusList_itemSelectionChanged" ID="HgStatusDialog.on_statusList_itemSelectionChanged"></a> <h4>HgStatusDialog.on_statusList_itemSelectionChanged</h4> <b>on_statusList_itemSelectionChanged</b>(<i></i>)
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.hg.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.hg.html Fri Mar 03 18:34:21 2017 +0100 @@ -89,9 +89,6 @@ <td><a href="#Hg.__hgGetFileForRevision">__hgGetFileForRevision</a></td> <td>Private method to get a file for a specific revision from the repository.</td> </tr><tr> -<td><a href="#Hg.__hgURL">__hgURL</a></td> -<td>Private method to format a url for Mercurial.</td> -</tr><tr> <td><a href="#Hg.__iniFileChanged">__iniFileChanged</a></td> <td>Private slot to handle a change of the Mercurial configuration file.</td> </tr><tr> @@ -496,21 +493,6 @@ <dd> contents of the file (string) and an error message (string) </dd> -</dl><a NAME="Hg.__hgURL" ID="Hg.__hgURL"></a> -<h4>Hg.__hgURL</h4> -<b>__hgURL</b>(<i>url</i>) -<p> - Private method to format a url for Mercurial. -</p><dl> -<dt><i>url</i></dt> -<dd> -unformatted url string (string) -</dd> -</dl><dl> -<dt>Returns:</dt> -<dd> -properly formated url for mercurial (string) -</dd> </dl><a NAME="Hg.__iniFileChanged" ID="Hg.__iniFileChanged"></a> <h4>Hg.__iniFileChanged</h4> <b>__iniFileChanged</b>(<i>path</i>) @@ -820,13 +802,16 @@ </dd> </dl><a NAME="Hg.hgBundle" ID="Hg.hgBundle"></a> <h4>Hg.hgBundle</h4> -<b>hgBundle</b>(<i>name</i>) +<b>hgBundle</b>(<i>name, bundleData=None</i>) <p> Public method to create a changegroup file. </p><dl> -<dt><i>name</i></dt> +<dt><i>name</i> (str)</dt> <dd> -file/directory name (string) +file/directory name +</dd><dt><i>bundleData</i> (dict)</dt> +<dd> +dictionary containing the bundle creation information </dd> </dl><a NAME="Hg.hgCancelMerge" ID="Hg.hgCancelMerge"></a> <h4>Hg.hgCancelMerge</h4> @@ -1201,19 +1186,27 @@ </dd> </dl><a NAME="Hg.hgPull" ID="Hg.hgPull"></a> <h4>Hg.hgPull</h4> -<b>hgPull</b>(<i>name</i>) +<b>hgPull</b>(<i>name, revisions=None</i>) <p> Public method used to pull changes from a remote Mercurial repository. </p><dl> -<dt><i>name</i></dt> +<dt><i>name</i> (str)</dt> <dd> -directory name of the project to be pulled to (string) +directory name of the project to be pulled to +</dd><dt><i>revisions</i> (list of str)</dt> +<dd> +list of revisions to be pulled </dd> </dl><dl> <dt>Returns:</dt> <dd> flag indicating, that the update contained an add - or delete (boolean) + or delete +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool </dd> </dl><a NAME="Hg.hgPush" ID="Hg.hgPush"></a> <h4>Hg.hgPush</h4> @@ -1378,19 +1371,27 @@ </dd> </dl><a NAME="Hg.hgUnbundle" ID="Hg.hgUnbundle"></a> <h4>Hg.hgUnbundle</h4> -<b>hgUnbundle</b>(<i>name</i>) +<b>hgUnbundle</b>(<i>name, files=None</i>) <p> Public method to apply changegroup files. </p><dl> -<dt><i>name</i></dt> +<dt><i>name</i> (str)</dt> <dd> -directory name (string) +directory name +</dd><dt><i>files</i> (list of str)</dt> +<dd> +list of bundle files to be applied </dd> </dl><dl> <dt>Returns:</dt> <dd> flag indicating, that the update contained an add - or delete (boolean) + or delete +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool </dd> </dl><a NAME="Hg.hgVerify" ID="Hg.hgVerify"></a> <h4>Hg.hgVerify</h4> @@ -1737,13 +1738,16 @@ </dd> </dl><a NAME="Hg.vcsMerge" ID="Hg.vcsMerge"></a> <h4>Hg.vcsMerge</h4> -<b>vcsMerge</b>(<i>name</i>) +<b>vcsMerge</b>(<i>name, rev=""</i>) <p> Public method used to merge a URL/revision into the local project. </p><dl> -<dt><i>name</i></dt> +<dt><i>name</i> (str)</dt> <dd> -file/directory name to be merged (string) +file/directory name to be merged +</dd><dt><i>rev=</i> (str)</dt> +<dd> +revision to merge with </dd> </dl><a NAME="Hg.vcsMove" ID="Hg.vcsMove"></a> <h4>Hg.vcsMove</h4>
--- a/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html Fri Mar 03 18:34:21 2017 +0100 @@ -21,7 +21,7 @@ <body><a NAME="top" ID="top"></a> <h1>eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage</h1> <p> -Module implementing the Web Browser configuration page. +Module implementing the Web Browser Appearance configuration page. </p> <h3>Global Attributes</h3> <table>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Documentation/Source/eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html Fri Mar 03 18:34:21 2017 +0100 @@ -0,0 +1,141 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage</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.ConfigurationPages.WebBrowserSpellCheckingPage</h1> +<p> +Module implementing the Web Browser Spell Checking configuration page. +</p> +<h3>Global Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> +<table> +<tr> +<td><a href="#WebBrowserSpellCheckingPage">WebBrowserSpellCheckingPage</a></td> +<td>Class implementing the Web Browser Spell Checking page.</td> +</tr> +</table> +<h3>Functions</h3> +<table> +<tr> +<td><a href="#create">create</a></td> +<td>Module function to create the configuration page.</td> +</tr> +</table> +<hr /><hr /> +<a NAME="WebBrowserSpellCheckingPage" ID="WebBrowserSpellCheckingPage"></a> +<h2>WebBrowserSpellCheckingPage</h2> +<p> + Class implementing the Web Browser Spell Checking page. +</p> +<h3>Derived from</h3> +ConfigurationPageBase, Ui_WebBrowserSpellCheckingPage +<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="#WebBrowserSpellCheckingPage.__init__">WebBrowserSpellCheckingPage</a></td> +<td>Constructor</td> +</tr><tr> +<td><a href="#WebBrowserSpellCheckingPage.__createLanguageString">__createLanguageString</a></td> +<td>Private method to create a language string given a language identifier.</td> +</tr><tr> +<td><a href="#WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked">on_spellCheckEnabledCheckBox_clicked</a></td> +<td>Private slot handling a change of the spell checking enabled state.</td> +</tr><tr> +<td><a href="#WebBrowserSpellCheckingPage.save">save</a></td> +<td>Public slot to save the Help Viewers configuration.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="WebBrowserSpellCheckingPage.__init__" ID="WebBrowserSpellCheckingPage.__init__"></a> +<h4>WebBrowserSpellCheckingPage (Constructor)</h4> +<b>WebBrowserSpellCheckingPage</b>(<i></i>) +<p> + Constructor +</p><a NAME="WebBrowserSpellCheckingPage.__createLanguageString" ID="WebBrowserSpellCheckingPage.__createLanguageString"></a> +<h4>WebBrowserSpellCheckingPage.__createLanguageString</h4> +<b>__createLanguageString</b>(<i>language</i>) +<p> + Private method to create a language string given a language identifier. +</p><dl> +<dt><i>language</i> (str)</dt> +<dd> +language identifier +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +language string +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked" ID="WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked"></a> +<h4>WebBrowserSpellCheckingPage.on_spellCheckEnabledCheckBox_clicked</h4> +<b>on_spellCheckEnabledCheckBox_clicked</b>(<i></i>) +<p> + Private slot handling a change of the spell checking enabled state. +</p><a NAME="WebBrowserSpellCheckingPage.save" ID="WebBrowserSpellCheckingPage.save"></a> +<h4>WebBrowserSpellCheckingPage.save</h4> +<b>save</b>(<i></i>) +<p> + Public slot to save the Help Viewers configuration. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="create" ID="create"></a> +<h2>create</h2> +<b>create</b>(<i>dlg</i>) +<p> + Module function to create the configuration page. +</p><dl> +<dt><i>dlg</i> (Configuration)</dt> +<dd> +reference to the configuration dialog +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +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> +<hr /> +</body></html> \ No newline at end of file
--- a/Documentation/Source/eric6.Project.DebuggerPropertiesDialog.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Project.DebuggerPropertiesDialog.html Fri Mar 03 18:34:21 2017 +0100 @@ -61,9 +61,21 @@ <td><a href="#DebuggerPropertiesDialog.__init__">DebuggerPropertiesDialog</a></td> <td>Constructor</td> </tr><tr> +<td><a href="#DebuggerPropertiesDialog.__clearHistory">__clearHistory</a></td> +<td>Private method to clear a path picker history.</td> +</tr><tr> +<td><a href="#DebuggerPropertiesDialog.__saveHistories">__saveHistories</a></td> +<td>Private method to save the path picker histories.</td> +</tr><tr> +<td><a href="#DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked">on_debugClientClearHistoryButton_clicked</a></td> +<td>Private slot to clear the debug clients history.</td> +</tr><tr> <td><a href="#DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog">on_debugClientPicker_aboutToShowPathPickerDialog</a></td> <td>Private slot to perform actions before the debug client selection dialog is shown.</td> </tr><tr> +<td><a href="#DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked">on_interpreterClearHistoryButton_clicked</a></td> +<td>Private slot to clear the interpreter history.</td> +</tr><tr> <td><a href="#DebuggerPropertiesDialog.storeData">storeData</a></td> <td>Public method to store the entered/modified data.</td> </tr> @@ -88,12 +100,37 @@ <dd> name of this dialog (string) </dd> -</dl><a NAME="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ID="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog"></a> +</dl><a NAME="DebuggerPropertiesDialog.__clearHistory" ID="DebuggerPropertiesDialog.__clearHistory"></a> +<h4>DebuggerPropertiesDialog.__clearHistory</h4> +<b>__clearHistory</b>(<i>picker</i>) +<p> + Private method to clear a path picker history. +</p><dl> +<dt><i>picker</i> (E5ComboPathPicker)</dt> +<dd> +reference to the path picker +</dd> +</dl><a NAME="DebuggerPropertiesDialog.__saveHistories" ID="DebuggerPropertiesDialog.__saveHistories"></a> +<h4>DebuggerPropertiesDialog.__saveHistories</h4> +<b>__saveHistories</b>(<i></i>) +<p> + Private method to save the path picker histories. +</p><a NAME="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" ID="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked"></a> +<h4>DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked</h4> +<b>on_debugClientClearHistoryButton_clicked</b>(<i></i>) +<p> + Private slot to clear the debug clients history. +</p><a NAME="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ID="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog"></a> <h4>DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog</h4> <b>on_debugClientPicker_aboutToShowPathPickerDialog</b>(<i></i>) <p> Private slot to perform actions before the debug client selection dialog is shown. +</p><a NAME="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" ID="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked"></a> +<h4>DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked</h4> +<b>on_interpreterClearHistoryButton_clicked</b>(<i></i>) +<p> + Private slot to clear the interpreter history. </p><a NAME="DebuggerPropertiesDialog.storeData" ID="DebuggerPropertiesDialog.storeData"></a> <h4>DebuggerPropertiesDialog.storeData</h4> <b>storeData</b>(<i></i>)
--- a/Documentation/Source/eric6.Project.Project.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.Project.Project.html Fri Mar 03 18:34:21 2017 +0100 @@ -416,6 +416,9 @@ <td><a href="#Project.checkVCSStatus">checkVCSStatus</a></td> <td>Public method to wake up the VCS status monitor thread.</td> </tr><tr> +<td><a href="#Project.clearHistories">clearHistories</a></td> +<td>Public method to clear the project related histories.</td> +</tr><tr> <td><a href="#Project.clearRecent">clearRecent</a></td> <td>Public method to clear the recent projects menu.</td> </tr><tr> @@ -1393,6 +1396,11 @@ <b>checkVCSStatus</b>(<i></i>) <p> Public method to wake up the VCS status monitor thread. +</p><a NAME="Project.clearHistories" ID="Project.clearHistories"></a> +<h4>Project.clearHistories</h4> +<b>clearHistories</b>(<i></i>) +<p> + Public method to clear the project related histories. </p><a NAME="Project.clearRecent" ID="Project.clearRecent"></a> <h4>Project.clearRecent</h4> <b>clearRecent</b>(<i></i>)
--- a/Documentation/Source/eric6.UI.ClearPrivateDataDialog.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.UI.ClearPrivateDataDialog.html Fri Mar 03 18:34:21 2017 +0100 @@ -88,7 +88,7 @@ <dd> flags indicating which data to clear (recent files, recent projects, recent multi projects, - debug histories, shell histories) + debug histories, shell histories, VCS histories) </dd> </dl><dl> <dt>Return Type:</dt>
--- a/Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html Fri Mar 03 18:34:21 2017 +0100 @@ -90,6 +90,9 @@ <td><a href="#DownloadItem.__saveFileName">__saveFileName</a></td> <td>Private method to calculate a name for the file to download.</td> </tr><tr> +<td><a href="#DownloadItem.__setFileName">__setFileName</a></td> +<td>Private method to set the file name to save the download into.</td> +</tr><tr> <td><a href="#DownloadItem.__updateInfoLabel">__updateInfoLabel</a></td> <td>Private method to update the info label.</td> </tr><tr> @@ -220,6 +223,16 @@ <dd> proposed filename and original filename (string, string) </dd> +</dl><a NAME="DownloadItem.__setFileName" ID="DownloadItem.__setFileName"></a> +<h4>DownloadItem.__setFileName</h4> +<b>__setFileName</b>(<i>fileName</i>) +<p> + Private method to set the file name to save the download into. +</p><dl> +<dt><i>fileName</i> (str)</dt> +<dd> +name of the file to save into +</dd> </dl><a NAME="DownloadItem.__updateInfoLabel" ID="DownloadItem.__updateInfoLabel"></a> <h4>DownloadItem.__updateInfoLabel</h4> <b>__updateInfoLabel</b>(<i></i>)
--- a/Documentation/Source/eric6.WebBrowser.Tools.WebHitTestResult.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.WebBrowser.Tools.WebHitTestResult.html Fri Mar 03 18:34:21 2017 +0100 @@ -105,6 +105,9 @@ <td><a href="#WebHitTestResult.tagName">tagName</a></td> <td>Public method to get the name of the tested tag.</td> </tr><tr> +<td><a href="#WebHitTestResult.updateWithContextMenuData">updateWithContextMenuData</a></td> +<td>Public method to update the hit test data with data from the context menu event.</td> +</tr><tr> <td><a href="#WebHitTestResult.viewportPos">viewportPos</a></td> <td>Public method to get the viewport position.</td> </tr> @@ -349,6 +352,19 @@ <dd> str </dd> +</dl><a NAME="WebHitTestResult.updateWithContextMenuData" ID="WebHitTestResult.updateWithContextMenuData"></a> +<h4>WebHitTestResult.updateWithContextMenuData</h4> +<b>updateWithContextMenuData</b>(<i>data</i>) +<p> + Public method to update the hit test data with data from the context + menu event. +</p><p> + Note: This works for Qt >= 5.7.0. +</p><dl> +<dt><i>data</i> (QWebEngineContextMenuData)</dt> +<dd> +context menu data +</dd> </dl><a NAME="WebHitTestResult.viewportPos" ID="WebHitTestResult.viewportPos"></a> <h4>WebHitTestResult.viewportPos</h4> <b>viewportPos</b>(<i></i>)
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserPage.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.WebBrowser.WebBrowserPage.html Fri Mar 03 18:34:21 2017 +0100 @@ -90,6 +90,9 @@ <td><a href="#WebBrowserPage.execJavaScript">execJavaScript</a></td> <td>Public method to execute a JavaScript function synchroneously.</td> </tr><tr> +<td><a href="#WebBrowserPage.execPrintPage">execPrintPage</a></td> +<td>Public method to execute a synchronous print.</td> +</tr><tr> <td><a href="#WebBrowserPage.hitTestContent">hitTestContent</a></td> <td>Public method to test the content at a specified position.</td> </tr><tr> @@ -105,6 +108,9 @@ <td><a href="#WebBrowserPage.mapToViewport">mapToViewport</a></td> <td>Public method to map a position to the viewport.</td> </tr><tr> +<td><a href="#WebBrowserPage.printCallback">printCallback</a></td> +<td></td> +</tr><tr> <td><a href="#WebBrowserPage.resultCallback">resultCallback</a></td> <td></td> </tr><tr> @@ -284,6 +290,29 @@ <dd> depending upon script result </dd> +</dl><a NAME="WebBrowserPage.execPrintPage" ID="WebBrowserPage.execPrintPage"></a> +<h4>WebBrowserPage.execPrintPage</h4> +<b>execPrintPage</b>(<i>printer, timeout=1000</i>) +<p> + Public method to execute a synchronous print. +</p><dl> +<dt><i>printer</i> (QPrinter)</dt> +<dd> +reference to the printer object +</dd><dt><i>timeout</i> (int)</dt> +<dd> +timeout value in milliseconds +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating a successful print job +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> </dl><a NAME="WebBrowserPage.hitTestContent" ID="WebBrowserPage.hitTestContent"></a> <h4>WebBrowserPage.hitTestContent</h4> <b>hitTestContent</b>(<i>pos</i>) @@ -373,7 +402,10 @@ <dd> QPoint </dd> -</dl><a NAME="WebBrowserPage.resultCallback" ID="WebBrowserPage.resultCallback"></a> +</dl><a NAME="WebBrowserPage.printCallback" ID="WebBrowserPage.printCallback"></a> +<h4>WebBrowserPage.printCallback</h4> +<b>printCallback</b>(<i>resDict=resultDict</i>) +<a NAME="WebBrowserPage.resultCallback" ID="WebBrowserPage.resultCallback"></a> <h4>WebBrowserPage.resultCallback</h4> <b>resultCallback</b>(<i>resDict=resultDict</i>) <a NAME="WebBrowserPage.runJavaScript" ID="WebBrowserPage.runJavaScript"></a>
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserTabWidget.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.WebBrowser.WebBrowserTabWidget.html Fri Mar 03 18:34:21 2017 +0100 @@ -134,6 +134,9 @@ <td><a href="#WebBrowserTabWidget.__pdfGeneratedForSave">__pdfGeneratedForSave</a></td> <td>Private slot to save the generated PDF data to a file.</td> </tr><tr> +<td><a href="#WebBrowserTabWidget.__printPreviewRequested">__printPreviewRequested</a></td> +<td>Private slot to generate the print preview.</td> +</tr><tr> <td><a href="#WebBrowserTabWidget.__recentlyAudibleChanged">__recentlyAudibleChanged</a></td> <td>Private slot to react on the audible state of a page.</td> </tr><tr> @@ -399,6 +402,19 @@ <dd> generated PDF document </dd> +</dl><a NAME="WebBrowserTabWidget.__printPreviewRequested" ID="WebBrowserTabWidget.__printPreviewRequested"></a> +<h4>WebBrowserTabWidget.__printPreviewRequested</h4> +<b>__printPreviewRequested</b>(<i>printer, browser</i>) +<p> + Private slot to generate the print preview. +</p><dl> +<dt><i>printer</i> (QPrinter)</dt> +<dd> +reference to the printer object +</dd><dt><i>browser</i> (WebBrowserView)</dt> +<dd> +reference to the browser to be printed +</dd> </dl><a NAME="WebBrowserTabWidget.__recentlyAudibleChanged" ID="WebBrowserTabWidget.__recentlyAudibleChanged"></a> <h4>WebBrowserTabWidget.__recentlyAudibleChanged</h4> <b>__recentlyAudibleChanged</b>(<i>recentlyAudible</i>) @@ -693,7 +709,7 @@ </p><dl> <dt><i>browser</i></dt> <dd> -reference to the browser to be printed (HelpBrowserWV) +reference to the browser to be printed (WebBrowserView) </dd> </dl><a NAME="WebBrowserTabWidget.reloadAllBrowsers" ID="WebBrowserTabWidget.reloadAllBrowsers"></a> <h4>WebBrowserTabWidget.reloadAllBrowsers</h4>
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserView.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/eric6.WebBrowser.WebBrowserView.html Fri Mar 03 18:34:21 2017 +0100 @@ -147,6 +147,9 @@ <td><a href="#WebBrowserView.__downloadMedia">__downloadMedia</a></td> <td>Private slot to download a media and save it to disk.</td> </tr><tr> +<td><a href="#WebBrowserView.__getSavePageFileNameAndFormat">__getSavePageFileNameAndFormat</a></td> +<td>Private method to get the file name to save the page to.</td> +</tr><tr> <td><a href="#WebBrowserView.__iconLoaded">__iconLoaded</a></td> <td>Private slot handling the loaded web site icon.</td> </tr><tr> @@ -195,6 +198,9 @@ <td><a href="#WebBrowserView.__renderProcessTerminated">__renderProcessTerminated</a></td> <td>Private slot handling a crash of the web page render process.</td> </tr><tr> +<td><a href="#WebBrowserView.__replaceMisspelledWord">__replaceMisspelledWord</a></td> +<td>Private slot to replace a misspelled word under the context menu.</td> +</tr><tr> <td><a href="#WebBrowserView.__resetSpeedDials">__resetSpeedDials</a></td> <td>Private slot to reset all speed dials to the default pages.</td> </tr><tr> @@ -594,7 +600,23 @@ <b>__downloadMedia</b>(<i></i>) <p> Private slot to download a media and save it to disk. -</p><a NAME="WebBrowserView.__iconLoaded" ID="WebBrowserView.__iconLoaded"></a> +</p><a NAME="WebBrowserView.__getSavePageFileNameAndFormat" ID="WebBrowserView.__getSavePageFileNameAndFormat"></a> +<h4>WebBrowserView.__getSavePageFileNameAndFormat</h4> +<b>__getSavePageFileNameAndFormat</b>(<i></i>) +<p> + Private method to get the file name to save the page to. +</p><dl> +<dt>Returns:</dt> +<dd> +tuple containing the file name to save to and the + save page format +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +tuple of (str, QWebEngineDownloadItem.SavePageFormat) +</dd> +</dl><a NAME="WebBrowserView.__iconLoaded" ID="WebBrowserView.__iconLoaded"></a> <h4>WebBrowserView.__iconLoaded</h4> <b>__iconLoaded</b>(<i>icon</i>) <p> @@ -730,7 +752,12 @@ <dd> exit code of the process </dd> -</dl><a NAME="WebBrowserView.__resetSpeedDials" ID="WebBrowserView.__resetSpeedDials"></a> +</dl><a NAME="WebBrowserView.__replaceMisspelledWord" ID="WebBrowserView.__replaceMisspelledWord"></a> +<h4>WebBrowserView.__replaceMisspelledWord</h4> +<b>__replaceMisspelledWord</b>(<i></i>) +<p> + Private slot to replace a misspelled word under the context menu. +</p><a NAME="WebBrowserView.__resetSpeedDials" ID="WebBrowserView.__resetSpeedDials"></a> <h4>WebBrowserView.__resetSpeedDials</h4> <b>__resetSpeedDials</b>(<i></i>) <p> @@ -762,10 +789,15 @@ Private slot to send a link via email. </p><a NAME="WebBrowserView.__showTabCrashPage" ID="WebBrowserView.__showTabCrashPage"></a> <h4>WebBrowserView.__showTabCrashPage</h4> -<b>__showTabCrashPage</b>(<i></i>) +<b>__showTabCrashPage</b>(<i>status</i>) <p> Private slot to show the tab crash page. -</p><a NAME="WebBrowserView.__urlChanged" ID="WebBrowserView.__urlChanged"></a> +</p><dl> +<dt><i>status</i> (QWebEnginePage.RenderProcessTerminationStatus)</dt> +<dd> +termination status +</dd> +</dl><a NAME="WebBrowserView.__urlChanged" ID="WebBrowserView.__urlChanged"></a> <h4>WebBrowserView.__urlChanged</h4> <b>__urlChanged</b>(<i>url</i>) <p>
--- a/Documentation/Source/index-eric6.Preferences.ConfigurationPages.html Sun Feb 26 15:54:49 2017 +0100 +++ b/Documentation/Source/index-eric6.Preferences.ConfigurationPages.html Fri Mar 03 18:34:21 2017 +0100 @@ -203,10 +203,13 @@ <td>Module implementing the Viewmanager configuration page.</td> </tr><tr> <td><a href="eric6.Preferences.ConfigurationPages.WebBrowserAppearancePage.html">WebBrowserAppearancePage</a></td> -<td>Module implementing the Web Browser configuration page.</td> +<td>Module implementing the Web Browser Appearance configuration page.</td> </tr><tr> <td><a href="eric6.Preferences.ConfigurationPages.WebBrowserPage.html">WebBrowserPage</a></td> <td>Module implementing the Web Browser configuration page.</td> +</tr><tr> +<td><a href="eric6.Preferences.ConfigurationPages.WebBrowserSpellCheckingPage.html">WebBrowserSpellCheckingPage</a></td> +<td>Module implementing the Web Browser Spell Checking configuration page.</td> </tr> </table> </body></html> \ No newline at end of file
--- a/E5Gui/E5PathPicker.py Sun Feb 26 15:54:49 2017 +0100 +++ b/E5Gui/E5PathPicker.py Fri Mar 03 18:34:21 2017 +0100 @@ -215,6 +215,8 @@ self._editor.setText(text) else: self._editor.setEditText(text) + if text and self._editor.findText(text) == -1: + self._editor.insertItem(0, text) def _editorText(self): """
--- a/Graphics/UMLSceneSizeDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Graphics/UMLSceneSizeDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -68,7 +68,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <resources/> <connections>
--- a/PluginManager/PluginManager.py Sun Feb 26 15:54:49 2017 +0100 +++ b/PluginManager/PluginManager.py Fri Mar 03 18:34:21 2017 +0100 @@ -1034,7 +1034,7 @@ pluginName in self.__onDemandActiveModules ########################################################################### - ## Specialized plugin module handling methods below + ## Specialized plug-in module handling methods below ########################################################################### ########################################################################### @@ -1297,6 +1297,30 @@ ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0] if ignored == E5SslErrorHandler.NotIgnored: self.__downloadCancelled = True + + ######################################################################## + ## Methods to clear private data of plug-ins below + ######################################################################## + + def clearPluginsPrivateData(self, type_): + """ + Public method to clear the private data of plug-ins of a specified + type. + + Plugins supporting this functionality must support the module function + clearPrivateData() and have the module level attribute pluginType. + + @param type_ type of the plugin to be activated (string) + """ + for name, module in \ + list(self.__onDemandActiveModules.items()) + \ + list(self.__onDemandInactiveModules.items()) + \ + list(self.__activeModules.items()) + \ + list(self.__inactiveModules.items()): + if getattr(module, "pluginType", "") == type_: + if hasattr(module, "clearPrivateData"): + module.clearPrivateData() + # TODO: document this in the plug-ins paper # # eflag: noqa = M801
--- a/Plugins/AboutPlugin/AboutDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/AboutPlugin/AboutDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -139,7 +139,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <tabstops> <tabstop>aboutTabWidget</tabstop> <tabstop>aboutEdit</tabstop>
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -677,7 +677,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py Fri Mar 03 18:34:21 2017 +0100 @@ -79,7 +79,7 @@ except ImportError: from ConfigParser import RawConfigParser # __IGNORE_WARNING__ -__version__ = '2.2.0-eric' +__version__ = '2.3.1-eric' DEFAULT_EXCLUDE = '.svn,CVS,.bzr,.hg,.git,__pycache__,.tox' DEFAULT_IGNORE = 'E121,E123,E126,E226,E24,E704,W503' @@ -134,6 +134,20 @@ OPERATOR_REGEX = re.compile(r'(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+)(\s*)') LAMBDA_REGEX = re.compile(r'\blambda\b') HUNK_REGEX = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$') +STARTSWITH_DEF_REGEX = re.compile(r'^(async\s+def|def)') +STARTSWITH_TOP_LEVEL_REGEX = re.compile(r'^(async\s+def\s+|def\s+|class\s+|@)') +STARTSWITH_INDENT_STATEMENT_REGEX = re.compile( + r'^\s*({0})'.format('|'.join(s.replace(' ', '\s+') for s in ( + 'def', 'async def', + 'for', 'async for', + 'if', 'elif', 'else', + 'try', 'except', 'finally', + 'with', 'async with', + 'class', + 'while', + ))) +) +DUNDER_REGEX = re.compile(r'^__([^\s]+)__ = ') # Work around Python < 2.6 behaviour, which does not generate NL after # a comment which is on a line by itself. @@ -278,6 +292,7 @@ E303: def a():\n\n\n\n pass E304: @decorator\n\ndef a():\n pass E305: def a():\n pass\na() + E306: def a():\n def b():\n pass\n def c():\n pass """ if line_number < 3 and not previous_logical: return # Don't expect blank lines before the first line @@ -286,7 +301,7 @@ yield 0, "E304 blank lines found after function decorator" elif blank_lines > 2 or (indent_level and blank_lines == 2): yield 0, "E303 too many blank lines (%d)", blank_lines - elif logical_line.startswith(('def ', 'async def ', 'class ', '@')): + elif STARTSWITH_TOP_LEVEL_REGEX.match(logical_line): if indent_level: if not (blank_before or previous_indent_level < indent_level or DOCSTRING_REGEX.match(previous_logical)): @@ -827,7 +842,7 @@ no_space = False prev_end = None annotated_func_arg = False - in_def = logical_line.startswith(('def', 'async def')) + in_def = bool(STARTSWITH_DEF_REGEX.match(logical_line)) message = "E251 unexpected spaces around keyword / parameter equals" for token_type, text, start, end, line in tokens: if token_type == tokenize.NL: @@ -956,6 +971,8 @@ if line.startswith('import ') or line.startswith('from '): if checker_state.get('seen_non_imports', False): yield 0, "E402 module level import not at top of file" + elif re.match(DUNDER_REGEX, line): + return elif any(line.startswith(kw) for kw in allowed_try_keywords): # Allow try, except, else, finally keywords intermixed with imports in # order to support conditional importing @@ -996,7 +1013,6 @@ E702: do_one(); do_two(); do_three() E703: do_four(); # useless semicolon E704: def f(x): return 2*x - E705: async def f(x): return 2*x E731: f = lambda x: 2*x """ line = logical_line @@ -1016,11 +1032,9 @@ yield 0, ("E731 do not assign a lambda expression, use a " "def") break - if line.startswith('def '): + if STARTSWITH_DEF_REGEX.match(line): yield 0, "E704 multiple statements on one line (def)" - elif line.startswith('async def '): - yield 0, "E705 multiple statements on one line (async def)" - else: + elif STARTSWITH_INDENT_STATEMENT_REGEX.match(line): yield found, "E701 multiple statements on one line (colon)" prev_found = found found = line.find(':', found + 1)
--- a/Plugins/CheckerPlugins/CodeStyleChecker/translations.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/CodeStyleChecker/translations.py Fri Mar 03 18:34:21 2017 +0100 @@ -219,9 +219,6 @@ "E704": QCoreApplication.translate( "pycodestyle", "multiple statements on one line (def)"), - "E705": QCoreApplication.translate( - "pycodestyle", - "multiple statements on one line (async def)"), "E711": QCoreApplication.translate( "pycodestyle", "comparison to {0} should be {1}"),
--- a/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -143,7 +143,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/__init__.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/__init__.py Fri Mar 03 18:34:21 2017 +0100 @@ -32,6 +32,19 @@ """ """ Changes +1.5.0 (2017-01-09) + - Enable support for PEP 526 annotated assignments + +1.4.0 (2016-12-30): + - Change formatting of ImportStarMessage to be consistent with other errors + - Support PEP 498 "f-strings" + +1.3.0 (2016-09-01): + - Fix PyPy2 Windows IntegrationTests + - Check for duplicate dictionary keys + - Fix TestMain tests on Windows + - Fix "continue" and "break" checks ignoring py3.5's "async for" loop + 1.2.3 (2016-05-12): - Fix TypeError when processing relative imports
--- a/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/checker.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/checker.py Fri Mar 03 18:34:21 2017 +0100 @@ -311,7 +311,7 @@ class StarImportation(Importation): - """A binding created by an 'from x import *' statement.""" + """A binding created by a 'from x import *' statement.""" def __init__(self, name, source): super(StarImportation, self).__init__('*', source) @@ -806,7 +806,7 @@ return if on_conditional_branch(): - # We can not predict if this conditional branch is going to + # We cannot predict if this conditional branch is going to # be executed. return @@ -944,7 +944,7 @@ MATMULT = ignore # additional node types - COMPREHENSION = KEYWORD = FORMATTEDVALUE = handleChildren + COMPREHENSION = KEYWORD = FORMATTEDVALUE = JOINEDSTR = handleChildren def DICT(self, node): # Complain if there are duplicate keys with different values @@ -1328,7 +1328,7 @@ self.handleNodeStore(node) self.handleChildren(node) if not is_name_previously_defined: - # See discussion on https://github.com/pyflakes/pyflakes/pull/59. + # See discussion on https://github.com/PyCQA/pyflakes/pull/59 # We're removing the local name since it's being unbound # after leaving the except: block and it's always unbound @@ -1343,5 +1343,24 @@ except KeyError: pass + def ANNASSIGN(self, node): + """ + Annotated assignments don't have annotations evaluated on function + scope, hence the custom implementation. + + See: PEP 526. + """ + if node.value: + # Only bind the *targets* if the assignment has a value. + # Otherwise it's not really ast.Store and shouldn't silence + # UndefinedLocal warnings. + self.handleNode(node.target, node) + if not isinstance(self.scope, FunctionScope): + self.handleNode(node.annotation, node) + if node.value: + # If the assignment has value, handle the *value* now. + self.handleNode(node.value, node) + + # # eflag: noqa = M702
--- a/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/messages.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/messages.py Fri Mar 03 18:34:21 2017 +0100 @@ -173,7 +173,7 @@ Class defining the "Import Star Usage" message. """ message_id = 'F17' - message = "%s may be undefined, or defined from star imports: %s" + message = "%r may be undefined, or defined from star imports: %s" def __init__(self, filename, loc, name, from_list): """
--- a/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/translations.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/translations.py Fri Mar 03 18:34:21 2017 +0100 @@ -65,7 +65,7 @@ "'from {0} import *' only allowed at module level"), 'F17': QCoreApplication.translate( 'pyFlakes', - "{0} may be undefined, or defined from star imports: {1}"), + "{0!r} may be undefined, or defined from star imports: {1}"), 'F18': QCoreApplication.translate( 'pyFlakes', "Dictionary key {0!r} repeated with different values"),
--- a/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -149,7 +149,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -236,7 +236,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -86,7 +86,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>contents</tabstop>
--- a/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -519,7 +519,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -86,7 +86,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>contents</tabstop>
--- a/Plugins/PluginVcsMercurial.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/PluginVcsMercurial.py Fri Mar 03 18:34:21 2017 +0100 @@ -11,7 +11,7 @@ import os -from PyQt5.QtCore import QObject, QCoreApplication +from PyQt5.QtCore import QObject, QCoreApplication, QByteArray from E5Gui.E5Application import e5App @@ -143,12 +143,49 @@ if not e5App().getObject("PluginManager").isPluginLoaded( "PluginVcsMercurial"): Preferences.Prefs.settings.remove("Mercurial") + + +def clearPrivateData(): + """ + Module function to clear the private data of the plug-in. + """ + for key in ["RepositoryUrlHistory"]: + VcsMercurialPlugin.setPreferences(key, []) class VcsMercurialPlugin(QObject): """ Class implementing the Mercurial version control plugin. """ + MercurialDefaults = { + "StopLogOnCopy": True, # used in log browser + "LogLimit": 20, + "CommitMessages": 20, + "Commits": [], + "CommitAuthorsLimit": 20, + "CommitAuthors": [], + "PullUpdate": False, + "PreferUnbundle": False, + "ServerPort": 8000, + "ServerStyle": "", + "CleanupPatterns": "*.orig *.rej *~", + "CreateBackup": False, + "InternalMerge": False, + "Encoding": "utf-8", + "EncodingMode": "strict", + "ConsiderHidden": False, + "LogMessageColumnWidth": 30, + "LogBrowserGeometry": QByteArray(), + "LogBrowserSplitterStates": [QByteArray(), QByteArray(), + QByteArray()], + # mainSplitter, detailsSplitter, diffSplitter + "StatusDialogGeometry": QByteArray(), + "StatusDialogSplitterState": QByteArray(), + "MqStatusDialogGeometry": QByteArray(), + "MqStatusDialogSplitterState": QByteArray(), + "RepositoryUrlHistory": [], + } + def __init__(self, ui): """ Constructor @@ -158,26 +195,6 @@ super(VcsMercurialPlugin, self).__init__(ui) self.__ui = ui - self.__mercurialDefaults = { - "StopLogOnCopy": True, # used in log browser - "LogLimit": 20, - "CommitMessages": 20, - "Commits": [], - "CommitAuthorsLimit": 20, - "CommitAuthors": [], - "PullUpdate": False, - "PreferUnbundle": False, - "ServerPort": 8000, - "ServerStyle": "", - "CleanupPatterns": "*.orig *.rej *~", - "CreateBackup": False, - "InternalMerge": False, - "Encoding": "utf-8", - "EncodingMode": "strict", - "ConsiderHidden": False, - "LogMessageColumnWidth": 30, - } - from VcsPlugins.vcsMercurial.ProjectHelper import HgProjectHelper self.__projectHelperObject = HgProjectHelper(None, None) try: @@ -240,9 +257,10 @@ tb.setVisible(True) tb.setEnabled(True) - def getPreferences(self, key): + @classmethod + def getPreferences(cls, key): """ - Public method to retrieve the various settings. + Class method to retrieve the various settings. @param key the key of the value to get @return the requested setting @@ -250,21 +268,38 @@ if key in ["StopLogOnCopy", "PullUpdate", "PreferUnbundle", "CreateBackup", "InternalMerge", "ConsiderHidden"]: return Preferences.toBool(Preferences.Prefs.settings.value( - "Mercurial/" + key, self.__mercurialDefaults[key])) + "Mercurial/" + key, cls.MercurialDefaults[key])) elif key in ["LogLimit", "CommitMessages", "CommitAuthorsLimit", "ServerPort", "LogMessageColumnWidth"]: return int(Preferences.Prefs.settings.value( - "Mercurial/" + key, self.__mercurialDefaults[key])) - elif key in ["Commits", "CommitAuthors"]: + "Mercurial/" + key, cls.MercurialDefaults[key])) + elif key in ["Commits", "CommitAuthors", "RepositoryUrlHistory"]: return Preferences.toList(Preferences.Prefs.settings.value( - "Mercurial/" + key)) + "Mercurial/" + key, cls.MercurialDefaults[key])) + elif key in ["LogBrowserGeometry", "StatusDialogGeometry", + "StatusDialogSplitterState", "MqStatusDialogGeometry", + "MqStatusDialogSplitterState"]: + # QByteArray values + v = Preferences.Prefs.settings.value("Mercurial/" + key) + if v is not None: + return v + else: + return cls.MercurialDefaults[key] + elif key in ["LogBrowserSplitterStates"]: + # list of QByteArray values + states = Preferences.Prefs.settings.value("Mercurial/" + key) + if states is not None: + return states + else: + return cls.MercurialDefaults[key] else: return Preferences.Prefs.settings.value( - "Mercurial/" + key, self.__mercurialDefaults[key]) + "Mercurial/" + key, cls.MercurialDefaults[key]) - def setPreferences(self, key, value): + @classmethod + def setPreferences(cls, key, value): """ - Public method to store the various settings. + Class method to store the various settings. @param key the key of the setting to be set @param value the value to be set @@ -279,11 +314,11 @@ """ args = [] if self.getPreferences("Encoding") != \ - self.__mercurialDefaults["Encoding"]: + self.MercurialDefaults["Encoding"]: args.append("--encoding") args.append(self.getPreferences("Encoding")) if self.getPreferences("EncodingMode") != \ - self.__mercurialDefaults["EncodingMode"]: + self.MercurialDefaults["EncodingMode"]: args.append("--encodingmode") args.append(self.getPreferences("EncodingMode")) if self.getPreferences("ConsiderHidden"):
--- a/Plugins/VcsPlugins/vcsMercurial/Config.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/Config.py Fri Mar 03 18:34:21 2017 +0100 @@ -10,9 +10,9 @@ from __future__ import unicode_literals # Available protocols fpr the repository URL -ConfigHgProtocols = [ - 'file://', - 'http://', - 'https://', - 'ssh://', -] +ConfigHgSchemes = ( + 'file', + 'http', + 'https', + 'ssh', +)
--- a/Plugins/VcsPlugins/vcsMercurial/FetchExtension/HgFetchDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/FetchExtension/HgFetchDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -14,27 +14,33 @@ from .Ui_HgFetchDialog import Ui_HgFetchDialog -import Preferences - class HgFetchDialog(QDialog, Ui_HgFetchDialog): """ Class implementing a dialog to enter data to be used for a fetch operation. """ - def __init__(self, parent=None): + def __init__(self, vcs, parent=None): """ Constructor - @param parent reference to the parent widget (QWidget) + @param vcs reference to the Mercurial vcs object + @type Hg + @param parent reference to the parent widget + @type QWidget """ super(HgFetchDialog, self).__init__(parent) self.setupUi(self) - self.recentCommitMessages = Preferences.toList( - Preferences.Prefs.settings.value('Mercurial/Commits')) + self.__vcs = vcs + + commitMessages = self.__vcs.getPlugin().getPreferences('Commits') self.recentComboBox.clear() self.recentComboBox.addItem("") - self.recentComboBox.addItems(self.recentCommitMessages) + for message in commitMessages: + abbrMsg = message[:60] + if len(message) > 60: + abbrMsg += "..." + self.recentComboBox.addItem(abbrMsg, message) @pyqtSlot(str) def on_recentComboBox_activated(self, txt): @@ -44,7 +50,7 @@ @param txt text of the selected entry (string) """ if txt: - self.messageEdit.setPlainText(txt) + self.messageEdit.setPlainText(self.recentComboBox.currentData()) def getData(self): """ @@ -55,14 +61,13 @@ """ msg = self.messageEdit.toPlainText() if msg: - if msg in self.recentCommitMessages: - self.recentCommitMessages.remove(msg) - self.recentCommitMessages.insert(0, msg) - no = int(Preferences.Prefs.settings.value( - 'Mercurial/CommitMessages', 20)) - del self.recentCommitMessages[no:] - Preferences.Prefs.settings.setValue( - 'Mercurial/Commits', - self.recentCommitMessages) + commitMessages = self.__vcs.getPlugin().getPreferences('Commits') + if msg in commitMessages: + commitMessages.remove(msg) + commitMessages.insert(0, msg) + no = self.__vcs.getPlugin().getPreferences("CommitMessages") + del commitMessages[no:] + self.__vcs.getPlugin().setPreferences( + 'Commits', commitMessages) return msg, self.switchCheckBox.isChecked()
--- a/Plugins/VcsPlugins/vcsMercurial/FetchExtension/fetch.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/FetchExtension/fetch.py Fri Mar 03 18:34:21 2017 +0100 @@ -28,13 +28,20 @@ @param vcs reference to the Mercurial vcs object """ super(Fetch, self).__init__(vcs) + + self.__vcs = vcs - def hgFetch(self, name): + def hgFetch(self, name, revisions=None): """ Public method to fetch changes from a remote repository. - @param name file/directory name (string) - @return flag indicating that the project should be reread (boolean) + @param name directory name of the project to be fetched to + @type str + @param revisions list of revisions to be pulled + @type list of str + @return flag indicating, that the update contained an add + or delete + @rtype bool """ # find the root of the repo repodir = self.vcs.splitPath(name)[0] @@ -45,7 +52,7 @@ from .HgFetchDialog import HgFetchDialog res = False - dlg = HgFetchDialog() + dlg = HgFetchDialog(self.__vcs) if dlg.exec_() == QDialog.Accepted: message, switchParent = dlg.getData() @@ -56,6 +63,10 @@ if switchParent: args.append("--switch-parent") args.append("-v") + if revisions: + for rev in revisions: + args.append("--rev") + args.append(rev) dia = HgDialog( self.tr('Fetching from a remote Mercurial repository'),
--- a/Plugins/VcsPlugins/vcsMercurial/GpgExtension/gpg.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/GpgExtension/gpg.py Fri Mar 03 18:34:21 2017 +0100 @@ -83,11 +83,14 @@ if res: dia.exec_() - def hgGpgSign(self, path): + def hgGpgSign(self, path, revisions=None): """ Public method used to list the available bookmarks. - @param path directory name of the project (string) + @param path directory name of the project + @type str + @param revisions list containing the revisions to be signed + @type list of str """ # find the root of the repo repodir = self.vcs.splitPath(path)[0] @@ -96,30 +99,44 @@ if os.path.splitdrive(repodir)[1] == os.sep: return - from .HgGpgSignDialog import HgGpgSignDialog - dlg = HgGpgSignDialog(self.vcs.hgGetTagsList(repodir), - self.vcs.hgGetBranchesList(repodir), - self.vcs.hgGetBookmarksList(repodir)) - if dlg.exec_() == QDialog.Accepted: - revision, noCommit, message, keyId, local, force = dlg.getData() - - args = self.vcs.initCommand("sign") - if noCommit: - args.append("--no-commit") - if message: - args.append("--message") - args.append(message) - if keyId: - args.append("--key") - args.append(keyId) - if local: - args.append("--local") - if force: - args.append("--force") - if revision: - args.append(revision) - - dia = HgDialog(self.tr('Sign Revision'), self.vcs) - res = dia.startProcess(args, repodir) - if res: - dia.exec_() + if revisions is None: + from .HgGpgSignDialog import HgGpgSignDialog + dlg = HgGpgSignDialog(self.vcs.hgGetTagsList(repodir), + self.vcs.hgGetBranchesList(repodir), + self.vcs.hgGetBookmarksList(repodir)) + if dlg.exec_() == QDialog.Accepted: + revision, noCommit, message, keyId, local, force = \ + dlg.getData() + if revision: + revisions = [revision] + else: + revisions = [] + else: + return + else: + noCommit = False + message = "" + keyId = "" + local = False + force = False + + args = self.vcs.initCommand("sign") + if noCommit: + args.append("--no-commit") + if message: + args.append("--message") + args.append(message) + if keyId: + args.append("--key") + args.append(keyId) + if local: + args.append("--local") + if force: + args.append("--force") + for rev in revisions: + args.append(rev) + + dia = HgDialog(self.tr('Sign Revision'), self.vcs) + res = dia.startProcess(args, repodir) + if res: + dia.exec_()
--- a/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -148,7 +148,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>input</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -165,7 +165,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>input</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgCommandDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgCommandDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -94,7 +94,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>commandCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -68,6 +68,8 @@ self.authorComboBox.addItems(commitAuthors) self.dateTimeEdit.setDateTime(QDateTime.currentDateTime()) + + self.logEdit.setFocus(Qt.OtherFocusReason) def on_buttonBox_clicked(self, button): """
--- a/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -166,7 +166,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>logEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -87,7 +87,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsMercurial/HgDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -137,7 +137,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>resultbox</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -17,18 +17,24 @@ import re import collections -from PyQt5.QtCore import pyqtSlot, Qt, QDate, QProcess, QTimer, QRegExp, \ - QSize, QPoint, QUrl -from PyQt5.QtGui import QCursor, QColor, QPixmap, QPainter, QPen, QBrush, QIcon +from PyQt5.QtCore import pyqtSlot, qVersion, Qt, QDate, QProcess, QTimer, \ + QRegExp, QSize, QPoint, QFileInfo +from PyQt5.QtGui import QCursor, QColor, QPixmap, QPainter, QPen, QBrush, \ + QIcon, QTextCursor from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QHeaderView, \ - QTreeWidgetItem, QApplication, QLineEdit, QMenu, QInputDialog + QTreeWidgetItem, QApplication, QLineEdit, QMenu, QInputDialog, QToolTip from E5Gui.E5Application import e5App -from E5Gui import E5MessageBox +from E5Gui import E5MessageBox, E5FileDialog from .Ui_HgLogBrowserDialog import Ui_HgLogBrowserDialog +from .HgDiffHighlighter import HgDiffHighlighter +from .HgDiffGenerator import HgDiffGenerator + import UI.PixmapCache +import Preferences +import Utilities COLORNAMES = ["blue", "darkgreen", "red", "green", "darkblue", "purple", "cyan", "olive", "magenta", "darkred", "darkmagenta", @@ -67,7 +73,15 @@ super(HgLogBrowserDialog, self).__init__(parent) self.setupUi(self) - self.__position = QPoint() + windowFlags = self.windowFlags() + windowFlags |= Qt.WindowContextHelpButtonHint + self.setWindowFlags(windowFlags) + + self.mainSplitter.setSizes([300, 400]) + self.mainSplitter.setStretchFactor(0, 1) + self.mainSplitter.setStretchFactor(1, 2) + self.diffSplitter.setStretchFactor(0, 1) + self.diffSplitter.setStretchFactor(1, 2) if mode == "log": self.setWindowTitle(self.tr("Mercurial Log")) @@ -103,6 +117,14 @@ self.fieldCombo.addItem(self.tr("Message"), "message") self.fieldCombo.addItem(self.tr("File"), "file") + font = Preferences.getEditorOtherFonts("MonospacedFont") + self.diffEdit.setFontFamily(font.family()) + self.diffEdit.setFontPointSize(font.pointSize()) + + self.diffHighlighter = HgDiffHighlighter(self.diffEdit.document()) + self.__diffGenerator = HgDiffGenerator(vcs, self) + self.__diffGenerator.finished.connect(self.__generatorFinished) + self.vcs = vcs if mode in ("log", "incoming", "outgoing"): self.commandMode = mode @@ -118,11 +140,16 @@ "<tr><td><b>Date</b></td><td>{1}</td></tr>" "<tr><td><b>Author</b></td><td>{2}</td></tr>" "<tr><td><b>Branch</b></td><td>{3}</td></tr>" - "<tr><td><b>Parents</b></td><td>{4}</td></tr>" - "<tr><td><b>Children</b></td><td>{5}</td></tr>" - "{6}" + "{4}" + "<tr><td><b>Message</b></td><td>{5}</td></tr>" "</table>" ) + self.__parentsTemplate = self.tr( + "<tr><td><b>Parents</b></td><td>{0}</td></tr>" + ) + self.__childrenTemplate = self.tr( + "<tr><td><b>Children</b></td><td>{0}</td></tr>" + ) self.__tagsTemplate = self.tr( "<tr><td><b>Tags</b></td><td>{0}</td></tr>" ) @@ -136,7 +163,7 @@ self.__bundle = "" self.__filename = "" self.__isFile = False - self.__currentRevision = "" + self.__selectedRevisions = [] self.intercept = False self.__initData() @@ -147,12 +174,16 @@ self.toDate.setDisplayFormat("yyyy-MM-dd") self.__resetUI() + # roles used in the log tree self.__messageRole = Qt.UserRole self.__changesRole = Qt.UserRole + 1 self.__edgesRole = Qt.UserRole + 2 self.__parentsRole = Qt.UserRole + 3 self.__latestTagRole = Qt.UserRole + 4 + # roles used in the file tree + self.__diffFileLineRole = Qt.UserRole + if self.__hgClient: self.process = None else: @@ -211,12 +242,24 @@ Private method to initialize the actions menu. """ self.__actionsMenu = QMenu() + self.__actionsMenu.setTearOffEnabled(True) + if qVersion() >= "5.1.0": + self.__actionsMenu.setToolTipsVisible(True) + else: + self.__actionsMenu.hovered.connect(self.__actionsMenuHovered) + self.__graftAct = self.__actionsMenu.addAction( UI.PixmapCache.getIcon("vcsGraft.png"), self.tr("Copy Changesets"), self.__graftActTriggered) self.__graftAct.setToolTip(self.tr( "Copy the selected changesets to the current branch")) + self.__mergeAct = self.__actionsMenu.addAction( + UI.PixmapCache.getIcon("vcsMerge.png"), + self.tr("Merge with Changeset"), self.__mergeActTriggered) + self.__mergeAct.setToolTip(self.tr( + "Merge the working directory with the selected changeset")) + self.__phaseAct = self.__actionsMenu.addAction( self.tr("Change Phase"), self.__phaseActTriggered) self.__phaseAct.setToolTip(self.tr( @@ -282,16 +325,70 @@ self.__actionsMenu.addSeparator() + self.__bundleAct = self.__actionsMenu.addAction( + UI.PixmapCache.getIcon("vcsCreateChangegroup.png"), + self.tr("Create Changegroup"), self.__bundleActTriggered) + self.__bundleAct.setToolTip(self.tr( + "Create a changegroup file containing the selected changesets")) + self.__bundleAct.setWhatsThis(self.tr( + """<b>Create Changegroup</b>\n<p>This creates a changegroup""" + """ file containing the selected revisions. If no revisions""" + """ are selected, all changesets will be bundled. If one""" + """ revision is selected, it will be interpreted as the base""" + """ revision. Otherwise the lowest revision will be used as""" + """ the base revision and all other revision will be bundled.""" + """ If the dialog is showing outgoing changesets, all""" + """ selected changesets will be bundled.</p>""")) + self.__unbundleAct = self.__actionsMenu.addAction( + UI.PixmapCache.getIcon("vcsApplyChangegroup.png"), + self.tr("Apply Changegroup"), self.__unbundleActTriggered) + self.__unbundleAct.setToolTip(self.tr( + "Apply the currently viewed changegroup file")) + + self.__actionsMenu.addSeparator() + + self.__gpgSignAct = self.__actionsMenu.addAction( + UI.PixmapCache.getIcon("changesetSign.png"), + self.tr("Sign Revisions"), self.__gpgSignActTriggered) + self.__gpgSignAct.setToolTip(self.tr( + "Add a signature for the selected revisions")) + self.__gpgVerifyAct = self.__actionsMenu.addAction( + UI.PixmapCache.getIcon("changesetSignVerify.png"), + self.tr("Verify Signatures"), self.__gpgVerifyActTriggered) + self.__gpgVerifyAct.setToolTip(self.tr( + "Verify all signatures there may be for the selected revision")) + + self.__actionsMenu.addSeparator() + self.__stripAct = self.__actionsMenu.addAction( UI.PixmapCache.getIcon("fileDelete.png"), self.tr("Strip Changesets"), self.__stripActTriggered) self.__stripAct.setToolTip(self.tr( "Strip changesets from a repository")) + self.__actionsMenu.addSeparator() + + self.__selectAllAct = self.__actionsMenu.addAction( + self.tr("Select All Entries"), self.__selectAllActTriggered) + self.__unselectAllAct = self.__actionsMenu.addAction( + self.tr("Deselect All Entries"), + lambda: self.__selectAllActTriggered(False)) + self.actionsButton.setIcon( UI.PixmapCache.getIcon("actionsToolButton.png")) self.actionsButton.setMenu(self.__actionsMenu) + def __actionsMenuHovered(self, action): + """ + Private slot to show the tooltip for an action menu entry. + + @param action action to show tooltip for + @type QAction + """ + QToolTip.showText( + QCursor.pos(), action.toolTip(), + self.__actionsMenu, self.__actionsMenu.actionGeometry(action)) + def __initData(self): """ Private method to (re-)initialize some data. @@ -334,7 +431,15 @@ QTimer.singleShot(2000, self.process.kill) self.process.waitForFinished(3000) - self.__position = self.pos() + self.vcs.getPlugin().setPreferences( + "LogBrowserGeometry", self.saveGeometry()) + self.vcs.getPlugin().setPreferences( + "LogBrowserSplitterStates", [ + self.mainSplitter.saveState(), + self.detailsSplitter.saveState(), + self.diffSplitter.saveState(), + ] + ) e.accept() @@ -342,11 +447,34 @@ """ Public slot to show the dialog. """ - if not self.__position.isNull(): - self.move(self.__position) + self.__reloadGeometry() + self.__restoreSplitterStates() self.__resetUI() super(HgLogBrowserDialog, self).show() + + def __reloadGeometry(self): + """ + Private method to restore the geometry. + """ + geom = self.vcs.getPlugin().getPreferences("LogBrowserGeometry") + if geom.isEmpty(): + s = QSize(1000, 800) + self.resize(s) + else: + self.restoreGeometry(geom) + + def __restoreSplitterStates(self): + """ + Private method to restore the state of the various splitters. + """ + states = self.vcs.getPlugin().getPreferences( + "LogBrowserSplitterStates") + if len(states) == 3: + # we have three splitters + self.mainSplitter.restoreState(states[0]) + self.detailsSplitter.restoreState(states[1]) + self.diffSplitter.restoreState(states[2]) def __resetUI(self): """ @@ -606,12 +734,12 @@ "The hg process did not finish within 30s.") else: errMsg = self.tr("Could not start the hg executable.") - - if errMsg: - E5MessageBox.critical( - self, - self.tr("Mercurial Error"), - errMsg) + + if errMsg: + E5MessageBox.critical( + self, + self.tr("Mercurial Error"), + errMsg) if output: parents = [int(p) for p in output.strip().splitlines()] @@ -746,10 +874,15 @@ res = ("", "") if output: for line in output.splitlines(): - name, rev = line.strip().rsplit(None, 1) - if name == tag: - res = tuple(rev.split(":", 1)) - break + if line.strip(): + try: + name, rev = line.strip().rsplit(None, 1) + if name == tag: + res = tuple(rev.split(":", 1)) + break + except ValueError: + # ignore silently + pass return res @@ -850,23 +983,6 @@ return itm - def __generateFileItem(self, action, path, copyfrom): - """ - Private method to generate a changed files tree entry. - - @param action indicator for the change action ("A", "D" or "M") - @param path path of the file in the repository (string) - @param copyfrom path the file was copied from (string) - @return reference to the generated item (QTreeWidgetItem) - """ - itm = QTreeWidgetItem(self.filesTree, [ - self.flags[action], - path, - copyfrom, - ]) - - return itm - def __getLogEntries(self, startRev=None, noEntries=0): """ Private method to retrieve log entries from the repository. @@ -995,8 +1111,7 @@ self.__bundle = bundle self.__isFile = isFile - self.sbsCheckBox.setEnabled(isFile) - self.sbsCheckBox.setVisible(isFile) + self.sbsSelectLabel.clear() self.errorGroup.hide() QApplication.processEvents() @@ -1187,7 +1302,16 @@ self.__resizeColumnsLog() if self.__started: - self.logTree.setCurrentItem(self.logTree.topLevelItem(0)) + if self.__selectedRevisions: + foundItems = self.logTree.findItems( + self.__selectedRevisions[0], Qt.MatchExactly, + self.RevisionColumn) + if foundItems: + self.logTree.setCurrentItem(foundItems[0]) + else: + self.logTree.setCurrentItem(self.logTree.topLevelItem(0)) + else: + self.logTree.setCurrentItem(self.logTree.topLevelItem(0)) self.__started = False if self.commandMode in ("incoming", "outgoing"): @@ -1221,16 +1345,16 @@ self.__filterLogsEnabled = True if self.__actionMode() == "filter": self.__filterLogs() - self.__updateDiffButtons() self.__updateToolMenuActions() # restore current item - if self.__currentRevision: - items = self.logTree.findItems( - self.__currentRevision, Qt.MatchExactly, self.RevisionColumn) - if items: - self.logTree.setCurrentItem(items[0]) - self.__currentRevision = "" + if self.__selectedRevisions: + for revision in self.__selectedRevisions: + items = self.logTree.findItems( + revision, Qt.MatchExactly, self.RevisionColumn) + if items: + items[0].setSelected(True) + self.__selectedRevisions = [] def __readStdout(self): """ @@ -1272,24 +1396,6 @@ self.inputGroup.setEnabled(True) self.inputGroup.show() - def __diffRevisions(self, rev1, rev2): - """ - Private method to do a diff of two revisions. - - @param rev1 first revision number (integer) - @param rev2 second revision number (integer) - """ - if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked(): - self.vcs.hgSbsDiff(self.__filename, - revisions=(str(rev1), str(rev2))) - else: - if self.diff is None: - from .HgDiffDialog import HgDiffDialog - self.diff = HgDiffDialog(self.vcs) - self.diff.show() - self.diff.raise_() - self.diff.start(self.__filename, [rev1, rev2], self.__bundle) - def on_buttonBox_clicked(self, button): """ Private slot called by a button of the button box clicked. @@ -1307,32 +1413,38 @@ elif button == self.refreshButton: self.on_refreshButton_clicked() - def __updateDiffButtons(self): + def __updateSbsSelectLabel(self): """ Private slot to update the enabled status of the diff buttons. """ - selectionLength = len(self.logTree.selectedItems()) - if selectionLength <= 1: - current = self.logTree.currentItem() - if current is None: - self.diffP1Button.setEnabled(False) - self.diffP2Button.setEnabled(False) - else: - parents = current.data(0, self.__parentsRole) - self.diffP1Button.setEnabled(len(parents) > 0) - self.diffP2Button.setEnabled(len(parents) > 1) - - self.diffRevisionsButton.setEnabled(False) - elif selectionLength == 2: - self.diffP1Button.setEnabled(False) - self.diffP2Button.setEnabled(False) - - self.diffRevisionsButton.setEnabled(True) - else: - self.diffP1Button.setEnabled(False) - self.diffP2Button.setEnabled(False) - - self.diffRevisionsButton.setEnabled(False) + self.sbsSelectLabel.clear() + if self.__isFile: + selectedItems = self.logTree.selectedItems() + if len(selectedItems) == 1: + currentItem = selectedItems[0] + rev2 = currentItem.text(self.RevisionColumn).split(":", 1)[0]\ + .strip() + parents = currentItem.data(0, self.__parentsRole) + if parents: + parentLinks = [] + for index in range(len(parents)): + parentLinks.append( + '<a href="sbsdiff:{0}_{1}"> {2} </a>' + .format(parents[index], rev2, index + 1)) + self.sbsSelectLabel.setText( + self.tr('Side-by-Side Diff to Parent {0}').format( + " ".join(parentLinks))) + elif len(selectedItems) == 2: + rev1 = int(selectedItems[0].text(self.RevisionColumn) + .split(":", 1)[0]) + rev2 = int(selectedItems[1].text(self.RevisionColumn) + .split(":", 1)[0]) + if rev1 > rev2: + # Swap the entries, so that rev1 < rev2 + rev1, rev2 = rev2, rev1 + self.sbsSelectLabel.setText(self.tr( + '<a href="sbsdiff:{0}_{1}">Side-by-Side Compare</a>') + .format(rev1, rev2)) def __updateToolMenuActions(self): """ @@ -1340,52 +1452,54 @@ the tool menu button. """ if self.initialCommandMode == "log" and self.projectMode: - if self.__phaseAct is not None: - # step 1: count entries with changeable phases - secret = 0 - draft = 0 - public = 0 - for itm in self.logTree.selectedItems(): - phase = itm.text(self.PhaseColumn) - if phase == self.phases["draft"]: - draft += 1 - elif phase == self.phases["secret"]: - secret += 1 - else: - public += 1 - - # step 2: set the status of the phase button - if public == 0 and \ - ((secret > 0 and draft == 0) or - (secret == 0 and draft > 0)): - self.__phaseAct.setEnabled(True) + # do the phase action + # step 1: count entries with changeable phases + secret = 0 + draft = 0 + public = 0 + for itm in self.logTree.selectedItems(): + phase = itm.text(self.PhaseColumn) + if phase == self.phases["draft"]: + draft += 1 + elif phase == self.phases["secret"]: + secret += 1 else: - self.__phaseAct.setEnabled(False) + public += 1 + + # step 2: set the status of the phase action + if public == 0 and \ + ((secret > 0 and draft == 0) or + (secret == 0 and draft > 0)): + self.__phaseAct.setEnabled(True) + else: + self.__phaseAct.setEnabled(False) - if self.__graftAct is not None: - # step 1: count selected entries not belonging to the - # current branch - otherBranches = 0 - for itm in self.logTree.selectedItems(): - branch = itm.text(self.BranchColumn) - if branch != self.__projectBranch: - otherBranches += 1 - - # step 2: set the status of the graft action - self.__graftAct.setEnabled(otherBranches > 0) + # do the graft action + # step 1: count selected entries not belonging to the + # current branch + otherBranches = 0 + for itm in self.logTree.selectedItems(): + branch = itm.text(self.BranchColumn) + if branch != self.__projectBranch: + otherBranches += 1 - self.__tagAct.setEnabled(len(self.logTree.selectedItems()) == 1) - self.__switchAct.setEnabled(len(self.logTree.selectedItems()) == 1) - self.__bookmarkAct.setEnabled( - len(self.logTree.selectedItems()) == 1) - self.__bookmarkMoveAct.setEnabled( - len(self.logTree.selectedItems()) == 1) + # step 2: set the status of the graft action + self.__graftAct.setEnabled(otherBranches > 0) + selectedItemsCount = len(self.logTree.selectedItems()) + self.__mergeAct.setEnabled(selectedItemsCount == 1) + self.__tagAct.setEnabled(selectedItemsCount == 1) + self.__switchAct.setEnabled(selectedItemsCount == 1) + self.__bookmarkAct.setEnabled(selectedItemsCount == 1) + self.__bookmarkMoveAct.setEnabled(selectedItemsCount == 1) + + self.__pullAct.setText(self.tr("Pull Changes")) + self.__fetchAct.setText(self.tr("Fetch Changes")) if self.vcs.canPull(): self.__pullAct.setEnabled(True) self.__lfPullAct.setEnabled( self.vcs.isExtensionActive("largefiles") and - bool(self.logTree.selectedItems())) + selectedItemsCount > 0) self.__fetchAct.setEnabled( self.vcs.isExtensionActive("fetch")) else: @@ -1395,7 +1509,7 @@ if self.vcs.canPush(): self.__pushAct.setEnabled( - len(self.logTree.selectedItems()) == 1 and + selectedItemsCount == 1 and self.logTree.selectedItems()[0].text(self.PhaseColumn) == self.phases["draft"]) self.__pushAllAct.setEnabled(True) @@ -1405,42 +1519,136 @@ self.__stripAct.setEnabled( self.vcs.isExtensionActive("strip") and - len(self.logTree.selectedItems()) == 1) + selectedItemsCount == 1) + + self.__bundleAct.setEnabled(self.logTree.topLevelItemCount() > 0) + self.__unbundleAct.setEnabled(False) + + self.__gpgSignAct.setEnabled( + self.vcs.isExtensionActive("gpg") and + selectedItemsCount > 0) + self.__gpgVerifyAct.setEnabled( + self.vcs.isExtensionActive("gpg") and + selectedItemsCount == 1) self.actionsButton.setEnabled(True) + + elif self.initialCommandMode == "incoming" and self.projectMode: + for act in [self.__phaseAct, self.__graftAct, self.__mergeAct, + self.__tagAct, self.__switchAct, self.__bookmarkAct, + self.__bookmarkMoveAct, self.__pushAct, + self.__pushAllAct, self.__stripAct, self.__bundleAct, + self.__gpgSignAct, self.__gpgVerifyAct]: + act.setEnabled(False) + + self.__pullAct.setText(self.tr("Pull Selected Changes")) + self.__fetchAct.setText(self.tr("Fetch Selected Changes")) + if self.vcs.canPull(): + # step 1: determine number of selected draft changesets + # i.e. those that can be pulled + selectedDraftItemsCount = 0 + for itm in self.logTree.selectedItems(): + phase = itm.text(self.PhaseColumn) + if phase == self.phases["draft"]: + selectedDraftItemsCount += 1 + self.__pullAct.setEnabled(selectedDraftItemsCount > 0) + self.__lfPullAct.setEnabled( + self.vcs.isExtensionActive("largefiles") and + selectedItemsCount > 0) + self.__fetchAct.setEnabled( + self.vcs.isExtensionActive("fetch") and + selectedDraftItemsCount > 0) + else: + self.__pullAct.setEnabled(False) + self.__lfPullAct.setEnabled(False) + self.__fetchAct.setEnabled(False) + + self.__unbundleAct.setEnabled(bool(self.__bundle)) + + self.actionsButton.setEnabled(True) + + elif self.initialCommandMode == "outgoing" and self.projectMode: + for act in [self.__phaseAct, self.__graftAct, self.__mergeAct, + self.__tagAct, self.__switchAct, self.__bookmarkAct, + self.__bookmarkMoveAct, self.__pullAct, + self.__lfPullAct, self.__fetchAct, self.__stripAct, + self.__gpgSignAct, self.__gpgVerifyAct, + self.__unbundleAct]: + act.setEnabled(False) + + selectedItemsCount = len(self.logTree.selectedItems()) + if self.vcs.canPush(): + self.__pushAct.setEnabled( + selectedItemsCount == 1 and + self.logTree.selectedItems()[0].text(self.PhaseColumn) == + self.phases["draft"]) + self.__pushAllAct.setEnabled(True) + else: + self.__pushAct.setEnabled(False) + self.__pushAllAct.setEnabled(False) + + self.__bundleAct.setEnabled(selectedItemsCount > 0) + else: self.actionsButton.setEnabled(False) - def __updateGui(self, itm): + def __updateDetailsAndFiles(self): """ - Private slot to update GUI elements except tool menu actions. - - @param itm reference to the item the update should be based on - (QTreeWidgetItem) + Private slot to update the details and file changes panes. """ self.detailsEdit.clear() - self.messageEdit.clear() self.filesTree.clear() + self.__diffUpdatesFiles = False + selectedItems = self.logTree.selectedItems() + if len(selectedItems) == 1: + self.detailsEdit.setHtml( + self.__generateDetailsTableText(selectedItems[0])) + self.__updateFilesTree(self.filesTree, selectedItems[0]) + self.__resizeColumnsFiles() + self.__resortFiles() + elif len(selectedItems) == 2: + self.__diffUpdatesFiles = True + index1 = self.logTree.indexOfTopLevelItem(selectedItems[0]) + index2 = self.logTree.indexOfTopLevelItem(selectedItems[1]) + if index1 > index2: + # Swap the entries + selectedItems[0], selectedItems[1] = \ + selectedItems[1], selectedItems[0] + html = "{0}<hr/>{1}".format( + self.__generateDetailsTableText(selectedItems[0]), + self.__generateDetailsTableText(selectedItems[1]), + ) + self.detailsEdit.setHtml(html) + # self.filesTree is updated by the diff + + def __generateDetailsTableText(self, itm): + """ + Private method to generate an HTML table with the details of the given + changeset. + + @param itm reference to the item the table should be based on + @type QTreeWidgetItem + @return HTML table containing details + @rtype str + """ if itm is not None: if itm.text(self.TagsColumn): tagsStr = self.__tagsTemplate.format(itm.text(self.TagsColumn)) else: tagsStr = "" + if itm.text(self.BookmarksColumn): bookmarksStr = self.__bookmarksTemplate.format( itm.text(self.BookmarksColumn)) else: bookmarksStr = "" - if itm.data(0, self.__latestTagRole): + if self.projectMode and itm.data(0, self.__latestTagRole): latestTagLinks = [] for tag in itm.data(0, self.__latestTagRole): - url = QUrl() - url.setScheme("rev") - url.setPath(self.__getRevisionOfTag(tag)[0]) - latestTagLinks.append('<a href="{0}">{1}</a>'.format( - url.toString(), tag)) + latestTagLinks.append('<a href="rev:{0}">{1}</a>'.format( + self.__getRevisionOfTag(tag)[0], tag)) latestTagStr = self.__latestTagTemplate.format( ", ".join(latestTagLinks)) else: @@ -1448,43 +1656,64 @@ rev = int(itm.text(self.RevisionColumn).split(":", 1)[0]) - parentLinks = [] - for parent in [str(x) for x in itm.data(0, self.__parentsRole)]: - url = QUrl() - url.setScheme("rev") - url.setPath(parent) - parentLinks.append('<a href="{0}">{1}</a>'.format( - url.toString(), parent)) + if itm.data(0, self.__parentsRole): + parentLinks = [] + for parent in [str(x) for x in + itm.data(0, self.__parentsRole)]: + parentLinks.append( + '<a href="rev:{0}">{0}</a>'.format(parent)) + parentsStr = self.__parentsTemplate.format( + ", ".join(parentLinks)) + else: + parentsStr = "" - childLinks = [] - for child in [str(x) for x in self.__childrenInfo[rev]]: - url = QUrl() - url.setScheme("rev") - url.setPath(child) - childLinks.append('<a href="{0}">{1}</a>'.format( - url.toString(), child)) + if self.__childrenInfo[rev]: + childLinks = [] + for child in [str(x) for x in self.__childrenInfo[rev]]: + childLinks.append( + '<a href="rev:{0}">{0}</a>'.format(child)) + childrenStr = self.__childrenTemplate.format( + ", ".join(childLinks)) + else: + childrenStr = "" - self.detailsEdit.setHtml(self.__detailsTemplate.format( + messageStr = "<br />\n".join([ + line.strip() for line in itm.data(0, self.__messageRole) + ]) + + html = self.__detailsTemplate.format( itm.text(self.RevisionColumn), itm.text(self.DateColumn), itm.text(self.AuthorColumn), itm.text(self.BranchColumn).replace( self.ClosedIndicator, ""), - ", ".join(parentLinks), - ", ".join(childLinks), - tagsStr + latestTagStr + bookmarksStr, - )) - - for line in itm.data(0, self.__messageRole): - self.messageEdit.append(line.strip()) - + parentsStr + childrenStr + tagsStr + latestTagStr + + bookmarksStr, + messageStr, + ) + else: + html = "" + + return html + + def __updateFilesTree(self, parent, itm): + """ + Private method to update the files tree with changes of the given item. + + @param parent parent for the items to be added + @type QTreeWidget or QTreeWidgetItem + @param itm reference to the item the update should be based on + @type QTreeWidgetItem + """ + if itm is not None: changes = itm.data(0, self.__changesRole) if len(changes) > 0: for change in changes: - self.__generateFileItem( - change["action"], change["path"], change["copyfrom"]) - self.__resizeColumnsFiles() - self.__resortFiles() + QTreeWidgetItem(parent, [ + self.flags[change["action"]], + change["path"].strip(), + change["copyfrom"].strip(), + ]) @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) def on_logTree_currentItemChanged(self, current, previous): @@ -1494,8 +1723,6 @@ @param current reference to the new current item (QTreeWidgetItem) @param previous reference to the old current item (QTreeWidgetItem) """ - self.__updateGui(current) - self.__updateDiffButtons() self.__updateToolMenuActions() # Highlight the current entry using a bold font @@ -1505,19 +1732,24 @@ # set the state of the up and down buttons self.upButton.setEnabled( - current is not None and + current is not None and self.logTree.indexOfTopLevelItem(current) > 0) self.downButton.setEnabled( current is not None and - int(current.text(self.RevisionColumn).split(":")[0]) > 0) + int(current.text(self.RevisionColumn).split(":")[0]) > 0 and + (self.logTree.indexOfTopLevelItem(current) < + self.logTree.topLevelItemCount() - 1 or + self.nextButton.isEnabled())) @pyqtSlot() def on_logTree_itemSelectionChanged(self): """ Private slot called, when the selection has changed. """ - self.__updateDiffButtons() + self.__updateDetailsAndFiles() + self.__updateSbsSelectLabel() self.__updateToolMenuActions() + self.__generateDiffs() @pyqtSlot() def on_upButton_clicked(self): @@ -1538,71 +1770,18 @@ self.logTree.setCurrentItem(itm) else: # load the next bunch and try again - self.__addFinishCallback(self.on_downButton_clicked) - self.on_nextButton_clicked() + if self.nextButton.isEnabled(): + self.__addFinishCallback(self.on_downButton_clicked) + self.on_nextButton_clicked() @pyqtSlot() def on_nextButton_clicked(self): """ Private slot to handle the Next button. """ - if self.__lastRev > 0: + if self.__lastRev > 0 and self.nextButton.isEnabled(): self.__getLogEntries(startRev=self.__lastRev - 1) - @pyqtSlot() - def on_diffP1Button_clicked(self): - """ - Private slot to handle the Diff to Parent 1 button. - """ - if len(self.logTree.selectedItems()): - itm = self.logTree.selectedItems()[0] - else: - itm = self.logTree.currentItem() - if itm is None: - self.diffP1Button.setEnabled(False) - return - rev2 = int(itm.text(self.RevisionColumn).split(":")[0]) - - rev1 = itm.data(0, self.__parentsRole)[0] - if rev1 < 0: - self.diffP1Button.setEnabled(False) - return - - self.__diffRevisions(rev1, rev2) - - @pyqtSlot() - def on_diffP2Button_clicked(self): - """ - Private slot to handle the Diff to Parent 2 button. - """ - if len(self.logTree.selectedItems()): - itm = self.logTree.selectedItems()[0] - else: - itm = self.logTree.currentItem() - if itm is None: - self.diffP2Button.setEnabled(False) - return - rev2 = int(itm.text(self.RevisionColumn).split(":")[0]) - - rev1 = itm.data(0, self.__parentsRole)[1] - if rev1 < 0: - self.diffP2Button.setEnabled(False) - return - - self.__diffRevisions(rev1, rev2) - - @pyqtSlot() - def on_diffRevisionsButton_clicked(self): - """ - Private slot to handle the Compare Revisions button. - """ - items = self.logTree.selectedItems() - - rev2 = int(items[0].text(self.RevisionColumn).split(":")[0]) - rev1 = int(items[1].text(self.RevisionColumn).split(":")[0]) - - self.__diffRevisions(min(rev1, rev2), max(rev1, rev2)) - @pyqtSlot(QDate) def on_fromDate_dateChanged(self, date): """ @@ -1702,7 +1881,6 @@ else: topItem.setHidden(True) if topItem is currentItem: - self.messageEdit.clear() self.filesTree.clear() visibleItemCount -= 1 self.logTree.header().setSectionHidden( @@ -1763,12 +1941,10 @@ self.refreshButton.setEnabled(False) - # save the current items commit ID - itm = self.logTree.currentItem() - if itm is not None: - self.__currentRevision = itm.text(self.RevisionColumn) - else: - self.__currentRevision = "" + # save the selected items commit IDs + self.__selectedRevisions = [] + for item in self.logTree.selectedItems(): + self.__selectedRevisions.append(item.text(self.RevisionColumn)) if self.initialCommandMode in ("incoming", "outgoing"): self.nextButton.setEnabled(False) @@ -2002,8 +2178,24 @@ """ Private slot to fetch changes from a remote repository. """ - shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch( - self.repodir) + shouldReopen = False + refresh = False + + if self.initialCommandMode == "log": + shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch( + self.repodir) + refresh = True + elif self.initialCommandMode == "incoming": + revs = [] + for itm in self.logTree.selectedItems(): + rev = itm.text(self.RevisionColumn).split(":")[1].strip() + phase = itm.text(self.PhaseColumn).strip() + if rev and phase == self.phases["draft"]: + revs.append(rev) + if revs: + shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch( + self.repodir, ) + refresh = True if shouldReopen: res = E5MessageBox.yesNo( None, @@ -2015,14 +2207,31 @@ e5App().getObject("Project").reopenProject() return - self.on_refreshButton_clicked() + if refresh: + self.on_refreshButton_clicked() @pyqtSlot() def __pullActTriggered(self): """ Private slot to pull changes from a remote repository. """ - shouldReopen = self.vcs.hgPull(self.repodir) + shouldReopen = False + refresh = False + + if self.initialCommandMode == "log": + shouldReopen = self.vcs.hgPull(self.repodir) + refresh = True + elif self.initialCommandMode == "incoming": + revs = [] + for itm in self.logTree.selectedItems(): + rev = itm.text(self.RevisionColumn).split(":")[1].strip() + phase = itm.text(self.PhaseColumn).strip() + if rev and phase == self.phases["draft"]: + revs.append(rev) + if revs: + shouldReopen = self.vcs.hgPull(self.repodir, revisions=revs) + refresh = True + if shouldReopen: res = E5MessageBox.yesNo( None, @@ -2034,7 +2243,8 @@ e5App().getObject("Project").reopenProject() return - self.on_refreshButton_clicked() + if refresh: + self.on_refreshButton_clicked() @pyqtSlot() def __pushActTriggered(self): @@ -2078,6 +2288,134 @@ self.on_refreshButton_clicked() + @pyqtSlot() + def __mergeActTriggered(self): + """ + Private slot to merge the working directory with the selected + changeset. + """ + itm = self.logTree.selectedItems()[0] + rev = "rev({0})".format( + itm.text(self.RevisionColumn).strip().split(":", 1)[0]) + self.vcs.vcsMerge(self.repodir, rev=rev) + + @pyqtSlot() + def __bundleActTriggered(self): + """ + Private slot to create a changegroup file. + """ + if self.initialCommandMode == "log": + selectedItems = self.logTree.selectedItems() + if len(selectedItems) == 0: + # all revisions of the local repository will be bundled + bundleData = { + "revs": [], + "base": "", + "all": True, + } + elif len(selectedItems) == 1: + # the selected changeset is the base + rev = selectedItems[0].text(self.RevisionColumn)\ + .split(":", 1)[0].strip() + bundleData = { + "revs": [], + "base": rev, + "all": False, + } + else: + # lowest revision is the base, others will be bundled + revs = [] + for itm in selectedItems: + rev = itm.text(self.RevisionColumn).split(":", 1)[0] + try: + revs.append(int(rev)) + except ValueError: + # ignore silently + pass + baseRev = min(revs) + while baseRev in revs: + revs.remove(baseRev) + + bundleData = { + "revs": [str(rev) for rev in revs], + "base": str(baseRev), + "all": False, + } + elif self.initialCommandMode == "outgoing": + selectedItems = self.logTree.selectedItems() + if len(selectedItems) > 0: + revs = [] + for itm in selectedItems: + rev = itm.text(self.RevisionColumn).split(":", 1)[0] + revs.append(rev.strip()) + + bundleData = { + "revs": revs, + "base": "", + "all": False, + } + + self.vcs.hgBundle(self.repodir, bundleData=bundleData) + + @pyqtSlot() + def __unbundleActTriggered(self): + """ + Private slot to apply the currently previewed bundle file. + """ + if self.initialCommandMode == "incoming" and bool(self.__bundle): + shouldReopen = self.vcs.hgUnbundle(self.repodir, + files=[self.__bundle]) + if shouldReopen: + res = E5MessageBox.yesNo( + None, + self.tr("Apply Changegroup"), + self.tr("""The project should be reread. Do this now?"""), + yesDefault=True) + if res: + e5App().getObject("Project").reopenProject() + return + + self.on_refreshButton_clicked() + + @pyqtSlot() + def __gpgSignActTriggered(self): + """ + Private slot to sign the selected revisions. + """ + revs = [] + for itm in self.logTree.selectedItems(): + rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip() + if rev: + revs.append(rev) + + if revs: + self.vcs.getExtensionObject("gpg").hgGpgSign( + self.repodir, revisions=revs) + + @pyqtSlot() + def __gpgVerifyActTriggered(self): + """ + Private slot to verify the signatures of a selected revisions. + """ + rev = self.logTree.selectedItems()[0].text(self.RevisionColumn)\ + .split(":", 1)[0].strip() + if rev: + self.vcs.getExtensionObject("gpg").hgGpgVerifySignatures( + self.repodir, rev=rev) + + def __selectAllActTriggered(self, select=True): + """ + Private method to select or unselect all log entries. + + @param select flag indicating to select all entries + @type bool + """ + blocked = self.logTree.blockSignals(True) + for row in range(self.logTree.topLevelItemCount()): + self.logTree.topLevelItem(row).setSelected(select) + self.logTree.blockSignals(blocked) + self.on_logTree_itemSelectionChanged() + def __actionMode(self): """ Private method to get the selected action mode. @@ -2194,5 +2532,233 @@ self.logTree.setCurrentItem(itm) else: # load the next batch and try again - self.on_nextButton_clicked() - self.__revisionClicked(url) + if self.nextButton.isEnabled(): + self.__addFinishCallback( + lambda: self.__revisionClicked(url)) + self.on_nextButton_clicked() + + ########################################################################### + ## Diff handling methods below + ########################################################################### + + def __generateDiffs(self, parent=1): + """ + Private slot to generate diff outputs for the selected item. + + @param parent number of parent to diff against + @type int + """ + self.diffEdit.setPlainText(self.tr("Generating differences ...")) + self.diffLabel.setText(self.tr("Differences")) + self.diffSelectLabel.clear() + + selectedItems = self.logTree.selectedItems() + if len(selectedItems) == 1: + currentItem = selectedItems[0] + rev2 = currentItem.text(self.RevisionColumn).split(":", 1)[0] + parents = currentItem.data(0, self.__parentsRole) + if len(parents) >= parent: + self.diffLabel.setText( + self.tr("Differences to Parent {0}").format(parent)) + rev1 = parents[parent - 1] + + self.__diffGenerator.start(self.__filename, [rev1, rev2], + self.__bundle) + + if len(parents) > 1: + if parent == 1: + par1 = " 1 " + else: + par1 = '<a href="diff:1"> 1 </a>' + if parent == 2: + par2 = " 2 " + else: + par2 = '<a href="diff:2"> 2 </a>' + self.diffSelectLabel.setText( + self.tr('Diff to Parent {0}{1}').format(par1, par2)) + elif len(selectedItems) == 2: + rev2 = int(selectedItems[0].text( + self.RevisionColumn).split(":")[0]) + rev1 = int(selectedItems[1].text( + self.RevisionColumn).split(":")[0]) + + self.__diffGenerator.start(self.__filename, + [min(rev1, rev2), max(rev1, rev2)], + self.__bundle) + else: + self.diffEdit.clear() + + def __generatorFinished(self): + """ + Private slot connected to the finished signal of the diff generator. + """ + diff, errors, fileSeparators = self.__diffGenerator.getResult() + + if diff: + self.diffEdit.setPlainText("".join(diff)) + elif errors: + self.diffEdit.setPlainText("".join(errors)) + else: + self.diffEdit.setPlainText(self.tr('There is no difference.')) + + self.saveLabel.setVisible(bool(diff)) + + if self.__diffUpdatesFiles: + for oldFileName, newFileName, lineNumber in fileSeparators: + if oldFileName == newFileName: + fileName = oldFileName + elif oldFileName == "__NULL__": + fileName = newFileName + else: + fileName = oldFileName + item = QTreeWidgetItem(self.filesTree, ["", fileName, ""]) + item.setData(0, self.__diffFileLineRole, lineNumber) + self.__resizeColumnsFiles() + self.__resortFiles() + else: + for oldFileName, newFileName, lineNumber in fileSeparators: + for fileName in (oldFileName, newFileName): + if fileName != "__NULL__": + items = self.filesTree.findItems( + fileName, Qt.MatchExactly, 1) + for item in items: + item.setData(0, self.__diffFileLineRole, + lineNumber) + + tc = self.diffEdit.textCursor() + tc.movePosition(QTextCursor.Start) + self.diffEdit.setTextCursor(tc) + self.diffEdit.ensureCursorVisible() + + @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) + def on_filesTree_currentItemChanged(self, current, previous): + """ + Private slot called, when the current item of the files tree changes. + + @param current reference to the new current item (QTreeWidgetItem) + @param previous reference to the old current item (QTreeWidgetItem) + """ + if current: + para = current.data(0, self.__diffFileLineRole) + if para is not None: + if para == 0: + tc = self.diffEdit.textCursor() + tc.movePosition(QTextCursor.Start) + self.diffEdit.setTextCursor(tc) + self.diffEdit.ensureCursorVisible() + elif para == -1: + tc = self.diffEdit.textCursor() + tc.movePosition(QTextCursor.End) + self.diffEdit.setTextCursor(tc) + self.diffEdit.ensureCursorVisible() + else: + # step 1: move cursor to end + tc = self.diffEdit.textCursor() + tc.movePosition(QTextCursor.End) + self.diffEdit.setTextCursor(tc) + self.diffEdit.ensureCursorVisible() + + # step 2: move cursor to desired line + tc = self.diffEdit.textCursor() + delta = tc.blockNumber() - para + tc.movePosition(QTextCursor.PreviousBlock, + QTextCursor.MoveAnchor, delta) + self.diffEdit.setTextCursor(tc) + self.diffEdit.ensureCursorVisible() + + @pyqtSlot(str) + def on_diffSelectLabel_linkActivated(self, link): + """ + Private slot to handle the selection of a diff target. + + @param link activated link + @type str + """ + if ":" in link: + scheme, parent = link.split(":", 1) + if scheme == "diff": + try: + parent = int(parent) + self.__generateDiffs(parent) + except ValueError: + # ignore silently + pass + + @pyqtSlot(str) + def on_saveLabel_linkActivated(self, link): + """ + Private slot to handle the selection of the save link. + + @param link activated link + @type str + """ + if ":" not in link: + return + + scheme, rest = link.split(":", 1) + if scheme != "save" or rest != "me": + return + + if self.projectMode: + fname = self.vcs.splitPath(self.__filename)[0] + fname += "/{0}.diff".format(os.path.split(fname)[-1]) + else: + dname, fname = self.vcs.splitPath(self.__filename) + if fname != '.': + fname = "{0}.diff".format(self.__filename) + else: + fname = dname + + fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( + self, + self.tr("Save Diff"), + fname, + self.tr("Patch Files (*.diff)"), + None, + E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) + + if not fname: + return # user aborted + + ext = QFileInfo(fname).suffix() + if not ext: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fname += ex + if QFileInfo(fname).exists(): + res = E5MessageBox.yesNo( + self, + self.tr("Save Diff"), + self.tr("<p>The patch file <b>{0}</b> already exists." + " Overwrite it?</p>").format(fname), + icon=E5MessageBox.Warning) + if not res: + return + fname = Utilities.toNativeSeparators(fname) + + eol = e5App().getObject("Project").getEolString() + try: + f = open(fname, "w", encoding="utf-8", newline="") + f.write(eol.join(self.diffEdit.toPlainText().splitlines())) + f.close() + except IOError as why: + E5MessageBox.critical( + self, self.tr('Save Diff'), + self.tr( + '<p>The patch file <b>{0}</b> could not be saved.' + '<br>Reason: {1}</p>') + .format(fname, str(why))) + + @pyqtSlot(str) + def on_sbsSelectLabel_linkActivated(self, link): + """ + Private slot to handle selection of a side-by-side link. + + @param link text of the selected link + @type str + """ + if ":" in link: + scheme, path = link.split(":", 1) + if scheme == "sbsdiff" and "_" in path: + rev1, rev2 = path.split("_", 1) + self.vcs.hgSbsDiff(self.__filename, revisions=(rev1, rev2))
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -13,10 +13,33 @@ <property name="windowTitle"> <string>Mercurial Log</string> </property> - <layout class="QVBoxLayout" name="verticalLayout"> + <layout class="QVBoxLayout" name="verticalLayout_3"> <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> + <widget class="QToolButton" name="actionsButton"> + <property name="toolTip"> + <string>Select action from menu</string> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_5"> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <property name="lineWidth"> + <number>2</number> + </property> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + </widget> + </item> + <item> <widget class="QComboBox" name="modeComboBox"> <property name="toolTip"> <string>Select the mode (find or filter)</string> @@ -144,99 +167,196 @@ </layout> </item> <item> - <widget class="QTreeWidget" name="logTree"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>7</verstretch> - </sizepolicy> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::ExtendedSelection</enum> - </property> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="itemsExpandable"> - <bool>false</bool> - </property> - <property name="allColumnsShowFocus"> - <bool>true</bool> - </property> - <column> - <property name="text"> - <string>Graph</string> - </property> - </column> - <column> - <property name="text"> - <string>Branch</string> - </property> - </column> - <column> - <property name="text"> - <string>Revision</string> - </property> - </column> - <column> - <property name="text"> - <string>Phase</string> - </property> - </column> - <column> - <property name="text"> - <string>Author</string> - </property> - </column> - <column> - <property name="text"> - <string>Date</string> - </property> - </column> - <column> - <property name="text"> - <string>Message</string> - </property> - </column> - <column> - <property name="text"> - <string>Tags</string> - </property> - </column> - </widget> - </item> - <item> - <widget class="QSplitter" name="splitter"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>8</verstretch> - </sizepolicy> - </property> + <widget class="QSplitter" name="mainSplitter"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> - <widget class="QSplitter" name="commitSplitter"> + <widget class="QWidget" name="layoutWidget"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QTreeWidget" name="logTree"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>1</verstretch> + </sizepolicy> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::ExtendedSelection</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="itemsExpandable"> + <bool>false</bool> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <column> + <property name="text"> + <string>Graph</string> + </property> + </column> + <column> + <property name="text"> + <string>Branch</string> + </property> + </column> + <column> + <property name="text"> + <string>Revision</string> + </property> + </column> + <column> + <property name="text"> + <string>Phase</string> + </property> + </column> + <column> + <property name="text"> + <string>Author</string> + </property> + </column> + <column> + <property name="text"> + <string>Date</string> + </property> + </column> + <column> + <property name="text"> + <string>Message</string> + </property> + </column> + <column> + <property name="text"> + <string>Tags</string> + </property> + </column> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QToolButton" name="upButton"> + <property name="toolTip"> + <string>Press to move up in the log list</string> + </property> + <property name="autoRepeat"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="downButton"> + <property name="toolTip"> + <string>Press to move down in the log list</string> + </property> + <property name="autoRepeat"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line_6"> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <property name="lineWidth"> + <number>2</number> + </property> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="nextButton"> + <property name="toolTip"> + <string>Press to get the next bunch of log entries</string> + </property> + <property name="text"> + <string>&Next</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="limitSpinBox"> + <property name="toolTip"> + <string>Enter the limit of entries to fetch</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>10000</number> + </property> + <property name="value"> + <number>20</number> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="stopCheckBox"> + <property name="toolTip"> + <string>Select to stop listing log messages at a copy or move</string> + </property> + <property name="text"> + <string>Stop on Copy/Move</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="sbsSelectLabel"> + <property name="focusPolicy"> + <enum>Qt::StrongFocus</enum> + </property> + <property name="text"> + <string/> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <widget class="QSplitter" name="detailsSplitter"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> - <verstretch>3</verstretch> + <verstretch>2</verstretch> </sizepolicy> </property> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> - <property name="childrenCollapsible"> - <bool>false</bool> - </property> <widget class="QTextBrowser" name="detailsEdit"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>1</horstretch> - <verstretch>3</verstretch> + <horstretch>3</horstretch> + <verstretch>1</verstretch> </sizepolicy> </property> <property name="readOnly"> @@ -246,209 +366,133 @@ <bool>false</bool> </property> </widget> - <widget class="QTextEdit" name="messageEdit"> + <widget class="QSplitter" name="diffSplitter"> <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>2</horstretch> - <verstretch>3</verstretch> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>7</horstretch> + <verstretch>0</verstretch> </sizepolicy> </property> - <property name="readOnly"> - <bool>true</bool> - </property> - </widget> - </widget> - <widget class="QTreeWidget" name="filesTree"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>4</verstretch> - </sizepolicy> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="itemsExpandable"> - <bool>false</bool> - </property> - <property name="sortingEnabled"> - <bool>true</bool> - </property> - <property name="allColumnsShowFocus"> - <bool>true</bool> - </property> - <column> - <property name="text"> - <string>Action</string> - </property> - </column> - <column> - <property name="text"> - <string>Path</string> - </property> - </column> - <column> - <property name="text"> - <string>Copy from</string> - </property> - </column> - </widget> - </widget> - </item> - <item> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QPushButton" name="nextButton"> - <property name="toolTip"> - <string>Press to get the next bunch of log entries</string> - </property> - <property name="text"> - <string>&Next</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QSpinBox" name="limitSpinBox"> - <property name="toolTip"> - <string>Enter the limit of entries to fetch</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>10000</number> - </property> - <property name="value"> - <number>20</number> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QCheckBox" name="stopCheckBox"> - <property name="toolTip"> - <string>Select to stop listing log messages at a copy or move</string> - </property> - <property name="text"> - <string>Stop on Copy/Move</string> - </property> - </widget> - </item> - <item row="0" column="3" rowspan="2"> - <widget class="Line" name="line"> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="lineWidth"> - <number>2</number> - </property> <property name="orientation"> <enum>Qt::Vertical</enum> </property> - </widget> - </item> - <item row="0" column="4"> - <widget class="QToolButton" name="upButton"> - <property name="toolTip"> - <string>Press to move up in the log list</string> - </property> - <property name="autoRepeat"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="5"> - <widget class="QToolButton" name="downButton"> - <property name="toolTip"> - <string>Press to move down in the log list</string> - </property> - <property name="autoRepeat"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="0" column="6"> - <widget class="QPushButton" name="diffP1Button"> - <property name="toolTip"> - <string>Press to generate a diff to the first parent revision</string> - </property> - <property name="text"> - <string>Diff to Parent &1</string> - </property> - </widget> - </item> - <item row="0" column="7"> - <widget class="QPushButton" name="diffP2Button"> - <property name="toolTip"> - <string>Press to generate a diff to the second parent revision</string> - </property> - <property name="text"> - <string>Diff to Parent &2</string> - </property> + <widget class="QTreeWidget" name="filesTree"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>7</horstretch> + <verstretch>1</verstretch> + </sizepolicy> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="itemsExpandable"> + <bool>false</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <property name="allColumnsShowFocus"> + <bool>true</bool> + </property> + <column> + <property name="text"> + <string>Action</string> + </property> + </column> + <column> + <property name="text"> + <string>Path</string> + </property> + </column> + <column> + <property name="text"> + <string>Copy from</string> + </property> + </column> + </widget> + <widget class="QWidget" name="layoutWidget"> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="diffLabel"> + <property name="text"> + <string>Differences</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="diffSelectLabel"> + <property name="focusPolicy"> + <enum>Qt::StrongFocus</enum> + </property> + <property name="text"> + <string/> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="saveLabel"> + <property name="focusPolicy"> + <enum>Qt::StrongFocus</enum> + </property> + <property name="text"> + <string><a href="save:me">Save</a></string> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QTextEdit" name="diffEdit"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>7</horstretch> + <verstretch>2</verstretch> + </sizepolicy> + </property> + <property name="tabChangesFocus"> + <bool>true</bool> + </property> + <property name="lineWrapMode"> + <enum>QTextEdit::NoWrap</enum> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + <property name="acceptRichText"> + <bool>false</bool> + </property> + </widget> + </item> + </layout> + </widget> </widget> - </item> - <item row="0" column="8"> - <widget class="QPushButton" name="diffRevisionsButton"> - <property name="toolTip"> - <string>Press to compare two revisions</string> - </property> - <property name="text"> - <string>&Compare Revisions</string> - </property> - </widget> - </item> - <item row="0" column="9" rowspan="2"> - <widget class="Line" name="phaseLine"> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="lineWidth"> - <number>2</number> - </property> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - </widget> - </item> - <item row="0" column="10"> - <widget class="QToolButton" name="actionsButton"> - <property name="toolTip"> - <string>Select action from menu</string> - </property> - <property name="popupMode"> - <enum>QToolButton::InstantPopup</enum> - </property> - </widget> - </item> - <item row="0" column="11"> - <spacer> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>38</width> - <height>18</height> - </size> - </property> - </spacer> - </item> - <item row="1" column="4" colspan="5"> - <widget class="QCheckBox" name="sbsCheckBox"> - <property name="toolTip"> - <string>Select to show differences side-by-side</string> - </property> - <property name="text"> - <string>Show differences side-by-side</string> - </property> - </widget> - </item> - </layout> + </widget> + </widget> </item> <item> <widget class="QGroupBox" name="errorGroup"> @@ -556,6 +600,7 @@ </customwidget> </customwidgets> <tabstops> + <tabstop>actionsButton</tabstop> <tabstop>modeComboBox</tabstop> <tabstop>fromDate</tabstop> <tabstop>toDate</tabstop> @@ -565,19 +610,17 @@ <tabstop>findPrevButton</tabstop> <tabstop>findNextButton</tabstop> <tabstop>logTree</tabstop> - <tabstop>detailsEdit</tabstop> - <tabstop>messageEdit</tabstop> - <tabstop>filesTree</tabstop> + <tabstop>upButton</tabstop> + <tabstop>downButton</tabstop> <tabstop>nextButton</tabstop> <tabstop>limitSpinBox</tabstop> <tabstop>stopCheckBox</tabstop> - <tabstop>upButton</tabstop> - <tabstop>downButton</tabstop> - <tabstop>diffP1Button</tabstop> - <tabstop>diffP2Button</tabstop> - <tabstop>diffRevisionsButton</tabstop> - <tabstop>sbsCheckBox</tabstop> - <tabstop>actionsButton</tabstop> + <tabstop>sbsSelectLabel</tabstop> + <tabstop>detailsEdit</tabstop> + <tabstop>filesTree</tabstop> + <tabstop>diffSelectLabel</tabstop> + <tabstop>saveLabel</tabstop> + <tabstop>diffEdit</tabstop> <tabstop>errors</tabstop> <tabstop>input</tabstop> <tabstop>passwordCheckBox</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -10,18 +10,17 @@ from __future__ import unicode_literals -import os - -from PyQt5.QtCore import pyqtSlot, QDir -from PyQt5.QtWidgets import QDialog, QDialogButtonBox +from PyQt5.QtCore import pyqtSlot, QUrl +from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QComboBox from E5Gui.E5PathPicker import E5PathPickerModes from .Ui_HgNewProjectOptionsDialog import Ui_HgNewProjectOptionsDialog -from .Config import ConfigHgProtocols +from .Config import ConfigHgSchemes import Utilities import Preferences +import UI.PixmapCache class HgNewProjectOptionsDialog(QDialog, Ui_HgNewProjectOptionsDialog): @@ -40,19 +39,19 @@ self.setupUi(self) self.vcsProjectDirPicker.setMode(E5PathPickerModes.DirectoryMode) - self.vcsUrlPicker.setMode(E5PathPickerModes.DirectoryMode) - self.protocolCombo.addItems(ConfigHgProtocols) + self.__vcs = vcs - hd = Utilities.toNativeSeparators(QDir.homePath()) - hd = os.path.join(hd, 'hgroot') - self.vcsUrlPicker.setText(hd) - - self.vcs = vcs - - self.localPath = hd - self.networkPath = "localhost/" - self.localProtocol = True + vcsUrlHistory = self.__vcs.getPlugin().getPreferences( + "RepositoryUrlHistory") + self.vcsUrlPicker.setMode(E5PathPickerModes.DirectoryMode) + self.vcsUrlPicker.setInsertPolicy(QComboBox.InsertAtTop) + self.vcsUrlPicker.setSizeAdjustPolicy( + QComboBox.AdjustToMinimumContentsLength) + self.vcsUrlPicker.setPathsList(vcsUrlHistory) + self.vcsUrlClearHistoryButton.setIcon( + UI.PixmapCache.getIcon("editDelete.png")) + self.vcsUrlPicker.setText("") ipath = Preferences.getMultiProject("Workspace") or \ Utilities.getHomeDir() @@ -62,10 +61,10 @@ ] self.vcsProjectDirPicker.setText(self.__initPaths[0]) - self.lfNoteLabel.setVisible(self.vcs.isExtensionActive("largefiles")) - self.largeCheckBox.setVisible(self.vcs.isExtensionActive("largefiles")) - - self.resize(self.width(), self.minimumSizeHint().height()) + self.lfNoteLabel.setVisible( + self.__vcs.isExtensionActive("largefiles")) + self.largeCheckBox.setVisible( + self.__vcs.isExtensionActive("largefiles")) self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) @@ -84,47 +83,61 @@ Utilities.fromNativeSeparators(txt) not in self.__initPaths) @pyqtSlot(str) - def on_protocolCombo_activated(self, protocol): - """ - Private slot to switch the status of the directory selection button. - - @param protocol name of the selected protocol (string) - """ - self.vcsUrlPicker.setPickerEnabled(protocol == "file://") - if protocol == "file://": - self.networkPath = self.vcsUrlPicker.text() - self.vcsUrlPicker.setText(self.localPath) - self.localProtocol = True - else: - if self.localProtocol: - self.localPath = self.vcsUrlPicker.text() - self.vcsUrlPicker.setText(self.networkPath) - self.localProtocol = False - - @pyqtSlot(str) def on_vcsUrlPicker_textChanged(self, txt): """ Private slot to handle changes of the URL. @param txt current text of the line edit (string) """ - enable = "://" not in txt + url = QUrl.fromUserInput(txt) + enable = url.isValid() and url.scheme() in ConfigHgSchemes self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable) + + self.vcsUrlPicker.setPickerEnabled(url.scheme() == "file" or + len(txt) == 0) + + @pyqtSlot() + def on_vcsUrlClearHistoryButton_clicked(self): + """ + Private slot to clear the history of entered repository URLs. + """ + currentVcsUrl = self.vcsUrlPicker.text() + self.vcsUrlPicker.clear() + self.vcsUrlPicker.setText(currentVcsUrl) + + self.__saveHistory() def getData(self): """ - Public slot to retrieve the data entered into the dialog. + Public slot to retrieve the data entered into the dialog and to + save the history of entered repository URLs. @return a tuple of a string (project directory) and a dictionary containing the data entered. """ - scheme = self.protocolCombo.currentText() - url = self.vcsUrlPicker.text() - if scheme == "file://" and url[0] not in ["\\", "/"]: - url = "/{0}".format(url) + self.__saveHistory() + + url = QUrl.fromUserInput(self.vcsUrlPicker.text().replace("\\", "/")) vcsdatadict = { - "url": '{0}{1}'.format(scheme, url), + "url": url.toString(QUrl.None_), "revision": self.vcsRevisionEdit.text(), "largefiles": self.largeCheckBox.isChecked(), } return (self.vcsProjectDirPicker.text(), vcsdatadict) + + def __saveHistory(self): + """ + Private method to save the repository URL history. + """ + url = self.vcsUrlPicker.text() + vcsUrlHistory = self.vcsUrlPicker.getPathItems() + if url not in vcsUrlHistory: + vcsUrlHistory.insert(0, url) + + # max. list sizes is hard coded to 20 entries + newVcsUrlHistory = [url for url in vcsUrlHistory if url] + if len(newVcsUrlHistory) > 20: + newVcsUrlHistory = newVcsUrlHistory[:20] + + self.__vcs.getPlugin().setPreferences( + "RepositoryUrlHistory", newVcsUrlHistory)
--- a/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>562</width> - <height>191</height> + <height>187</height> </rect> </property> <property name="windowTitle"> @@ -22,35 +22,18 @@ <bool>true</bool> </property> <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="textLabel1"> + <item row="4" column="0" colspan="3"> + <widget class="QLabel" name="lfNoteLabel"> <property name="text"> - <string>&Protocol:</string> + <string><b>Note:</b> This option increases the download time and volume.</string> </property> - <property name="buddy"> - <cstring>protocolCombo</cstring> + <property name="wordWrap"> + <bool>true</bool> </property> </widget> </item> <item row="0" column="1"> - <widget class="QComboBox" name="protocolCombo"> - <property name="toolTip"> - <string>Select the protocol to access the repository</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="TextLabel2"> - <property name="text"> - <string>&URL:</string> - </property> - <property name="buddy"> - <cstring>vcsUrlPicker</cstring> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="E5PathPicker" name="vcsUrlPicker" native="true"> + <widget class="E5ComboPathPicker" name="vcsUrlPicker" native="true"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> @@ -61,11 +44,11 @@ <enum>Qt::StrongFocus</enum> </property> <property name="toolTip"> - <string>Enter the url path of the repository (without protocol part)</string> + <string>Enter the URL of the repository</string> </property> </widget> </item> - <item row="2" column="0"> + <item row="1" column="0"> <widget class="QLabel" name="vcsRevisionLabel"> <property name="text"> <string>&Revision:</string> @@ -75,7 +58,7 @@ </property> </widget> </item> - <item row="2" column="1"> + <item row="1" column="1" colspan="2"> <widget class="QLineEdit" name="vcsRevisionEdit"> <property name="toolTip"> <string>Enter the revision the new project should be generated from</string> @@ -85,17 +68,7 @@ </property> </widget> </item> - <item row="3" column="0"> - <widget class="QLabel" name="TextLabel4"> - <property name="text"> - <string>Project &Directory:</string> - </property> - <property name="buddy"> - <cstring>vcsProjectDirPicker</cstring> - </property> - </widget> - </item> - <item row="3" column="1"> + <item row="2" column="1" colspan="2"> <widget class="E5PathPicker" name="vcsProjectDirPicker" native="true"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> @@ -116,24 +89,24 @@ </property> </widget> </item> - <item row="4" column="0" colspan="2"> + <item row="3" column="0" colspan="3"> <widget class="QCheckBox" name="largeCheckBox"> <property name="text"> <string>Download all versions of all large files</string> </property> </widget> </item> - <item row="5" column="0" colspan="2"> - <widget class="QLabel" name="lfNoteLabel"> + <item row="2" column="0"> + <widget class="QLabel" name="TextLabel4"> <property name="text"> - <string><b>Note:</b> This option increases the download time and volume.</string> + <string>Project &Directory:</string> </property> - <property name="wordWrap"> - <bool>true</bool> + <property name="buddy"> + <cstring>vcsProjectDirPicker</cstring> </property> </widget> </item> - <item row="6" column="0" colspan="2"> + <item row="5" column="0" colspan="3"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> @@ -143,9 +116,25 @@ </property> </widget> </item> + <item row="0" column="0"> + <widget class="QLabel" name="TextLabel2"> + <property name="text"> + <string>&URL:</string> + </property> + <property name="buddy"> + <cstring>vcsUrlPicker</cstring> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QToolButton" name="vcsUrlClearHistoryButton"> + <property name="toolTip"> + <string>Press to clear the history of entered repository URLs</string> + </property> + </widget> + </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget> @@ -154,10 +143,16 @@ <header>E5Gui/E5PathPicker.h</header> <container>1</container> </customwidget> + <customwidget> + <class>E5ComboPathPicker</class> + <extends>QWidget</extends> + <header>E5Gui/E5PathPicker.h</header> + <container>1</container> + </customwidget> </customwidgets> <tabstops> - <tabstop>protocolCombo</tabstop> <tabstop>vcsUrlPicker</tabstop> + <tabstop>vcsUrlClearHistoryButton</tabstop> <tabstop>vcsRevisionEdit</tabstop> <tabstop>vcsProjectDirPicker</tabstop> <tabstop>largeCheckBox</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgOptionsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgOptionsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -61,7 +61,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>vcsLogEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgRevisionSelectionDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgRevisionSelectionDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -153,7 +153,6 @@ else: rev = str(self.numberSpinBox.value()) elif self.idButton.isChecked(): - rev = "id({0})".format(self.idEdit.text()) if revset: rev = "id({0})".format(self.idEdit.text()) else:
--- a/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -381,7 +381,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>number1Button</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -16,10 +16,10 @@ import os -from PyQt5.QtCore import pyqtSlot, Qt, QProcess, QTimer -from PyQt5.QtGui import QTextCursor +from PyQt5.QtCore import pyqtSlot, qVersion, Qt, QProcess, QTimer, QSize +from PyQt5.QtGui import QTextCursor, QCursor from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QMenu, QHeaderView, \ - QTreeWidgetItem, QLineEdit + QTreeWidgetItem, QLineEdit, QToolTip from E5Gui.E5Application import e5App from E5Gui import E5MessageBox @@ -30,6 +30,7 @@ from .HgDiffGenerator import HgDiffGenerator import Preferences +import UI.PixmapCache class HgStatusDialog(QWidget, Ui_HgStatusDialog): @@ -74,9 +75,6 @@ self.process.readyReadStandardOutput.connect(self.__readStdout) self.process.readyReadStandardError.connect(self.__readStderr) - self.diffSplitter.setSizes([350, 250]) - self.__diffSplitterState = None - self.statusList.headerItem().setText(self.__lastColumn, "") self.statusList.header().setSortIndicator( self.__pathColumn, Qt.AscendingOrder) @@ -91,86 +89,6 @@ self.__selectedName = "" - if mq: - self.buttonsLine.setVisible(False) - self.addButton.setVisible(False) - self.diffButton.setVisible(False) - self.sbsDiffButton.setVisible(False) - self.revertButton.setVisible(False) - self.forgetButton.setVisible(False) - self.restoreButton.setVisible(False) - - self.diffEdit.setVisible(False) - - self.menuactions = [] - self.lfActions = [] - self.menu = QMenu() - if not mq: - self.__commitAct = self.menu.addAction( - self.tr("Commit changes to repository..."), self.__commit) - self.menuactions.append(self.__commitAct) - self.menuactions.append(self.menu.addAction( - self.tr("Select all for commit"), self.__commitSelectAll)) - self.menuactions.append(self.menu.addAction( - self.tr("Deselect all from commit"), - self.__commitDeselectAll)) - self.menu.addSeparator() - self.__addAct = self.menu.addAction( - self.tr("Add to repository"), self.__add) - self.menuactions.append(self.__addAct) - self.lfActions.append(self.menu.addAction( - self.tr("Add as Large File"), - lambda: self.__lfAdd("large"))) - self.lfActions.append(self.menu.addAction( - self.tr("Add as Normal File"), - lambda: self.__lfAdd("normal"))) - self.menu.addSeparator() - self.__diffAct = self.menu.addAction( - self.tr("Show differences"), self.__diff) - self.menuactions.append(self.__diffAct) - self.__sbsDiffAct = self.menu.addAction( - self.tr("Show differences side-by-side"), self.__sbsDiff) - self.menuactions.append(self.__sbsDiffAct) - self.menu.addSeparator() - self.__revertAct = self.menu.addAction( - self.tr("Revert changes"), self.__revert) - self.menuactions.append(self.__revertAct) - self.__forgetAct = self.menu.addAction( - self.tr("Forget missing"), self.__forget) - self.menuactions.append(self.__forgetAct) - self.__restoreAct = self.menu.addAction( - self.tr("Restore missing"), self.__restoreMissing) - self.menuactions.append(self.__restoreAct) - self.menu.addSeparator() - self.menuactions.append(self.menu.addAction( - self.tr("Adjust column sizes"), self.__resizeColumns)) - for act in self.menuactions: - act.setEnabled(False) - for act in self.lfActions: - act.setEnabled(False) - - self.statusList.setContextMenuPolicy(Qt.CustomContextMenu) - self.statusList.customContextMenuRequested.connect( - self.__showContextMenu) - - if not mq: - self.__lfAddActions = [] - self.__addButtonMenu = QMenu() - self.__addButtonMenu.addAction(self.tr("Add"), self.__add) - self.__lfAddActions.append( - self.__addButtonMenu.addAction(self.tr("Add as Large File"), - lambda: self.__lfAdd("large"))) - self.__lfAddActions.append( - self.__addButtonMenu.addAction(self.tr("Add as Normal File"), - lambda: self.__lfAdd("normal"))) - self.__addButtonMenu.aboutToShow.connect(self.__showAddMenu) - if self.vcs.isExtensionActive("largefiles"): - self.addButton.setMenu(self.__addButtonMenu) - - if not mq: - self.vcs.activeExtensionsChanged.connect( - self.__activeExtensionsChanged) - self.modifiedIndicators = [ self.tr('added'), self.tr('modified'), @@ -194,17 +112,134 @@ '?': self.tr('not tracked'), '!': self.tr('missing'), } + + self.__initActionsMenu() + + if mq: + self.diffLabel.setVisible(False) + self.diffEdit.setVisible(False) + self.actionsButton.setEnabled(False) + self.diffSplitter.setSizes([600, 0]) + else: + self.diffSplitter.setSizes([300, 300]) - def __activeExtensionsChanged(self): + def __initActionsMenu(self): """ - Private slot handling a change in the activated extensions. + Private method to initialize the actions menu. """ - if self.vcs.isExtensionActive("largefiles"): - if self.addButton.menu() is None: - self.addButton.setMenu(self.__addButtonMenu) + self.__actionsMenu = QMenu() + self.__actionsMenu.setTearOffEnabled(True) + if qVersion() >= "5.1.0": + self.__actionsMenu.setToolTipsVisible(True) else: - if self.addButton.menu() is not None: - self.addButton.setMenu(None) + self.__actionsMenu.hovered.connect(self.__actionsMenuHovered) + self.__actionsMenu.aboutToShow.connect(self.__showActionsMenu) + + self.__commitAct = self.__actionsMenu.addAction( + self.tr("Commit"), self.__commit) + self.__commitAct.setToolTip(self.tr("Commit the selected changes")) + self.__commitSelectAct = self.__actionsMenu.addAction( + self.tr("Select all for commit"), self.__commitSelectAll) + self.__commitDeselectAct = self.__actionsMenu.addAction( + self.tr("Unselect all from commit"), self.__commitDeselectAll) + + self.__actionsMenu.addSeparator() + + self.__addAct = self.__actionsMenu.addAction( + self.tr("Add"), self.__add) + self.__addAct.setToolTip(self.tr("Add the selected files")) + self.__lfAddLargeAct = self.__actionsMenu.addAction( + self.tr("Add as Large Files"), lambda: self.__lfAdd("large")) + self.__lfAddLargeAct.setToolTip(self.tr( + "Add the selected files as a large files using the 'Large Files'" + " extension")) + self.__lfAddNormalAct = self.__actionsMenu.addAction( + self.tr("Add as Normal Files"), lambda: self.__lfAdd("normal")) + self.__lfAddNormalAct.setToolTip(self.tr( + "Add the selected files as a normal files using the 'Large Files'" + " extension")) + + self.__actionsMenu.addSeparator() + + self.__diffAct = self.__actionsMenu.addAction( + self.tr("Differences"), self.__diff) + self.__diffAct.setToolTip(self.tr( + "Shows the differences of the selected entry in a" + " separate dialog")) + self.__sbsDiffAct = self.__actionsMenu.addAction( + self.tr("Differences Side-By-Side"), self.__sbsDiff) + self.__sbsDiffAct.setToolTip(self.tr( + "Shows the differences of the selected entry side-by-side in" + " a separate dialog")) + + self.__actionsMenu.addSeparator() + + self.__revertAct = self.__actionsMenu.addAction( + self.tr("Revert"), self.__revert) + self.__revertAct.setToolTip(self.tr( + "Reverts the changes of the selected files")) + + self.__actionsMenu.addSeparator() + + self.__forgetAct = self.__actionsMenu.addAction( + self.tr("Forget missing"), self.__forget) + self.__forgetAct.setToolTip(self.tr( + "Forgets about the selected missing files")) + self.__restoreAct = self.__actionsMenu.addAction( + self.tr("Restore missing"), self.__restoreMissing) + self.__restoreAct.setToolTip(self.tr( + "Restores the selected missing files")) + + self.__actionsMenu.addSeparator() + + act = self.__actionsMenu.addAction( + self.tr("Adjust column sizes"), self.__resizeColumns) + act.setToolTip(self.tr( + "Adjusts the width of all columns to their contents")) + + self.actionsButton.setIcon( + UI.PixmapCache.getIcon("actionsToolButton.png")) + self.actionsButton.setMenu(self.__actionsMenu) + + def __actionsMenuHovered(self, action): + """ + Private slot to show the tooltip for an action menu entry. + + @param action action to show tooltip for + @type QAction + """ + QToolTip.showText( + QCursor.pos(), action.toolTip(), + self.__actionsMenu, self.__actionsMenu.actionGeometry(action)) + + def closeEvent(self, e): + """ + Protected slot implementing a close event handler. + + @param e close event (QCloseEvent) + """ + if self.__hgClient: + if self.__hgClient.isExecuting(): + self.__hgClient.cancel() + else: + if self.process is not None and \ + self.process.state() != QProcess.NotRunning: + self.process.terminate() + QTimer.singleShot(2000, self.process.kill) + self.process.waitForFinished(3000) + + if self.__mq: + self.vcs.getPlugin().setPreferences( + "MqStatusDialogGeometry", self.saveGeometry()) + self.vcs.getPlugin().setPreferences( + "MqStatusDialogSplitterState", self.diffSplitter.saveState()) + else: + self.vcs.getPlugin().setPreferences( + "StatusDialogGeometry", self.saveGeometry()) + self.vcs.getPlugin().setPreferences( + "StatusDialogSplitterState", self.diffSplitter.saveState()) + + e.accept() def show(self): """ @@ -212,8 +247,26 @@ """ super(HgStatusDialog, self).show() - if not self.__mq and self.__diffSplitterState: - self.diffSplitter.restoreState(self.__diffSplitterState) + if self.__mq: + geom = self.vcs.getPlugin().getPreferences( + "MqStatusDialogGeometry") + else: + geom = self.vcs.getPlugin().getPreferences( + "StatusDialogGeometry") + if geom.isEmpty(): + s = QSize(800, 600) + self.resize(s) + else: + self.restoreGeometry(geom) + + if self.__mq: + diffSplitterState = self.vcs.getPlugin().getPreferences( + "MqStatusDialogSplitterState") + else: + diffSplitterState = self.vcs.getPlugin().getPreferences( + "StatusDialogSplitterState") + if diffSplitterState is not None: + self.diffSplitter.restoreState(diffSplitterState) def __resort(self): """ @@ -256,27 +309,6 @@ if statusText not in self.__statusFilters: self.__statusFilters.append(statusText) - def closeEvent(self, e): - """ - Protected slot implementing a close event handler. - - @param e close event (QCloseEvent) - """ - if self.__hgClient: - if self.__hgClient.isExecuting(): - self.__hgClient.cancel() - else: - if self.process is not None and \ - self.process.state() != QProcess.NotRunning: - self.process.terminate() - QTimer.singleShot(2000, self.process.kill) - self.process.waitForFinished(3000) - - if not self.__mq: - self.__diffSplitterState = self.diffSplitter.saveState() - - e.accept() - def start(self, fn): """ Public slot to start the hg status command. @@ -288,18 +320,7 @@ self.intercept = False self.args = fn - for act in self.menuactions: - act.setEnabled(False) - for act in self.lfActions: - act.setEnabled(False) - - self.addButton.setEnabled(False) - self.commitButton.setEnabled(False) - self.diffButton.setEnabled(False) - self.sbsDiffButton.setEnabled(False) - self.revertButton.setEnabled(False) - self.forgetButton.setEnabled(False) - self.restoreButton.setEnabled(False) + self.actionsButton.setEnabled(False) self.statusFilterCombo.clear() self.__statusFilters = [] @@ -400,15 +421,12 @@ self.__statusFilters.insert(0, "<{0}>".format(self.tr("all"))) self.statusFilterCombo.addItems(self.__statusFilters) - for act in self.menuactions: - act.setEnabled(True) + if not self.__mq: + self.actionsButton.setEnabled(True) self.__resort() self.__resizeColumns() - self.__updateButtons() - self.__updateCommitButton() - self.__refreshDiff() def on_buttonBox_clicked(self, button): @@ -551,28 +569,6 @@ self.start(self.args) - def __updateButtons(self): - """ - Private method to update the VCS buttons status. - """ - modified = len(self.__getModifiedItems()) - unversioned = len(self.__getUnversionedItems()) - missing = len(self.__getMissingItems()) - - self.addButton.setEnabled(unversioned) - self.diffButton.setEnabled(modified) - self.sbsDiffButton.setEnabled(modified == 1) - self.revertButton.setEnabled(modified) - self.forgetButton.setEnabled(missing) - self.restoreButton.setEnabled(missing) - - def __updateCommitButton(self): - """ - Private method to update the Commit button status. - """ - commitable = len(self.__getCommitableItems()) - self.commitButton.setEnabled(commitable) - @pyqtSlot(str) def on_statusFilterCombo_activated(self, txt): """ @@ -589,88 +585,26 @@ topItem = self.statusList.topLevelItem(topIndex) topItem.setHidden(topItem.text(self.__statusColumn) != txt) - @pyqtSlot(QTreeWidgetItem, int) - def on_statusList_itemChanged(self, item, column): - """ - Private slot to act upon item changes. - - @param item reference to the changed item (QTreeWidgetItem) - @param column index of column that changed (integer) - """ - if column == self.__toBeCommittedColumn: - self.__updateCommitButton() - @pyqtSlot() def on_statusList_itemSelectionChanged(self): """ Private slot to act upon changes of selected items. """ - self.__updateButtons() self.__generateDiffs() - @pyqtSlot() - def on_commitButton_clicked(self): - """ - Private slot to handle the press of the Commit button. - """ - self.__commit() - - @pyqtSlot() - def on_addButton_clicked(self): - """ - Private slot to handle the press of the Add button. - """ - self.__add() - - @pyqtSlot() - def on_diffButton_clicked(self): - """ - Private slot to handle the press of the Differences button. - """ - self.__diff() - - @pyqtSlot() - def on_sbsDiffButton_clicked(self): - """ - Private slot to handle the press of the Side-by-Side Diff button. - """ - self.__sbsDiff() - - @pyqtSlot() - def on_revertButton_clicked(self): - """ - Private slot to handle the press of the Revert button. - """ - self.__revert() - - @pyqtSlot() - def on_forgetButton_clicked(self): - """ - Private slot to handle the press of the Forget button. - """ - self.__forget() - - @pyqtSlot() - def on_restoreButton_clicked(self): - """ - Private slot to handle the press of the Restore button. - """ - self.__restoreMissing() - ########################################################################### - ## Context menu handling methods + ## Menu handling methods ########################################################################### - def __showContextMenu(self, coord): + def __showActionsMenu(self): """ - Private slot to show the context menu of the status list. - - @param coord the position of the mouse pointer (QPoint) + Private slot to prepare the actions button menu before it is shown. """ modified = len(self.__getModifiedItems()) unversioned = len(self.__getUnversionedItems()) missing = len(self.__getMissingItems()) commitable = len(self.__getCommitableItems()) + commitableUnselected = len(self.__getCommitableUnselectedItems()) self.__addAct.setEnabled(unversioned) self.__diffAct.setEnabled(modified) @@ -679,22 +613,15 @@ self.__forgetAct.setEnabled(missing) self.__restoreAct.setEnabled(missing) self.__commitAct.setEnabled(commitable) + self.__commitSelectAct.setEnabled(commitableUnselected) + self.__commitDeselectAct.setEnabled(commitable) if self.vcs.isExtensionActive("largefiles"): - enable = len(self.__getUnversionedItems()) > 0 + enable = bool(unversioned) else: enable = False - for act in self.lfActions: - act.setEnabled(enable) - self.menu.popup(self.statusList.mapToGlobal(coord)) - - def __showAddMenu(self): - """ - Private slot to prepare the Add button menu before it is shown. - """ - enable = self.vcs.isExtensionActive("largefiles") - for act in self.__lfAddActions: - act.setEnabled(enable) + self.__lfAddLargeAct.setEnabled(enable) + self.__lfAddNormalAct.setEnabled(enable) def __commit(self): """ @@ -901,6 +828,21 @@ commitableItems.append(itm) return commitableItems + def __getCommitableUnselectedItems(self): + """ + Private method to retrieve all entries the user may commit but hasn't + selected. + + @return list of all items, the user has checked + """ + items = [] + for index in range(self.statusList.topLevelItemCount()): + itm = self.statusList.topLevelItem(index) + if itm.flags() & Qt.ItemIsUserCheckable and \ + itm.checkState(self.__toBeCommittedColumn) == Qt.Unchecked: + items.append(itm) + return items + def __getModifiedItems(self): """ Private method to retrieve all entries, that have a modified status.
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>955</width> - <height>646</height> + <width>800</width> + <height>600</height> </rect> </property> <property name="windowTitle"> @@ -17,188 +17,107 @@ <string><b>Mercurial Status</b> <p>This dialog shows the status of the selected file or project.</p></string> </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QToolButton" name="actionsButton"> + <property name="toolTip"> + <string>Select action from menu</string> + </property> + <property name="popupMode"> + <enum>QToolButton::InstantPopup</enum> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>&Filter on Status:</string> + </property> + <property name="buddy"> + <cstring>statusFilterCombo</cstring> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="statusFilterCombo"> + <property name="toolTip"> + <string>Select the status of entries to be shown</string> + </property> + <property name="sizeAdjustPolicy"> + <enum>QComboBox::AdjustToContents</enum> + </property> + </widget> + </item> + </layout> + </item> <item> <widget class="QSplitter" name="diffSplitter"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>2</verstretch> + </sizepolicy> + </property> <property name="orientation"> <enum>Qt::Vertical</enum> </property> - <widget class="QWidget" name=""> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>&Filter on Status:</string> - </property> - <property name="buddy"> - <cstring>statusFilterCombo</cstring> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="statusFilterCombo"> - <property name="toolTip"> - <string>Select the status of entries to be shown</string> - </property> - <property name="sizeAdjustPolicy"> - <enum>QComboBox::AdjustToContents</enum> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QTreeWidget" name="statusList"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>3</verstretch> - </sizepolicy> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="selectionMode"> - <enum>QAbstractItemView::ExtendedSelection</enum> - </property> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="sortingEnabled"> - <bool>true</bool> - </property> - <column> - <property name="text"> - <string>Commit</string> - </property> - </column> - <column> - <property name="text"> - <string>Status</string> - </property> - </column> - <column> - <property name="text"> - <string>Path</string> - </property> - </column> - </widget> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QPushButton" name="commitButton"> - <property name="toolTip"> - <string>Commit the selected changes</string> - </property> - <property name="text"> - <string>&Commit</string> - </property> - </widget> - </item> - <item> - <widget class="Line" name="buttonsLine"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="addButton"> - <property name="toolTip"> - <string>Add the selected entries to the repository</string> - </property> - <property name="text"> - <string>&Add</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="diffButton"> - <property name="toolTip"> - <string>Show differences of the selected entries to the repository</string> - </property> - <property name="text"> - <string>&Differences</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="sbsDiffButton"> - <property name="toolTip"> - <string>Show differences of the selected entry to the repository in a side-by-side manner</string> - </property> - <property name="text"> - <string>Side-b&y-Side Diff</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="revertButton"> - <property name="toolTip"> - <string>Revert the selected entries to the last revision in the repository</string> - </property> - <property name="text"> - <string>Re&vert</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="forgetButton"> - <property name="toolTip"> - <string>Forget about the selected missing entries</string> - </property> - <property name="text"> - <string>For&get</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="restoreButton"> - <property name="toolTip"> - <string>Restore the selected missing entries from the repository</string> - </property> - <property name="text"> - <string>&Restore</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> + <property name="childrenCollapsible"> + <bool>false</bool> + </property> + <widget class="QTreeWidget" name="statusList"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::ExtendedSelection</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <column> + <property name="text"> + <string>Commit</string> + </property> + </column> + <column> + <property name="text"> + <string>Status</string> + </property> + </column> + <column> + <property name="text"> + <string>Path</string> + </property> + </column> </widget> <widget class="QWidget" name="layoutWidget"> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> - <widget class="QLabel" name="label_2"> + <widget class="QLabel" name="diffLabel"> <property name="text"> <string>Differences</string> </property> @@ -209,7 +128,7 @@ <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> - <verstretch>1</verstretch> + <verstretch>0</verstretch> </sizepolicy> </property> <property name="tabChangesFocus"> @@ -325,18 +244,11 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> + <tabstop>actionsButton</tabstop> <tabstop>statusFilterCombo</tabstop> <tabstop>statusList</tabstop> - <tabstop>commitButton</tabstop> - <tabstop>addButton</tabstop> - <tabstop>diffButton</tabstop> - <tabstop>sbsDiffButton</tabstop> - <tabstop>revertButton</tabstop> - <tabstop>forgetButton</tabstop> - <tabstop>restoreButton</tabstop> <tabstop>diffEdit</tabstop> <tabstop>errors</tabstop> <tabstop>input</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -165,7 +165,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tagList</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgTagDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgTagDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -155,7 +155,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tagCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -165,7 +165,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>input</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -434,7 +434,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>parentButton</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/hg.py Fri Mar 03 18:34:21 2017 +0100 @@ -353,10 +353,6 @@ except KeyError: rev = None vcsUrl = self.hgNormalizeURL(vcsDataDict["url"]) - if vcsUrl.startswith('/'): - vcsUrl = 'file://{0}'.format(vcsUrl) - elif vcsUrl[1] in ['|', ':']: - vcsUrl = 'file:///{0}'.format(vcsUrl) args = self.initCommand("clone") if rev: @@ -364,7 +360,7 @@ args.append(rev) if vcsDataDict["largefiles"]: args.append("--all-largefiles") - args.append(self.__hgURL(vcsUrl)) + args.append(vcsUrl) args.append(projectDir) if noDialog: @@ -1010,11 +1006,14 @@ return res - def vcsMerge(self, name): + def vcsMerge(self, name, rev=""): """ Public method used to merge a URL/revision into the local project. - @param name file/directory name to be merged (string) + @param name file/directory name to be merged + @type str + @keyparam rev revision to merge with + @type str """ dname, fname = self.splitPath(name) @@ -1025,14 +1024,17 @@ if os.path.splitdrive(repodir)[1] == os.sep: return - from .HgMergeDialog import HgMergeDialog - dlg = HgMergeDialog(self.hgGetTagsList(repodir), - self.hgGetBranchesList(repodir), - self.hgGetBookmarksList(repodir)) - if dlg.exec_() == QDialog.Accepted: - rev, force = dlg.getParameters() + if not rev: + from .HgMergeDialog import HgMergeDialog + dlg = HgMergeDialog(self.hgGetTagsList(repodir), + self.hgGetBranchesList(repodir), + self.hgGetBookmarksList(repodir)) + if dlg.exec_() == QDialog.Accepted: + rev, force = dlg.getParameters() + else: + return else: - return + force = False args = self.initCommand("merge") if force: @@ -1488,37 +1490,6 @@ ## Private Mercurial specific methods are below. ########################################################################### - def __hgURL(self, url): - """ - Private method to format a url for Mercurial. - - @param url unformatted url string (string) - @return properly formated url for mercurial (string) - """ - url = self.hgNormalizeURL(url) - url = url.split(':', 2) - if len(url) == 4: - scheme = url[0] - user = url[1] - host = url[2] - port, path = url[3].split("/", 1) - return "{0}:{1}:{2}:{3}/{4}".format( - scheme, user, host, port, Utilities.quote(path)) - elif len(url) == 3: - scheme = url[0] - host = url[1] - port, path = url[2].split("/", 1) - return "{0}:{1}:{2}/{3}".format( - scheme, host, port, Utilities.quote(path)) - else: - scheme = url[0] - if scheme == "file": - return "{0}:{1}".format(scheme, Utilities.quote(url[1])) - else: - host, path = url[1][2:].split("/", 1) - return "{0}://{1}/{2}".format( - scheme, host, Utilities.quote(path)) - def hgNormalizeURL(self, url): """ Public method to normalize a url for Mercurial. @@ -1928,17 +1899,22 @@ self.logBrowserOutgoing.raise_() self.logBrowserOutgoing.start(name) - def hgPull(self, name): + def hgPull(self, name, revisions=None): """ Public method used to pull changes from a remote Mercurial repository. - @param name directory name of the project to be pulled to (string) + @param name directory name of the project to be pulled to + @type str + @param revisions list of revisions to be pulled + @type list of str @return flag indicating, that the update contained an add - or delete (boolean) + or delete + @rtype bool """ if self.getPlugin().getPreferences("PreferUnbundle") and \ self.bundleFile and \ - os.path.exists(self.bundleFile): + os.path.exists(self.bundleFile) and \ + revisions is None: command = "unbundle" title = self.tr('Apply changegroups') else: @@ -1951,6 +1927,10 @@ args.append('--update') if command == "unbundle": args.append(self.bundleFile) + if revisions: + for rev in revisions: + args.append("--rev") + args.append(rev) # find the root of the repo repodir = self.splitPath(name)[0] @@ -2512,11 +2492,14 @@ return status - def hgBundle(self, name): + def hgBundle(self, name, bundleData=None): """ Public method to create a changegroup file. - @param name file/directory name (string) + @param name file/directory name + @type str + @param bundleData dictionary containing the bundle creation information + @type dict """ dname, fname = self.splitPath(name) @@ -2527,60 +2510,71 @@ if os.path.splitdrive(repodir)[1] == os.sep: return - from .HgBundleDialog import HgBundleDialog - dlg = HgBundleDialog(self.hgGetTagsList(repodir), - self.hgGetBranchesList(repodir), - self.hgGetBookmarksList(repodir)) - if dlg.exec_() == QDialog.Accepted: - revs, baseRevs, compression, all = dlg.getParameters() - - fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( - None, - self.tr("Create changegroup"), - self.__lastChangeGroupPath or repodir, - self.tr("Mercurial Changegroup Files (*.hg)"), - None, - E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) - - if not fname: - return # user aborted + if bundleData is None: + from .HgBundleDialog import HgBundleDialog + dlg = HgBundleDialog(self.hgGetTagsList(repodir), + self.hgGetBranchesList(repodir), + self.hgGetBookmarksList(repodir)) + if dlg.exec_() != QDialog.Accepted: + return - ext = QFileInfo(fname).suffix() - if not ext: - ex = selectedFilter.split("(*")[1].split(")")[0] - if ex: - fname += ex - if QFileInfo(fname).exists(): - res = E5MessageBox.yesNo( - self.__ui, - self.tr("Create changegroup"), - self.tr("<p>The Mercurial changegroup file <b>{0}</b> " - "already exists. Overwrite it?</p>") - .format(fname), - icon=E5MessageBox.Warning) - if not res: - return - fname = Utilities.toNativeSeparators(fname) - self.__lastChangeGroupPath = os.path.dirname(fname) - - args = self.initCommand("bundle") - if all: - args.append("--all") - for rev in revs: - args.append("--rev") - args.append(rev) - for baseRev in baseRevs: - args.append("--base") - args.append(baseRev) - if compression: - args.append("--type") - args.append(compression) - args.append(fname) - - dia = HgDialog(self.tr('Create changegroup'), self) - res = dia.startProcess(args, repodir) - if res: - dia.exec_() + revs, baseRevs, compression, all = dlg.getParameters() + else: + revs = bundleData["revs"] + if bundleData["base"]: + baseRevs = [bundleData["base"]] + else: + baseRevs = [] + compression = "" + all = bundleData["all"] + + fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( + None, + self.tr("Create changegroup"), + self.__lastChangeGroupPath or repodir, + self.tr("Mercurial Changegroup Files (*.hg)"), + None, + E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) + + if not fname: + return # user aborted + + ext = QFileInfo(fname).suffix() + if not ext: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fname += ex + if QFileInfo(fname).exists(): + res = E5MessageBox.yesNo( + self.__ui, + self.tr("Create changegroup"), + self.tr("<p>The Mercurial changegroup file <b>{0}</b> " + "already exists. Overwrite it?</p>") + .format(fname), + icon=E5MessageBox.Warning) + if not res: + return + fname = Utilities.toNativeSeparators(fname) + self.__lastChangeGroupPath = os.path.dirname(fname) + + args = self.initCommand("bundle") + if all: + args.append("--all") + for rev in revs: + args.append("--rev") + args.append(rev) + for baseRev in baseRevs: + args.append("--base") + args.append(baseRev) + if compression: + args.append("--type") + args.append(compression) + args.append(fname) + + dia = HgDialog(self.tr('Create changegroup'), self) + res = dia.startProcess(args, repodir) + if res: + dia.exec_() def hgPreviewBundle(self, name): """ @@ -2614,13 +2608,17 @@ self.logBrowserIncoming.raise_() self.logBrowserIncoming.start(name, bundle=file) - def hgUnbundle(self, name): + def hgUnbundle(self, name, files=None): """ Public method to apply changegroup files. - @param name directory name (string) + @param name directory name + @type str + @param files list of bundle files to be applied + @type list of str @return flag indicating, that the update contained an add - or delete (boolean) + or delete + @rtype bool """ dname, fname = self.splitPath(name) @@ -2632,11 +2630,13 @@ return res = False - files = E5FileDialog.getOpenFileNames( - None, - self.tr("Apply changegroups"), - self.__lastChangeGroupPath or repodir, - self.tr("Mercurial Changegroup Files (*.hg);;All Files (*)")) + if not files: + files = E5FileDialog.getOpenFileNames( + None, + self.tr("Apply changegroups"), + self.__lastChangeGroupPath or repodir, + self.tr("Mercurial Changegroup Files (*.hg);;All Files (*)")) + if files: self.__lastChangeGroupPath = os.path.dirname(files[0]) @@ -2658,6 +2658,7 @@ dia.exec_() res = dia.hasAddOrDelete() self.checkVCSStatus() + return res def hgBisect(self, name, subcommand):
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -123,7 +123,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -57,6 +57,8 @@ self.recentComboBox.addItem("") self.recentComboBox.addItems(self.recentCommitMessages) + self.logEdit.setFocus(Qt.OtherFocusReason) + def logMessage(self): """ Public method to retrieve the log message.
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -92,7 +92,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>logEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -87,7 +87,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -79,7 +79,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>resultbox</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -445,7 +445,7 @@ # set the state of the up and down buttons self.upButton.setEnabled( - current is not None and + current is not None and self.logTree.indexOfTopLevelItem(current) > 0) self.downButton.setEnabled( current is not None and
--- a/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -129,7 +129,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tag1Combo</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -148,7 +148,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -120,7 +120,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -59,7 +59,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>propNameEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -93,7 +93,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>propsList</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -85,7 +85,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>propNameEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -327,7 +327,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>number1Button</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -266,7 +266,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>statusFilterCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -99,7 +99,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tagCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -104,7 +104,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tagList</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -126,7 +126,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tagCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -123,7 +123,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -55,6 +55,8 @@ self.recentComboBox.addItem("") self.recentComboBox.addItems(self.recentCommitMessages) + self.logEdit.setFocus(Qt.OtherFocusReason) + def logMessage(self): """ Public method to retrieve the log message.
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -92,7 +92,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>logEdit</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -87,7 +87,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -137,7 +137,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>resultbox</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -554,7 +554,7 @@ # set the state of the up and down buttons self.upButton.setEnabled( - current is not None and + current is not None and self.logTree.indexOfTopLevelItem(current) > 0) self.downButton.setEnabled( current is not None and
--- a/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -129,7 +129,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tag1Combo</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -148,7 +148,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -120,7 +120,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -93,7 +93,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>propsList</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -108,7 +108,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -327,7 +327,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>number1Button</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -321,7 +321,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>statusFilterCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -99,7 +99,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tagCombo</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -162,7 +162,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tagList</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -126,7 +126,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>tagCombo</tabstop>
--- a/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -385,7 +385,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>rColor</tabstop>
--- a/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -528,7 +528,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>rInformation</tabstop>
--- a/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -400,7 +400,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>pyqtComboBox</tabstop>
--- a/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -173,7 +173,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>eResultVar</tabstop>
--- a/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -416,7 +416,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="11"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>rText</tabstop>
--- a/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -380,7 +380,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>rInformation</tabstop>
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -112,7 +112,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>negativeCheckBox</tabstop>
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -511,7 +511,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>py2Button</tabstop>
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -178,7 +178,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>unlimitedButton</tabstop>
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -141,7 +141,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>negativeCheckBox</tabstop>
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -550,7 +550,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>variableLineEdit</tabstop>
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardRepeatDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -171,7 +171,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>unlimitedButton</tabstop>
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -155,7 +155,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>negativeCheckBox</tabstop>
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -477,7 +477,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>variableLineEdit</tabstop>
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardRepeatDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardRepeatDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -196,7 +196,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>unlimitedButton</tabstop>
--- a/Preferences/ConfigurationDialog.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ConfigurationDialog.py Fri Mar 03 18:34:21 2017 +0100 @@ -12,7 +12,8 @@ import os import types -from PyQt5.QtCore import QMetaObject, pyqtSignal, Qt, QRect, pyqtSlot +from PyQt5.QtCore import QMetaObject, pyqtSignal, Qt, QRect, pyqtSlot, \ + qVersion from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QSizePolicy, QSpacerItem, QWidget, QTreeWidget, \ QStackedWidget, QDialog, QSplitter, QScrollArea, QApplication, \ @@ -339,6 +340,14 @@ [self.tr("VirusTotal Interface"), "virustotal.png", "HelpVirusTotalPage", "0webBrowserPage", None], }) + if qVersion() >= "5.8.0": + self.configItems.update({ + "webBrowserSpellCheckingPage": + [self.tr("Spell checking"), + "preferences-spellchecking.png", + "WebBrowserSpellCheckingPage", "0webBrowserPage", + None], + }) else: try: from PyQt5 import QtWebKit # __IGNORE_WARNING__ @@ -454,6 +463,14 @@ [self.tr("VirusTotal Interface"), "virustotal.png", "HelpVirusTotalPage", None, None], } + + if qVersion() >= "5.8.0": + self.configItems.update({ + "webBrowserSpellCheckingPage": + [self.tr("Spell checking"), + "preferences-spellchecking.png", + "WebBrowserSpellCheckingPage", None, None], + }) elif displayMode == ConfigurationWidget.TrayStarterMode: self.configItems = {
--- a/Preferences/ConfigurationPages/WebBrowserAppearancePage.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ConfigurationPages/WebBrowserAppearancePage.py Fri Mar 03 18:34:21 2017 +0100 @@ -4,7 +4,7 @@ # """ -Module implementing the Web Browser configuration page. +Module implementing the Web Browser Appearance configuration page. """ from __future__ import unicode_literals
--- a/Preferences/ConfigurationPages/WebBrowserPage.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ConfigurationPages/WebBrowserPage.py Fri Mar 03 18:34:21 2017 +0100 @@ -76,9 +76,6 @@ self.jsOpenWindowsCheckBox.setChecked( Preferences.getWebBrowser("JavaScriptCanOpenWindows")) - # TODO: Qt 5.8? -## self.jsCloseWindowsCheckBox.setChecked( -## Preferences.getWebBrowser("JavaScriptCanCloseWindows")) self.jsClipboardCheckBox.setChecked( Preferences.getWebBrowser("JavaScriptCanAccessClipboard")) self.pluginsCheckBox.setChecked( @@ -152,8 +149,28 @@ Preferences.getWebBrowser("SpatialNavigationEnabled")) self.linksInFocusChainCheckBox.setChecked( Preferences.getWebBrowser("LinksIncludedInFocusChain")) + try: + # Qt 5.8 + self.focusOnNavigationCheckBox.setChecked( + Preferences.getWebBrowser("FocusOnNavigationEnabled")) + except KeyError: + self.focusOnNavigationCheckBox.setEnabled(False) + self.xssAuditingCheckBox.setChecked( Preferences.getWebBrowser("XSSAuditingEnabled")) + try: + # Qt 5.8 + self.insecureContentsCheckBox.setChecked( + Preferences.getWebBrowser("AllowRunningInsecureContent")) + except KeyError: + self.insecureContentsCheckBox.setEnabled(False) + + try: + # Qt 5.8 + self.printBackgroundCheckBox.setChecked( + Preferences.getWebBrowser("PrintElementBackgrounds")) + except KeyError: + self.printBackgroundCheckBox.setEnabled(False) self.autoScrollGroupBox.setChecked( Preferences.getWebBrowser("AutoScrollEnabled")) @@ -164,10 +181,6 @@ Preferences.getWebBrowser("WebInspectorEnabled")) self.webInspectorPortSpinBox.setValue( Preferences.getWebBrowser("WebInspectorPort")) - - # TODO: Qt 5.8? - # Hide entries not yet supported - self.jsCloseWindowsCheckBox.hide() def save(self): """ @@ -206,10 +219,6 @@ Preferences.setWebBrowser( "JavaScriptCanOpenWindows", self.jsOpenWindowsCheckBox.isChecked()) - # TODO: Qt 5.8? -## Preferences.setWebBrowser( -## "JavaScriptCanCloseWindows", -## self.jsCloseWindowsCheckBox.isChecked()) Preferences.setWebBrowser( "JavaScriptCanAccessClipboard", self.jsClipboardCheckBox.isChecked()) @@ -276,9 +285,23 @@ Preferences.setWebBrowser( "LinksIncludedInFocusChain", self.linksInFocusChainCheckBox.isChecked()) + if self.focusOnNavigationCheckBox.isEnabled(): + Preferences.setWebBrowser( + "FocusOnNavigationEnabled", + self.focusOnNavigationCheckBox.isChecked()) + Preferences.setWebBrowser( "XSSAuditingEnabled", self.xssAuditingCheckBox.isChecked()) + if self.insecureContentsCheckBox.isEnabled(): + Preferences.setWebBrowser( + "AllowRunningInsecureContent", + self.insecureContentsCheckBox.isChecked()) + + if self.printBackgroundCheckBox.isEnabled(): + Preferences.setWebBrowser( + "PrintElementBackgrounds", + self.printBackgroundCheckBox.isChecked()) Preferences.setWebBrowser( "AutoScrollEnabled",
--- a/Preferences/ConfigurationPages/WebBrowserPage.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ConfigurationPages/WebBrowserPage.ui Fri Mar 03 18:34:21 2017 +0100 @@ -7,10 +7,10 @@ <x>0</x> <y>0</y> <width>616</width> - <height>1533</height> + <height>1610</height> </rect> </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> + <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <widget class="QLabel" name="headerLabel"> <property name="text"> @@ -264,8 +264,8 @@ <property name="title"> <string>JavaScript</string> </property> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> + <layout class="QVBoxLayout" name="verticalLayout_5"> + <item> <widget class="QCheckBox" name="jsOpenWindowsCheckBox"> <property name="toolTip"> <string>Select to allow JavaScript to open windows</string> @@ -275,17 +275,7 @@ </property> </widget> </item> - <item row="0" column="1"> - <widget class="QCheckBox" name="jsCloseWindowsCheckBox"> - <property name="toolTip"> - <string>Select to allow JavaScript to close windows</string> - </property> - <property name="text"> - <string>JavaScript can close windows</string> - </property> - </widget> - </item> - <item row="1" column="0"> + <item> <widget class="QCheckBox" name="jsClipboardCheckBox"> <property name="toolTip"> <string>Select to allow JavaScript to access the clipboard</string> @@ -370,7 +360,7 @@ <property name="title"> <string>Security</string> </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> + <layout class="QHBoxLayout" name="horizontalLayout_7"> <item> <widget class="QCheckBox" name="xssAuditingCheckBox"> <property name="toolTip"> @@ -385,6 +375,16 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="insecureContentsCheckBox"> + <property name="toolTip"> + <string>Select to allow HTTPS pages to run JavaScript, CSS, plugins or web-sockets from HTTP URLs</string> + </property> + <property name="text"> + <string>Allow to run insecure contents</string> + </property> + </widget> + </item> </layout> </widget> </item> @@ -587,7 +587,7 @@ <property name="title"> <string>Navigation</string> </property> - <layout class="QGridLayout" name="gridLayout_6"> + <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> <widget class="QCheckBox" name="spatialCheckBox"> <property name="toolTip"> @@ -616,6 +616,35 @@ </property> </widget> </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="focusOnNavigationCheckBox"> + <property name="toolTip"> + <string>Select to give the focus to the view whenever a navigation event occurs</string> + </property> + <property name="text"> + <string>Enable Focus on Navigation</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox_7"> + <property name="title"> + <string>Printing</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_6"> + <item> + <widget class="QCheckBox" name="printBackgroundCheckBox"> + <property name="toolTip"> + <string>Select to print the background of page elements as well</string> + </property> + <property name="text"> + <string>Print Element Backgrounds</string> + </property> + </widget> + </item> </layout> </widget> </item> @@ -781,20 +810,21 @@ <tabstop>errorPageCheckBox</tabstop> <tabstop>scrollingCheckBox</tabstop> <tabstop>fullscreenCheckBox</tabstop> + <tabstop>screenCaptureCheckBox</tabstop> + <tabstop>webGLCheckBox</tabstop> <tabstop>startupCombo</tabstop> <tabstop>homePageEdit</tabstop> <tabstop>setCurrentPageButton</tabstop> <tabstop>defaultHomeButton</tabstop> <tabstop>defaultSchemeCombo</tabstop> - <tabstop>javaScriptGroup</tabstop> <tabstop>jsOpenWindowsCheckBox</tabstop> - <tabstop>jsCloseWindowsCheckBox</tabstop> <tabstop>jsClipboardCheckBox</tabstop> <tabstop>pluginsCheckBox</tabstop> <tabstop>doNotTrackCheckBox</tabstop> <tabstop>sendRefererCheckBox</tabstop> <tabstop>refererWhitelistButton</tabstop> <tabstop>xssAuditingCheckBox</tabstop> + <tabstop>insecureContentsCheckBox</tabstop> <tabstop>expireHistory</tabstop> <tabstop>diskCacheCheckBox</tabstop> <tabstop>cacheSizeSpinBox</tabstop> @@ -802,6 +832,8 @@ <tabstop>imageSearchComboBox</tabstop> <tabstop>spatialCheckBox</tabstop> <tabstop>linksInFocusChainCheckBox</tabstop> + <tabstop>focusOnNavigationCheckBox</tabstop> + <tabstop>printBackgroundCheckBox</tabstop> <tabstop>autoScrollGroupBox</tabstop> <tabstop>autoScrollDividerSpinBox</tabstop> <tabstop>webInspectorGroup</tabstop>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.py Fri Mar 03 18:34:21 2017 +0100 @@ -0,0 +1,153 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the Web Browser Spell Checking configuration page. +""" + +from __future__ import unicode_literals + +from PyQt5.QtCore import pyqtSlot, Qt, QCoreApplication, QDir, QLibraryInfo, \ + QLocale +from PyQt5.QtWidgets import QListWidgetItem + +from .ConfigurationPageBase import ConfigurationPageBase +from .Ui_WebBrowserSpellCheckingPage import Ui_WebBrowserSpellCheckingPage + +import Preferences +import Globals + + +class WebBrowserSpellCheckingPage(ConfigurationPageBase, + Ui_WebBrowserSpellCheckingPage): + """ + Class implementing the Web Browser Spell Checking page. + """ + def __init__(self): + """ + Constructor + """ + super(WebBrowserSpellCheckingPage, self).__init__() + self.setupUi(self) + self.setObjectName("WebBrowserSpellCheckingPage") + + # set initial values + self.spellCheckEnabledCheckBox.setChecked( + Preferences.getWebBrowser("SpellCheckEnabled")) + self.on_spellCheckEnabledCheckBox_clicked() + + if Globals.isMacPlatform(): + dictionaryDirectories = { + QDir.cleanPath( + QCoreApplication.applicationDirPath() + + "/../Contents/Resources/qtwebengine_dictionaries"), + QDir.cleanPath( + QCoreApplication.applicationDirPath() + + "/../Contents/Frameworks/QtWebEngineCore.framework" + "/Resources/qtwebengine_dictionaries"), + } + else: + dictionaryDirectories = { + QDir.cleanPath( + QCoreApplication.applicationDirPath() + + "/qtwebengine_dictionaries"), + QDir.cleanPath( + QLibraryInfo.location(QLibraryInfo.DataPath) + + "/qtwebengine_dictionaries"), + } + self.spellCheckDictionaryDirectoriesEdit.setPlainText( + "\n".join(dictionaryDirectories)) + + for path in dictionaryDirectories: + directory = QDir(path) + fileNames = directory.entryList(["*.bdic"]) + for fileName in fileNames: + lang = fileName[:-5] + langStr = self.__createLanguageString(lang) + if self.spellCheckLanguagesList.findItems(langStr, + Qt.MatchExactly): + continue + + itm = QListWidgetItem(langStr, self.spellCheckLanguagesList) + itm.setData(Qt.UserRole, lang) + itm.setFlags(itm.flags() | Qt.ItemIsUserCheckable) + itm.setCheckState(Qt.Unchecked) + self.spellCheckLanguagesList.sortItems(Qt.AscendingOrder) + + spellCheckLanguages = Preferences.getWebBrowser("SpellCheckLanguages") + topIndex = 0 + for lang in spellCheckLanguages: + items = self.spellCheckLanguagesList.findItems( + self.__createLanguageString(lang), Qt.MatchExactly) + if items: + itm = items[0] + self.spellCheckLanguagesList.takeItem( + self.spellCheckLanguagesList.row(itm)) + self.spellCheckLanguagesList.insertItem(topIndex, itm) + itm.setCheckState(Qt.Checked) + topIndex += 1 + + if self.spellCheckLanguagesList.count(): + self.noLanguagesLabel.hide() + else: + self.spellCheckLanguagesList.hide() + + def save(self): + """ + Public slot to save the Help Viewers configuration. + """ + languages = [] + for row in range(self.spellCheckLanguagesList.count()): + itm = self.spellCheckLanguagesList.item(row) + if itm.checkState() == Qt.Checked: + languages.append(itm.data(Qt.UserRole)) + + Preferences.setWebBrowser( + "SpellCheckEnabled", + self.spellCheckEnabledCheckBox.isChecked()) + Preferences.setWebBrowser( + "SpellCheckLanguages", + languages) + + @pyqtSlot() + def on_spellCheckEnabledCheckBox_clicked(self): + """ + Private slot handling a change of the spell checking enabled state. + """ + enable = self.spellCheckEnabledCheckBox.isChecked() + self.noLanguagesLabel.setEnabled(enable) + self.spellCheckLanguagesList.setEnabled(enable) + + def __createLanguageString(self, language): + """ + Private method to create a language string given a language identifier. + + @param language language identifier + @type str + @return language string + @rtype str + """ + loc = QLocale(language) + + if loc.language() == QLocale.C: + return language + + country = QLocale.countryToString(loc.country()) + lang = QLocale.languageToString(loc.language()) + languageString = "{0}/{1} [{2}]".format(lang, country, language) + return languageString + + +def create(dlg): + """ + Module function to create the configuration page. + + @param dlg reference to the configuration dialog + @type Configuration + @return reference to the instantiated page + @rtype ConfigurationPageBase + """ + page = WebBrowserSpellCheckingPage() + return page
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui Fri Mar 03 18:34:21 2017 +0100 @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>WebBrowserSpellCheckingPage</class> + <widget class="QWidget" name="WebBrowserSpellCheckingPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>499</width> + <height>550</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QLabel" name="headerLabel"> + <property name="text"> + <string><b>Configure Web Browser Spell Checking</b></string> + </property> + </widget> + </item> + <item> + <widget class="Line" name="line17"> + <property name="frameShape"> + <enum>QFrame::HLine</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Sunken</enum> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Spell Check Options</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QCheckBox" name="spellCheckEnabledCheckBox"> + <property name="toolTip"> + <string>Select to enable spell checking for editable parts</string> + </property> + <property name="text"> + <string>Enable Spell Checking</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="noLanguagesLabel"> + <property name="text"> + <string>No languages found</string> + </property> + </widget> + </item> + <item> + <widget class="QListWidget" name="spellCheckLanguagesList"> + <property name="dragEnabled"> + <bool>true</bool> + </property> + <property name="dragDropMode"> + <enum>QAbstractItemView::InternalMove</enum> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::MultiSelection</enum> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox_2"> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>150</height> + </size> + </property> + <property name="title"> + <string>Dictionary Directories</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QPlainTextEdit" name="spellCheckDictionaryDirectoriesEdit"> + <property name="tabChangesFocus"> + <bool>true</bool> + </property> + <property name="lineWrapMode"> + <enum>QPlainTextEdit::NoWrap</enum> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <tabstops> + <tabstop>spellCheckEnabledCheckBox</tabstop> + <tabstop>spellCheckLanguagesList</tabstop> + <tabstop>spellCheckDictionaryDirectoriesEdit</tabstop> + </tabstops> + <resources/> + <connections/> +</ui>
--- a/Preferences/ShortcutDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ShortcutDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -110,7 +110,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>keyEdit</tabstop>
--- a/Preferences/ShortcutsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ShortcutsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -123,7 +123,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Preferences/ToolConfigurationDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ToolConfigurationDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -316,7 +316,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <customwidgets> <customwidget>
--- a/Preferences/ToolGroupConfigurationDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ToolGroupConfigurationDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -186,7 +186,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6" /> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>groupsList</tabstop>
--- a/Preferences/ViewProfileSidebarsDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ViewProfileSidebarsDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -114,7 +114,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>eprtCheckBox</tabstop>
--- a/Preferences/ViewProfileToolboxesDialog.ui Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/ViewProfileToolboxesDialog.ui Fri Mar 03 18:34:21 2017 +0100 @@ -114,7 +114,6 @@ </item> </layout> </widget> - <layoutdefault spacing="6" margin="6"/> <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> <tabstops> <tabstop>epltCheckBox</tabstop>
--- a/Preferences/__init__.py Sun Feb 26 15:54:49 2017 +0100 +++ b/Preferences/__init__.py Fri Mar 03 18:34:21 2017 +0100 @@ -746,6 +746,8 @@ "DeterminePyFromProject": True, "TasksProjectAutoSave": True, "TasksProjectRescanOnOpen": True, + "DebugClientsHistory": [], + "DebuggerInterpreterHistory": [], } # defaults for the multi project settings @@ -1064,6 +1066,9 @@ "DownloadManagerSize": QSize(400, 300), "DownloadManagerPosition": QPoint(), "DownloadManagerDownloads": [], + # Spell Checking + "SpellCheckEnabled": False, + "SpellCheckLanguages": [], # Sync "SyncEnabled": False, "SyncBookmarks": True, @@ -1133,9 +1138,6 @@ QWebEngineSettings.AutoLoadImages), "JavaScriptCanOpenWindows": webEngineSettings.testAttribute( QWebEngineSettings.JavascriptCanOpenWindows), - # TODO: Qt 5.8? -## "JavaScriptCanCloseWindows": webEngineSettings.testAttribute( -## QWebEngineSettings.JavascriptCanCloseWindows), "JavaScriptCanAccessClipboard": webEngineSettings.testAttribute( QWebEngineSettings.JavascriptCanAccessClipboard), "PluginsEnabled": webEngineSettings.testAttribute( @@ -1173,6 +1175,18 @@ }) except AttributeError: pass + try: + # Qt 5.8+ + cls.webBrowserDefaults.update({ + "FocusOnNavigationEnabled": webEngineSettings.testAttribute( + QWebEngineSettings.FocusOnNavigationEnabled), + "PrintElementBackgrounds": webEngineSettings.testAttribute( + QWebEngineSettings.PrintElementBackgrounds), + "AllowRunningInsecureContent": webEngineSettings.testAttribute( + QWebEngineSettings.AllowRunningInsecureContent), + }) + except AttributeError: + pass cls.webEngineSettingsIntitialized = True @@ -1855,7 +1869,10 @@ return prefClass.uiDefaults[key] elif key in "ViewProfiles2": profiles = prefClass.settings.value("UI/ViewProfiles2") - if profiles is not None: + if profiles is None: + # use the defaults + viewProfiles = prefClass.uiDefaults["ViewProfiles2"] + else: viewProfiles = {} profiles = json.loads(profiles) for name in ["edit", "debug"]: @@ -1867,36 +1884,6 @@ for bs in profiles[name][2]: viewProfiles[name][2].append( QByteArray.fromBase64(bs.encode("utf-8"))) - else: - # migrate from the old ViewProfiles settings - try: - profiles = prefClass.settings.value("UI/ViewProfiles") - except TypeError: - profiles = None - if profiles is not None: - if isinstance(profiles, basestring): - profiles = eval(profiles) - viewProfiles = {} - for name in ["edit", "debug"]: - viewProfiles[name] = [ - QByteArray(profiles[name][4]), - profiles[name][5][:], - [] - ] - for b in profiles[name][6]: - viewProfiles[name][2].append(QByteArray(b)) - # correct some entries - while (len(viewProfiles[name][1]) < len( - prefClass.uiDefaults["ViewProfiles2"][name][1])): - viewProfiles[name][1].append(True) - while len(viewProfiles[name][2]) < len( - prefClass.uiDefaults["ViewProfiles2"][name][2]): - viewProfiles[name][2].append(QByteArray()) - else: - # use the defaults - viewProfiles = prefClass.uiDefaults["ViewProfiles2"] - # Remove unused setting - prefClass.settings.remove("UI/ViewProfiles")