Merge with default to be in sync with Detlev's changes. Variables Viewer

Mon, 20 May 2019 22:44:12 +0200

author
T.Rzepka <Tobias.Rzepka@gmail.com>
date
Mon, 20 May 2019 22:44:12 +0200
branch
Variables Viewer
changeset 7018
6512c2183bf7
parent 7013
a3904952065b (current diff)
parent 7017
11a018e92f01 (diff)
child 7019
a1b25790bc5c

Merge with default to be in sync with Detlev's changes.

eric6/ThirdParty/EditorConfig/LICENSE.txt file | annotate | diff | comparison | revisions
--- a/docs/changelog	Wed May 15 22:26:22 2019 +0200
+++ b/docs/changelog	Mon May 20 22:44:12 2019 +0200
@@ -1,20 +1,44 @@
 Change Log
 ----------
-Version 19.xx:
+Version 19.6:
+- bug fixes
+- Editor
+  -- Python Typing
+     --- added support for 'from ... import (...)'
+     --- changed the indentation when the previous line ends with
+         '(', '[' or '{'
+  -- Ruby Typing
+     --- changed the indentation when the previous line ends with
+         '(', '[' or '{'
+- Mercurial Interface
+  -- extended the log browser to start with showing all incoming and the
+     first batch of local changesets
+  -- show different icons for incoming, outgoing and normal changesets
+  -- added capability to search and filter based on the changeset phase
+  -- added support for the 'closehead' extension (as of Mercurial 4.8)
+  -- added support for the '--keep' flag of the shelve command (as of
+     Mercurial 5.0)
+- Shell
+  -- added capability to place the Shell window in the left or right side
+     container
+- setup.py Wizard
+  -- updated the Trove classifiers list
+  -- added capability to retrieve the Trove classifiers list from PyPI
 - Variables Viewer
-  -- reimplemented Variables Viewer using QTreeView, with unlimited access to
+  -- reimplemented Variables Viewer using QTreeView with unlimited access to
      big arrays, dicts, etc. because elements are lazy loaded
-  -- highlighting of till unloaded (yellow background) and last changed
-     variable(s) (green background)
+  -- highlighting of still unloaded (default: yellow background) and last
+     changed variable(s) (default: green background)
   -- colors for highlighting are configurable through Debugger->General
-  -- expand / collapse variables with childs on double click on first column,
+  -- expand / collapse variables with children on double click on first column,
      in all other cases display detail window
-  -- handling of dict views improved. They could be expanded like lists
-  -- show tooltips on all elements which doesn't fit into current column width
+  -- handling of dict views improved (can be expanded like lists)
+  -- show tooltips on all elements which don't fit into current column width
   -- new options in the context menu, e.g. expand / collapse all child nodes
-  -- bug fixes, e.g. sort order of mixed list elements, unicode handling, ...
+- Third Party packages
+  -- updated EditorConfig to 0.12.2
 
-Version 19.05:
+Version 19.5:
 - bug fixes
 - General
   -- added functionality to provide eric6 via PyPI. Installation can be
--- a/eric6.e4p	Wed May 15 22:26:22 2019 +0200
+++ b/eric6.e4p	Mon May 20 22:44:12 2019 +0200
@@ -626,6 +626,10 @@
     <Source>eric6/Plugins/VcsPlugins/vcsGit/ProjectHelper.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsGit/__init__.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsGit/git.py</Source>
+    <Source>eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/HgCloseHeadSelectionDialog.py</Source>
+    <Source>eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/ProjectHelper.py</Source>
+    <Source>eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/__init__.py</Source>
+    <Source>eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/closehead.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/Config.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/__init__.py</Source>
@@ -1734,6 +1738,7 @@
     <Source>setup.py</Source>
   </Sources>
   <Forms>
+    <Form>eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/HgCloseHeadSelectionDialog.ui</Form>
     <Form>eric6/CondaInterface/CondaExecDialog.ui</Form>
     <Form>eric6/CondaInterface/CondaExportDialog.ui</Form>
     <Form>eric6/CondaInterface/CondaInfoDialog.ui</Form>
@@ -2284,14 +2289,14 @@
     <Other>docs/THANKS</Other>
     <Other>docs/changelog</Other>
     <Other>eric6.e4p</Other>
-    <Other>eric6/APIs/Python/zope-2.10.7.api</Other>
-    <Other>eric6/APIs/Python/zope-2.11.2.api</Other>
-    <Other>eric6/APIs/Python/zope-3.3.1.api</Other>
     <Other>eric6/APIs/Python3/PyQt4.bas</Other>
     <Other>eric6/APIs/Python3/PyQt5.bas</Other>
     <Other>eric6/APIs/Python3/QScintilla2.bas</Other>
     <Other>eric6/APIs/Python3/eric6.api</Other>
     <Other>eric6/APIs/Python3/eric6.bas</Other>
+    <Other>eric6/APIs/Python/zope-2.10.7.api</Other>
+    <Other>eric6/APIs/Python/zope-2.11.2.api</Other>
+    <Other>eric6/APIs/Python/zope-3.3.1.api</Other>
     <Other>eric6/APIs/QSS/qss.api</Other>
     <Other>eric6/APIs/Ruby/Ruby-1.8.7.api</Other>
     <Other>eric6/APIs/Ruby/Ruby-1.8.7.bas</Other>
@@ -2428,7 +2433,9 @@
     <Other>eric6/Styles</Other>
     <Other>eric6/ThirdParty/CharDet/LICENSE</Other>
     <Other>eric6/ThirdParty/CharDet/README.rst</Other>
-    <Other>eric6/ThirdParty/EditorConfig/LICENSE.txt</Other>
+    <Other>eric6/ThirdParty/EditorConfig/COPYING</Other>
+    <Other>eric6/ThirdParty/EditorConfig/LICENSE.BSD</Other>
+    <Other>eric6/ThirdParty/EditorConfig/LICENSE.PSF</Other>
     <Other>eric6/ThirdParty/EditorConfig/README.rst</Other>
     <Other>eric6/ThirdParty/Jasy/jasy/license.md</Other>
     <Other>eric6/ThirdParty/Pygments/pygments/AUTHORS</Other>
--- a/eric6/APIs/Python3/eric6.api	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/APIs/Python3/eric6.api	Mon May 20 22:44:12 2019 +0200
@@ -290,6 +290,7 @@
 eric6.DebugClients.Python.DebugClient.DebugClient?1()
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.Indicators?7
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.absPath?4(fn)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.arrayTypes?7
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.clientCapabilities?7
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.close?4(fd)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.connectDebugger?4(port, remoteAddress=None, redirect=True)
@@ -332,6 +333,9 @@
 eric6.DebugClients.Python.DebugClientCapabilities.HasProfiler?7
 eric6.DebugClients.Python.DebugClientCapabilities.HasShell?7
 eric6.DebugClients.Python.DebugClientCapabilities.HasUnittest?7
+eric6.DebugClients.Python.DebugConfig.BatchSize?7
+eric6.DebugClients.Python.DebugConfig.ConfigKnownQtTypes?7
+eric6.DebugClients.Python.DebugConfig.ConfigQtNames?7
 eric6.DebugClients.Python.DebugConfig.ConfigVarTypeStrings?7
 eric6.DebugClients.Python.DebugUtilities.ArgInfo?7
 eric6.DebugClients.Python.DebugUtilities._getfullargs?5(co)
@@ -344,26 +348,25 @@
 eric6.DebugClients.Python.DebugVariables.BaseResolver.getDictionary?4(var)
 eric6.DebugClients.Python.DebugVariables.BaseResolver.resolve?4(var, attribute)
 eric6.DebugClients.Python.DebugVariables.DefaultResolver.getDictionary?4(var)
-eric6.DebugClients.Python.DebugVariables.DefaultResolver.resolve?4(var, attribute)
 eric6.DebugClients.Python.DebugVariables.DictResolver.getDictionary?4(var)
 eric6.DebugClients.Python.DebugVariables.DictResolver.keyToStr?4(key)
 eric6.DebugClients.Python.DebugVariables.DictResolver.resolve?4(var, attribute)
+eric6.DebugClients.Python.DebugVariables.DictViewResolver.getDictionary?4(var)
+eric6.DebugClients.Python.DebugVariables.DictViewResolver.resolve?4(var, attribute)
 eric6.DebugClients.Python.DebugVariables.ListResolver.getDictionary?4(var)
 eric6.DebugClients.Python.DebugVariables.ListResolver.resolve?4(var, attribute)
-eric6.DebugClients.Python.DebugVariables.MaxItemsToHandle?7
 eric6.DebugClients.Python.DebugVariables.MultiValueDictResolver.getDictionary?4(var)
 eric6.DebugClients.Python.DebugVariables.MultiValueDictResolver.resolve?4(var, attribute)
 eric6.DebugClients.Python.DebugVariables.NdArrayResolver.getDictionary?4(var)
 eric6.DebugClients.Python.DebugVariables.NdArrayResolver.resolve?4(var, attribute)
 eric6.DebugClients.Python.DebugVariables.SetResolver.getDictionary?4(var)
 eric6.DebugClients.Python.DebugVariables.SetResolver.resolve?4(var, attribute)
-eric6.DebugClients.Python.DebugVariables.TooLargeAttribute?7
-eric6.DebugClients.Python.DebugVariables.TooLargeMessage?7
 eric6.DebugClients.Python.DebugVariables._TypeMap?8
 eric6.DebugClients.Python.DebugVariables._initTypeMap?5()
 eric6.DebugClients.Python.DebugVariables.arrayResolver?7
 eric6.DebugClients.Python.DebugVariables.defaultResolver?7
 eric6.DebugClients.Python.DebugVariables.dictResolver?7
+eric6.DebugClients.Python.DebugVariables.dictViewResolver?7
 eric6.DebugClients.Python.DebugVariables.getType?4(obj)
 eric6.DebugClients.Python.DebugVariables.listResolver?7
 eric6.DebugClients.Python.DebugVariables.multiValueDictResolver?7
@@ -612,10 +615,11 @@
 eric6.Debugger.DebugViewer.DebugViewer.currentWidget?4()
 eric6.Debugger.DebugViewer.DebugViewer.handleClientStack?4(stack)
 eric6.Debugger.DebugViewer.DebugViewer.handleDebuggingStarted?4()
+eric6.Debugger.DebugViewer.DebugViewer.handlePreferencesChanged?4()
 eric6.Debugger.DebugViewer.DebugViewer.handleResetUI?4()
 eric6.Debugger.DebugViewer.DebugViewer.initCallStackViewer?4(projectMode)
 eric6.Debugger.DebugViewer.DebugViewer.isCallTraceEnabled?4()
-eric6.Debugger.DebugViewer.DebugViewer.preferencesChanged?4()
+eric6.Debugger.DebugViewer.DebugViewer.preferencesChanged?7
 eric6.Debugger.DebugViewer.DebugViewer.setCallTraceToProjectMode?4(enabled)
 eric6.Debugger.DebugViewer.DebugViewer.setCurrentWidget?4(widget)
 eric6.Debugger.DebugViewer.DebugViewer.setDebugger?4(debugUI)
@@ -627,7 +631,7 @@
 eric6.Debugger.DebugViewer.DebugViewer.showVariables?4(vlist, showGlobals)
 eric6.Debugger.DebugViewer.DebugViewer.showVariablesTab?4(showGlobals)
 eric6.Debugger.DebugViewer.DebugViewer.sourceFile?7
-eric6.Debugger.DebugViewer.DebugViewer?1(debugServer, docked, vm, parent=None)
+eric6.Debugger.DebugViewer.DebugViewer?1(debugServer, parent=None)
 eric6.Debugger.DebuggerInterfaceNone.ClientDefaultCapabilities?7
 eric6.Debugger.DebuggerInterfaceNone.ClientTypeAssociations?7
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.flush?4()
@@ -756,29 +760,40 @@
 eric6.Debugger.VariablesFilterDialog.VariablesFilterDialog.on_buttonBox_clicked?4(button)
 eric6.Debugger.VariablesFilterDialog.VariablesFilterDialog.setSelection?4(lList, gList)
 eric6.Debugger.VariablesFilterDialog.VariablesFilterDialog?1(parent=None, name=None, modal=False)
-eric6.Debugger.VariablesViewer.ArrayElementVarItem?1(parent, dvar, dvalue, dtype)
-eric6.Debugger.VariablesViewer.SpecialArrayElementVarItem?1(parent, dvar, dvalue, dtype, frmnr, globalScope)
-eric6.Debugger.VariablesViewer.SpecialVarItem.expand?4()
-eric6.Debugger.VariablesViewer.SpecialVarItem?1(parent, dvar, dvalue, dtype, frmnr, globalScope)
-eric6.Debugger.VariablesViewer.VariableItem.Indicators?7
+eric6.Debugger.VariablesViewer.SORT_ROLE?7
 eric6.Debugger.VariablesViewer.VariableItem.Type2Indicators?7
-eric6.Debugger.VariablesViewer.VariableItem._buildKey?5()
-eric6.Debugger.VariablesViewer.VariableItem.attachDummy?4()
-eric6.Debugger.VariablesViewer.VariableItem.collapse?4()
-eric6.Debugger.VariablesViewer.VariableItem.data?4(column, role)
-eric6.Debugger.VariablesViewer.VariableItem.deleteChildren?4()
-eric6.Debugger.VariablesViewer.VariableItem.expand?4()
-eric6.Debugger.VariablesViewer.VariableItem.extractId?4(var)
-eric6.Debugger.VariablesViewer.VariableItem.extractIndicators?4(var)
-eric6.Debugger.VariablesViewer.VariableItem.getId?4()
-eric6.Debugger.VariablesViewer.VariableItem.getValue?4()
-eric6.Debugger.VariablesViewer.VariableItem?1(parent, dvar, dvalue, dtype)
-eric6.Debugger.VariablesViewer.VariablesViewer.collapseItem?4(parentItem)
-eric6.Debugger.VariablesViewer.VariablesViewer.expandItem?4(parentItem)
+eric6.Debugger.VariablesViewer.VariableItem.absolutCount?4()
+eric6.Debugger.VariablesViewer.VariableItem.arrayTypes?7
+eric6.Debugger.VariablesViewer.VariableItem.noOfItemsStr?7
+eric6.Debugger.VariablesViewer.VariableItem.nonExpandableTypes?7
+eric6.Debugger.VariablesViewer.VariableItem.populated?4()
+eric6.Debugger.VariablesViewer.VariableItem.rx_nonprintable?7
+eric6.Debugger.VariablesViewer.VariableItem?1(parent, dvar, dtype, dvalue)
+eric6.Debugger.VariablesViewer.VariablesModel.clear?4(reset=False)
+eric6.Debugger.VariablesViewer.VariablesModel.columnCount?4(parent=QModelIndex())
+eric6.Debugger.VariablesViewer.VariablesModel.data?4(index, role=Qt.DisplayRole)
+eric6.Debugger.VariablesViewer.VariablesModel.expand?7
+eric6.Debugger.VariablesViewer.VariablesModel.flags?4(index)
+eric6.Debugger.VariablesViewer.VariablesModel.getMore?4()
+eric6.Debugger.VariablesViewer.VariablesModel.handlePreferencesChanged?4()
+eric6.Debugger.VariablesViewer.VariablesModel.hasChildren?4(parent=QModelIndex())
+eric6.Debugger.VariablesViewer.VariablesModel.headerData?4(section, orientation, role=Qt.DisplayRole)
+eric6.Debugger.VariablesViewer.VariablesModel.index?4(row, column, parent=QModelIndex())
+eric6.Debugger.VariablesViewer.VariablesModel.parent?4(child)
+eric6.Debugger.VariablesViewer.VariablesModel.resetModifiedMarker?4(parentIdx=QModelIndex(), pathlist=())
+eric6.Debugger.VariablesViewer.VariablesModel.rowCount?4(parent=QModelIndex())
+eric6.Debugger.VariablesViewer.VariablesModel.setExpanded?4(index, state)
+eric6.Debugger.VariablesViewer.VariablesModel.showVariables?4(vlist, frmnr, pathlist=None)
+eric6.Debugger.VariablesViewer.VariablesModel?1(treeView, globalScope)
+eric6.Debugger.VariablesViewer.VariablesProxyModel.hasChildren?4(parent)
+eric6.Debugger.VariablesViewer.VariablesProxyModel.setExpanded?4(index, state)
+eric6.Debugger.VariablesViewer.VariablesProxyModel?1(parent=None)
 eric6.Debugger.VariablesViewer.VariablesViewer.handleResetUI?4()
-eric6.Debugger.VariablesViewer.VariablesViewer.mouseDoubleClickEvent?4(mouseEvent)
+eric6.Debugger.VariablesViewer.VariablesViewer.preferencesChanged?7
+eric6.Debugger.VariablesViewer.VariablesViewer.resizeEvent?4(event)
 eric6.Debugger.VariablesViewer.VariablesViewer.showVariable?4(vlist)
 eric6.Debugger.VariablesViewer.VariablesViewer.showVariables?4(vlist, frmnr)
+eric6.Debugger.VariablesViewer.VariablesViewer.verticalScrollbarValueChanged?4(value)
 eric6.Debugger.VariablesViewer.VariablesViewer?1(viewer, globalScope, parent=None)
 eric6.Debugger.WatchPointModel.WatchPointModel.addWatchPoint?4(cond, special, properties)
 eric6.Debugger.WatchPointModel.WatchPointModel.columnCount?4(parent=None)
@@ -4016,7 +4031,7 @@
 eric6.PipInterface.Pip.Pip.getUserConfig?4()
 eric6.PipInterface.Pip.Pip.getVirtualenvConfig?4(venvName)
 eric6.PipInterface.Pip.Pip.getVirtualenvInterpreter?4(venvName)
-eric6.PipInterface.Pip.Pip.getVirtualenvNames?4()
+eric6.PipInterface.Pip.Pip.getVirtualenvNames?4(noRemote=False)
 eric6.PipInterface.Pip.Pip.installPackages?4(packages, venvName="", userSite=False, interpreter="")
 eric6.PipInterface.Pip.Pip.installPip?4(venvName, userSite=False)
 eric6.PipInterface.Pip.Pip.installRequirements?4(venvName)
@@ -5695,6 +5710,15 @@
 eric6.Plugins.VcsPlugins.vcsGit.git.Git.vcsTag?4(name, revision=None, tagName=None)
 eric6.Plugins.VcsPlugins.vcsGit.git.Git.vcsUpdate?4(name, noDialog=False, revision=None)
 eric6.Plugins.VcsPlugins.vcsGit.git.Git?1(plugin, parent=None, name=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.HgCloseHeadSelectionDialog.getData?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.HgCloseHeadSelectionDialog?1(vcs, ppath, parent=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.CloseheadProjectHelper.initActions?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.CloseheadProjectHelper.initMenu?4(mainMenu)
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.CloseheadProjectHelper.menuTitle?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.CloseheadProjectHelper?1()
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.Closehead.hgCloseheads?4(name, revisions=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.Closehead?1(vcs)
 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()
@@ -5956,7 +5980,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_modeComboBox_currentIndexChanged?4(index)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_nextButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_passwordCheckBox_toggled?4(isOn)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_refreshButton_clicked?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_refreshButton_clicked?4(addNext=False)
 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)
@@ -5967,7 +5991,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_upButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.show?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.start?4(fn, bundle=None, isFile=False, noEntries=0)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog?1(vcs, mode="log", parent=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog?1(vcs, mode="", parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.getParameters?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.on_bookmarkButton_toggled?4(checked)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.on_bookmarkCombo_editTextChanged?4(txt)
@@ -6322,7 +6346,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog.start?4(projectDir)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveDataDialog.HgShelveDataDialog.getData?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveDataDialog.HgShelveDataDialog?1(parent=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveDataDialog.HgShelveDataDialog?1(version, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelvesSelectionDialog.HgShelvesSelectionDialog.getSelectedShelves?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelvesSelectionDialog.HgShelvesSelectionDialog.on_shelvesList_itemSelectionChanged?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelvesSelectionDialog.HgShelvesSelectionDialog?1(message, shelveNames, parent=None)
@@ -7263,6 +7287,7 @@
 eric6.Plugins.WizardPlugins.QRegularExpressionWizard.QRegularExpressionWizardServer.main?4()
 eric6.Plugins.WizardPlugins.QRegularExpressionWizard.QRegularExpressionWizardServer.rxExecute?4(regexp, options, text, startpos)
 eric6.Plugins.WizardPlugins.QRegularExpressionWizard.QRegularExpressionWizardServer.rxValidate?4(regexp, options)
+eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.ClassifiersUrl?7
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.getCode?4(indLevel, indString)
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_addExludePatternButton_clicked?4()
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_addModuleButton_clicked?4()
@@ -7276,6 +7301,7 @@
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_excludePatternEdit_returnPressed?4()
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_excludePatternEdit_textChanged?4(txt)
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_excludePatternList_itemSelectionChanged?4()
+eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_localClassifiersButton_clicked?4()
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_modulesList_itemSelectionChanged?4()
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_packageDirButton_clicked?4()
 eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.SetupWizardDialog.on_packageEdit_returnPressed?4()
@@ -7336,6 +7362,7 @@
 eric6.Preferences.ConfigurationPages.CondaPage.CondaPage.save?4()
 eric6.Preferences.ConfigurationPages.CondaPage.CondaPage?1()
 eric6.Preferences.ConfigurationPages.CondaPage.create?4(dlg)
+eric6.Preferences.ConfigurationPages.ConfigurationPageBase.ConfigurationPageBase.colourChanged?7
 eric6.Preferences.ConfigurationPages.ConfigurationPageBase.ConfigurationPageBase.initColour?4(colourKey, button, prefMethod, byName=False, hasAlpha=False)
 eric6.Preferences.ConfigurationPages.ConfigurationPageBase.ConfigurationPageBase.polishPage?4()
 eric6.Preferences.ConfigurationPages.ConfigurationPageBase.ConfigurationPageBase.saveColours?4(prefMethod)
@@ -7359,6 +7386,14 @@
 eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.DebuggerGeneralPage.on_editAllowedHostButton_clicked?4()
 eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.DebuggerGeneralPage.save?4()
 eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.DebuggerGeneralPage?1()
+eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.PreviewModel.columnCount?4(parent=QModelIndex())
+eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.PreviewModel.data?4(index, role=Qt.DisplayRole)
+eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.PreviewModel.flags?4(index)
+eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.PreviewModel.index?4(row, column, parent=QModelIndex())
+eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.PreviewModel.parent?4(child)
+eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.PreviewModel.rowCount?4(parent=QModelIndex())
+eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.PreviewModel.setColor?4(key, bgcolour)
+eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.PreviewModel?1()
 eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.create?4(dlg)
 eric6.Preferences.ConfigurationPages.DebuggerPython2Page.DebuggerPython2Page.on_refreshButton_clicked?4()
 eric6.Preferences.ConfigurationPages.DebuggerPython2Page.DebuggerPython2Page.on_venvDlgButton_clicked?4()
@@ -8095,7 +8130,7 @@
 eric6.Project.Project.Project.hasProjectType?4(type_, progLanguage="")
 eric6.Project.Project.Project.initActions?4()
 eric6.Project.Project.Project.initFileTypes?4()
-eric6.Project.Project.Project.initMenu?4()
+eric6.Project.Project.Project.initMenus?4()
 eric6.Project.Project.Project.initToolbars?4(toolbarManager)
 eric6.Project.Project.Project.initVCS?4(vcsSystem=None, nooverride=False)
 eric6.Project.Project.Project.isDebugPropertiesLoaded?4()
@@ -10222,6 +10257,7 @@
 eric6.UI.UserInterface.UserInterface.masterPasswordChanged?7
 eric6.UI.UserInterface.UserInterface.maxFilePathLen?7
 eric6.UI.UserInterface.UserInterface.maxMenuFilePathLen?7
+eric6.UI.UserInterface.UserInterface.networkAccessManager?4()
 eric6.UI.UserInterface.UserInterface.notificationsEnabled?4()
 eric6.UI.UserInterface.UserInterface.onlineStateChanged?7
 eric6.UI.UserInterface.UserInterface.performVersionCheck?4(manual=True, alternative=0, showVersions=False)
@@ -10837,6 +10873,7 @@
 eric6.ViewManager.ViewManager.ViewManager.initFileMenu?4()
 eric6.ViewManager.ViewManager.ViewManager.initFileToolbar?4(toolbarManager)
 eric6.ViewManager.ViewManager.ViewManager.initMacroMenu?4()
+eric6.ViewManager.ViewManager.ViewManager.initSearchMenu?4()
 eric6.ViewManager.ViewManager.ViewManager.initSearchToolbars?4(toolbarManager)
 eric6.ViewManager.ViewManager.ViewManager.initSpellingToolbar?4(toolbarManager)
 eric6.ViewManager.ViewManager.ViewManager.initViewMenu?4()
@@ -10938,7 +10975,7 @@
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvDirectory?4(venvName)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvExecPath?4(venvName)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvInterpreter?4(venvName)
-eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvNames?4()
+eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvNames?4(noRemote=False)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvNamesForVariant?4(variant)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvVariant?4(venvName)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.isCondaEnvironment?4(venvName)
--- a/eric6/APIs/Python3/eric6.bas	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/APIs/Python3/eric6.bas	Mon May 20 22:44:12 2019 +0200
@@ -27,7 +27,6 @@
 ApplicationDiagramBuilder UMLDiagramBuilder
 ApplicationPage ConfigurationPageBase Ui_ApplicationPage
 ArgumentsError RuntimeError
-ArrayElementVarItem VariableItem
 ArrayResolver BaseResolver
 AssociationItem E5ArrowItem
 Attribute ClbrBaseClasses.Attribute VisibilityMixin
@@ -80,6 +79,8 @@
 ClickToFlashPlugin WebPluginInterface
 ClickToFlashWhitelistDialog QDialog Ui_ClickToFlashWhitelistDialog
 ClosedTabsManager QObject
+Closehead HgExtension
+CloseheadProjectHelper HgExtensionProjectHelper
 CodeDocumentationViewer QWidget
 CodeMetricsDialog QDialog Ui_CodeMetricsDialog
 CodeStyleAddBuiltinIgnoreDialog QDialog Ui_CodeStyleAddBuiltinIgnoreDialog
@@ -143,6 +144,7 @@
 DelayedFileWatcher QFileSystemWatcher
 DeleteFilesConfirmationDialog QDialog Ui_DeleteFilesConfirmationDialog
 DictResolver BaseResolver
+DictViewResolver ListResolver
 DiffColoursPage ConfigurationPageBase Ui_DiffColoursPage
 DiffDialog QWidget Ui_DiffDialog
 DiffHighlighter E5GenericDiffHighlighter
@@ -435,6 +437,7 @@
 HgBundleDialog QDialog Ui_HgBundleDialog
 HgClient QObject
 HgClientPromptDialog QDialog Ui_HgClientPromptDialog
+HgCloseHeadSelectionDialog QDialog Ui_HgCloseHeadSelectionDialog
 HgCommandDialog QDialog Ui_HgCommandDialog
 HgCommitDialog QWidget Ui_HgCommitDialog
 HgConflictsListDialog QWidget Ui_HgConflictsListDialog
@@ -708,6 +711,7 @@
 PreferencesLexer QObject
 PreferencesLexerError Exception
 PreferencesLexerLanguageError PreferencesLexerError
+PreviewModel QAbstractItemModel
 PreviewProcessingThread QThread
 Previewer QStackedWidget
 PreviewerHTML QWidget
@@ -840,8 +844,6 @@
 SnapshotTimer QWidget
 SnapshotWaylandGrabber QObject
 SortOptionsDialog QDialog Ui_SortOptionsDialog
-SpecialArrayElementVarItem SpecialVarItem
-SpecialVarItem VariableItem
 SpeedDial QObject
 SpeedDialReader QXmlStreamReader
 SpeedDialWriter QXmlStreamWriter
@@ -985,9 +987,10 @@
 Value str
 ValueChars str
 VariableDetailDialog QDialog Ui_VariableDetailDialog
-VariableItem QTreeWidgetItem
 VariablesFilterDialog QDialog Ui_VariablesFilterDialog
-VariablesViewer QTreeWidget
+VariablesModel QAbstractItemModel
+VariablesProxyModel QSortFilterProxyModel
+VariablesViewer QTreeView
 VcsCommandOptionsDialog QDialog Ui_VcsCommandOptionsDialog
 VcsGitPlugin QObject
 VcsMercurialPlugin QObject
--- a/eric6/Debugger/DebugUI.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Debugger/DebugUI.py	Mon May 20 22:44:12 2019 +0200
@@ -300,7 +300,7 @@
 
         self.restartAct = E5Action(
             self.tr('Restart'),
-            UI.PixmapCache.getIcon("restart.png"),
+            UI.PixmapCache.getIcon("debugRestart.png"),
             self.tr('Restart'), Qt.Key_F4, 0, self, 'dbg_restart_script')
         self.restartAct.setStatusTip(self.tr(
             'Restart the last debugged script'))
--- a/eric6/Debugger/DebugViewer.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Debugger/DebugViewer.py	Mon May 20 22:44:12 2019 +0200
@@ -50,13 +50,11 @@
     sourceFile = pyqtSignal(str, int)
     preferencesChanged = pyqtSignal()
     
-    def __init__(self, debugServer, docked, vm, parent=None):
+    def __init__(self, debugServer, parent=None):
         """
         Constructor
         
         @param debugServer reference to the debug server object (DebugServer)
-        @param docked flag indicating a dock window
-        @param vm reference to the viewmanager object
         @param parent parent widget (QWidget)
         """
         super(DebugViewer, self).__init__(parent)
--- a/eric6/Debugger/VariablesViewer.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Debugger/VariablesViewer.py	Mon May 20 22:44:12 2019 +0200
@@ -79,18 +79,18 @@
         # Take the additional methods into account for childCount
         self.methodCount = 0
         self.childCount = 0
-        self.currentCount = -1  # -1 indicates to (re)load childs
-        # Indicator that there are childs
-        self.hasChilds = False
+        self.currentCount = -1  # -1 indicates to (re)load children
+        # Indicator that there are children
+        self.hasChildren = False
         # Indicator that item was at least once fully populated
         self.wasPopulated = False
         
-        self.childs = []
+        self.children = []
         # Flag to prevent endless reloading of current item while waiting on
         # a response from debugger
         self.pendigFetch = False
         
-        # Set of childs items, which are displayed the first time or changed
+        # Set of child items, which are displayed the first time or changed
         self.newItems = set()
         self.changedItems = set()
         # Name including its ID if it's a dict, set, etc.
@@ -135,7 +135,8 @@
         """
         Private method to process the type of the variable.
         
-        If type is known to have childs, the corresponding flag is set.
+        If type is known to have children, the corresponding flag is set.
+        
         @param dtype type string
         @type str
         """
@@ -145,23 +146,24 @@
         # Qt related stuff?
         elif (dtype.startswith(ConfigQtNames) and
                 dtype.endswith(ConfigKnownQtTypes)):
-            self.hasChilds = True
+            self.hasChildren = True
             
         elif dtype in ('instance', 'class'):
-            self.hasChilds = True
+            self.hasChildren = True
         
         vtype = ConfigVarTypeDispStrings.get(dtype, dtype)
         # Unkown types should be expandable by default
         if vtype is dtype and dtype not in self.nonExpandableTypes:
-            self.hasChilds = True
+            self.hasChildren = True
         self.type = QCoreApplication.translate("VariablesViewer", vtype)
     
     def __getValue(self, dtype, dvalue):
         """
         Private method to process the variables value.
         
-        Define and limit value, set tooltip text.
-        If type is known to have childs, the corresponding flag is set.
+        Define and limit value, set tooltip text. If type is known to have
+        children, the corresponding flag is set.
+        
         @param dtype type string
         @type str
         @param dvalue value of variable encoded as utf-8
@@ -179,14 +181,14 @@
         if dtype == 'numpy.ndarray':
             self.childCount = int(dvalue.split('x')[0])
             dvalue = VariableItem.noOfItemsStr.format(dvalue)
-            self.hasChilds = True
+            self.hasChildren = True
         elif dtype in VariableItem.arrayTypes:
             self.childCount = int(dvalue)
             dvalue = VariableItem.noOfItemsStr.format(dvalue)
-            self.hasChilds = True
+            self.hasChildren = True
             
         elif dtype == "Shiboken.EnumType":
-            self.hasChilds = True
+            self.hasChildren = True
             
         elif dtype in ['str', 'unicode']:
             if VariableItem.rx_nonprintable.indexIn(dvalue) == -1:
@@ -229,9 +231,9 @@
     @property
     def absolutCount(self):
         """
-        Public property to get the total number of childs.
+        Public property to get the total number of children.
         
-        @return total number of childs
+        @return total number of children
         @rtype int
         """
         return self.childCount + self.methodCount
@@ -247,7 +249,7 @@
         return self.currentCount >= (self.childCount + self.methodCount)
 
 
-class VariableModel(QAbstractItemModel):
+class VariablesModel(QAbstractItemModel):
     """
     Class implementing the data model for QTreeView.
     
@@ -265,7 +267,7 @@
             variables
         @type bool
         """
-        super(VariableModel, self).__init__()
+        super(VariablesModel, self).__init__()
         self.treeView = treeView
         self.proxyModel = treeView.proxyModel
         
@@ -291,7 +293,7 @@
         @type bool
         """
         self.beginResetModel()
-        self.rootNode.childs = []
+        self.rootNode.children = []
         self.rootNode.newItems.clear()
         self.rootNode.changedItems.clear()
         self.rootNode.wasPopulated = False
@@ -312,7 +314,7 @@
         node = self.rootNode
         
         for childName in pathlist or []:
-            for item in node.childs:
+            for item in node.children:
                 if item.nameWithId == childName:
                     node = item
                     break
@@ -356,14 +358,14 @@
             parentIdx = QModelIndex()
             parent.methodCount = len(vlist)
         else:
-            row = parent.parent.childs.index(parent)
+            row = parent.parent.children.index(parent)
             parentIdx = self.createIndex(row, 0, parent)
         
         if itemStartIndex == -3:
             # Item doesn't exist any more
             parentIdx = self.parent(parentIdx)
             self.beginRemoveRows(parentIdx, row, row)
-            del parent.parent.childs[row]
+            del parent.parent.children[row]
             self.endRemoveRows()
             parent.parent.childCount -= 1
             return
@@ -388,11 +390,11 @@
         # Now update the table
         endIndex = idx + len(vlist)
         newChild = None
-        knownChildsCount = len(parent.childs)
+        knownChildrenCount = len(parent.children)
         while idx < endIndex:
             # Fetch next old item from last cycle
             try:
-                child = parent.childs[idx]
+                child = parent.children[idx]
             except IndexError:
                 child = None
             
@@ -407,10 +409,10 @@
             # Append or insert before already existing item
             if child is None or newChild and sort < child.sort:
                 self.beginInsertRows(parentIdx, idx, idx)
-                parent.childs.insert(idx, newItem)
-                if knownChildsCount <= idx and not parent.wasPopulated:
+                parent.children.insert(idx, newItem)
+                if knownChildrenCount <= idx and not parent.wasPopulated:
                     parent.newItems.add(newItem)
-                    knownChildsCount += 1
+                    knownChildrenCount += 1
                 else:
                     parent.changedItems.add(newItem)
                 self.endInsertRows()
@@ -443,10 +445,10 @@
             
             # Remove obsolete item
             self.beginRemoveRows(parentIdx, idx, idx)
-            parent.childs.remove(child)
+            parent.children.remove(child)
             self.endRemoveRows()
             # idx stay unchanged
-            knownChildsCount -= 1
+            knownChildrenCount -= 1
         
         # Remove items which are left over at the end of child list
         if itemStartIndex == -1:
@@ -466,10 +468,10 @@
         @param parentIdx the parent index as QModelIndex
         @type QModelIndex
         """
-        end = len(parent.childs)
+        end = len(parent.children)
         if end > parent.absolutCount:
             self.beginRemoveRows(parentIdx, parent.absolutCount, end)
-            del parent.childs[parent.absolutCount:]
+            del parent.children[parent.absolutCount:]
             self.endRemoveRows()
     
     def resetModifiedMarker(self, parentIdx=QModelIndex(), pathlist=()):
@@ -495,12 +497,12 @@
         posPaths = {x[pll] for x in posPaths if x[:pll] == pathlist}
         
         if posPaths:
-            for child in parent.childs:
-                if child.hasChilds and child.nameWithId in posPaths:
+            for child in parent.children:
+                if child.hasChildren and child.nameWithId in posPaths:
                     if child.currentCount >= 0:
                         # Discard loaded elements and refresh if still expanded
                         child.currentCount = -1
-                        row = parent.childs.index(child)
+                        row = parent.children.index(child)
                         newParentIdx = self.index(row, 0, parentIdx)
                         self.resetModifiedMarker(
                             newParentIdx, pathlist + (child.nameWithId,))
@@ -516,7 +518,7 @@
     
     def columnCount(self, parent=QModelIndex()):
         """
-        Public Qt slot to get the column count.
+        Public method to get the column count.
         
         @param parent the model parent
         @type QModelIndex
@@ -527,7 +529,7 @@
     
     def rowCount(self, parent=QModelIndex()):
         """
-        Public Qt slot to get the row count.
+        Public method to get the row count.
         
         @param parent the model parent
         @type QModelIndex
@@ -539,11 +541,11 @@
         else:
             node = self.rootNode
         
-        return len(node.childs)
+        return len(node.children)
     
     def flags(self, index):
         """
-        Public Qt slot to get the item flags.
+        Public method to get the item flags.
         
         @param index of item
         @type QModelIndex
@@ -557,24 +559,24 @@
     
     def hasChildren(self, parent=QModelIndex()):
         """
-        Public Qt slot to get a flag if parent has childs.
+        Public method to get a flag if parent has children.
         
         @param parent the model parent
         @type QModelIndex
-        @return flag if parent has childs
+        @return flag indicating parent has children
         @rtype bool
         """
         if not parent.isValid():
-            return self.rootNode.childs != []
+            return self.rootNode.children != []
         
-        return parent.internalPointer().hasChilds
+        return parent.internalPointer().hasChildren
     
     def index(self, row, column, parent=QModelIndex()):
         """
-        Public Qt slot to get the index of item at row:column of parent.
+        Public method to get the index of item at row:column of parent.
         
         @param row number of rows
-        @rtype int
+        @type int
         @param column number of columns
         @type int
         @param parent the model parent
@@ -590,11 +592,11 @@
         else:
             node = parent.internalPointer()
         
-        return self.createIndex(row, column, node.childs[row])
+        return self.createIndex(row, column, node.children[row])
     
     def parent(self, child):
         """
-        Public Qt slot to get the parent of the given child.
+        Public method to get the parent of the given child.
         
         @param child the model child node
         @type QModelIndex
@@ -613,12 +615,12 @@
         if parentNode == self.rootNode:
             return QModelIndex()
         
-        row = parentNode.parent.childs.index(parentNode)
+        row = parentNode.parent.children.index(parentNode)
         return self.createIndex(row, 0, parentNode)
     
     def data(self, index, role=Qt.DisplayRole):
         """
-        Public Qt slot get the role data of item.
+        Public method get the role data of item.
         
         @param index the model index
         @type QModelIndex
@@ -697,7 +699,7 @@
     
     def headerData(self, section, orientation, role=Qt.DisplayRole):
         """
-        Public Qt slot get the header names.
+        Public method get the header names.
         
         @param section the header section (row/coulumn)
         @type int
@@ -736,15 +738,15 @@
         if parent is None:
             parent = self.rootNode
         
-        for child in parent.childs:
-            if not child.hasChilds:
+        for child in parent.children:
+            if not child.hasChildren:
                 continue
             
             if pathlist + (child.nameWithId,) in self.openItems:
                 if child.populated:
                     index = None
                 else:
-                    idx = parent.childs.index(child)
+                    idx = parent.children.index(child)
                     index = self.createIndex(idx, 0, child)
                     self.expand.emit(index)
                 
@@ -840,7 +842,7 @@
         self.dataChanged.emit(idxStart, idxEnd)
 
 
-class ProxyModel(QSortFilterProxyModel):
+class VariablesProxyModel(QSortFilterProxyModel):
     """
     Class for handling the sort operations.
     """
@@ -851,25 +853,26 @@
         @param parent the parent model index
         @type QModelIndex
         """
-        super(ProxyModel, self).__init__(parent)
+        super(VariablesProxyModel, self).__init__(parent)
         self.setSortRole(SORT_ROLE)
     
     def hasChildren(self, parent):
         """
-        Public Qt slot to get a flag if parent has childs.
+        Public method to get a flag if parent has children.
         
         The given model index has to be transformed to the underlying source
         model to get the correct result.
+        
         @param parent the model parent
         @type QModelIndex
-        @return flag if parent has childs
+        @return flag if parent has children
         @rtype bool
         """
         return self.sourceModel().hasChildren(self.mapToSource(parent))
     
     def setExpanded(self, index, state):
         """
-        Public Qt slot to get a flag if parent has childs.
+        Public slot to get a flag if parent has children.
         
         The given model index has to be transformed to the underlying source
         model to get the correct result.
@@ -889,7 +892,7 @@
     debugged in a tree. Compound types will be shown with
     their main entry first. Once the subtree has been expanded, the
     individual entries will be shown. Double clicking an entry will
-    expand or collapse the item, if it has childs and the double click
+    expand or collapse the item, if it has children and the double click
     was performed on the first column of the tree, otherwise it'll
     popup a dialog showing the variables parameters in a more readable
     form. This is especially useful for lengthy strings.
@@ -923,9 +926,9 @@
         self.setUniformRowHeights(True)
         
         # Implements sorting and filtering
-        self.proxyModel = ProxyModel()
+        self.proxyModel = VariablesProxyModel()
         # Variable model implements the underlying data model
-        self.varModel = VariableModel(self, globalScope)
+        self.varModel = VariablesModel(self, globalScope)
         self.preferencesChanged.connect(self.varModel.handlePreferencesChanged)
         self.preferencesChanged.emit()  # Force initialization of colors
         self.proxyModel.setSourceModel(self.varModel)
@@ -986,7 +989,7 @@
         Public method to show variables in a list.
         
         @param vlist the list of variables to be displayed. Each
-                listentry is a tuple of three values.
+                list entry is a tuple of three values.
                 <ul>
                 <li>the variable name (string)</li>
                 <li>the variables type (string)</li>
@@ -1005,7 +1008,7 @@
         
         @param vlist the list of subitems to be displayed.
                 The first element gives the path of the
-                parent variable. Each other listentry is
+                parent variable. Each other list entry is
                 a tuple of three values.
                 <ul>
                 <li>the variable name (string)</li>
@@ -1024,7 +1027,7 @@
     
     def verticalScrollbarValueChanged(self, value):
         """
-        Public Qt slot informing about the scrollbar change.
+        Public slot informing about the scrollbar change.
         
         @param value current value of the vertical scrollbar
         @type int
@@ -1034,7 +1037,7 @@
     
     def resizeEvent(self, event):
         """
-        Protected Qt slot informing about the widget size change.
+        Protected slot informing about the widget size change.
         
         @param event information
         @type QResizeEvent
@@ -1050,7 +1053,7 @@
         @type QModelIndex
         """
         node = self.proxyModel.mapToSource(index).internalPointer()
-        if node.hasChilds and index.column() == 0:
+        if node.hasChildren and index.column() == 0:
             state = self.isExpanded(index)
             self.setExpanded(index, not state)
         else:
@@ -1073,24 +1076,22 @@
         self.menu = QMenu()
         self.menu.addAction(self.tr("Show Details..."), self.__showDetails)
         self.menu.addSeparator()
-        self.menu.addAction(self.tr("Expand childs"), self.__expandChilds)
-        self.menu.addAction(self.tr("Collapse childs"), self.__collapseChilds)
-        self.menu.addAction(self.tr("Collapse all"), self.collapseAll)
+        self.menu.addAction(self.tr("Expand"), self.__expandChildren)
+        self.menu.addAction(self.tr("Collapse"), self.__collapseChildren)
+        self.menu.addAction(self.tr("Collapse All"), self.collapseAll)
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Refresh"), self.__refreshView)
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Configure..."), self.__configure)
-        self.menu.addAction(
-            QCoreApplication.translate('DebugUI', 'Varia&bles Type Filter...'),
-            self.__configureFilter)
+        self.menu.addAction(self.tr("Variables Type Filter..."),
+                            self.__configureFilter)
         
         self.backMenu = QMenu()
         self.backMenu.addAction(self.tr("Refresh"), self.__refreshView)
         self.backMenu.addSeparator()
         self.backMenu.addAction(self.tr("Configure..."), self.__configure)
-        self.backMenu.addAction(
-            QCoreApplication.translate('DebugUI', 'Varia&bles Type Filter...'),
-            self.__configureFilter)
+        self.backMenu.addAction(self.tr("Variables Type Filter..."),
+                                self.__configureFilter)
     
     def __showContextMenu(self, coord):
         """
@@ -1105,27 +1106,27 @@
         else:
             self.backMenu.popup(gcoord)
     
-    def __expandChilds(self):
+    def __expandChildren(self):
         """
-        Private slot to expand all childs of current parent.
+        Private slot to expand all child items of current parent.
         """
         index = self.currentIndex()
         node = self.proxyModel.mapToSource(index).internalPointer()
-        for child in node.childs:
-            if child.hasChilds:
-                row = node.childs.index(child)
+        for child in node.children:
+            if child.hasChildren:
+                row = node.children.index(child)
                 idx = self.varModel.createIndex(row, 0, child)
                 idx = self.proxyModel.mapFromSource(idx)
                 self.expand(idx)
     
-    def __collapseChilds(self):
+    def __collapseChildren(self):
         """
-        Private slot to collapse all childs of current parent.
+        Private slot to collapse all child items of current parent.
         """
         index = self.currentIndex()
         node = self.proxyModel.mapToSource(index).internalPointer()
-        for child in node.childs:
-            row = node.childs.index(child)
+        for child in node.children:
+            row = node.children.index(child)
             idx = self.varModel.createIndex(row, 0, child)
             idx = self.proxyModel.mapFromSource(idx)
             if self.isExpanded(idx):
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Help/source.qhp	Mon May 20 22:44:12 2019 +0200
@@ -622,6 +622,11 @@
                 <section title="eric6.Plugins.VcsPlugins.vcsGit.git" ref="eric6.Plugins.VcsPlugins.vcsGit.git.html" />
               </section>
               <section title="eric6.Plugins.VcsPlugins.vcsMercurial" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.html">
+                <section title="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.html">
+                  <section title="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html" />
+                  <section title="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html" />
+                  <section title="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html" />
+                </section>
                 <section title="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html">
                   <section title="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage" ref="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html" />
                 </section>
@@ -2087,9 +2092,6 @@
       <keyword name="ArgumentsError (Constructor)" id="ArgumentsError (Constructor)" ref="eric6.E5Gui.E5Action.html#ArgumentsError.__init__" />
       <keyword name="ArgumentsError.__repr__" id="ArgumentsError.__repr__" ref="eric6.E5Gui.E5Action.html#ArgumentsError.__repr__" />
       <keyword name="ArgumentsError.__str__" id="ArgumentsError.__str__" ref="eric6.E5Gui.E5Action.html#ArgumentsError.__str__" />
-      <keyword name="ArrayElementVarItem" id="ArrayElementVarItem" ref="eric6.Debugger.VariablesViewer.html#ArrayElementVarItem" />
-      <keyword name="ArrayElementVarItem (Constructor)" id="ArrayElementVarItem (Constructor)" ref="eric6.Debugger.VariablesViewer.html#ArrayElementVarItem.__init__" />
-      <keyword name="ArrayItemsContainer" id="ArrayItemsContainer" ref="eric6.DebugClients.Python.DebugVariables.html#ArrayItemsContainer" />
       <keyword name="ArrayResolver" id="ArrayResolver" ref="eric6.DebugClients.Python.DebugVariables.html#ArrayResolver" />
       <keyword name="ArrayResolver.getDictionary" id="ArrayResolver.getDictionary" ref="eric6.DebugClients.Python.DebugVariables.html#ArrayResolver.getDictionary" />
       <keyword name="ArrayResolver.resolve" id="ArrayResolver.resolve" ref="eric6.DebugClients.Python.DebugVariables.html#ArrayResolver.resolve" />
@@ -2607,7 +2609,6 @@
       <keyword name="Browser (Constructor)" id="Browser (Constructor)" ref="eric6.UI.Browser.html#Browser.__init__" />
       <keyword name="Browser (Module)" id="Browser (Module)" ref="eric6.UI.Browser.html" />
       <keyword name="Browser.__addAsToplevelDir" id="Browser.__addAsToplevelDir" ref="eric6.UI.Browser.html#Browser.__addAsToplevelDir" />
-      <keyword name="Browser.__configure" id="Browser.__configure" ref="eric6.UI.Browser.html#Browser.__configure" />
       <keyword name="Browser.__createPopupMenus" id="Browser.__createPopupMenus" ref="eric6.UI.Browser.html#Browser.__createPopupMenus" />
       <keyword name="Browser.__findInDirectory" id="Browser.__findInDirectory" ref="eric6.UI.Browser.html#Browser.__findInDirectory" />
       <keyword name="Browser.__newToplevelDir" id="Browser.__newToplevelDir" ref="eric6.UI.Browser.html#Browser.__newToplevelDir" />
@@ -3005,6 +3006,16 @@
       <keyword name="ClosedTabsManager.isClosedTabAvailable" id="ClosedTabsManager.isClosedTabAvailable" ref="eric6.WebBrowser.ClosedTabsManager.html#ClosedTabsManager.isClosedTabAvailable" />
       <keyword name="ClosedTabsManager.recordBrowser" id="ClosedTabsManager.recordBrowser" ref="eric6.Helpviewer.ClosedTabsManager.html#ClosedTabsManager.recordBrowser" />
       <keyword name="ClosedTabsManager.recordBrowser" id="ClosedTabsManager.recordBrowser" ref="eric6.WebBrowser.ClosedTabsManager.html#ClosedTabsManager.recordBrowser" />
+      <keyword name="Closehead" id="Closehead" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html#Closehead" />
+      <keyword name="Closehead (Constructor)" id="Closehead (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html#Closehead.__init__" />
+      <keyword name="Closehead.hgCloseheads" id="Closehead.hgCloseheads" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html#Closehead.hgCloseheads" />
+      <keyword name="CloseheadExtension (Package)" id="CloseheadExtension (Package)" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.html" />
+      <keyword name="CloseheadProjectHelper" id="CloseheadProjectHelper" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html#CloseheadProjectHelper" />
+      <keyword name="CloseheadProjectHelper (Constructor)" id="CloseheadProjectHelper (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html#CloseheadProjectHelper.__init__" />
+      <keyword name="CloseheadProjectHelper.__hgClosehead" id="CloseheadProjectHelper.__hgClosehead" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html#CloseheadProjectHelper.__hgClosehead" />
+      <keyword name="CloseheadProjectHelper.initActions" id="CloseheadProjectHelper.initActions" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html#CloseheadProjectHelper.initActions" />
+      <keyword name="CloseheadProjectHelper.initMenu" id="CloseheadProjectHelper.initMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html#CloseheadProjectHelper.initMenu" />
+      <keyword name="CloseheadProjectHelper.menuTitle" id="CloseheadProjectHelper.menuTitle" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html#CloseheadProjectHelper.menuTitle" />
       <keyword name="CodeDocumentationViewer" id="CodeDocumentationViewer" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer" />
       <keyword name="CodeDocumentationViewer (Constructor)" id="CodeDocumentationViewer (Constructor)" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.__init__" />
       <keyword name="CodeDocumentationViewer (Module)" id="CodeDocumentationViewer (Module)" ref="eric6.UI.CodeDocumentationViewer.html" />
@@ -3982,10 +3993,10 @@
       <keyword name="DebugViewer.currentWidget" id="DebugViewer.currentWidget" ref="eric6.Debugger.DebugViewer.html#DebugViewer.currentWidget" />
       <keyword name="DebugViewer.handleClientStack" id="DebugViewer.handleClientStack" ref="eric6.Debugger.DebugViewer.html#DebugViewer.handleClientStack" />
       <keyword name="DebugViewer.handleDebuggingStarted" id="DebugViewer.handleDebuggingStarted" ref="eric6.Debugger.DebugViewer.html#DebugViewer.handleDebuggingStarted" />
+      <keyword name="DebugViewer.handlePreferencesChanged" id="DebugViewer.handlePreferencesChanged" ref="eric6.Debugger.DebugViewer.html#DebugViewer.handlePreferencesChanged" />
       <keyword name="DebugViewer.handleResetUI" id="DebugViewer.handleResetUI" ref="eric6.Debugger.DebugViewer.html#DebugViewer.handleResetUI" />
       <keyword name="DebugViewer.initCallStackViewer" id="DebugViewer.initCallStackViewer" ref="eric6.Debugger.DebugViewer.html#DebugViewer.initCallStackViewer" />
       <keyword name="DebugViewer.isCallTraceEnabled" id="DebugViewer.isCallTraceEnabled" ref="eric6.Debugger.DebugViewer.html#DebugViewer.isCallTraceEnabled" />
-      <keyword name="DebugViewer.preferencesChanged" id="DebugViewer.preferencesChanged" ref="eric6.Debugger.DebugViewer.html#DebugViewer.preferencesChanged" />
       <keyword name="DebugViewer.setCallTraceToProjectMode" id="DebugViewer.setCallTraceToProjectMode" ref="eric6.Debugger.DebugViewer.html#DebugViewer.setCallTraceToProjectMode" />
       <keyword name="DebugViewer.setCurrentWidget" id="DebugViewer.setCurrentWidget" ref="eric6.Debugger.DebugViewer.html#DebugViewer.setCurrentWidget" />
       <keyword name="DebugViewer.setDebugger" id="DebugViewer.setDebugger" ref="eric6.Debugger.DebugViewer.html#DebugViewer.setDebugger" />
@@ -4138,7 +4149,6 @@
       <keyword name="DeepLEngine.supportedLanguages" id="DeepLEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine.supportedLanguages" />
       <keyword name="DefaultResolver" id="DefaultResolver" ref="eric6.DebugClients.Python.DebugVariables.html#DefaultResolver" />
       <keyword name="DefaultResolver.getDictionary" id="DefaultResolver.getDictionary" ref="eric6.DebugClients.Python.DebugVariables.html#DefaultResolver.getDictionary" />
-      <keyword name="DefaultResolver.resolve" id="DefaultResolver.resolve" ref="eric6.DebugClients.Python.DebugVariables.html#DefaultResolver.resolve" />
       <keyword name="DefaultSearchEngines (Package)" id="DefaultSearchEngines (Package)" ref="index-eric6.Helpviewer.OpenSearch.DefaultSearchEngines.html" />
       <keyword name="DefaultSearchEngines (Package)" id="DefaultSearchEngines (Package)" ref="index-eric6.WebBrowser.OpenSearch.DefaultSearchEngines.html" />
       <keyword name="DelayedFileWatcher" id="DelayedFileWatcher" ref="eric6.WebBrowser.Tools.DelayedFileWatcher.html#DelayedFileWatcher" />
@@ -4156,6 +4166,9 @@
       <keyword name="DictResolver.getDictionary" id="DictResolver.getDictionary" ref="eric6.DebugClients.Python.DebugVariables.html#DictResolver.getDictionary" />
       <keyword name="DictResolver.keyToStr" id="DictResolver.keyToStr" ref="eric6.DebugClients.Python.DebugVariables.html#DictResolver.keyToStr" />
       <keyword name="DictResolver.resolve" id="DictResolver.resolve" ref="eric6.DebugClients.Python.DebugVariables.html#DictResolver.resolve" />
+      <keyword name="DictViewResolver" id="DictViewResolver" ref="eric6.DebugClients.Python.DebugVariables.html#DictViewResolver" />
+      <keyword name="DictViewResolver.getDictionary" id="DictViewResolver.getDictionary" ref="eric6.DebugClients.Python.DebugVariables.html#DictViewResolver.getDictionary" />
+      <keyword name="DictViewResolver.resolve" id="DictViewResolver.resolve" ref="eric6.DebugClients.Python.DebugVariables.html#DictViewResolver.resolve" />
       <keyword name="DiffColoursPage" id="DiffColoursPage" ref="eric6.Preferences.ConfigurationPages.DiffColoursPage.html#DiffColoursPage" />
       <keyword name="DiffColoursPage (Constructor)" id="DiffColoursPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.DiffColoursPage.html#DiffColoursPage.__init__" />
       <keyword name="DiffColoursPage (Module)" id="DiffColoursPage (Module)" ref="eric6.Preferences.ConfigurationPages.DiffColoursPage.html" />
@@ -8853,6 +8866,12 @@
       <keyword name="HgClientPromptDialog.isPassword" id="HgClientPromptDialog.isPassword" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgClientPromptDialog.html#HgClientPromptDialog.isPassword" />
       <keyword name="HgClientPromptDialog.on_inputEdit_textChanged" id="HgClientPromptDialog.on_inputEdit_textChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgClientPromptDialog.html#HgClientPromptDialog.on_inputEdit_textChanged" />
       <keyword name="HgClientPromptDialog.on_passwordCheckBox_toggled" id="HgClientPromptDialog.on_passwordCheckBox_toggled" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgClientPromptDialog.html#HgClientPromptDialog.on_passwordCheckBox_toggled" />
+      <keyword name="HgCloseHeadSelectionDialog" id="HgCloseHeadSelectionDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html#HgCloseHeadSelectionDialog" />
+      <keyword name="HgCloseHeadSelectionDialog (Constructor)" id="HgCloseHeadSelectionDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html#HgCloseHeadSelectionDialog.__init__" />
+      <keyword name="HgCloseHeadSelectionDialog (Module)" id="HgCloseHeadSelectionDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html" />
+      <keyword name="HgCloseHeadSelectionDialog.__getHeads" id="HgCloseHeadSelectionDialog.__getHeads" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html#HgCloseHeadSelectionDialog.__getHeads" />
+      <keyword name="HgCloseHeadSelectionDialog.getData" id="HgCloseHeadSelectionDialog.getData" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html#HgCloseHeadSelectionDialog.getData" />
+      <keyword name="HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged" id="HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html#HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged" />
       <keyword name="HgCommandDialog" id="HgCommandDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgCommandDialog.html#HgCommandDialog" />
       <keyword name="HgCommandDialog (Constructor)" id="HgCommandDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgCommandDialog.html#HgCommandDialog.__init__" />
       <keyword name="HgCommandDialog (Module)" id="HgCommandDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgCommandDialog.html" />
@@ -9084,6 +9103,7 @@
       <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.__bundleActTriggered" id="HgLogBrowserDialog.__bundleActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__bundleActTriggered" />
+      <keyword name="HgLogBrowserDialog.__closeHeadsActTriggered" id="HgLogBrowserDialog.__closeHeadsActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__closeHeadsActTriggered" />
       <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" />
@@ -9096,6 +9116,7 @@
       <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.__getHeads" id="HgLogBrowserDialog.__getHeads" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__getHeads" />
       <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" />
@@ -9600,6 +9621,7 @@
       <keyword name="HgTagBranchListDialog (Constructor)" id="HgTagBranchListDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html#HgTagBranchListDialog.__init__" />
       <keyword name="HgTagBranchListDialog (Module)" id="HgTagBranchListDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html" />
       <keyword name="HgTagBranchListDialog.__closeBranch" id="HgTagBranchListDialog.__closeBranch" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html#HgTagBranchListDialog.__closeBranch" />
+      <keyword name="HgTagBranchListDialog.__closeBranchHeads" id="HgTagBranchListDialog.__closeBranchHeads" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html#HgTagBranchListDialog.__closeBranchHeads" />
       <keyword name="HgTagBranchListDialog.__finish" id="HgTagBranchListDialog.__finish" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html#HgTagBranchListDialog.__finish" />
       <keyword name="HgTagBranchListDialog.__generateItem" id="HgTagBranchListDialog.__generateItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html#HgTagBranchListDialog.__generateItem" />
       <keyword name="HgTagBranchListDialog.__highlightCurrentBranch" id="HgTagBranchListDialog.__highlightCurrentBranch" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html#HgTagBranchListDialog.__highlightCurrentBranch" />
@@ -10322,6 +10344,7 @@
       <keyword name="InterfacePage (Constructor)" id="InterfacePage (Constructor)" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.__init__" />
       <keyword name="InterfacePage (Module)" id="InterfacePage (Module)" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html" />
       <keyword name="InterfacePage.__populateLanguageCombo" id="InterfacePage.__populateLanguageCombo" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.__populateLanguageCombo" />
+      <keyword name="InterfacePage.__populateShellPositionCombo" id="InterfacePage.__populateShellPositionCombo" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.__populateShellPositionCombo" />
       <keyword name="InterfacePage.__populateStyleCombo" id="InterfacePage.__populateStyleCombo" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.__populateStyleCombo" />
       <keyword name="InterfacePage.on_resetLayoutButton_clicked" id="InterfacePage.on_resetLayoutButton_clicked" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.on_resetLayoutButton_clicked" />
       <keyword name="InterfacePage.save" id="InterfacePage.save" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.save" />
@@ -11641,7 +11664,6 @@
       <keyword name="NavigationContainer (Constructor)" id="NavigationContainer (Constructor)" ref="eric6.WebBrowser.Navigation.NavigationContainer.html#NavigationContainer.__init__" />
       <keyword name="NavigationContainer (Module)" id="NavigationContainer (Module)" ref="eric6.WebBrowser.Navigation.NavigationContainer.html" />
       <keyword name="NavigationContainer.addWidget" id="NavigationContainer.addWidget" ref="eric6.WebBrowser.Navigation.NavigationContainer.html#NavigationContainer.addWidget" />
-      <keyword name="NdArrayItemsContainer" id="NdArrayItemsContainer" ref="eric6.DebugClients.Python.DebugVariables.html#NdArrayItemsContainer" />
       <keyword name="NdArrayResolver" id="NdArrayResolver" ref="eric6.DebugClients.Python.DebugVariables.html#NdArrayResolver" />
       <keyword name="NdArrayResolver.__isNumeric" id="NdArrayResolver.__isNumeric" ref="eric6.DebugClients.Python.DebugVariables.html#NdArrayResolver.__isNumeric" />
       <keyword name="NdArrayResolver.getDictionary" id="NdArrayResolver.getDictionary" ref="eric6.DebugClients.Python.DebugVariables.html#NdArrayResolver.getDictionary" />
@@ -12750,6 +12772,15 @@
       <keyword name="Prefs" id="Prefs" ref="eric6.Preferences.__init__.html#Prefs" />
       <keyword name="Prefs.initWebEngineSettingsDefaults" id="Prefs.initWebEngineSettingsDefaults" ref="eric6.Preferences.__init__.html#Prefs.initWebEngineSettingsDefaults" />
       <keyword name="Prefs.initWebSettingsDefaults" id="Prefs.initWebSettingsDefaults" ref="eric6.Preferences.__init__.html#Prefs.initWebSettingsDefaults" />
+      <keyword name="PreviewModel" id="PreviewModel" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel" />
+      <keyword name="PreviewModel (Constructor)" id="PreviewModel (Constructor)" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel.__init__" />
+      <keyword name="PreviewModel.columnCount" id="PreviewModel.columnCount" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel.columnCount" />
+      <keyword name="PreviewModel.data" id="PreviewModel.data" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel.data" />
+      <keyword name="PreviewModel.flags" id="PreviewModel.flags" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel.flags" />
+      <keyword name="PreviewModel.index" id="PreviewModel.index" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel.index" />
+      <keyword name="PreviewModel.parent" id="PreviewModel.parent" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel.parent" />
+      <keyword name="PreviewModel.rowCount" id="PreviewModel.rowCount" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel.rowCount" />
+      <keyword name="PreviewModel.setColor" id="PreviewModel.setColor" ref="eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html#PreviewModel.setColor" />
       <keyword name="PreviewProcessingThread" id="PreviewProcessingThread" ref="eric6.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread" />
       <keyword name="PreviewProcessingThread (Constructor)" id="PreviewProcessingThread (Constructor)" ref="eric6.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.__init__" />
       <keyword name="PreviewProcessingThread.__convertMarkdown" id="PreviewProcessingThread.__convertMarkdown" ref="eric6.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.__convertMarkdown" />
@@ -12970,7 +13001,7 @@
       <keyword name="Project.hasProjectType" id="Project.hasProjectType" ref="eric6.Project.Project.html#Project.hasProjectType" />
       <keyword name="Project.initActions" id="Project.initActions" ref="eric6.Project.Project.html#Project.initActions" />
       <keyword name="Project.initFileTypes" id="Project.initFileTypes" ref="eric6.Project.Project.html#Project.initFileTypes" />
-      <keyword name="Project.initMenu" id="Project.initMenu" ref="eric6.Project.Project.html#Project.initMenu" />
+      <keyword name="Project.initMenus" id="Project.initMenus" ref="eric6.Project.Project.html#Project.initMenus" />
       <keyword name="Project.initToolbars" id="Project.initToolbars" ref="eric6.Project.Project.html#Project.initToolbars" />
       <keyword name="Project.initVCS" id="Project.initVCS" ref="eric6.Project.Project.html#Project.initVCS" />
       <keyword name="Project.isDebugPropertiesLoaded" id="Project.isDebugPropertiesLoaded" ref="eric6.Project.Project.html#Project.isDebugPropertiesLoaded" />
@@ -13186,6 +13217,7 @@
       <keyword name="ProjectFormsBrowser.getUiCompiler" id="ProjectFormsBrowser.getUiCompiler" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.getUiCompiler" />
       <keyword name="ProjectFormsBrowser.handlePreferencesChanged" id="ProjectFormsBrowser.handlePreferencesChanged" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.handlePreferencesChanged" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsGit.ProjectHelper.html" />
+      <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.html" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.ProjectHelper.html" />
@@ -14509,10 +14541,12 @@
       <keyword name="SetupWizardDialog (Module)" id="SetupWizardDialog (Module)" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html" />
       <keyword name="SetupWizardDialog.__addClassifierEntry" id="SetupWizardDialog.__addClassifierEntry" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__addClassifierEntry" />
       <keyword name="SetupWizardDialog.__addPackage" id="SetupWizardDialog.__addPackage" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__addPackage" />
+      <keyword name="SetupWizardDialog.__classifiersDownloadDone" id="SetupWizardDialog.__classifiersDownloadDone" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__classifiersDownloadDone" />
       <keyword name="SetupWizardDialog.__enableOkButton" id="SetupWizardDialog.__enableOkButton" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__enableOkButton" />
       <keyword name="SetupWizardDialog.__getLicenseText" id="SetupWizardDialog.__getLicenseText" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__getLicenseText" />
       <keyword name="SetupWizardDialog.__getStartDir" id="SetupWizardDialog.__getStartDir" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__getStartDir" />
-      <keyword name="SetupWizardDialog.__populateFromTroveLists" id="SetupWizardDialog.__populateFromTroveLists" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__populateFromTroveLists" />
+      <keyword name="SetupWizardDialog.__loadClassifiersFromPyPI" id="SetupWizardDialog.__loadClassifiersFromPyPI" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__loadClassifiersFromPyPI" />
+      <keyword name="SetupWizardDialog.__populateClassifiers" id="SetupWizardDialog.__populateClassifiers" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.__populateClassifiers" />
       <keyword name="SetupWizardDialog.getCode" id="SetupWizardDialog.getCode" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.getCode" />
       <keyword name="SetupWizardDialog.on_addExludePatternButton_clicked" id="SetupWizardDialog.on_addExludePatternButton_clicked" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_addExludePatternButton_clicked" />
       <keyword name="SetupWizardDialog.on_addModuleButton_clicked" id="SetupWizardDialog.on_addModuleButton_clicked" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_addModuleButton_clicked" />
@@ -14526,6 +14560,7 @@
       <keyword name="SetupWizardDialog.on_excludePatternEdit_returnPressed" id="SetupWizardDialog.on_excludePatternEdit_returnPressed" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_excludePatternEdit_returnPressed" />
       <keyword name="SetupWizardDialog.on_excludePatternEdit_textChanged" id="SetupWizardDialog.on_excludePatternEdit_textChanged" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_excludePatternEdit_textChanged" />
       <keyword name="SetupWizardDialog.on_excludePatternList_itemSelectionChanged" id="SetupWizardDialog.on_excludePatternList_itemSelectionChanged" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_excludePatternList_itemSelectionChanged" />
+      <keyword name="SetupWizardDialog.on_localClassifiersButton_clicked" id="SetupWizardDialog.on_localClassifiersButton_clicked" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_localClassifiersButton_clicked" />
       <keyword name="SetupWizardDialog.on_modulesList_itemSelectionChanged" id="SetupWizardDialog.on_modulesList_itemSelectionChanged" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_modulesList_itemSelectionChanged" />
       <keyword name="SetupWizardDialog.on_packageDirButton_clicked" id="SetupWizardDialog.on_packageDirButton_clicked" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_packageDirButton_clicked" />
       <keyword name="SetupWizardDialog.on_packageEdit_returnPressed" id="SetupWizardDialog.on_packageEdit_returnPressed" ref="eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html#SetupWizardDialog.on_packageEdit_returnPressed" />
@@ -14931,11 +14966,6 @@
       <keyword name="SourceStat.inc" id="SourceStat.inc" ref="eric6.DataViews.CodeMetrics.html#SourceStat.inc" />
       <keyword name="SourceStat.indent" id="SourceStat.indent" ref="eric6.DataViews.CodeMetrics.html#SourceStat.indent" />
       <keyword name="SourceStat.push" id="SourceStat.push" ref="eric6.DataViews.CodeMetrics.html#SourceStat.push" />
-      <keyword name="SpecialArrayElementVarItem" id="SpecialArrayElementVarItem" ref="eric6.Debugger.VariablesViewer.html#SpecialArrayElementVarItem" />
-      <keyword name="SpecialArrayElementVarItem (Constructor)" id="SpecialArrayElementVarItem (Constructor)" ref="eric6.Debugger.VariablesViewer.html#SpecialArrayElementVarItem.__init__" />
-      <keyword name="SpecialVarItem" id="SpecialVarItem" ref="eric6.Debugger.VariablesViewer.html#SpecialVarItem" />
-      <keyword name="SpecialVarItem (Constructor)" id="SpecialVarItem (Constructor)" ref="eric6.Debugger.VariablesViewer.html#SpecialVarItem.__init__" />
-      <keyword name="SpecialVarItem.expand" id="SpecialVarItem.expand" ref="eric6.Debugger.VariablesViewer.html#SpecialVarItem.expand" />
       <keyword name="SpeedDial" id="SpeedDial" ref="eric6.Helpviewer.SpeedDial.SpeedDial.html#SpeedDial" />
       <keyword name="SpeedDial" id="SpeedDial" ref="eric6.WebBrowser.SpeedDial.SpeedDial.html#SpeedDial" />
       <keyword name="SpeedDial (Constructor)" id="SpeedDial (Constructor)" ref="eric6.Helpviewer.SpeedDial.SpeedDial.html#SpeedDial.__init__" />
@@ -17228,7 +17258,6 @@
       <keyword name="UserInterface.__configShortcuts" id="UserInterface.__configShortcuts" ref="eric6.UI.UserInterface.html#UserInterface.__configShortcuts" />
       <keyword name="UserInterface.__configToolBars" id="UserInterface.__configToolBars" ref="eric6.UI.UserInterface.html#UserInterface.__configToolBars" />
       <keyword name="UserInterface.__configViewProfiles" id="UserInterface.__configViewProfiles" ref="eric6.UI.UserInterface.html#UserInterface.__configViewProfiles" />
-      <keyword name="UserInterface.__configureDockareaCornerUsage" id="UserInterface.__configureDockareaCornerUsage" ref="eric6.UI.UserInterface.html#UserInterface.__configureDockareaCornerUsage" />
       <keyword name="UserInterface.__connectToWebBrowser" id="UserInterface.__connectToWebBrowser" ref="eric6.UI.UserInterface.html#UserInterface.__connectToWebBrowser" />
       <keyword name="UserInterface.__createDockWindow" id="UserInterface.__createDockWindow" ref="eric6.UI.UserInterface.html#UserInterface.__createDockWindow" />
       <keyword name="UserInterface.__createLayout" id="UserInterface.__createLayout" ref="eric6.UI.UserInterface.html#UserInterface.__createLayout" />
@@ -17399,6 +17428,7 @@
       <keyword name="UserInterface.handleUrl" id="UserInterface.handleUrl" ref="eric6.UI.UserInterface.html#UserInterface.handleUrl" />
       <keyword name="UserInterface.isOnline" id="UserInterface.isOnline" ref="eric6.UI.UserInterface.html#UserInterface.isOnline" />
       <keyword name="UserInterface.launchHelpViewer" id="UserInterface.launchHelpViewer" ref="eric6.UI.UserInterface.html#UserInterface.launchHelpViewer" />
+      <keyword name="UserInterface.networkAccessManager" id="UserInterface.networkAccessManager" ref="eric6.UI.UserInterface.html#UserInterface.networkAccessManager" />
       <keyword name="UserInterface.notificationsEnabled" id="UserInterface.notificationsEnabled" ref="eric6.UI.UserInterface.html#UserInterface.notificationsEnabled" />
       <keyword name="UserInterface.performVersionCheck" id="UserInterface.performVersionCheck" ref="eric6.UI.UserInterface.html#UserInterface.performVersionCheck" />
       <keyword name="UserInterface.processArgs" id="UserInterface.processArgs" ref="eric6.UI.UserInterface.html#UserInterface.processArgs" />
@@ -17440,45 +17470,60 @@
       <keyword name="VariableDetailDialog (Module)" id="VariableDetailDialog (Module)" ref="eric6.Debugger.VariableDetailDialog.html" />
       <keyword name="VariableItem" id="VariableItem" ref="eric6.Debugger.VariablesViewer.html#VariableItem" />
       <keyword name="VariableItem (Constructor)" id="VariableItem (Constructor)" ref="eric6.Debugger.VariablesViewer.html#VariableItem.__init__" />
-      <keyword name="VariableItem._buildKey" id="VariableItem._buildKey" ref="eric6.Debugger.VariablesViewer.html#VariableItem._buildKey" />
-      <keyword name="VariableItem.attachDummy" id="VariableItem.attachDummy" ref="eric6.Debugger.VariablesViewer.html#VariableItem.attachDummy" />
-      <keyword name="VariableItem.collapse" id="VariableItem.collapse" ref="eric6.Debugger.VariablesViewer.html#VariableItem.collapse" />
-      <keyword name="VariableItem.data" id="VariableItem.data" ref="eric6.Debugger.VariablesViewer.html#VariableItem.data" />
-      <keyword name="VariableItem.deleteChildren" id="VariableItem.deleteChildren" ref="eric6.Debugger.VariablesViewer.html#VariableItem.deleteChildren" />
-      <keyword name="VariableItem.expand" id="VariableItem.expand" ref="eric6.Debugger.VariablesViewer.html#VariableItem.expand" />
-      <keyword name="VariableItem.extractId" id="VariableItem.extractId" ref="eric6.Debugger.VariablesViewer.html#VariableItem.extractId" />
-      <keyword name="VariableItem.extractIndicators" id="VariableItem.extractIndicators" ref="eric6.Debugger.VariablesViewer.html#VariableItem.extractIndicators" />
-      <keyword name="VariableItem.getId" id="VariableItem.getId" ref="eric6.Debugger.VariablesViewer.html#VariableItem.getId" />
-      <keyword name="VariableItem.getValue" id="VariableItem.getValue" ref="eric6.Debugger.VariablesViewer.html#VariableItem.getValue" />
+      <keyword name="VariableItem.__getName" id="VariableItem.__getName" ref="eric6.Debugger.VariablesViewer.html#VariableItem.__getName" />
+      <keyword name="VariableItem.__getType" id="VariableItem.__getType" ref="eric6.Debugger.VariablesViewer.html#VariableItem.__getType" />
+      <keyword name="VariableItem.__getValue" id="VariableItem.__getValue" ref="eric6.Debugger.VariablesViewer.html#VariableItem.__getValue" />
+      <keyword name="VariableItem.absolutCount" id="VariableItem.absolutCount" ref="eric6.Debugger.VariablesViewer.html#VariableItem.absolutCount" />
+      <keyword name="VariableItem.populated" id="VariableItem.populated" ref="eric6.Debugger.VariablesViewer.html#VariableItem.populated" />
       <keyword name="VariablesFilterDialog" id="VariablesFilterDialog" ref="eric6.Debugger.VariablesFilterDialog.html#VariablesFilterDialog" />
       <keyword name="VariablesFilterDialog (Constructor)" id="VariablesFilterDialog (Constructor)" ref="eric6.Debugger.VariablesFilterDialog.html#VariablesFilterDialog.__init__" />
       <keyword name="VariablesFilterDialog (Module)" id="VariablesFilterDialog (Module)" ref="eric6.Debugger.VariablesFilterDialog.html" />
       <keyword name="VariablesFilterDialog.getSelection" id="VariablesFilterDialog.getSelection" ref="eric6.Debugger.VariablesFilterDialog.html#VariablesFilterDialog.getSelection" />
       <keyword name="VariablesFilterDialog.on_buttonBox_clicked" id="VariablesFilterDialog.on_buttonBox_clicked" ref="eric6.Debugger.VariablesFilterDialog.html#VariablesFilterDialog.on_buttonBox_clicked" />
       <keyword name="VariablesFilterDialog.setSelection" id="VariablesFilterDialog.setSelection" ref="eric6.Debugger.VariablesFilterDialog.html#VariablesFilterDialog.setSelection" />
+      <keyword name="VariablesModel" id="VariablesModel" ref="eric6.Debugger.VariablesViewer.html#VariablesModel" />
+      <keyword name="VariablesModel (Constructor)" id="VariablesModel (Constructor)" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.__init__" />
+      <keyword name="VariablesModel.__buildTreePath" id="VariablesModel.__buildTreePath" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.__buildTreePath" />
+      <keyword name="VariablesModel.__cleanupParentList" id="VariablesModel.__cleanupParentList" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.__cleanupParentList" />
+      <keyword name="VariablesModel.__findPendingItem" id="VariablesModel.__findPendingItem" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.__findPendingItem" />
+      <keyword name="VariablesModel.__findVariable" id="VariablesModel.__findVariable" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.__findVariable" />
+      <keyword name="VariablesModel.clear" id="VariablesModel.clear" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.clear" />
+      <keyword name="VariablesModel.columnCount" id="VariablesModel.columnCount" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.columnCount" />
+      <keyword name="VariablesModel.data" id="VariablesModel.data" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.data" />
+      <keyword name="VariablesModel.flags" id="VariablesModel.flags" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.flags" />
+      <keyword name="VariablesModel.getMore" id="VariablesModel.getMore" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.getMore" />
+      <keyword name="VariablesModel.handlePreferencesChanged" id="VariablesModel.handlePreferencesChanged" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.handlePreferencesChanged" />
+      <keyword name="VariablesModel.hasChildren" id="VariablesModel.hasChildren" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.hasChildren" />
+      <keyword name="VariablesModel.headerData" id="VariablesModel.headerData" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.headerData" />
+      <keyword name="VariablesModel.index" id="VariablesModel.index" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.index" />
+      <keyword name="VariablesModel.parent" id="VariablesModel.parent" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.parent" />
+      <keyword name="VariablesModel.resetModifiedMarker" id="VariablesModel.resetModifiedMarker" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.resetModifiedMarker" />
+      <keyword name="VariablesModel.rowCount" id="VariablesModel.rowCount" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.rowCount" />
+      <keyword name="VariablesModel.setExpanded" id="VariablesModel.setExpanded" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.setExpanded" />
+      <keyword name="VariablesModel.showVariables" id="VariablesModel.showVariables" ref="eric6.Debugger.VariablesViewer.html#VariablesModel.showVariables" />
+      <keyword name="VariablesProxyModel" id="VariablesProxyModel" ref="eric6.Debugger.VariablesViewer.html#VariablesProxyModel" />
+      <keyword name="VariablesProxyModel (Constructor)" id="VariablesProxyModel (Constructor)" ref="eric6.Debugger.VariablesViewer.html#VariablesProxyModel.__init__" />
+      <keyword name="VariablesProxyModel.hasChildren" id="VariablesProxyModel.hasChildren" ref="eric6.Debugger.VariablesViewer.html#VariablesProxyModel.hasChildren" />
+      <keyword name="VariablesProxyModel.setExpanded" id="VariablesProxyModel.setExpanded" ref="eric6.Debugger.VariablesViewer.html#VariablesProxyModel.setExpanded" />
       <keyword name="VariablesViewer" id="VariablesViewer" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer" />
       <keyword name="VariablesViewer (Constructor)" id="VariablesViewer (Constructor)" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__init__" />
       <keyword name="VariablesViewer (Module)" id="VariablesViewer (Module)" ref="eric6.Debugger.VariablesViewer.html" />
-      <keyword name="VariablesViewer.__addItem" id="VariablesViewer.__addItem" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__addItem" />
-      <keyword name="VariablesViewer.__buildTreePath" id="VariablesViewer.__buildTreePath" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__buildTreePath" />
+      <keyword name="VariablesViewer.__collapseChildren" id="VariablesViewer.__collapseChildren" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__collapseChildren" />
       <keyword name="VariablesViewer.__configure" id="VariablesViewer.__configure" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__configure" />
+      <keyword name="VariablesViewer.__configureFilter" id="VariablesViewer.__configureFilter" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__configureFilter" />
       <keyword name="VariablesViewer.__createPopupMenus" id="VariablesViewer.__createPopupMenus" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__createPopupMenus" />
-      <keyword name="VariablesViewer.__expandItemSignal" id="VariablesViewer.__expandItemSignal" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__expandItemSignal" />
-      <keyword name="VariablesViewer.__findItem" id="VariablesViewer.__findItem" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__findItem" />
-      <keyword name="VariablesViewer.__generateItem" id="VariablesViewer.__generateItem" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__generateItem" />
-      <keyword name="VariablesViewer.__getDispType" id="VariablesViewer.__getDispType" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__getDispType" />
+      <keyword name="VariablesViewer.__expandChildren" id="VariablesViewer.__expandChildren" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__expandChildren" />
+      <keyword name="VariablesViewer.__itemDoubleClicked" id="VariablesViewer.__itemDoubleClicked" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__itemDoubleClicked" />
+      <keyword name="VariablesViewer.__mdlRequestExpand" id="VariablesViewer.__mdlRequestExpand" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__mdlRequestExpand" />
       <keyword name="VariablesViewer.__refreshView" id="VariablesViewer.__refreshView" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__refreshView" />
-      <keyword name="VariablesViewer.__resort" id="VariablesViewer.__resort" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__resort" />
-      <keyword name="VariablesViewer.__sectionClicked" id="VariablesViewer.__sectionClicked" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__sectionClicked" />
       <keyword name="VariablesViewer.__showContextMenu" id="VariablesViewer.__showContextMenu" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__showContextMenu" />
       <keyword name="VariablesViewer.__showDetails" id="VariablesViewer.__showDetails" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__showDetails" />
       <keyword name="VariablesViewer.__showVariableDetails" id="VariablesViewer.__showVariableDetails" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.__showVariableDetails" />
-      <keyword name="VariablesViewer.collapseItem" id="VariablesViewer.collapseItem" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.collapseItem" />
-      <keyword name="VariablesViewer.expandItem" id="VariablesViewer.expandItem" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.expandItem" />
       <keyword name="VariablesViewer.handleResetUI" id="VariablesViewer.handleResetUI" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.handleResetUI" />
-      <keyword name="VariablesViewer.mouseDoubleClickEvent" id="VariablesViewer.mouseDoubleClickEvent" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.mouseDoubleClickEvent" />
+      <keyword name="VariablesViewer.resizeEvent" id="VariablesViewer.resizeEvent" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.resizeEvent" />
       <keyword name="VariablesViewer.showVariable" id="VariablesViewer.showVariable" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.showVariable" />
       <keyword name="VariablesViewer.showVariables" id="VariablesViewer.showVariables" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.showVariables" />
+      <keyword name="VariablesViewer.verticalScrollbarValueChanged" id="VariablesViewer.verticalScrollbarValueChanged" ref="eric6.Debugger.VariablesViewer.html#VariablesViewer.verticalScrollbarValueChanged" />
       <keyword name="VcsCommandOptionsDialog" id="VcsCommandOptionsDialog" ref="eric6.VCS.CommandOptionsDialog.html#VcsCommandOptionsDialog" />
       <keyword name="VcsCommandOptionsDialog (Constructor)" id="VcsCommandOptionsDialog (Constructor)" ref="eric6.VCS.CommandOptionsDialog.html#VcsCommandOptionsDialog.__init__" />
       <keyword name="VcsCommandOptionsDialog.getOptions" id="VcsCommandOptionsDialog.getOptions" ref="eric6.VCS.CommandOptionsDialog.html#VcsCommandOptionsDialog.getOptions" />
@@ -17864,6 +17909,7 @@
       <keyword name="ViewManager.initFileMenu" id="ViewManager.initFileMenu" ref="eric6.ViewManager.ViewManager.html#ViewManager.initFileMenu" />
       <keyword name="ViewManager.initFileToolbar" id="ViewManager.initFileToolbar" ref="eric6.ViewManager.ViewManager.html#ViewManager.initFileToolbar" />
       <keyword name="ViewManager.initMacroMenu" id="ViewManager.initMacroMenu" ref="eric6.ViewManager.ViewManager.html#ViewManager.initMacroMenu" />
+      <keyword name="ViewManager.initSearchMenu" id="ViewManager.initSearchMenu" ref="eric6.ViewManager.ViewManager.html#ViewManager.initSearchMenu" />
       <keyword name="ViewManager.initSearchToolbars" id="ViewManager.initSearchToolbars" ref="eric6.ViewManager.ViewManager.html#ViewManager.initSearchToolbars" />
       <keyword name="ViewManager.initSpellingToolbar" id="ViewManager.initSpellingToolbar" ref="eric6.ViewManager.ViewManager.html#ViewManager.initSpellingToolbar" />
       <keyword name="ViewManager.initViewMenu" id="ViewManager.initViewMenu" ref="eric6.ViewManager.ViewManager.html#ViewManager.initViewMenu" />
@@ -19052,6 +19098,7 @@
       <keyword name="cleanupSource (Module)" id="cleanupSource (Module)" ref="cleanupSource.html" />
       <keyword name="clearPrivateData" id="clearPrivateData" ref="eric6.Plugins.PluginVcsGit.html#clearPrivateData" />
       <keyword name="clearPrivateData" id="clearPrivateData" ref="eric6.Plugins.PluginVcsMercurial.html#clearPrivateData" />
+      <keyword name="closehead (Module)" id="closehead (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html" />
       <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" />
@@ -20401,6 +20448,9 @@
       <file>eric6.Plugins.VcsPlugins.vcsGit.ProjectBrowserHelper.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsGit.ProjectHelper.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsGit.git.html</file>
+      <file>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html</file>
+      <file>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html</file>
+      <file>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.Config.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html</file>
@@ -21170,6 +21220,7 @@
       <file>index-eric6.Plugins.VcsPlugins.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsGit.ConfigurationPage.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsGit.html</file>
+      <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.html</file>
--- a/eric6/Documentation/Source/eric6.DebugClients.Python.DebugClientBase.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.DebugClients.Python.DebugClientBase.html	Mon May 20 22:44:12 2019 +0200
@@ -77,7 +77,7 @@
 object
 <h3>Class Attributes</h3>
 <table>
-<tr><td>Indicators</td></tr><tr><td>clientCapabilities</td></tr>
+<tr><td>Indicators</td></tr><tr><td>arrayTypes</td></tr><tr><td>clientCapabilities</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
@@ -299,7 +299,7 @@
 </dd>
 </dl><a NAME="DebugClientBase.__dumpVariable" ID="DebugClientBase.__dumpVariable"></a>
 <h4>DebugClientBase.__dumpVariable</h4>
-<b>__dumpVariable</b>(<i>var, frmnr, scope, filterList, maxSize</i>)
+<b>__dumpVariable</b>(<i>var, frmnr, scope, filterList</i>)
 <p>
         Private method to return the variables of a frame to the debug server.
 </p><dl>
@@ -309,21 +309,16 @@
 </dd><dt><i>frmnr</i> (int)</dt>
 <dd>
 distance of frame reported on. 0 is the current frame
-</dd><dt><i>scope</i></dt>
+</dd><dt><i>scope</i> (int)</dt>
 <dd>
-1 to report global variables, 0 for local variables (int)
+1 to report global variables, 0 for local variables
 </dd><dt><i>filterList</i> (list of int)</dt>
 <dd>
 the indices of variable types to be filtered
-</dd><dt><i>maxSize</i> (int)</dt>
-<dd>
-maximum size the formatted value of a variable will
-            be shown. If it is bigger than that, a 'too big' indication will
-            be given.
 </dd>
 </dl><a NAME="DebugClientBase.__dumpVariables" ID="DebugClientBase.__dumpVariables"></a>
 <h4>DebugClientBase.__dumpVariables</h4>
-<b>__dumpVariables</b>(<i>frmnr, scope, filterList, maxSize</i>)
+<b>__dumpVariables</b>(<i>frmnr, scope, filterList</i>)
 <p>
         Private method to return the variables of a frame to the debug server.
 </p><dl>
@@ -336,11 +331,6 @@
 </dd><dt><i>filterList</i> (list of int)</dt>
 <dd>
 the indices of variable types to be filtered
-</dd><dt><i>maxSize</i> (int)</dt>
-<dd>
-maximum size the formatted value of a variable will
-            be shown. If it is bigger than that, a 'too big' indication will
-            be given.
 </dd>
 </dl><a NAME="DebugClientBase.__extractIndicators" ID="DebugClientBase.__extractIndicators"></a>
 <h4>DebugClientBase.__extractIndicators</h4>
@@ -385,7 +375,7 @@
 </dd>
 </dl><a NAME="DebugClientBase.__formatVariablesList" ID="DebugClientBase.__formatVariablesList"></a>
 <h4>DebugClientBase.__formatVariablesList</h4>
-<b>__formatVariablesList</b>(<i>keylist, dict_, scope, filterList=None, formatSequences=False, maxSize=0</i>)
+<b>__formatVariablesList</b>(<i>dict_, scope, filterList=None</i>)
 <p>
         Private method to produce a formated variables list.
 </p><p>
@@ -395,10 +385,7 @@
         expressions. The formated variables list (a list of tuples of 3
         values) is returned.
 </p><dl>
-<dt><i>keylist</i> (list of str)</dt>
-<dd>
-keys of the dictionary to be formatted
-</dd><dt><i>dict_</i> (dict)</dt>
+<dt><i>dict_</i> (dict)</dt>
 <dd>
 the dictionary to be scanned
 </dd><dt><i>scope</i> (int)</dt>
@@ -412,16 +399,6 @@
 the indices of variable types to be filtered.
             Variables are only added to the list, if their type is not
             contained in the filter list.
-</dd><dt><i>formatSequences</i> (bool)</dt>
-<dd>
-flag indicating, that sequence or dictionary
-            variables should be formatted. If it is 0 (or false), just the
-            number of items contained in these variables is returned.
-</dd><dt><i>maxSize</i> (int)</dt>
-<dd>
-maximum size the formatted value of a variable will
-            be shown. If it is bigger than that, a 'too big' indication will
-            be placed in the value field.
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
--- a/eric6/Documentation/Source/eric6.DebugClients.Python.DebugConfig.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.DebugClients.Python.DebugConfig.html	Mon May 20 22:44:12 2019 +0200
@@ -25,7 +25,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>ConfigVarTypeStrings</td></tr>
+<tr><td>BatchSize</td></tr><tr><td>ConfigKnownQtTypes</td></tr><tr><td>ConfigQtNames</td></tr><tr><td>ConfigVarTypeStrings</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- a/eric6/Documentation/Source/eric6.DebugClients.Python.DebugVariables.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.DebugClients.Python.DebugVariables.html	Mon May 20 22:44:12 2019 +0200
@@ -25,14 +25,11 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>MaxItemsToHandle</td></tr><tr><td>TooLargeAttribute</td></tr><tr><td>TooLargeMessage</td></tr><tr><td>_TypeMap</td></tr><tr><td>arrayResolver</td></tr><tr><td>defaultResolver</td></tr><tr><td>dictResolver</td></tr><tr><td>listResolver</td></tr><tr><td>multiValueDictResolver</td></tr><tr><td>ndarrayResolver</td></tr><tr><td>setResolver</td></tr>
+<tr><td>_TypeMap</td></tr><tr><td>arrayResolver</td></tr><tr><td>defaultResolver</td></tr><tr><td>dictResolver</td></tr><tr><td>dictViewResolver</td></tr><tr><td>listResolver</td></tr><tr><td>multiValueDictResolver</td></tr><tr><td>ndarrayResolver</td></tr><tr><td>setResolver</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
 <tr>
-<td><a href="#ArrayItemsContainer">ArrayItemsContainer</a></td>
-<td>Class to store array.array items.</td>
-</tr><tr>
 <td><a href="#ArrayResolver">ArrayResolver</a></td>
 <td>Class used to resolve from array.array including some meta data.</td>
 </tr><tr>
@@ -45,15 +42,15 @@
 <td><a href="#DictResolver">DictResolver</a></td>
 <td>Class used to resolve from a dictionary.</td>
 </tr><tr>
+<td><a href="#DictViewResolver">DictViewResolver</a></td>
+<td>Class used to resolve from dict views.</td>
+</tr><tr>
 <td><a href="#ListResolver">ListResolver</a></td>
 <td>Class used to resolve from a tuple or list.</td>
 </tr><tr>
 <td><a href="#MultiValueDictResolver">MultiValueDictResolver</a></td>
 <td>Class used to resolve from Django multi value dictionaries.</td>
 </tr><tr>
-<td><a href="#NdArrayItemsContainer">NdArrayItemsContainer</a></td>
-<td>Class to store ndarray items.</td>
-</tr><tr>
 <td><a href="#NdArrayResolver">NdArrayResolver</a></td>
 <td>Class used to resolve from numpy ndarray including some meta data.</td>
 </tr><tr>
@@ -72,32 +69,6 @@
 </tr>
 </table>
 <hr /><hr />
-<a NAME="ArrayItemsContainer" ID="ArrayItemsContainer"></a>
-<h2>ArrayItemsContainer</h2>
-<p>
-    Class to store array.array items.
-</p>
-<h3>Derived from</h3>
-None
-<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>None</td></tr>
-</table>
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr /><hr />
 <a NAME="ArrayResolver" ID="ArrayResolver"></a>
 <h2>ArrayResolver</h2>
 <p>
@@ -222,12 +193,6 @@
 <dd>
 dict
 </dd>
-</dl><dl>
-<dt>Raises <b>NotImplementedError</b>:</dt>
-<dd>
-raised to indicate a missing
-            implementation
-</dd>
 </dl><a NAME="BaseResolver.resolve" ID="BaseResolver.resolve"></a>
 <h4>BaseResolver.resolve</h4>
 <b>resolve</b>(<i>var, attribute</i>)
@@ -251,12 +216,6 @@
 <dd>
 any
 </dd>
-</dl><dl>
-<dt>Raises <b>NotImplementedError</b>:</dt>
-<dd>
-raised to indicate a missing
-            implementation
-</dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
@@ -280,9 +239,6 @@
 <tr>
 <td><a href="#DefaultResolver.getDictionary">getDictionary</a></td>
 <td>Public method to get the attributes of a variable as a dictionary.</td>
-</tr><tr>
-<td><a href="#DefaultResolver.resolve">resolve</a></td>
-<td>Public method to get an attribute from a variable.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -309,29 +265,6 @@
 <dd>
 dict
 </dd>
-</dl><a NAME="DefaultResolver.resolve" ID="DefaultResolver.resolve"></a>
-<h4>DefaultResolver.resolve</h4>
-<b>resolve</b>(<i>var, attribute</i>)
-<p>
-        Public method to get an attribute from a variable.
-</p><dl>
-<dt><i>var</i> (any)</dt>
-<dd>
-variable to extract an attribute or value from
-</dd><dt><i>attribute</i> (str)</dt>
-<dd>
-name of the attribute to extract
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-value of the attribute
-</dd>
-</dl><dl>
-<dt>Return Type:</dt>
-<dd>
-any
-</dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
@@ -433,6 +366,81 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="DictViewResolver" ID="DictViewResolver"></a>
+<h2>DictViewResolver</h2>
+<p>
+    Class used to resolve from dict views.
+</p>
+<h3>Derived from</h3>
+ListResolver
+<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="#DictViewResolver.getDictionary">getDictionary</a></td>
+<td>Public method to get the attributes of a variable as a dictionary.</td>
+</tr><tr>
+<td><a href="#DictViewResolver.resolve">resolve</a></td>
+<td>Public method to get an attribute from a variable.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="DictViewResolver.getDictionary" ID="DictViewResolver.getDictionary"></a>
+<h4>DictViewResolver.getDictionary</h4>
+<b>getDictionary</b>(<i>var</i>)
+<p>
+        Public method to get the attributes of a variable as a dictionary.
+</p><dl>
+<dt><i>var</i> (any)</dt>
+<dd>
+variable to be converted
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+dictionary containing the variable attributes
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl><a NAME="DictViewResolver.resolve" ID="DictViewResolver.resolve"></a>
+<h4>DictViewResolver.resolve</h4>
+<b>resolve</b>(<i>var, attribute</i>)
+<p>
+        Public method to get an attribute from a variable.
+</p><dl>
+<dt><i>var</i> (tuple or list)</dt>
+<dd>
+variable to extract an attribute or value from
+</dd><dt><i>attribute</i> (str)</dt>
+<dd>
+id of the value to extract
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+value of the attribute
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+any
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="ListResolver" ID="ListResolver"></a>
 <h2>ListResolver</h2>
 <p>
@@ -583,32 +591,6 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
-<a NAME="NdArrayItemsContainer" ID="NdArrayItemsContainer"></a>
-<h2>NdArrayItemsContainer</h2>
-<p>
-    Class to store ndarray items.
-</p>
-<h3>Derived from</h3>
-None
-<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>None</td></tr>
-</table>
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr /><hr />
 <a NAME="NdArrayResolver" ID="NdArrayResolver"></a>
 <h2>NdArrayResolver</h2>
 <p>
@@ -803,12 +785,12 @@
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-tuple containing the type, type name, type string and resolver
+tuple containing the type name, type string and resolver
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
 <dd>
-tuple of type, str, str, BaseResolver
+tuple of str, str, BaseResolver
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/eric6/Documentation/Source/eric6.Debugger.DebugViewer.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Debugger.DebugViewer.html	Mon May 20 22:44:12 2019 +0200
@@ -63,7 +63,10 @@
     the exception logger. Additionally a list of all threads is shown.
 </p><h3>Signals</h3>
 <dl>
-<dt>sourceFile(string, int)</dt>
+<dt>preferencesChanged()</dt>
+<dd>
+emitted to react on changed preferences
+</dd><dt>sourceFile(string, int)</dt>
 <dd>
 emitted to open a source file at a line
 </dd>
@@ -108,6 +111,9 @@
 <td><a href="#DebugViewer.handleDebuggingStarted">handleDebuggingStarted</a></td>
 <td>Public slot to handle the start of a debugging session.</td>
 </tr><tr>
+<td><a href="#DebugViewer.handlePreferencesChanged">handlePreferencesChanged</a></td>
+<td>Public slot to handle the preferencesChanged signal.</td>
+</tr><tr>
 <td><a href="#DebugViewer.handleResetUI">handleResetUI</a></td>
 <td>Public method to reset the SBVviewer.</td>
 </tr><tr>
@@ -117,9 +123,6 @@
 <td><a href="#DebugViewer.isCallTraceEnabled">isCallTraceEnabled</a></td>
 <td>Public method to get the state of the call trace function.</td>
 </tr><tr>
-<td><a href="#DebugViewer.preferencesChanged">preferencesChanged</a></td>
-<td>Public slot to handle the preferencesChanged signal.</td>
-</tr><tr>
 <td><a href="#DebugViewer.setCallTraceToProjectMode">setCallTraceToProjectMode</a></td>
 <td>Public slot to set the call trace viewer to project mode.</td>
 </tr><tr>
@@ -157,19 +160,13 @@
 </table>
 <a NAME="DebugViewer.__init__" ID="DebugViewer.__init__"></a>
 <h4>DebugViewer (Constructor)</h4>
-<b>DebugViewer</b>(<i>debugServer, docked, vm, parent=None</i>)
+<b>DebugViewer</b>(<i>debugServer, parent=None</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>debugServer</i></dt>
 <dd>
 reference to the debug server object (DebugServer)
-</dd><dt><i>docked</i></dt>
-<dd>
-flag indicating a dock window
-</dd><dt><i>vm</i></dt>
-<dd>
-reference to the viewmanager object
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
@@ -248,6 +245,11 @@
         Public slot to handle the start of a debugging session.
 </p><p>
         This slot sets the variables filter expressions.
+</p><a NAME="DebugViewer.handlePreferencesChanged" ID="DebugViewer.handlePreferencesChanged"></a>
+<h4>DebugViewer.handlePreferencesChanged</h4>
+<b>handlePreferencesChanged</b>(<i></i>)
+<p>
+        Public slot to handle the preferencesChanged signal.
 </p><a NAME="DebugViewer.handleResetUI" ID="DebugViewer.handleResetUI"></a>
 <h4>DebugViewer.handleResetUI</h4>
 <b>handleResetUI</b>(<i></i>)
@@ -273,12 +275,7 @@
 <dd>
 flag indicating the state of the call trace function (boolean)
 </dd>
-</dl><a NAME="DebugViewer.preferencesChanged" ID="DebugViewer.preferencesChanged"></a>
-<h4>DebugViewer.preferencesChanged</h4>
-<b>preferencesChanged</b>(<i></i>)
-<p>
-        Public slot to handle the preferencesChanged signal.
-</p><a NAME="DebugViewer.setCallTraceToProjectMode" ID="DebugViewer.setCallTraceToProjectMode"></a>
+</dl><a NAME="DebugViewer.setCallTraceToProjectMode" ID="DebugViewer.setCallTraceToProjectMode"></a>
 <h4>DebugViewer.setCallTraceToProjectMode</h4>
 <b>setCallTraceToProjectMode</b>(<i>enabled</i>)
 <p>
--- a/eric6/Documentation/Source/eric6.Debugger.VariablesViewer.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Debugger.VariablesViewer.html	Mon May 20 22:44:12 2019 +0200
@@ -21,29 +21,26 @@
 <body><a NAME="top" ID="top"></a>
 <h1>eric6.Debugger.VariablesViewer</h1>
 <p>
-Module implementing the variables viewer widget.
+Module implementing the variables viewer view based on QTreeView.
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>None</td></tr>
+<tr><td>SORT_ROLE</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
 <tr>
-<td><a href="#ArrayElementVarItem">ArrayElementVarItem</a></td>
-<td>Class implementing a VariableItem that represents an array element.</td>
-</tr><tr>
-<td><a href="#SpecialArrayElementVarItem">SpecialArrayElementVarItem</a></td>
-<td>Class implementing a QTreeWidgetItem that represents a special array variable node.</td>
+<td><a href="#VariableItem">VariableItem</a></td>
+<td>Class implementing the data structure for all variable items.</td>
 </tr><tr>
-<td><a href="#SpecialVarItem">SpecialVarItem</a></td>
-<td>Class implementing a VariableItem that represents a special variable node.</td>
+<td><a href="#VariablesModel">VariablesModel</a></td>
+<td>Class implementing the data model for QTreeView.</td>
 </tr><tr>
-<td><a href="#VariableItem">VariableItem</a></td>
-<td>Class implementing the data structure for variable items.</td>
+<td><a href="#VariablesProxyModel">VariablesProxyModel</a></td>
+<td>Class for handling the sort operations.</td>
 </tr><tr>
 <td><a href="#VariablesViewer">VariablesViewer</a></td>
-<td>Class implementing the variables viewer widget.</td>
+<td>Class implementing the variables viewer view.</td>
 </tr>
 </table>
 <h3>Functions</h3>
@@ -51,16 +48,16 @@
 <tr><td>None</td></tr>
 </table>
 <hr /><hr />
-<a NAME="ArrayElementVarItem" ID="ArrayElementVarItem"></a>
-<h2>ArrayElementVarItem</h2>
+<a NAME="VariableItem" ID="VariableItem"></a>
+<h2>VariableItem</h2>
 <p>
-    Class implementing a VariableItem that represents an array element.
+    Class implementing the data structure for all variable items.
 </p>
 <h3>Derived from</h3>
-VariableItem
+object
 <h3>Class Attributes</h3>
 <table>
-<tr><td>None</td></tr>
+<tr><td>Type2Indicators</td></tr><tr><td>arrayTypes</td></tr><tr><td>noOfItemsStr</td></tr><tr><td>nonExpandableTypes</td></tr><tr><td>rx_nonprintable</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
@@ -69,102 +66,132 @@
 <h3>Methods</h3>
 <table>
 <tr>
-<td><a href="#ArrayElementVarItem.__init__">ArrayElementVarItem</a></td>
+<td><a href="#VariableItem.__init__">VariableItem</a></td>
 <td>Constructor</td>
+</tr><tr>
+<td><a href="#VariableItem.__getName">__getName</a></td>
+<td>Private method to extract the variable name.</td>
+</tr><tr>
+<td><a href="#VariableItem.__getType">__getType</a></td>
+<td>Private method to process the type of the variable.</td>
+</tr><tr>
+<td><a href="#VariableItem.__getValue">__getValue</a></td>
+<td>Private method to process the variables value.</td>
+</tr><tr>
+<td><a href="#VariableItem.absolutCount">absolutCount</a></td>
+<td>Public property to get the total number of children.</td>
+</tr><tr>
+<td><a href="#VariableItem.populated">populated</a></td>
+<td>Public property returning a flag indicating if item is fully populated.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
 <table>
 <tr><td>None</td></tr>
 </table>
-<a NAME="ArrayElementVarItem.__init__" ID="ArrayElementVarItem.__init__"></a>
-<h4>ArrayElementVarItem (Constructor)</h4>
-<b>ArrayElementVarItem</b>(<i>parent, dvar, dvalue, dtype</i>)
+<a NAME="VariableItem.__init__" ID="VariableItem.__init__"></a>
+<h4>VariableItem (Constructor)</h4>
+<b>VariableItem</b>(<i>parent, dvar, dtype, dvalue</i>)
 <p>
         Constructor
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (VariableItem)</dt>
+<dd>
+reference to the parent item
+</dd><dt><i>dvar</i> (str)</dt>
+<dd>
+variable name
+</dd><dt><i>dtype</i> (str)</dt>
+<dd>
+type string
+</dd><dt><i>dvalue</i> (str)</dt>
 <dd>
-parent of this item
-</dd><dt><i>dvar</i></dt>
+value string
+</dd>
+</dl><a NAME="VariableItem.__getName" ID="VariableItem.__getName"></a>
+<h4>VariableItem.__getName</h4>
+<b>__getName</b>(<i>dvar</i>)
+<p>
+        Private method to extract the variable name.
+</p><dl>
+<dt><i>dvar</i> (str)</dt>
+<dd>
+name of variable maybe with ID
+</dd>
+</dl><a NAME="VariableItem.__getType" ID="VariableItem.__getType"></a>
+<h4>VariableItem.__getType</h4>
+<b>__getType</b>(<i>dtype</i>)
+<p>
+        Private method to process the type of the variable.
+</p><p>
+        If type is known to have children, the corresponding flag is set.
+</p><dl>
+<dt><i>dtype</i> (str)</dt>
 <dd>
-variable name (string)
-</dd><dt><i>dvalue</i></dt>
+type string
+</dd>
+</dl><a NAME="VariableItem.__getValue" ID="VariableItem.__getValue"></a>
+<h4>VariableItem.__getValue</h4>
+<b>__getValue</b>(<i>dtype, dvalue</i>)
+<p>
+        Private method to process the variables value.
+</p><p>
+        Define and limit value, set tooltip text. If type is known to have
+        children, the corresponding flag is set.
+</p><dl>
+<dt><i>dtype</i> (str)</dt>
+<dd>
+type string
+</dd><dt><i>dvalue</i> (str)</dt>
 <dd>
-value string (string)
-</dd><dt><i>dtype</i></dt>
+value of variable encoded as utf-8
+</dd>
+</dl><a NAME="VariableItem.absolutCount" ID="VariableItem.absolutCount"></a>
+<h4>VariableItem.absolutCount</h4>
+<b>absolutCount</b>(<i></i>)
+<p>
+        Public property to get the total number of children.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+total number of children
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
 <dd>
-type string (string)
+int
+</dd>
+</dl><a NAME="VariableItem.populated" ID="VariableItem.populated"></a>
+<h4>VariableItem.populated</h4>
+<b>populated</b>(<i></i>)
+<p>
+        Public property returning a flag indicating if item is fully populated.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+item is fully populated
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
-<a NAME="SpecialArrayElementVarItem" ID="SpecialArrayElementVarItem"></a>
-<h2>SpecialArrayElementVarItem</h2>
+<a NAME="VariablesModel" ID="VariablesModel"></a>
+<h2>VariablesModel</h2>
 <p>
-    Class implementing a QTreeWidgetItem that represents a special array
-    variable node.
-</p>
-<h3>Derived from</h3>
-SpecialVarItem
-<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="#SpecialArrayElementVarItem.__init__">SpecialArrayElementVarItem</a></td>
-<td>Constructor</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-<a NAME="SpecialArrayElementVarItem.__init__" ID="SpecialArrayElementVarItem.__init__"></a>
-<h4>SpecialArrayElementVarItem (Constructor)</h4>
-<b>SpecialArrayElementVarItem</b>(<i>parent, dvar, dvalue, dtype, frmnr, globalScope</i>)
-<p>
-        Constructor
-</p><dl>
-<dt><i>parent</i></dt>
+    Class implementing the data model for QTreeView.
+</p><h3>Signals</h3>
+<dl>
+<dt>expand</dt>
 <dd>
-parent of this item
-</dd><dt><i>dvar</i></dt>
-<dd>
-variable name (string)
-</dd><dt><i>dvalue</i></dt>
-<dd>
-value string (string)
-</dd><dt><i>dtype</i></dt>
-<dd>
-type string (string)
-</dd><dt><i>frmnr</i></dt>
-<dd>
-frame number (0 is the current frame) (int)
-</dd><dt><i>globalScope</i></dt>
-<dd>
-flag indicating global (True) or local (False)
-            variables
+trigger QTreeView to expand given index
 </dd>
 </dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr /><hr />
-<a NAME="SpecialVarItem" ID="SpecialVarItem"></a>
-<h2>SpecialVarItem</h2>
-<p>
-    Class implementing a VariableItem that represents a special variable node.
-</p><p>
-    These special variable nodes are generated for classes, lists,
-    tuples and dictionaries.
-</p>
 <h3>Derived from</h3>
-VariableItem
+QAbstractItemModel
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
@@ -176,251 +203,485 @@
 <h3>Methods</h3>
 <table>
 <tr>
-<td><a href="#SpecialVarItem.__init__">SpecialVarItem</a></td>
+<td><a href="#VariablesModel.__init__">VariablesModel</a></td>
 <td>Constructor</td>
 </tr><tr>
-<td><a href="#SpecialVarItem.expand">expand</a></td>
-<td>Public method to expand the item.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-<a NAME="SpecialVarItem.__init__" ID="SpecialVarItem.__init__"></a>
-<h4>SpecialVarItem (Constructor)</h4>
-<b>SpecialVarItem</b>(<i>parent, dvar, dvalue, dtype, frmnr, globalScope</i>)
-<p>
-        Constructor
-</p><dl>
-<dt><i>parent</i></dt>
-<dd>
-parent of this item
-</dd><dt><i>dvar</i></dt>
-<dd>
-variable name (string)
-</dd><dt><i>dvalue</i></dt>
-<dd>
-value string (string)
-</dd><dt><i>dtype</i></dt>
-<dd>
-type string (string)
-</dd><dt><i>frmnr</i></dt>
-<dd>
-frame number (0 is the current frame) (int)
-</dd><dt><i>globalScope</i></dt>
-<dd>
-flag indicating global (True) or local (False)
-            variables
-</dd>
-</dl><a NAME="SpecialVarItem.expand" ID="SpecialVarItem.expand"></a>
-<h4>SpecialVarItem.expand</h4>
-<b>expand</b>(<i></i>)
-<p>
-        Public method to expand the item.
-</p>
-<div align="right"><a href="#top">Up</a></div>
-<hr /><hr />
-<a NAME="VariableItem" ID="VariableItem"></a>
-<h2>VariableItem</h2>
-<p>
-    Class implementing the data structure for variable items.
-</p>
-<h3>Derived from</h3>
-QTreeWidgetItem
-<h3>Class Attributes</h3>
-<table>
-<tr><td>Indicators</td></tr><tr><td>Type2Indicators</td></tr>
-</table>
-<h3>Class Methods</h3>
-<table>
-<tr>
-<td><a href="#VariableItem.extractId">extractId</a></td>
-<td>Class method to extract the ID string from a variable text.</td>
+<td><a href="#VariablesModel.__buildTreePath">__buildTreePath</a></td>
+<td>Private method to build up a path from the root to parent.</td>
+</tr><tr>
+<td><a href="#VariablesModel.__cleanupParentList">__cleanupParentList</a></td>
+<td>Private method to remove items which are left over at the end of the child list.</td>
+</tr><tr>
+<td><a href="#VariablesModel.__findPendingItem">__findPendingItem</a></td>
+<td>Private method to find the next item to request data from debugger.</td>
+</tr><tr>
+<td><a href="#VariablesModel.__findVariable">__findVariable</a></td>
+<td>Private method to get to the given variable.</td>
+</tr><tr>
+<td><a href="#VariablesModel.clear">clear</a></td>
+<td>Public method to clear the complete data model.</td>
+</tr><tr>
+<td><a href="#VariablesModel.columnCount">columnCount</a></td>
+<td>Public method to get the column count.</td>
+</tr><tr>
+<td><a href="#VariablesModel.data">data</a></td>
+<td>Public method get the role data of item.</td>
+</tr><tr>
+<td><a href="#VariablesModel.flags">flags</a></td>
+<td>Public method to get the item flags.</td>
+</tr><tr>
+<td><a href="#VariablesModel.getMore">getMore</a></td>
+<td>Public method to fetch the next variable from debugger.</td>
 </tr><tr>
-<td><a href="#VariableItem.extractIndicators">extractIndicators</a></td>
-<td>Class method to extract the indicator string from a variable text.</td>
-</tr>
-</table>
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#VariableItem.__init__">VariableItem</a></td>
-<td>Constructor</td>
+<td><a href="#VariablesModel.handlePreferencesChanged">handlePreferencesChanged</a></td>
+<td>Public slot to handle the preferencesChanged signal.</td>
+</tr><tr>
+<td><a href="#VariablesModel.hasChildren">hasChildren</a></td>
+<td>Public method to get a flag if parent has children.</td>
 </tr><tr>
-<td><a href="#VariableItem._buildKey">_buildKey</a></td>
-<td>Protected method to build the access key for the variable.</td>
+<td><a href="#VariablesModel.headerData">headerData</a></td>
+<td>Public method get the header names.</td>
 </tr><tr>
-<td><a href="#VariableItem.attachDummy">attachDummy</a></td>
-<td>Public method to attach a dummy sub item to allow for lazy population.</td>
+<td><a href="#VariablesModel.index">index</a></td>
+<td>Public method to get the index of item at row:column of parent.</td>
 </tr><tr>
-<td><a href="#VariableItem.collapse">collapse</a></td>
-<td>Public method to collapse the item.</td>
+<td><a href="#VariablesModel.parent">parent</a></td>
+<td>Public method to get the parent of the given child.</td>
 </tr><tr>
-<td><a href="#VariableItem.data">data</a></td>
-<td>Public method to return the data for the requested role.</td>
-</tr><tr>
-<td><a href="#VariableItem.deleteChildren">deleteChildren</a></td>
-<td>Public method to delete all children (cleaning the subtree).</td>
+<td><a href="#VariablesModel.resetModifiedMarker">resetModifiedMarker</a></td>
+<td>Public method to remove the modified marker from changed items.</td>
 </tr><tr>
-<td><a href="#VariableItem.expand">expand</a></td>
-<td>Public method to expand the item.</td>
+<td><a href="#VariablesModel.rowCount">rowCount</a></td>
+<td>Public method to get the row count.</td>
 </tr><tr>
-<td><a href="#VariableItem.getId">getId</a></td>
-<td>Public method to get the ID string.</td>
+<td><a href="#VariablesModel.setExpanded">setExpanded</a></td>
+<td>Public method to set the expanded state of item.</td>
 </tr><tr>
-<td><a href="#VariableItem.getValue">getValue</a></td>
-<td>Public method to return the value of the item.</td>
+<td><a href="#VariablesModel.showVariables">showVariables</a></td>
+<td>Public method to update the data model of variable in pathlist.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
 <table>
 <tr><td>None</td></tr>
 </table>
-<a NAME="VariableItem.extractId" ID="VariableItem.extractId"></a>
-<h4>VariableItem.extractId (class method)</h4>
-<b>extractId</b>(<i>var</i>)
+<a NAME="VariablesModel.__init__" ID="VariablesModel.__init__"></a>
+<h4>VariablesModel (Constructor)</h4>
+<b>VariablesModel</b>(<i>treeView, globalScope</i>)
 <p>
-        Class method to extract the ID string from a variable text.
+        Constructor
 </p><dl>
-<dt><i>var</i> (str)</dt>
+<dt><i>treeView</i> (VariablesViewer)</dt>
+<dd>
+QTreeView showing the data
+</dd><dt><i>globalScope</i> (bool)</dt>
 <dd>
-variable text
+flag indicating global (True) or local (False)
+            variables
+</dd>
+</dl><a NAME="VariablesModel.__buildTreePath" ID="VariablesModel.__buildTreePath"></a>
+<h4>VariablesModel.__buildTreePath</h4>
+<b>__buildTreePath</b>(<i>parent</i>)
+<p>
+        Private method to build up a path from the root to parent.
+</p><dl>
+<dt><i>parent</i> (VariableItem)</dt>
+<dd>
+item to build the path for
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-tuple containing the variable text without ID and the ID string
+list of names denoting the path from the root
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of str
+</dd>
+</dl><a NAME="VariablesModel.__cleanupParentList" ID="VariablesModel.__cleanupParentList"></a>
+<h4>VariablesModel.__cleanupParentList</h4>
+<b>__cleanupParentList</b>(<i>parent, parentIdx</i>)
+<p>
+        Private method to remove items which are left over at the end of the
+        child list.
+</p><dl>
+<dt><i>parent</i> (VariableItem)</dt>
+<dd>
+to clean up
+</dd><dt><i>parentIdx</i> (QModelIndex)</dt>
+<dd>
+the parent index as QModelIndex
+</dd>
+</dl><a NAME="VariablesModel.__findPendingItem" ID="VariablesModel.__findPendingItem"></a>
+<h4>VariablesModel.__findPendingItem</h4>
+<b>__findPendingItem</b>(<i>parent=None, pathlist=()</i>)
+<p>
+        Private method to find the next item to request data from debugger.
+</p><dl>
+<dt><i>parent</i> (VariableItem)</dt>
+<dd>
+the model parent
+</dd><dt><i>pathlist</i> (list of str)</dt>
+<dd>
+full path to the variable
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+next item index to request data from debugger
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QModelIndex
+</dd>
+</dl><a NAME="VariablesModel.__findVariable" ID="VariablesModel.__findVariable"></a>
+<h4>VariablesModel.__findVariable</h4>
+<b>__findVariable</b>(<i>pathlist</i>)
+<p>
+        Private method to get to the given variable.
+</p><dl>
+<dt><i>pathlist</i> (list of str)</dt>
+<dd>
+full path to the variable
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+the found variable or None if it doesn't exist
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
 <dd>
-tuple of two str
+VariableItem or None
 </dd>
-</dl><a NAME="VariableItem.extractIndicators" ID="VariableItem.extractIndicators"></a>
-<h4>VariableItem.extractIndicators (class method)</h4>
-<b>extractIndicators</b>(<i>var</i>)
+</dl><a NAME="VariablesModel.clear" ID="VariablesModel.clear"></a>
+<h4>VariablesModel.clear</h4>
+<b>clear</b>(<i>reset=False</i>)
+<p>
+        Public method to clear the complete data model.
+</p><dl>
+<dt><i>reset</i> (bool)</dt>
+<dd>
+flag to clear the expanded keys also
+</dd>
+</dl><a NAME="VariablesModel.columnCount" ID="VariablesModel.columnCount"></a>
+<h4>VariablesModel.columnCount</h4>
+<b>columnCount</b>(<i>parent=QModelIndex()</i>)
 <p>
-        Class method to extract the indicator string from a variable text.
+        Public method to get the column count.
 </p><dl>
-<dt><i>var</i> (str)</dt>
+<dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+the model parent
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+number of columns
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
 <dd>
-variable text
+int
+</dd>
+</dl><a NAME="VariablesModel.data" ID="VariablesModel.data"></a>
+<h4>VariablesModel.data</h4>
+<b>data</b>(<i>index, role=Qt.DisplayRole</i>)
+<p>
+        Public method get the role data of item.
+</p><dl>
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+the model index
+</dd><dt><i>role</i> (QtCore.Qt.ItemDataRole)</dt>
+<dd>
+the requested data role
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-tuple containing the variable text without indicators and the
-            indicator string
+role data of item
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+Any
+</dd>
+</dl><a NAME="VariablesModel.flags" ID="VariablesModel.flags"></a>
+<h4>VariablesModel.flags</h4>
+<b>flags</b>(<i>index</i>)
+<p>
+        Public method to get the item flags.
+</p><dl>
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+of item
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+item flags
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QtCore.Qt.ItemFlag
+</dd>
+</dl><a NAME="VariablesModel.getMore" ID="VariablesModel.getMore"></a>
+<h4>VariablesModel.getMore</h4>
+<b>getMore</b>(<i></i>)
+<p>
+        Public method to fetch the next variable from debugger.
+</p><a NAME="VariablesModel.handlePreferencesChanged" ID="VariablesModel.handlePreferencesChanged"></a>
+<h4>VariablesModel.handlePreferencesChanged</h4>
+<b>handlePreferencesChanged</b>(<i></i>)
+<p>
+        Public slot to handle the preferencesChanged signal.
+</p><a NAME="VariablesModel.hasChildren" ID="VariablesModel.hasChildren"></a>
+<h4>VariablesModel.hasChildren</h4>
+<b>hasChildren</b>(<i>parent=QModelIndex()</i>)
+<p>
+        Public method to get a flag if parent has children.
+</p><dl>
+<dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+the model parent
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating parent has children
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
 <dd>
-tuple of two str
+bool
 </dd>
-</dl><a NAME="VariableItem.__init__" ID="VariableItem.__init__"></a>
-<h4>VariableItem (Constructor)</h4>
-<b>VariableItem</b>(<i>parent, dvar, dvalue, dtype</i>)
+</dl><a NAME="VariablesModel.headerData" ID="VariablesModel.headerData"></a>
+<h4>VariablesModel.headerData</h4>
+<b>headerData</b>(<i>section, orientation, role=Qt.DisplayRole</i>)
 <p>
-        Constructor
+        Public method get the header names.
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>section</i> (int)</dt>
+<dd>
+the header section (row/coulumn)
+</dd><dt><i>orientation</i> (QtCore.Qt.Orientation)</dt>
 <dd>
-reference to the parent item
-</dd><dt><i>dvar</i></dt>
+the header's orientation
+</dd><dt><i>role</i> (QtCore.Qt.ItemDataRole)</dt>
+<dd>
+the requested data role
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
 <dd>
-variable name (string)
-</dd><dt><i>dvalue</i></dt>
-<dd>
-value string (string)
-</dd><dt><i>dtype</i></dt>
+header name
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
 <dd>
-type string (string)
+str or None
 </dd>
-</dl><a NAME="VariableItem._buildKey" ID="VariableItem._buildKey"></a>
-<h4>VariableItem._buildKey</h4>
-<b>_buildKey</b>(<i></i>)
+</dl><a NAME="VariablesModel.index" ID="VariablesModel.index"></a>
+<h4>VariablesModel.index</h4>
+<b>index</b>(<i>row, column, parent=QModelIndex()</i>)
 <p>
-        Protected method to build the access key for the variable.
+        Public method to get the index of item at row:column of parent.
 </p><dl>
+<dt><i>row</i> (int)</dt>
+<dd>
+number of rows
+</dd><dt><i>column</i> (int)</dt>
+<dd>
+number of columns
+</dd><dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+the model parent
+</dd>
+</dl><dl>
 <dt>Returns:</dt>
 <dd>
-access key
+new model index for child
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QModelIndex
+</dd>
+</dl><a NAME="VariablesModel.parent" ID="VariablesModel.parent"></a>
+<h4>VariablesModel.parent</h4>
+<b>parent</b>(<i>child</i>)
+<p>
+        Public method to get the parent of the given child.
+</p><dl>
+<dt><i>child</i> (QModelIndex)</dt>
+<dd>
+the model child node
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+new model index for parent
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QModelIndex
+</dd>
+</dl><a NAME="VariablesModel.resetModifiedMarker" ID="VariablesModel.resetModifiedMarker"></a>
+<h4>VariablesModel.resetModifiedMarker</h4>
+<b>resetModifiedMarker</b>(<i>parentIdx=QModelIndex(), pathlist=()</i>)
+<p>
+        Public method to remove the modified marker from changed items.
+</p><dl>
+<dt><i>parentIdx</i> (QModelIndex)</dt>
+<dd>
+item to reset marker
+</dd><dt><i>pathlist</i> (list of str)</dt>
+<dd>
+full path to the variable
+</dd>
+</dl><a NAME="VariablesModel.rowCount" ID="VariablesModel.rowCount"></a>
+<h4>VariablesModel.rowCount</h4>
+<b>rowCount</b>(<i>parent=QModelIndex()</i>)
+<p>
+        Public method to get the row count.
+</p><dl>
+<dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+the model parent
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+number of rows
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
 <dd>
-str
+int
+</dd>
+</dl><a NAME="VariablesModel.setExpanded" ID="VariablesModel.setExpanded"></a>
+<h4>VariablesModel.setExpanded</h4>
+<b>setExpanded</b>(<i>index, state</i>)
+<p>
+        Public method to set the expanded state of item.
+</p><dl>
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+item to change expanded state
+</dd><dt><i>state</i> (bool)</dt>
+<dd>
+state of the item
 </dd>
-</dl><a NAME="VariableItem.attachDummy" ID="VariableItem.attachDummy"></a>
-<h4>VariableItem.attachDummy</h4>
-<b>attachDummy</b>(<i></i>)
+</dl><a NAME="VariablesModel.showVariables" ID="VariablesModel.showVariables"></a>
+<h4>VariablesModel.showVariables</h4>
+<b>showVariables</b>(<i>vlist, frmnr, pathlist=None</i>)
+<p>
+        Public method to update the data model of variable in pathlist.
+</p><dl>
+<dt><i>vlist</i> (list of str)</dt>
+<dd>
+the list of variables to be displayed. Each
+                list entry is a tuple of three values.
+                <ul>
+                <li>the variable name (string)</li>
+                <li>the variables type (string)</li>
+                <li>the variables value (string)</li>
+                </ul>
+</dd><dt><i>frmnr</i> (int)</dt>
+<dd>
+frame number (0 is the current frame)
+</dd><dt><i>pathlist</i> (list of str)</dt>
+<dd>
+full path to the variable
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="VariablesProxyModel" ID="VariablesProxyModel"></a>
+<h2>VariablesProxyModel</h2>
 <p>
-        Public method to attach a dummy sub item to allow for lazy population.
-</p><a NAME="VariableItem.collapse" ID="VariableItem.collapse"></a>
-<h4>VariableItem.collapse</h4>
-<b>collapse</b>(<i></i>)
+    Class for handling the sort operations.
+</p>
+<h3>Derived from</h3>
+QSortFilterProxyModel
+<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="#VariablesProxyModel.__init__">VariablesProxyModel</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#VariablesProxyModel.hasChildren">hasChildren</a></td>
+<td>Public method to get a flag if parent has children.</td>
+</tr><tr>
+<td><a href="#VariablesProxyModel.setExpanded">setExpanded</a></td>
+<td>Public slot to get a flag if parent has children.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="VariablesProxyModel.__init__" ID="VariablesProxyModel.__init__"></a>
+<h4>VariablesProxyModel (Constructor)</h4>
+<b>VariablesProxyModel</b>(<i>parent=None</i>)
 <p>
-        Public method to collapse the item.
+        Constructor
+</p><dl>
+<dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+the parent model index
+</dd>
+</dl><a NAME="VariablesProxyModel.hasChildren" ID="VariablesProxyModel.hasChildren"></a>
+<h4>VariablesProxyModel.hasChildren</h4>
+<b>hasChildren</b>(<i>parent</i>)
+<p>
+        Public method to get a flag if parent has children.
 </p><p>
-        Note: This is just a do nothing and should be overwritten.
-</p><a NAME="VariableItem.data" ID="VariableItem.data"></a>
-<h4>VariableItem.data</h4>
-<b>data</b>(<i>column, role</i>)
-<p>
-        Public method to return the data for the requested role.
-</p><p>
-        This implementation changes the original behavior in a way, that the
-        display data is returned as the tooltip for column 1.
+        The given model index has to be transformed to the underlying source
+        model to get the correct result.
 </p><dl>
-<dt><i>column</i></dt>
+<dt><i>parent</i> (QModelIndex)</dt>
 <dd>
-column number (integer)
-</dd><dt><i>role</i></dt>
-<dd>
-data role (Qt.ItemDataRole)
+the model parent
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-requested data
-</dd>
-</dl><a NAME="VariableItem.deleteChildren" ID="VariableItem.deleteChildren"></a>
-<h4>VariableItem.deleteChildren</h4>
-<b>deleteChildren</b>(<i></i>)
-<p>
-        Public method to delete all children (cleaning the subtree).
-</p><a NAME="VariableItem.expand" ID="VariableItem.expand"></a>
-<h4>VariableItem.expand</h4>
-<b>expand</b>(<i></i>)
-<p>
-        Public method to expand the item.
-</p><p>
-        Note: This is just a do nothing and should be overwritten.
-</p><a NAME="VariableItem.getId" ID="VariableItem.getId"></a>
-<h4>VariableItem.getId</h4>
-<b>getId</b>(<i></i>)
-<p>
-        Public method to get the ID string.
-</p><dl>
-<dt>Returns:</dt>
-<dd>
-ID string
+flag if parent has children
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
 <dd>
-str
+bool
 </dd>
-</dl><a NAME="VariableItem.getValue" ID="VariableItem.getValue"></a>
-<h4>VariableItem.getValue</h4>
-<b>getValue</b>(<i></i>)
+</dl><a NAME="VariablesProxyModel.setExpanded" ID="VariablesProxyModel.setExpanded"></a>
+<h4>VariablesProxyModel.setExpanded</h4>
+<b>setExpanded</b>(<i>index, state</i>)
 <p>
-        Public method to return the value of the item.
+        Public slot to get a flag if parent has children.
+</p><p>
+        The given model index has to be transformed to the underlying source
+        model to get the correct result.
 </p><dl>
-<dt>Returns:</dt>
+<dt><i>index</i> (QModelIndex)</dt>
 <dd>
-value of the item (string)
+item to change expanded state
+</dd><dt><i>state</i> (bool)</dt>
+<dd>
+state of the item
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
@@ -428,20 +689,28 @@
 <a NAME="VariablesViewer" ID="VariablesViewer"></a>
 <h2>VariablesViewer</h2>
 <p>
-    Class implementing the variables viewer widget.
+    Class implementing the variables viewer view.
 </p><p>
-    This widget is used to display the variables of the program being
+    This view is used to display the variables of the program being
     debugged in a tree. Compound types will be shown with
     their main entry first. Once the subtree has been expanded, the
     individual entries will be shown. Double clicking an entry will
+    expand or collapse the item, if it has children and the double click
+    was performed on the first column of the tree, otherwise it'll
     popup a dialog showing the variables parameters in a more readable
     form. This is especially useful for lengthy strings.
 </p><p>
-    This widget has two modes for displaying the global and the local
+    This view has two modes for displaying the global and the local
     variables.
-</p>
+</p><h3>Signals</h3>
+<dl>
+<dt>preferencesChanged()</dt>
+<dd>
+to inform model about new background colours
+</dd>
+</dl>
 <h3>Derived from</h3>
-QTreeWidget
+QTreeView
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
@@ -456,39 +725,30 @@
 <td><a href="#VariablesViewer.__init__">VariablesViewer</a></td>
 <td>Constructor</td>
 </tr><tr>
-<td><a href="#VariablesViewer.__addItem">__addItem</a></td>
-<td>Private method used to add an item to the list.</td>
-</tr><tr>
-<td><a href="#VariablesViewer.__buildTreePath">__buildTreePath</a></td>
-<td>Private method to build up a path from the top to an item.</td>
+<td><a href="#VariablesViewer.__collapseChildren">__collapseChildren</a></td>
+<td>Private slot to collapse all child items of current parent.</td>
 </tr><tr>
 <td><a href="#VariablesViewer.__configure">__configure</a></td>
 <td>Private method to open the configuration dialog.</td>
 </tr><tr>
+<td><a href="#VariablesViewer.__configureFilter">__configureFilter</a></td>
+<td>Private method to open the variables filter dialog.</td>
+</tr><tr>
 <td><a href="#VariablesViewer.__createPopupMenus">__createPopupMenus</a></td>
 <td>Private method to generate the popup menus.</td>
 </tr><tr>
-<td><a href="#VariablesViewer.__expandItemSignal">__expandItemSignal</a></td>
-<td>Private slot to handle the expanded signal.</td>
-</tr><tr>
-<td><a href="#VariablesViewer.__findItem">__findItem</a></td>
-<td>Private method to search for an item.</td>
+<td><a href="#VariablesViewer.__expandChildren">__expandChildren</a></td>
+<td>Private slot to expand all child items of current parent.</td>
 </tr><tr>
-<td><a href="#VariablesViewer.__generateItem">__generateItem</a></td>
-<td>Private method used to generate a VariableItem.</td>
+<td><a href="#VariablesViewer.__itemDoubleClicked">__itemDoubleClicked</a></td>
+<td>Private method called if an item was double clicked.</td>
 </tr><tr>
-<td><a href="#VariablesViewer.__getDispType">__getDispType</a></td>
-<td>Private method used to get the display string for type vtype.</td>
+<td><a href="#VariablesViewer.__mdlRequestExpand">__mdlRequestExpand</a></td>
+<td>Private method to inform the view about items to be expand.</td>
 </tr><tr>
 <td><a href="#VariablesViewer.__refreshView">__refreshView</a></td>
 <td>Private slot to refresh the view.</td>
 </tr><tr>
-<td><a href="#VariablesViewer.__resort">__resort</a></td>
-<td>Private method to resort the tree.</td>
-</tr><tr>
-<td><a href="#VariablesViewer.__sectionClicked">__sectionClicked</a></td>
-<td>Private method handling a click onto a header section.</td>
-</tr><tr>
 <td><a href="#VariablesViewer.__showContextMenu">__showContextMenu</a></td>
 <td>Private slot to show the context menu.</td>
 </tr><tr>
@@ -498,23 +758,20 @@
 <td><a href="#VariablesViewer.__showVariableDetails">__showVariableDetails</a></td>
 <td>Private method to show details about a variable.</td>
 </tr><tr>
-<td><a href="#VariablesViewer.collapseItem">collapseItem</a></td>
-<td>Public slot to handle the collapsed signal.</td>
-</tr><tr>
-<td><a href="#VariablesViewer.expandItem">expandItem</a></td>
-<td>Public slot to handle the expanded signal.</td>
-</tr><tr>
 <td><a href="#VariablesViewer.handleResetUI">handleResetUI</a></td>
 <td>Public method to reset the VariablesViewer.</td>
 </tr><tr>
-<td><a href="#VariablesViewer.mouseDoubleClickEvent">mouseDoubleClickEvent</a></td>
-<td>Protected method of QAbstractItemView.</td>
+<td><a href="#VariablesViewer.resizeEvent">resizeEvent</a></td>
+<td>Protected slot informing about the widget size change.</td>
 </tr><tr>
 <td><a href="#VariablesViewer.showVariable">showVariable</a></td>
 <td>Public method to show variables in a list.</td>
 </tr><tr>
 <td><a href="#VariablesViewer.showVariables">showVariables</a></td>
 <td>Public method to show variables in a list.</td>
+</tr><tr>
+<td><a href="#VariablesViewer.verticalScrollbarValueChanged">verticalScrollbarValueChanged</a></td>
+<td>Public slot informing about the scrollbar change.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -527,180 +784,76 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>viewer</i></dt>
+<dt><i>viewer</i> (DebugViewer)</dt>
 <dd>
-reference to the debug viewer object (DebugViewer)
-</dd><dt><i>globalScope</i></dt>
+reference to the debug viewer object
+</dd><dt><i>globalScope</i> (bool)</dt>
 <dd>
 flag indicating global (True) or local (False)
             variables
-</dd><dt><i>parent</i></dt>
-<dd>
-the parent (QWidget)
-</dd>
-</dl><a NAME="VariablesViewer.__addItem" ID="VariablesViewer.__addItem"></a>
-<h4>VariablesViewer.__addItem</h4>
-<b>__addItem</b>(<i>parent, vtype, var, value</i>)
-<p>
-        Private method used to add an item to the list.
-</p><p>
-        If the item is of a type with subelements (i.e. list, dictionary,
-        tuple), these subelements are added by calling this method recursively.
-</p><dl>
-<dt><i>parent</i></dt>
-<dd>
-the parent of the item to be added
-            (QTreeWidgetItem or None)
-</dd><dt><i>vtype</i></dt>
-<dd>
-the type of the item to be added
-            (string)
-</dd><dt><i>var</i></dt>
+</dd><dt><i>parent</i> (QWidget)</dt>
 <dd>
-the variable name (string)
-</dd><dt><i>value</i></dt>
-<dd>
-the value string (string)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-The item that was added to the listview (QTreeWidgetItem).
+the parent
 </dd>
-</dl><a NAME="VariablesViewer.__buildTreePath" ID="VariablesViewer.__buildTreePath"></a>
-<h4>VariablesViewer.__buildTreePath</h4>
-<b>__buildTreePath</b>(<i>itm</i>)
+</dl><a NAME="VariablesViewer.__collapseChildren" ID="VariablesViewer.__collapseChildren"></a>
+<h4>VariablesViewer.__collapseChildren</h4>
+<b>__collapseChildren</b>(<i></i>)
 <p>
-        Private method to build up a path from the top to an item.
-</p><dl>
-<dt><i>itm</i></dt>
-<dd>
-item to build the path for (QTreeWidgetItem)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-list of names denoting the path from the top (list of strings)
-</dd>
-</dl><a NAME="VariablesViewer.__configure" ID="VariablesViewer.__configure"></a>
+        Private slot to collapse all child items of current parent.
+</p><a NAME="VariablesViewer.__configure" ID="VariablesViewer.__configure"></a>
 <h4>VariablesViewer.__configure</h4>
 <b>__configure</b>(<i></i>)
 <p>
         Private method to open the configuration dialog.
+</p><a NAME="VariablesViewer.__configureFilter" ID="VariablesViewer.__configureFilter"></a>
+<h4>VariablesViewer.__configureFilter</h4>
+<b>__configureFilter</b>(<i></i>)
+<p>
+        Private method to open the variables filter dialog.
 </p><a NAME="VariablesViewer.__createPopupMenus" ID="VariablesViewer.__createPopupMenus"></a>
 <h4>VariablesViewer.__createPopupMenus</h4>
 <b>__createPopupMenus</b>(<i></i>)
 <p>
         Private method to generate the popup menus.
-</p><a NAME="VariablesViewer.__expandItemSignal" ID="VariablesViewer.__expandItemSignal"></a>
-<h4>VariablesViewer.__expandItemSignal</h4>
-<b>__expandItemSignal</b>(<i>parentItem</i>)
-<p>
-        Private slot to handle the expanded signal.
-</p><dl>
-<dt><i>parentItem</i></dt>
-<dd>
-reference to the item being expanded
-            (QTreeWidgetItem)
-</dd>
-</dl><a NAME="VariablesViewer.__findItem" ID="VariablesViewer.__findItem"></a>
-<h4>VariablesViewer.__findItem</h4>
-<b>__findItem</b>(<i>slist, column, node=None</i>)
+</p><a NAME="VariablesViewer.__expandChildren" ID="VariablesViewer.__expandChildren"></a>
+<h4>VariablesViewer.__expandChildren</h4>
+<b>__expandChildren</b>(<i></i>)
 <p>
-        Private method to search for an item.
-</p><p>
-        It is used to find a specific item in column,
-        that is a child of node. If node is None, a child of the
-        QTreeWidget is searched.
-</p><dl>
-<dt><i>slist</i></dt>
-<dd>
-searchlist (list of strings)
-</dd><dt><i>column</i></dt>
-<dd>
-index of column to search in (int)
-</dd><dt><i>node</i></dt>
-<dd>
-start point of the search
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-the found item or None
-</dd>
-</dl><a NAME="VariablesViewer.__generateItem" ID="VariablesViewer.__generateItem"></a>
-<h4>VariablesViewer.__generateItem</h4>
-<b>__generateItem</b>(<i>parent, dvar, dvalue, dtype, isSpecial=False</i>)
+        Private slot to expand all child items of current parent.
+</p><a NAME="VariablesViewer.__itemDoubleClicked" ID="VariablesViewer.__itemDoubleClicked"></a>
+<h4>VariablesViewer.__itemDoubleClicked</h4>
+<b>__itemDoubleClicked</b>(<i>index</i>)
 <p>
-        Private method used to generate a VariableItem.
+        Private method called if an item was double clicked.
 </p><dl>
-<dt><i>parent</i></dt>
-<dd>
-parent of the item to be generated
-</dd><dt><i>dvar</i></dt>
+<dt><i>index</i> (QModelIndex)</dt>
 <dd>
-variable name (string)
-</dd><dt><i>dvalue</i></dt>
-<dd>
-value string (string)
-</dd><dt><i>dtype</i></dt>
-<dd>
-type string (string)
-</dd><dt><i>isSpecial</i></dt>
-<dd>
-flag indicating that a special node should be
-            generated (boolean)
+the double clicked item
 </dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-The item that was generated (VariableItem).
-</dd>
-</dl><a NAME="VariablesViewer.__getDispType" ID="VariablesViewer.__getDispType"></a>
-<h4>VariablesViewer.__getDispType</h4>
-<b>__getDispType</b>(<i>vtype</i>)
+</dl><a NAME="VariablesViewer.__mdlRequestExpand" ID="VariablesViewer.__mdlRequestExpand"></a>
+<h4>VariablesViewer.__mdlRequestExpand</h4>
+<b>__mdlRequestExpand</b>(<i>modelIndex</i>)
 <p>
-        Private method used to get the display string for type vtype.
+        Private method to inform the view about items to be expand.
 </p><dl>
-<dt><i>vtype</i></dt>
+<dt><i>modelIndex</i> (QModelIndex)</dt>
 <dd>
-the type, the display string should be looked up for
-              (string)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-displaystring (string)
+the model index
 </dd>
 </dl><a NAME="VariablesViewer.__refreshView" ID="VariablesViewer.__refreshView"></a>
 <h4>VariablesViewer.__refreshView</h4>
 <b>__refreshView</b>(<i></i>)
 <p>
         Private slot to refresh the view.
-</p><a NAME="VariablesViewer.__resort" ID="VariablesViewer.__resort"></a>
-<h4>VariablesViewer.__resort</h4>
-<b>__resort</b>(<i>parent=None</i>)
-<p>
-        Private method to resort the tree.
-</p><dl>
-<dt><i>parent</i> (QTreeWidgetItem)</dt>
-<dd>
-reference to a parent item
-</dd>
-</dl><a NAME="VariablesViewer.__sectionClicked" ID="VariablesViewer.__sectionClicked"></a>
-<h4>VariablesViewer.__sectionClicked</h4>
-<b>__sectionClicked</b>(<i></i>)
-<p>
-        Private method handling a click onto a header section.
 </p><a NAME="VariablesViewer.__showContextMenu" ID="VariablesViewer.__showContextMenu"></a>
 <h4>VariablesViewer.__showContextMenu</h4>
 <b>__showContextMenu</b>(<i>coord</i>)
 <p>
         Private slot to show the context menu.
 </p><dl>
-<dt><i>coord</i></dt>
+<dt><i>coord</i> (QPoint)</dt>
 <dd>
-the position of the mouse pointer (QPoint)
+the position of the mouse pointer
 </dd>
 </dl><a NAME="VariablesViewer.__showDetails" ID="VariablesViewer.__showDetails"></a>
 <h4>VariablesViewer.__showDetails</h4>
@@ -709,53 +862,28 @@
         Private slot to show details about the selected variable.
 </p><a NAME="VariablesViewer.__showVariableDetails" ID="VariablesViewer.__showVariableDetails"></a>
 <h4>VariablesViewer.__showVariableDetails</h4>
-<b>__showVariableDetails</b>(<i>itm</i>)
+<b>__showVariableDetails</b>(<i>index</i>)
 <p>
         Private method to show details about a variable.
 </p><dl>
-<dt><i>itm</i></dt>
+<dt><i>index</i> (QModelIndex)</dt>
 <dd>
 reference to the variable item
 </dd>
-</dl><a NAME="VariablesViewer.collapseItem" ID="VariablesViewer.collapseItem"></a>
-<h4>VariablesViewer.collapseItem</h4>
-<b>collapseItem</b>(<i>parentItem</i>)
-<p>
-        Public slot to handle the collapsed signal.
-</p><dl>
-<dt><i>parentItem</i></dt>
-<dd>
-reference to the item being collapsed
-            (QTreeWidgetItem)
-</dd>
-</dl><a NAME="VariablesViewer.expandItem" ID="VariablesViewer.expandItem"></a>
-<h4>VariablesViewer.expandItem</h4>
-<b>expandItem</b>(<i>parentItem</i>)
-<p>
-        Public slot to handle the expanded signal.
-</p><dl>
-<dt><i>parentItem</i></dt>
-<dd>
-reference to the item being expanded
-            (QTreeWidgetItem)
-</dd>
 </dl><a NAME="VariablesViewer.handleResetUI" ID="VariablesViewer.handleResetUI"></a>
 <h4>VariablesViewer.handleResetUI</h4>
 <b>handleResetUI</b>(<i></i>)
 <p>
         Public method to reset the VariablesViewer.
-</p><a NAME="VariablesViewer.mouseDoubleClickEvent" ID="VariablesViewer.mouseDoubleClickEvent"></a>
-<h4>VariablesViewer.mouseDoubleClickEvent</h4>
-<b>mouseDoubleClickEvent</b>(<i>mouseEvent</i>)
+</p><a NAME="VariablesViewer.resizeEvent" ID="VariablesViewer.resizeEvent"></a>
+<h4>VariablesViewer.resizeEvent</h4>
+<b>resizeEvent</b>(<i>event</i>)
 <p>
-        Protected method of QAbstractItemView.
-</p><p>
-        Reimplemented to disable expanding/collapsing of items when
-        double-clicking. Instead the double-clicked entry is opened.
+        Protected slot informing about the widget size change.
 </p><dl>
-<dt><i>mouseEvent</i></dt>
+<dt><i>event</i> (QResizeEvent)</dt>
 <dd>
-the mouse event object (QMouseEvent)
+information
 </dd>
 </dl><a NAME="VariablesViewer.showVariable" ID="VariablesViewer.showVariable"></a>
 <h4>VariablesViewer.showVariable</h4>
@@ -763,11 +891,11 @@
 <p>
         Public method to show variables in a list.
 </p><dl>
-<dt><i>vlist</i></dt>
+<dt><i>vlist</i> (list)</dt>
 <dd>
 the list of subitems to be displayed.
                 The first element gives the path of the
-                parent variable. Each other listentry is
+                parent variable. Each other list entry is
                 a tuple of three values.
                 <ul>
                 <li>the variable name (string)</li>
@@ -781,18 +909,28 @@
 <p>
         Public method to show variables in a list.
 </p><dl>
-<dt><i>vlist</i></dt>
+<dt><i>vlist</i> (list)</dt>
 <dd>
 the list of variables to be displayed. Each
-                listentry is a tuple of three values.
+                list entry is a tuple of three values.
                 <ul>
                 <li>the variable name (string)</li>
                 <li>the variables type (string)</li>
                 <li>the variables value (string)</li>
                 </ul>
-</dd><dt><i>frmnr</i></dt>
+</dd><dt><i>frmnr</i> (int)</dt>
 <dd>
-frame number (0 is the current frame) (int)
+frame number (0 is the current frame)
+</dd>
+</dl><a NAME="VariablesViewer.verticalScrollbarValueChanged" ID="VariablesViewer.verticalScrollbarValueChanged"></a>
+<h4>VariablesViewer.verticalScrollbarValueChanged</h4>
+<b>verticalScrollbarValueChanged</b>(<i>value</i>)
+<p>
+        Public slot informing about the scrollbar change.
+</p><dl>
+<dt><i>value</i> (int)</dt>
+<dd>
+current value of the vertical scrollbar
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/eric6/Documentation/Source/eric6.PipInterface.Pip.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.PipInterface.Pip.html	Mon May 20 22:44:12 2019 +0200
@@ -340,10 +340,16 @@
 </dd>
 </dl><a NAME="Pip.getVirtualenvNames" ID="Pip.getVirtualenvNames"></a>
 <h4>Pip.getVirtualenvNames</h4>
-<b>getVirtualenvNames</b>(<i></i>)
+<b>getVirtualenvNames</b>(<i>noRemote=False</i>)
 <p>
         Public method to get a sorted list of virtual environment names.
 </p><dl>
+<dt><i>noRemote</i> (bool)</dt>
+<dd>
+flag indicating to exclude environments for remote
+            debugging
+</dd>
+</dl><dl>
 <dt>Returns:</dt>
 <dd>
 sorted list of virtual environment names
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog</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.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog</h1>
+<p>
+Module implementing a dialog to select the heads to be closed.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#HgCloseHeadSelectionDialog">HgCloseHeadSelectionDialog</a></td>
+<td>Class implementing a dialog to select the heads to be closed.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="HgCloseHeadSelectionDialog" ID="HgCloseHeadSelectionDialog"></a>
+<h2>HgCloseHeadSelectionDialog</h2>
+<p>
+    Class implementing a dialog to select the heads to be closed.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_HgCloseHeadSelectionDialog
+<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="#HgCloseHeadSelectionDialog.__init__">HgCloseHeadSelectionDialog</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#HgCloseHeadSelectionDialog.__getHeads">__getHeads</a></td>
+<td>Private method to get the open heads.</td>
+</tr><tr>
+<td><a href="#HgCloseHeadSelectionDialog.getData">getData</a></td>
+<td>Public method to retrieve the entered data.</td>
+</tr><tr>
+<td><a href="#HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged">on_headsList_itemSelectionChanged</a></td>
+<td>Private slot handling changes of the selection.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="HgCloseHeadSelectionDialog.__init__" ID="HgCloseHeadSelectionDialog.__init__"></a>
+<h4>HgCloseHeadSelectionDialog (Constructor)</h4>
+<b>HgCloseHeadSelectionDialog</b>(<i>vcs, ppath, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>vcs</i> (Hg)</dt>
+<dd>
+reference to the VCS object
+</dd><dt><i>ppath</i> (str)</dt>
+<dd>
+directory containing the repository
+</dd><dt><i>parent</i> (QWidget)</dt>
+<dd>
+reference to the parent widget
+</dd>
+</dl><a NAME="HgCloseHeadSelectionDialog.__getHeads" ID="HgCloseHeadSelectionDialog.__getHeads"></a>
+<h4>HgCloseHeadSelectionDialog.__getHeads</h4>
+<b>__getHeads</b>(<i>vcs, ppath</i>)
+<p>
+        Private method to get the open heads.
+</p><dl>
+<dt><i>vcs</i> (Hg)</dt>
+<dd>
+reference to the VCS object
+</dd><dt><i>ppath</i> (str)</dt>
+<dd>
+directory containing the repository
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+list of tuples containing the revision and the corresponding
+            branch name
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+list of tuples of (str, str)
+</dd>
+</dl><a NAME="HgCloseHeadSelectionDialog.getData" ID="HgCloseHeadSelectionDialog.getData"></a>
+<h4>HgCloseHeadSelectionDialog.getData</h4>
+<b>getData</b>(<i></i>)
+<p>
+        Public method to retrieve the entered data.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple containing a list of selected revisions and the commit
+            message
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (list of str, str)
+</dd>
+</dl><a NAME="HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged" ID="HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged"></a>
+<h4>HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged</h4>
+<b>on_headsList_itemSelectionChanged</b>(<i></i>)
+<p>
+        Private slot handling changes of the selection.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper</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.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper</h1>
+<p>
+Module implementing the closehead extension project helper.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#CloseheadProjectHelper">CloseheadProjectHelper</a></td>
+<td>Class implementing the closehead extension project helper.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="CloseheadProjectHelper" ID="CloseheadProjectHelper"></a>
+<h2>CloseheadProjectHelper</h2>
+<p>
+    Class implementing the closehead extension project helper.
+</p>
+<h3>Derived from</h3>
+HgExtensionProjectHelper
+<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="#CloseheadProjectHelper.__init__">CloseheadProjectHelper</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#CloseheadProjectHelper.__hgClosehead">__hgClosehead</a></td>
+<td>Private slot used to close arbitrary heads.</td>
+</tr><tr>
+<td><a href="#CloseheadProjectHelper.initActions">initActions</a></td>
+<td>Public method to generate the action objects.</td>
+</tr><tr>
+<td><a href="#CloseheadProjectHelper.initMenu">initMenu</a></td>
+<td>Public method to generate the extension menu.</td>
+</tr><tr>
+<td><a href="#CloseheadProjectHelper.menuTitle">menuTitle</a></td>
+<td>Public method to get the menu title.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="CloseheadProjectHelper.__init__" ID="CloseheadProjectHelper.__init__"></a>
+<h4>CloseheadProjectHelper (Constructor)</h4>
+<b>CloseheadProjectHelper</b>(<i></i>)
+<p>
+        Constructor
+</p><a NAME="CloseheadProjectHelper.__hgClosehead" ID="CloseheadProjectHelper.__hgClosehead"></a>
+<h4>CloseheadProjectHelper.__hgClosehead</h4>
+<b>__hgClosehead</b>(<i></i>)
+<p>
+        Private slot used to close arbitrary heads.
+</p><a NAME="CloseheadProjectHelper.initActions" ID="CloseheadProjectHelper.initActions"></a>
+<h4>CloseheadProjectHelper.initActions</h4>
+<b>initActions</b>(<i></i>)
+<p>
+        Public method to generate the action objects.
+</p><a NAME="CloseheadProjectHelper.initMenu" ID="CloseheadProjectHelper.initMenu"></a>
+<h4>CloseheadProjectHelper.initMenu</h4>
+<b>initMenu</b>(<i>mainMenu</i>)
+<p>
+        Public method to generate the extension menu.
+</p><dl>
+<dt><i>mainMenu</i> (QMenu)</dt>
+<dd>
+reference to the main menu
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+populated menu (QMenu)
+</dd>
+</dl><a NAME="CloseheadProjectHelper.menuTitle" ID="CloseheadProjectHelper.menuTitle"></a>
+<h4>CloseheadProjectHelper.menuTitle</h4>
+<b>menuTitle</b>(<i></i>)
+<p>
+        Public method to get the menu title.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+title of the menu
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead</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.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead</h1>
+<p>
+Module implementing the closehead extension interface.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Closehead">Closehead</a></td>
+<td>Class implementing the strip extension interface.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="Closehead" ID="Closehead"></a>
+<h2>Closehead</h2>
+<p>
+    Class implementing the strip extension interface.
+</p>
+<h3>Derived from</h3>
+HgExtension
+<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="#Closehead.__init__">Closehead</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#Closehead.hgCloseheads">hgCloseheads</a></td>
+<td>Public method to close arbitrary heads.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="Closehead.__init__" ID="Closehead.__init__"></a>
+<h4>Closehead (Constructor)</h4>
+<b>Closehead</b>(<i>vcs</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>vcs</i> (Hg)</dt>
+<dd>
+reference to the Mercurial vcs object
+</dd>
+</dl><a NAME="Closehead.hgCloseheads" ID="Closehead.hgCloseheads"></a>
+<h4>Closehead.hgCloseheads</h4>
+<b>hgCloseheads</b>(<i>name, revisions=None</i>)
+<p>
+        Public method to close arbitrary heads.
+</p><dl>
+<dt><i>name</i> (str)</dt>
+<dd>
+file/directory name
+</dd><dt><i>revisions</i> (str)</dt>
+<dd>
+revisions of branch heads to be closed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html	Mon May 20 22:44:12 2019 +0200
@@ -81,6 +81,9 @@
 <td><a href="#HgLogBrowserDialog.__bundleActTriggered">__bundleActTriggered</a></td>
 <td>Private slot to create a changegroup file.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__closeHeadsActTriggered">__closeHeadsActTriggered</a></td>
+<td>Private slot to close the selected head revisions.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__fetchActTriggered">__fetchActTriggered</a></td>
 <td>Private slot to fetch changes from a remote repository.</td>
 </tr><tr>
@@ -117,6 +120,9 @@
 <td><a href="#HgLogBrowserDialog.__getColor">__getColor</a></td>
 <td>Private method to get the (rotating) name of the color given an index.</td>
 </tr><tr>
+<td><a href="#HgLogBrowserDialog.__getHeads">__getHeads</a></td>
+<td>Private method to get the list of all heads.</td>
+</tr><tr>
 <td><a href="#HgLogBrowserDialog.__getLogEntries">__getLogEntries</a></td>
 <td>Private method to retrieve log entries from the repository.</td>
 </tr><tr>
@@ -325,19 +331,19 @@
 </table>
 <a NAME="HgLogBrowserDialog.__init__" ID="HgLogBrowserDialog.__init__"></a>
 <h4>HgLogBrowserDialog (Constructor)</h4>
-<b>HgLogBrowserDialog</b>(<i>vcs, mode="log", parent=None</i>)
+<b>HgLogBrowserDialog</b>(<i>vcs, mode="", parent=None</i>)
 <p>
         Constructor
 </p><dl>
-<dt><i>vcs</i></dt>
+<dt><i>vcs</i> (Hg)</dt>
 <dd>
 reference to the vcs object
-</dd><dt><i>mode</i></dt>
+</dd><dt><i>mode</i> (str (one of log, full_log, incoming, outgoing))</dt>
 <dd>
-mode of the dialog (string; one of log, incoming, outgoing)
-</dd><dt><i>parent</i></dt>
+mode of the dialog
+</dd><dt><i>parent</i> (QWidget)</dt>
 <dd>
-parent widget (QWidget)
+parent widget
 </dd>
 </dl><a NAME="HgLogBrowserDialog.__actionMode" ID="HgLogBrowserDialog.__actionMode"></a>
 <h4>HgLogBrowserDialog.__actionMode</h4>
@@ -402,6 +408,11 @@
 <b>__bundleActTriggered</b>(<i></i>)
 <p>
         Private slot to create a changegroup file.
+</p><a NAME="HgLogBrowserDialog.__closeHeadsActTriggered" ID="HgLogBrowserDialog.__closeHeadsActTriggered"></a>
+<h4>HgLogBrowserDialog.__closeHeadsActTriggered</h4>
+<b>__closeHeadsActTriggered</b>(<i></i>)
+<p>
+        Private slot to close the selected head revisions.
 </p><a NAME="HgLogBrowserDialog.__fetchActTriggered" ID="HgLogBrowserDialog.__fetchActTriggered"></a>
 <h4>HgLogBrowserDialog.__fetchActTriggered</h4>
 <b>__fetchActTriggered</b>(<i></i>)
@@ -485,41 +496,47 @@
 </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>)
+<b>__generateIcon</b>(<i>column, color, bottomedges, topedges, dotColor, currentRev, closed, isDraft</i>)
 <p>
         Private method to generate an icon containing the revision tree for the
         given data.
 </p><dl>
-<dt><i>column</i></dt>
+<dt><i>column</i> (int)</dt>
 <dd>
-column index of the revision (integer)
-</dd><dt><i>color</i></dt>
+column index of the revision
+</dd><dt><i>color</i> (int)</dt>
 <dd>
-color of the node (integer)
-</dd><dt><i>bottomedges</i></dt>
+color of the node
+</dd><dt><i>bottomedges</i> (list of tuples of (int, int, int))</dt>
 <dd>
 list of edges for the bottom of the node
-            (list of tuples of three integers)
-</dd><dt><i>topedges</i></dt>
+</dd><dt><i>topedges</i> (list of tuples of (int, int, int))</dt>
 <dd>
 list of edges for the top of the node
-            (list of tuples of three integers)
-</dd><dt><i>dotColor</i></dt>
+</dd><dt><i>dotColor</i> (QColor)</dt>
 <dd>
-color to be used for the dot (QColor)
-</dd><dt><i>currentRev</i></dt>
+color to be used for the dot
+</dd><dt><i>currentRev</i> (bool)</dt>
 <dd>
 flag indicating to draw the icon for the
-            current revision (boolean)
-</dd><dt><i>closed</i></dt>
+            current revision
+</dd><dt><i>closed</i> (bool)</dt>
 <dd>
 flag indicating to draw an icon for a closed
-            branch (boolean)
+            branch
+</dd><dt><i>isDraft</i> (bool)</dt>
+<dd>
+flag indicating an entry of phase 'draft'
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-icon for the node (QIcon)
+icon for the node
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QIcon
 </dd>
 </dl><a NAME="HgLogBrowserDialog.__generateLogItem" ID="HgLogBrowserDialog.__generateLogItem"></a>
 <h4>HgLogBrowserDialog.__generateLogItem</h4>
@@ -593,7 +610,12 @@
 <dd>
 color name (string)
 </dd>
-</dl><a NAME="HgLogBrowserDialog.__getLogEntries" ID="HgLogBrowserDialog.__getLogEntries"></a>
+</dl><a NAME="HgLogBrowserDialog.__getHeads" ID="HgLogBrowserDialog.__getHeads"></a>
+<h4>HgLogBrowserDialog.__getHeads</h4>
+<b>__getHeads</b>(<i></i>)
+<p>
+        Private method to get the list of all heads.
+</p><a NAME="HgLogBrowserDialog.__getLogEntries" ID="HgLogBrowserDialog.__getLogEntries"></a>
 <h4>HgLogBrowserDialog.__getLogEntries</h4>
 <b>__getLogEntries</b>(<i>startRev=None, noEntries=0</i>)
 <p>
@@ -1035,10 +1057,16 @@
 </dd>
 </dl><a NAME="HgLogBrowserDialog.on_refreshButton_clicked" ID="HgLogBrowserDialog.on_refreshButton_clicked"></a>
 <h4>HgLogBrowserDialog.on_refreshButton_clicked</h4>
-<b>on_refreshButton_clicked</b>(<i></i>)
+<b>on_refreshButton_clicked</b>(<i>addNext=False</i>)
 <p>
         Private slot to refresh the log.
-</p><a NAME="HgLogBrowserDialog.on_rxEdit_returnPressed" ID="HgLogBrowserDialog.on_rxEdit_returnPressed"></a>
+</p><dl>
+<dt><i>addNext</i> (bool)</dt>
+<dd>
+flag indicating to get a second batch of log entries as
+            well
+</dd>
+</dl><a NAME="HgLogBrowserDialog.on_rxEdit_returnPressed" ID="HgLogBrowserDialog.on_rxEdit_returnPressed"></a>
 <h4>HgLogBrowserDialog.on_rxEdit_returnPressed</h4>
 <b>on_rxEdit_returnPressed</b>(<i></i>)
 <p>
--- a/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html	Mon May 20 22:44:12 2019 +0200
@@ -63,6 +63,9 @@
 <td><a href="#HgTagBranchListDialog.__closeBranch">__closeBranch</a></td>
 <td>Private slot to close the selected branch.</td>
 </tr><tr>
+<td><a href="#HgTagBranchListDialog.__closeBranchHeads">__closeBranchHeads</a></td>
+<td>Private slot to close the selected branches.</td>
+</tr><tr>
 <td><a href="#HgTagBranchListDialog.__finish">__finish</a></td>
 <td>Private slot called when the process finished or the user pressed the button.</td>
 </tr><tr>
@@ -146,6 +149,11 @@
 <b>__closeBranch</b>(<i></i>)
 <p>
         Private slot to close the selected branch.
+</p><a NAME="HgTagBranchListDialog.__closeBranchHeads" ID="HgTagBranchListDialog.__closeBranchHeads"></a>
+<h4>HgTagBranchListDialog.__closeBranchHeads</h4>
+<b>__closeBranchHeads</b>(<i></i>)
+<p>
+        Private slot to close the selected branches.
 </p><a NAME="HgTagBranchListDialog.__finish" ID="HgTagBranchListDialog.__finish"></a>
 <h4>HgTagBranchListDialog.__finish</h4>
 <b>__finish</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveDataDialog.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveDataDialog.html	Mon May 20 22:44:12 2019 +0200
@@ -70,13 +70,16 @@
 </table>
 <a NAME="HgShelveDataDialog.__init__" ID="HgShelveDataDialog.__init__"></a>
 <h4>HgShelveDataDialog (Constructor)</h4>
-<b>HgShelveDataDialog</b>(<i>parent=None</i>)
+<b>HgShelveDataDialog</b>(<i>version, parent=None</i>)
 <p>
         Constructor
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>version</i> (tuple of three int)</dt>
 <dd>
-reference to the parent widget (QWidget)
+Mercurial version
+</dd><dt><i>parent</i> (QWidget)</dt>
+<dd>
+reference to the parent widget
 </dd>
 </dl><a NAME="HgShelveDataDialog.getData" ID="HgShelveDataDialog.getData"></a>
 <h4>HgShelveDataDialog.getData</h4>
@@ -86,9 +89,14 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-tuple containing the name (string), date (QDateTime),
-            message (string) and a flag indicating to add/remove
-            new/missing files (boolean)
+tuple containing the name, date, message, a flag indicating
+            to add/remove new/missing files and a flag indicating to keep the
+            shelved changes in the working directory
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, QDateTime, str, bool, bool)
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/eric6/Documentation/Source/eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.WizardPlugins.SetupWizard.SetupWizardDialog.html	Mon May 20 22:44:12 2019 +0200
@@ -51,7 +51,7 @@
 QDialog, Ui_SetupWizardDialog
 <h3>Class Attributes</h3>
 <table>
-<tr><td>None</td></tr>
+<tr><td>ClassifiersUrl</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
@@ -69,6 +69,9 @@
 <td><a href="#SetupWizardDialog.__addPackage">__addPackage</a></td>
 <td>Private method to add a package to the list.</td>
 </tr><tr>
+<td><a href="#SetupWizardDialog.__classifiersDownloadDone">__classifiersDownloadDone</a></td>
+<td>Private slot called, after the classifiers file has been downloaded from the internet.</td>
+</tr><tr>
 <td><a href="#SetupWizardDialog.__enableOkButton">__enableOkButton</a></td>
 <td>Private slot to set the state of the OK button.</td>
 </tr><tr>
@@ -78,8 +81,11 @@
 <td><a href="#SetupWizardDialog.__getStartDir">__getStartDir</a></td>
 <td>Private method to get the start directory for selection dialogs.</td>
 </tr><tr>
-<td><a href="#SetupWizardDialog.__populateFromTroveLists">__populateFromTroveLists</a></td>
-<td>Private method to populate lists from the Trove list file.</td>
+<td><a href="#SetupWizardDialog.__loadClassifiersFromPyPI">__loadClassifiersFromPyPI</a></td>
+<td>Private method to populate the classifiers list with data retrieved from PyPI.</td>
+</tr><tr>
+<td><a href="#SetupWizardDialog.__populateClassifiers">__populateClassifiers</a></td>
+<td>Private method to populate the classifiers.</td>
 </tr><tr>
 <td><a href="#SetupWizardDialog.getCode">getCode</a></td>
 <td>Public method to get the source code.</td>
@@ -120,6 +126,9 @@
 <td><a href="#SetupWizardDialog.on_excludePatternList_itemSelectionChanged">on_excludePatternList_itemSelectionChanged</a></td>
 <td>Private slot to handle a change of selected items of the exclude pattern list.</td>
 </tr><tr>
+<td><a href="#SetupWizardDialog.on_localClassifiersButton_clicked">on_localClassifiersButton_clicked</a></td>
+<td>Private method to populate lists from the Trove list file.</td>
+</tr><tr>
 <td><a href="#SetupWizardDialog.on_modulesList_itemSelectionChanged">on_modulesList_itemSelectionChanged</a></td>
 <td>Private slot to handle a change of selected items of the modules list.</td>
 </tr><tr>
@@ -188,6 +197,17 @@
 <dd>
 name of the package directory (string)
 </dd>
+</dl><a NAME="SetupWizardDialog.__classifiersDownloadDone" ID="SetupWizardDialog.__classifiersDownloadDone"></a>
+<h4>SetupWizardDialog.__classifiersDownloadDone</h4>
+<b>__classifiersDownloadDone</b>(<i>reply</i>)
+<p>
+        Private slot called, after the classifiers file has been downloaded
+        from the internet.
+</p><dl>
+<dt><i>reply</i> (QNetworkReply)</dt>
+<dd>
+reference to the network reply
+</dd>
 </dl><a NAME="SetupWizardDialog.__enableOkButton" ID="SetupWizardDialog.__enableOkButton"></a>
 <h4>SetupWizardDialog.__enableOkButton</h4>
 <b>__enableOkButton</b>(<i></i>)
@@ -213,12 +233,24 @@
 <dd>
 start directory (string)
 </dd>
-</dl><a NAME="SetupWizardDialog.__populateFromTroveLists" ID="SetupWizardDialog.__populateFromTroveLists"></a>
-<h4>SetupWizardDialog.__populateFromTroveLists</h4>
-<b>__populateFromTroveLists</b>(<i></i>)
+</dl><a NAME="SetupWizardDialog.__loadClassifiersFromPyPI" ID="SetupWizardDialog.__loadClassifiersFromPyPI"></a>
+<h4>SetupWizardDialog.__loadClassifiersFromPyPI</h4>
+<b>__loadClassifiersFromPyPI</b>(<i></i>)
 <p>
-        Private method to populate lists from the Trove list file.
-</p><a NAME="SetupWizardDialog.getCode" ID="SetupWizardDialog.getCode"></a>
+        Private method to populate the classifiers list with data retrieved
+        from PyPI.
+</p><a NAME="SetupWizardDialog.__populateClassifiers" ID="SetupWizardDialog.__populateClassifiers"></a>
+<h4>SetupWizardDialog.__populateClassifiers</h4>
+<b>__populateClassifiers</b>(<i>classifiers</i>)
+<p>
+        Private method to populate the classifiers.
+</p><dl>
+<dt><i>classifiers</i> (list of str)</dt>
+<dd>
+list of classifiers read from a local file or
+            retrieved from PyPI
+</dd>
+</dl><a NAME="SetupWizardDialog.getCode" ID="SetupWizardDialog.getCode"></a>
 <h4>SetupWizardDialog.getCode</h4>
 <b>getCode</b>(<i>indLevel, indString</i>)
 <p>
@@ -303,6 +335,14 @@
 <p>
         Private slot to handle a change of selected items of the
         exclude pattern list.
+</p><a NAME="SetupWizardDialog.on_localClassifiersButton_clicked" ID="SetupWizardDialog.on_localClassifiersButton_clicked"></a>
+<h4>SetupWizardDialog.on_localClassifiersButton_clicked</h4>
+<b>on_localClassifiersButton_clicked</b>(<i></i>)
+<p>
+        Private method to populate lists from the Trove list file.
+</p><p>
+        Note: The trove list file was created from querying
+        "https://pypi.org/pypi?%3Aaction=list_classifiers".
 </p><a NAME="SetupWizardDialog.on_modulesList_itemSelectionChanged" ID="SetupWizardDialog.on_modulesList_itemSelectionChanged"></a>
 <h4>SetupWizardDialog.on_modulesList_itemSelectionChanged</h4>
 <b>on_modulesList_itemSelectionChanged</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.ConfigurationPageBase.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.ConfigurationPageBase.html	Mon May 20 22:44:12 2019 +0200
@@ -43,7 +43,13 @@
 <h2>ConfigurationPageBase</h2>
 <p>
     Class implementing the base class for all configuration pages.
-</p>
+</p><h3>Signals</h3>
+<dl>
+<dt>colourChanged(str, QColor)</dt>
+<dd>
+To inform about a new colour selection
+</dd>
+</dl>
 <h3>Derived from</h3>
 QWidget
 <h3>Class Attributes</h3>
--- a/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.DebuggerGeneralPage.html	Mon May 20 22:44:12 2019 +0200
@@ -32,6 +32,9 @@
 <tr>
 <td><a href="#DebuggerGeneralPage">DebuggerGeneralPage</a></td>
 <td>Class implementing the Debugger General configuration page.</td>
+</tr><tr>
+<td><a href="#PreviewModel">PreviewModel</a></td>
+<td>Class to show an example of the selected background colours for the debug viewer.</td>
 </tr>
 </table>
 <h3>Functions</h3>
@@ -124,6 +127,204 @@
 </p>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="PreviewModel" ID="PreviewModel"></a>
+<h2>PreviewModel</h2>
+<p>
+    Class to show an example of the selected background colours for the debug
+    viewer.
+</p>
+<h3>Derived from</h3>
+QAbstractItemModel
+<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="#PreviewModel.__init__">PreviewModel</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#PreviewModel.columnCount">columnCount</a></td>
+<td>Public Qt slot to get the column count.</td>
+</tr><tr>
+<td><a href="#PreviewModel.data">data</a></td>
+<td>Public Qt slot get the role data of item.</td>
+</tr><tr>
+<td><a href="#PreviewModel.flags">flags</a></td>
+<td>Public Qt slot to get the item flags.</td>
+</tr><tr>
+<td><a href="#PreviewModel.index">index</a></td>
+<td>Public Qt slot to get the index of item at row:column of parent.</td>
+</tr><tr>
+<td><a href="#PreviewModel.parent">parent</a></td>
+<td>Public Qt slot to get the parent of the given child.</td>
+</tr><tr>
+<td><a href="#PreviewModel.rowCount">rowCount</a></td>
+<td>Public Qt slot to get the row count.</td>
+</tr><tr>
+<td><a href="#PreviewModel.setColor">setColor</a></td>
+<td>Public slot to update the background colour indexed by key.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="PreviewModel.__init__" ID="PreviewModel.__init__"></a>
+<h4>PreviewModel (Constructor)</h4>
+<b>PreviewModel</b>(<i></i>)
+<p>
+        Constructor
+</p><a NAME="PreviewModel.columnCount" ID="PreviewModel.columnCount"></a>
+<h4>PreviewModel.columnCount</h4>
+<b>columnCount</b>(<i>parent=QModelIndex()</i>)
+<p>
+        Public Qt slot to get the column count.
+</p><dl>
+<dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+the model parent
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+number of columns
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+int
+</dd>
+</dl><a NAME="PreviewModel.data" ID="PreviewModel.data"></a>
+<h4>PreviewModel.data</h4>
+<b>data</b>(<i>index, role=Qt.DisplayRole</i>)
+<p>
+        Public Qt slot get the role data of item.
+</p><dl>
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+the model index
+</dd><dt><i>role</i> (QtCore.Qt.ItemDataRole)</dt>
+<dd>
+the requested data role
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+role data of item
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str, QBrush or None
+</dd>
+</dl><a NAME="PreviewModel.flags" ID="PreviewModel.flags"></a>
+<h4>PreviewModel.flags</h4>
+<b>flags</b>(<i>index</i>)
+<p>
+        Public Qt slot to get the item flags.
+</p><dl>
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+of item
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+item flags
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QtCore.Qt.ItemFlag
+</dd>
+</dl><a NAME="PreviewModel.index" ID="PreviewModel.index"></a>
+<h4>PreviewModel.index</h4>
+<b>index</b>(<i>row, column, parent=QModelIndex()</i>)
+<p>
+        Public Qt slot to get the index of item at row:column of parent.
+</p><dl>
+<dt><i>row</i> (int)</dt>
+<dd>
+number of rows
+</dd><dt><i>column</i> (int)</dt>
+<dd>
+number of columns
+</dd><dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+the model parent
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+new model index for child
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QModelIndex
+</dd>
+</dl><a NAME="PreviewModel.parent" ID="PreviewModel.parent"></a>
+<h4>PreviewModel.parent</h4>
+<b>parent</b>(<i>child</i>)
+<p>
+        Public Qt slot to get the parent of the given child.
+</p><dl>
+<dt><i>child</i> (QModelIndex)</dt>
+<dd>
+the model child node
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+new model index for parent
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QModelIndex
+</dd>
+</dl><a NAME="PreviewModel.rowCount" ID="PreviewModel.rowCount"></a>
+<h4>PreviewModel.rowCount</h4>
+<b>rowCount</b>(<i>parent=QModelIndex()</i>)
+<p>
+        Public Qt slot to get the row count.
+</p><dl>
+<dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+the model parent
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+number of rows
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+int
+</dd>
+</dl><a NAME="PreviewModel.setColor" ID="PreviewModel.setColor"></a>
+<h4>PreviewModel.setColor</h4>
+<b>setColor</b>(<i>key, bgcolour</i>)
+<p>
+        Public slot to update the background colour indexed by key.
+</p><dl>
+<dt><i>key</i> (str)</dt>
+<dd>
+the name of background
+</dd><dt><i>bgcolour</i> (QColor)</dt>
+<dd>
+the new background colour
+</dd>
+</dl>
+<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>)
--- a/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.InterfacePage.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Preferences.ConfigurationPages.InterfacePage.html	Mon May 20 22:44:12 2019 +0200
@@ -64,7 +64,10 @@
 <td>Constructor</td>
 </tr><tr>
 <td><a href="#InterfacePage.__populateLanguageCombo">__populateLanguageCombo</a></td>
-<td>Private method to initialize the language combobox of the Interface configuration page.</td>
+<td>Private method to initialize the language combo box.</td>
+</tr><tr>
+<td><a href="#InterfacePage.__populateShellPositionCombo">__populateShellPositionCombo</a></td>
+<td>Private method to initialize the shell position combo box.</td>
 </tr><tr>
 <td><a href="#InterfacePage.__populateStyleCombo">__populateStyleCombo</a></td>
 <td>Private method to populate the style combo box.</td>
@@ -89,8 +92,12 @@
 <h4>InterfacePage.__populateLanguageCombo</h4>
 <b>__populateLanguageCombo</b>(<i></i>)
 <p>
-        Private method to initialize the language combobox of the Interface
-        configuration page.
+        Private method to initialize the language combo box.
+</p><a NAME="InterfacePage.__populateShellPositionCombo" ID="InterfacePage.__populateShellPositionCombo"></a>
+<h4>InterfacePage.__populateShellPositionCombo</h4>
+<b>__populateShellPositionCombo</b>(<i></i>)
+<p>
+        Private method to initialize the shell position combo box.
 </p><a NAME="InterfacePage.__populateStyleCombo" ID="InterfacePage.__populateStyleCombo"></a>
 <h4>InterfacePage.__populateStyleCombo</h4>
 <b>__populateStyleCombo</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.Project.Project.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.Project.Project.html	Mon May 20 22:44:12 2019 +0200
@@ -635,8 +635,8 @@
 <td><a href="#Project.initFileTypes">initFileTypes</a></td>
 <td>Public method to initialize the filetype associations with default values.</td>
 </tr><tr>
-<td><a href="#Project.initMenu">initMenu</a></td>
-<td>Public slot to initialize the project menu.</td>
+<td><a href="#Project.initMenus">initMenus</a></td>
+<td>Public slot to initialize the project menus.</td>
 </tr><tr>
 <td><a href="#Project.initToolbars">initToolbars</a></td>
 <td>Public slot to initialize the project toolbar and the basic VCS toolbar.</td>
@@ -2271,15 +2271,20 @@
 <p>
         Public method to initialize the filetype associations with default
         values.
-</p><a NAME="Project.initMenu" ID="Project.initMenu"></a>
-<h4>Project.initMenu</h4>
-<b>initMenu</b>(<i></i>)
+</p><a NAME="Project.initMenus" ID="Project.initMenus"></a>
+<h4>Project.initMenus</h4>
+<b>initMenus</b>(<i></i>)
 <p>
-        Public slot to initialize the project menu.
+        Public slot to initialize the project menus.
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-the menu generated (QMenu)
+tuple of generated menus
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (QMenu, QMenu)
 </dd>
 </dl><a NAME="Project.initToolbars" ID="Project.initToolbars"></a>
 <h4>Project.initToolbars</h4>
--- a/eric6/Documentation/Source/eric6.QScintilla.Editor.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.QScintilla.Editor.html	Mon May 20 22:44:12 2019 +0200
@@ -1808,8 +1808,8 @@
         Private method to get the requested option via EditorConfig.
 </p><p>
         If there is no EditorConfig defined, the equivalent built-in option
-        will be used (Preferences.getEditor(). The option must be given as the
-        Preferences option key. The mapping to the EditorConfig option name
+        will be used (Preferences.getEditor() ). The option must be given as
+        the Preferences option key. The mapping to the EditorConfig option name
         will be done within this method.
 </p><dl>
 <dt><i>option</i> (str)</dt>
--- a/eric6/Documentation/Source/eric6.QScintilla.Shell.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.QScintilla.Shell.html	Mon May 20 22:44:12 2019 +0200
@@ -1586,7 +1586,7 @@
 <td>Constructor</td>
 </tr><tr>
 <td><a href="#ShellAssembly.shell">shell</a></td>
-<td>Public method to get a reference to the terminal widget.</td>
+<td>Public method to get a reference to the shell widget.</td>
 </tr><tr>
 <td><a href="#ShellAssembly.showFind">showFind</a></td>
 <td>Public method to display the search widget.</td>
@@ -1622,7 +1622,7 @@
 <h4>ShellAssembly.shell</h4>
 <b>shell</b>(<i></i>)
 <p>
-        Public method to get a reference to the terminal widget.
+        Public method to get a reference to the shell widget.
 </p><dl>
 <dt>Returns:</dt>
 <dd>
--- a/eric6/Documentation/Source/eric6.UI.Browser.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.UI.Browser.html	Mon May 20 22:44:12 2019 +0200
@@ -124,9 +124,6 @@
 <td><a href="#Browser.__addAsToplevelDir">__addAsToplevelDir</a></td>
 <td>Private slot to handle the Add as toplevel directory popup menu entry.</td>
 </tr><tr>
-<td><a href="#Browser.__configure">__configure</a></td>
-<td>Private method to open the configuration dialog.</td>
-</tr><tr>
 <td><a href="#Browser.__createPopupMenus">__createPopupMenus</a></td>
 <td>Private method to generate the various popup menus.</td>
 </tr><tr>
@@ -237,11 +234,6 @@
 <b>__addAsToplevelDir</b>(<i></i>)
 <p>
         Private slot to handle the Add as toplevel directory popup menu entry.
-</p><a NAME="Browser.__configure" ID="Browser.__configure"></a>
-<h4>Browser.__configure</h4>
-<b>__configure</b>(<i></i>)
-<p>
-        Private method to open the configuration dialog.
 </p><a NAME="Browser.__createPopupMenus" ID="Browser.__createPopupMenus"></a>
 <h4>Browser.__createPopupMenus</h4>
 <b>__createPopupMenus</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.UI.SearchWidget.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.UI.SearchWidget.html	Mon May 20 22:44:12 2019 +0200
@@ -21,7 +21,7 @@
 <body><a NAME="top" ID="top"></a>
 <h1>eric6.UI.SearchWidget</h1>
 <p>
-Module implementing the search box for the shell, terminal and log viewer.
+Module implementing the search box for the shell and log viewer.
 </p>
 <h3>Global Attributes</h3>
 <table>
@@ -31,7 +31,7 @@
 <table>
 <tr>
 <td><a href="#SearchWidget">SearchWidget</a></td>
-<td>Class implementing the search box for the shell, terminal and log viewer.</td>
+<td>Class implementing the search box for the shell and log viewer.</td>
 </tr>
 </table>
 <h3>Functions</h3>
@@ -42,7 +42,7 @@
 <a NAME="SearchWidget" ID="SearchWidget"></a>
 <h2>SearchWidget</h2>
 <p>
-    Class implementing the search box for the shell, terminal and log viewer.
+    Class implementing the search box for the shell and log viewer.
 </p><h3>Signals</h3>
 <dl>
 <dt>searchNext(text, caseSensitive, wholeWord, regexp)</dt>
--- a/eric6/Documentation/Source/eric6.UI.UserInterface.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.UI.UserInterface.html	Mon May 20 22:44:12 2019 +0200
@@ -270,9 +270,6 @@
 <td><a href="#UserInterface.__configViewProfiles">__configViewProfiles</a></td>
 <td>Private slot to configure the various view profiles.</td>
 </tr><tr>
-<td><a href="#UserInterface.__configureDockareaCornerUsage">__configureDockareaCornerUsage</a></td>
-<td>Private method to configure the usage of the dockarea corners.</td>
-</tr><tr>
 <td><a href="#UserInterface.__connectToWebBrowser">__connectToWebBrowser</a></td>
 <td>Private method to connect to a started web browser.</td>
 </tr><tr>
@@ -783,6 +780,9 @@
 <td><a href="#UserInterface.launchHelpViewer">launchHelpViewer</a></td>
 <td>Public slot to start the help viewer/web browser.</td>
 </tr><tr>
+<td><a href="#UserInterface.networkAccessManager">networkAccessManager</a></td>
+<td>Public method to get a reference to the network access manager object.</td>
+</tr><tr>
 <td><a href="#UserInterface.notificationsEnabled">notificationsEnabled</a></td>
 <td>Public method to check, if notifications are enabled.</td>
 </tr><tr>
@@ -1085,11 +1085,6 @@
 <b>__configViewProfiles</b>(<i></i>)
 <p>
         Private slot to configure the various view profiles.
-</p><a NAME="UserInterface.__configureDockareaCornerUsage" ID="UserInterface.__configureDockareaCornerUsage"></a>
-<h4>UserInterface.__configureDockareaCornerUsage</h4>
-<b>__configureDockareaCornerUsage</b>(<i></i>)
-<p>
-        Private method to configure the usage of the dockarea corners.
 </p><a NAME="UserInterface.__connectToWebBrowser" ID="UserInterface.__connectToWebBrowser"></a>
 <h4>UserInterface.__connectToWebBrowser</h4>
 <b>__connectToWebBrowser</b>(<i>process</i>)
@@ -2530,6 +2525,21 @@
 <dd>
 flag indicating to use a single browser window
 </dd>
+</dl><a NAME="UserInterface.networkAccessManager" ID="UserInterface.networkAccessManager"></a>
+<h4>UserInterface.networkAccessManager</h4>
+<b>networkAccessManager</b>(<i></i>)
+<p>
+        Public method to get a reference to the network access manager object.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the network access manager object
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QNetworkAccessManager
+</dd>
 </dl><a NAME="UserInterface.notificationsEnabled" ID="UserInterface.notificationsEnabled"></a>
 <h4>UserInterface.notificationsEnabled</h4>
 <b>notificationsEnabled</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.ViewManager.ViewManager.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.ViewManager.ViewManager.html	Mon May 20 22:44:12 2019 +0200
@@ -696,7 +696,7 @@
 <td>Public method used to split the current view.</td>
 </tr><tr>
 <td><a href="#ViewManager.addToExtrasMenu">addToExtrasMenu</a></td>
-<td>Public method to add some actions to the extras menu.</td>
+<td>Public method to add some actions to the Extras menu.</td>
 </tr><tr>
 <td><a href="#ViewManager.addToRecentList">addToRecentList</a></td>
 <td>Public slot to add a filename to the list of recently opened files.</td>
@@ -833,6 +833,9 @@
 <td><a href="#ViewManager.initMacroMenu">initMacroMenu</a></td>
 <td>Public method to create the Macro menu.</td>
 </tr><tr>
+<td><a href="#ViewManager.initSearchMenu">initSearchMenu</a></td>
+<td>Public method to create the Search menu.</td>
+</tr><tr>
 <td><a href="#ViewManager.initSearchToolbars">initSearchToolbars</a></td>
 <td>Public method to create the Search toolbars.</td>
 </tr><tr>
@@ -2181,7 +2184,7 @@
 <h4>ViewManager.addToExtrasMenu</h4>
 <b>addToExtrasMenu</b>(<i>menu</i>)
 <p>
-        Public method to add some actions to the extras menu.
+        Public method to add some actions to the Extras menu.
 </p><dl>
 <dt><i>menu</i></dt>
 <dd>
@@ -2778,6 +2781,21 @@
 <dd>
 the generated menu
 </dd>
+</dl><a NAME="ViewManager.initSearchMenu" ID="ViewManager.initSearchMenu"></a>
+<h4>ViewManager.initSearchMenu</h4>
+<b>initSearchMenu</b>(<i></i>)
+<p>
+        Public method to create the Search menu.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+the generated menu
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QMenu
+</dd>
 </dl><a NAME="ViewManager.initSearchToolbars" ID="ViewManager.initSearchToolbars"></a>
 <h4>ViewManager.initSearchToolbars</h4>
 <b>initSearchToolbars</b>(<i>toolbarManager</i>)
--- a/eric6/Documentation/Source/eric6.VirtualEnv.VirtualenvManager.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/eric6.VirtualEnv.VirtualenvManager.html	Mon May 20 22:44:12 2019 +0200
@@ -336,10 +336,16 @@
 </dd>
 </dl><a NAME="VirtualenvManager.getVirtualenvNames" ID="VirtualenvManager.getVirtualenvNames"></a>
 <h4>VirtualenvManager.getVirtualenvNames</h4>
-<b>getVirtualenvNames</b>(<i></i>)
+<b>getVirtualenvNames</b>(<i>noRemote=False</i>)
 <p>
         Public method to get a list of defined virtual environments.
 </p><dl>
+<dt><i>noRemote</i> (bool)</dt>
+<dd>
+flag indicating to exclude environments for remote
+            debugging
+</dd>
+</dl><dl>
 <dt>Returns:</dt>
 <dd>
 list of defined virtual environments
--- a/eric6/Documentation/Source/index-eric6.Debugger.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/index-eric6.Debugger.html	Mon May 20 22:44:12 2019 +0200
@@ -89,7 +89,7 @@
 <td>Module implementing the variables filter dialog.</td>
 </tr><tr>
 <td><a href="eric6.Debugger.VariablesViewer.html">VariablesViewer</a></td>
-<td>Module implementing the variables viewer widget.</td>
+<td>Module implementing the variables viewer view based on QTreeView.</td>
 </tr><tr>
 <td><a href="eric6.Debugger.WatchPointModel.html">WatchPointModel</a></td>
 <td>Module implementing the Watch expression model.</td>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/index-eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.html	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension</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>
+<h1>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension</h1>
+<p>
+Package implementing the closehead extension support interface.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+<tr>
+<td><a href="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.html">HgCloseHeadSelectionDialog</a></td>
+<td>Module implementing a dialog to select the heads to be closed.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html">ProjectHelper</a></td>
+<td>Module implementing the closehead extension project helper.</td>
+</tr><tr>
+<td><a href="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html">closehead</a></td>
+<td>Module implementing the closehead extension interface.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/index-eric6.Plugins.VcsPlugins.vcsMercurial.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/index-eric6.Plugins.VcsPlugins.vcsMercurial.html	Mon May 20 22:44:12 2019 +0200
@@ -30,6 +30,9 @@
 <h3>Packages</h3>
 <table>
 <tr>
+<td><a href="index-eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.html">CloseheadExtension</a></td>
+<td>Package implementing the closehead extension support interface.</td>
+</tr><tr>
 <td><a href="index-eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html">ConfigurationPage</a></td>
 <td>Package implementing the the Mercurial configuration page.</td>
 </tr><tr>
--- a/eric6/Documentation/Source/index-eric6.UI.html	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Documentation/Source/index-eric6.UI.html	Mon May 20 22:44:12 2019 +0200
@@ -111,7 +111,7 @@
 <td>Module implementing a widget to visualize the Python AST for some Python sources.</td>
 </tr><tr>
 <td><a href="eric6.UI.SearchWidget.html">SearchWidget</a></td>
-<td>Module implementing the search box for the shell, terminal and log viewer.</td>
+<td>Module implementing the search box for the shell and log viewer.</td>
 </tr><tr>
 <td><a href="eric6.UI.SplashScreen.html">SplashScreen</a></td>
 <td>Module implementing a splashscreen for eric6.</td>
--- a/eric6/Helpviewer/HelpTabWidget.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Helpviewer/HelpTabWidget.py	Mon May 20 22:44:12 2019 +0200
@@ -116,20 +116,8 @@
         self.__closedTabsButton.setEnabled(False)
         self.__rightCornerWidgetLayout.addWidget(self.__closedTabsButton)
         
-        self.__closeButton = QToolButton(self)
-        self.__closeButton.setIcon(UI.PixmapCache.getIcon("close.png"))
-        self.__closeButton.setToolTip(
-            self.tr("Close the current help window"))
-        self.__closeButton.setEnabled(False)
-        self.__closeButton.clicked.connect(self.closeBrowser)
-        self.__rightCornerWidgetLayout.addWidget(self.__closeButton)
-        if Preferences.getUI("SingleCloseButton") or \
-           not hasattr(self, 'setTabsClosable'):
-            self.__closeButton.show()
-        else:
-            self.setTabsClosable(True)
-            self.tabCloseRequested.connect(self.closeBrowserAt)
-            self.__closeButton.hide()
+        self.setTabsClosable(True)
+        self.tabCloseRequested.connect(self.closeBrowserAt)
         
         self.setCornerWidget(self.__rightCornerWidget, Qt.TopRightCorner)
         
@@ -367,7 +355,6 @@
         
         self.__mainWindow.closeAct.setEnabled(True)
         self.__mainWindow.closeAllAct.setEnabled(True)
-        self.__closeButton.setEnabled(True)
         self.__navigationButton.setEnabled(True)
         
         if not linkName and not requestData:
@@ -737,20 +724,6 @@
         
         for urlbar in self.__stackedUrlBar.urlBars():
             urlbar.preferencesChanged()
-        
-        if Preferences.getUI("SingleCloseButton") or \
-           not hasattr(self, 'setTabsClosable'):
-            if hasattr(self, 'setTabsClosable'):
-                self.setTabsClosable(False)
-                try:
-                    self.tabCloseRequested.disconnect(self.closeBrowserAt)
-                except TypeError:
-                    pass
-            self.__closeButton.show()
-        else:
-            self.setTabsClosable(True)
-            self.tabCloseRequested.connect(self.closeBrowserAt)
-            self.__closeButton.hide()
     
     def __loadStarted(self, browser):
         """
--- a/eric6/PipInterface/Pip.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/PipInterface/Pip.py	Mon May 20 22:44:12 2019 +0200
@@ -207,15 +207,19 @@
         
         return interpreter
     
-    def getVirtualenvNames(self):
+    def getVirtualenvNames(self, noRemote=False):
         """
         Public method to get a sorted list of virtual environment names.
         
+        @param noRemote flag indicating to exclude environments for remote
+            debugging
+        @type bool
         @return sorted list of virtual environment names
         @rtype list of str
         """
         return sorted(
-            e5App().getObject("VirtualEnvManager").getVirtualenvNames())
+            e5App().getObject("VirtualEnvManager").getVirtualenvNames(
+                noRemote=noRemote))
     
     def installPip(self, venvName, userSite=False):
         """
--- a/eric6/PipInterface/PipPackagesWidget.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/PipInterface/PipPackagesWidget.py	Mon May 20 22:44:12 2019 +0200
@@ -133,7 +133,8 @@
         projectVenv = self.__pip.getProjectEnvironmentString()
         if projectVenv:
             self.environmentsComboBox.addItem(projectVenv)
-        self.environmentsComboBox.addItems(self.__pip.getVirtualenvNames())
+        self.environmentsComboBox.addItems(
+            self.__pip.getVirtualenvNames(noRemote=True))
     
     def __isPipAvailable(self):
         """
--- a/eric6/Plugins/PluginVcsMercurial.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/PluginVcsMercurial.py	Mon May 20 22:44:12 2019 +0200
@@ -175,6 +175,7 @@
         "EncodingMode": "strict",
         "ConsiderHidden": False,
         "LogMessageColumnWidth": 30,
+        "LogBrowserShowFullLog": True,
         "LogBrowserGeometry": QByteArray(),
         "LogBrowserSplitterStates": [QByteArray(), QByteArray(),
                                      QByteArray()],
@@ -266,7 +267,8 @@
         @return the requested setting
         """
         if key in ["StopLogOnCopy", "PullUpdate", "PreferUnbundle",
-                   "CreateBackup", "InternalMerge", "ConsiderHidden"]:
+                   "CreateBackup", "InternalMerge", "ConsiderHidden",
+                   "LogBrowserShowFullLog"]:
             return Preferences.toBool(Preferences.Prefs.settings.value(
                 "Mercurial/" + key, cls.MercurialDefaults[key]))
         elif key in ["LogLimit", "CommitMessages", "CommitAuthorsLimit",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/HgCloseHeadSelectionDialog.py	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,113 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to select the heads to be closed.
+"""
+
+from __future__ import unicode_literals
+
+import os
+
+from PyQt5.QtCore import pyqtSlot, QProcess
+from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem
+
+from .Ui_HgCloseHeadSelectionDialog import Ui_HgCloseHeadSelectionDialog
+
+
+class HgCloseHeadSelectionDialog(QDialog, Ui_HgCloseHeadSelectionDialog):
+    """
+    Class implementing a dialog to select the heads to be closed.
+    """
+    def __init__(self, vcs, ppath, parent=None):
+        """
+        Constructor
+        
+        @param vcs reference to the VCS object
+        @type Hg
+        @param ppath directory containing the repository
+        @type str
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super(HgCloseHeadSelectionDialog, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
+        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
+        
+        heads = self.__getHeads(vcs, ppath)
+        for revision, branch in heads:
+            QTreeWidgetItem(self.headsList, [revision, branch])
+    
+    def __getHeads(self, vcs, ppath):
+        """
+        Private method to get the open heads.
+        
+        @param vcs reference to the VCS object
+        @type Hg
+        @param ppath directory containing the repository
+        @type str
+        @return list of tuples containing the revision and the corresponding
+            branch name
+        @rtype list of tuples of (str, str)
+        """
+        args = vcs.initCommand("heads")
+        args.append('--template')
+        args.append('{node|short}@@@{branches}\n')
+        
+        output = ""
+        client = vcs.getClient()
+        if client is None:
+            # find the root of the repo
+            repodir = self.splitPath(ppath)[0]
+            while not os.path.isdir(os.path.join(repodir, self.adminDir)):
+                repodir = os.path.dirname(repodir)
+                if os.path.splitdrive(repodir)[1] == os.sep:
+                    return []
+            
+            process = QProcess()
+            process.setWorkingDirectory(repodir)
+            process.start('hg', args)
+            procStarted = process.waitForStarted(5000)
+            if procStarted:
+                finished = process.waitForFinished(30000)
+                if finished and process.exitCode() == 0:
+                    output = str(process.readAllStandardOutput(),
+                                 self.getEncoding(), 'replace')
+        else:
+            output, error = client.runcommand(args)
+        
+        heads = []
+        if output:
+            for line in output.splitlines():
+                line = line.strip()
+                if line:
+                    revision, branch = line.split("@@@")
+                    heads.append((revision, branch))
+            
+        return heads
+    
+    @pyqtSlot()
+    def on_headsList_itemSelectionChanged(self):
+        """
+        Private slot handling changes of the selection.
+        """
+        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(
+            len(self.headsList.selectedItems()) > 0
+        )
+    
+    def getData(self):
+        """
+        Public method to retrieve the entered data.
+        
+        @return tuple containing a list of selected revisions and the commit
+            message
+        @rtype tuple of (list of str, str)
+        """
+        revisions = [itm.text(0) for itm in self.headsList.selectedItems()]
+        message = self.logEdit.toPlainText().strip()
+        
+        return revisions, message
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/HgCloseHeadSelectionDialog.ui	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>HgCloseHeadSelectionDialog</class>
+ <widget class="QDialog" name="HgCloseHeadSelectionDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>532</width>
+    <height>402</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Close Heads</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Select heads to be closed:</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTreeWidget" name="headsList">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>2</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>
+     <column>
+      <property name="text">
+       <string>Revision</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Branch</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>Commit Message:</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTextEdit" name="logEdit">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>1</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="tabChangesFocus">
+      <bool>true</bool>
+     </property>
+     <property name="acceptRichText">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>headsList</tabstop>
+  <tabstop>logEdit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>HgCloseHeadSelectionDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>HgCloseHeadSelectionDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/ProjectHelper.py	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the closehead extension project helper.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtWidgets import QMenu
+
+from E5Gui.E5Action import E5Action
+
+from ..HgExtensionProjectHelper import HgExtensionProjectHelper
+
+import UI.PixmapCache
+
+
+class CloseheadProjectHelper(HgExtensionProjectHelper):
+    """
+    Class implementing the closehead extension project helper.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        super(CloseheadProjectHelper, self).__init__()
+    
+    def initActions(self):
+        """
+        Public method to generate the action objects.
+        """
+        self.hgCloseheadAct = E5Action(
+            self.tr('Close Heads'),
+            UI.PixmapCache.getIcon("closehead"),
+            self.tr('Close Heads'),
+            0, 0, self, 'mercurial_closehead')
+        self.hgCloseheadAct.setStatusTip(self.tr(
+            'Close arbitrary heads without checking them out first'
+        ))
+        self.hgCloseheadAct.setWhatsThis(self.tr(
+            """<b>Close Heads</b>"""
+            """<p>This closes arbitrary heads without the need to check them"""
+            """ out first.</p>"""
+        ))
+        self.hgCloseheadAct.triggered.connect(self.__hgClosehead)
+        self.actions.append(self.hgCloseheadAct)
+    
+    def initMenu(self, mainMenu):
+        """
+        Public method to generate the extension menu.
+        
+        @param mainMenu reference to the main menu
+        @type QMenu
+        @return populated menu (QMenu)
+        """
+        menu = QMenu(self.menuTitle(), mainMenu)
+        menu.setIcon(UI.PixmapCache.getIcon("closehead"))
+        menu.setTearOffEnabled(True)
+        
+        menu.addAction(self.hgCloseheadAct)
+        
+        return menu
+    
+    def menuTitle(self):
+        """
+        Public method to get the menu title.
+        
+        @return title of the menu
+        @rtype str
+        """
+        return self.tr("Close Heads")
+    
+    def __hgClosehead(self):
+        """
+        Private slot used to close arbitrary heads.
+        """
+        self.vcs.getExtensionObject("closehead")\
+            .hgCloseheads(self.project.getProjectPath())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/__init__.py	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing the closehead extension support interface.
+"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/closehead.py	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the closehead extension interface.
+"""
+
+from __future__ import unicode_literals
+
+import os
+
+from PyQt5.QtWidgets import QDialog
+
+from ..HgExtension import HgExtension
+from ..HgDialog import HgDialog
+
+
+class Closehead(HgExtension):
+    """
+    Class implementing the strip extension interface.
+    """
+    def __init__(self, vcs):
+        """
+        Constructor
+        
+        @param vcs reference to the Mercurial vcs object
+        @type Hg
+        """
+        super(Closehead, self).__init__(vcs)
+    
+    def hgCloseheads(self, name, revisions=None):
+        """
+        Public method to close arbitrary heads.
+        
+        @param name file/directory name
+        @type str
+        @param revisions revisions of branch heads to be closed
+        @type str
+        """
+        # find the root of the repo
+        repodir = self.vcs.splitPath(name)[0]
+        while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
+            repodir = os.path.dirname(repodir)
+            if os.path.splitdrive(repodir)[1] == os.sep:
+                return
+        
+        message = ""
+        if not revisions:
+            from .HgCloseHeadSelectionDialog import HgCloseHeadSelectionDialog
+            dlg = HgCloseHeadSelectionDialog(self.vcs, name)
+            if dlg.exec_() == QDialog.Accepted:
+                revisions, message = dlg.getData()
+        
+        if not revisions:
+            # still no revisions given; abort...
+            return
+        
+        args = self.vcs.initCommand("close-head")
+        if not message:
+            if len(revisions) == 1:
+                message = self.tr("Revision <{0}> closed.").format(
+                    revisions[0])
+            else:
+                message = self.tr("Revisions <{0}> closed.").format(
+                    ", ".join(revisions))
+        args += ["--message", message]
+        for revision in revisions:
+            args += ["--rev", revision]
+        
+        dia = HgDialog(self.tr("Closing Heads"), self.vcs)
+        res = dia.startProcess(args, repodir)
+        if res:
+            dia.exec_()
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py	Mon May 20 22:44:12 2019 +0200
@@ -52,6 +52,8 @@
             self.__plugin.getPreferences("LogLimit"))
         self.logWidthSpinBox.setValue(
             self.__plugin.getPreferences("LogMessageColumnWidth"))
+        self.startFullLogCheckBox.setChecked(
+            self.__plugin.getPreferences("LogBrowserShowFullLog"))
         # commit
         self.commitSpinBox.setValue(
             self.__plugin.getPreferences("CommitMessages"))
@@ -88,6 +90,8 @@
             "LogLimit", self.logSpinBox.value())
         self.__plugin.setPreferences(
             "LogMessageColumnWidth", self.logWidthSpinBox.value())
+        self.__plugin.setPreferences(
+            "LogBrowserShowFullLog", self.startFullLogCheckBox.isChecked())
         # commit
         self.__plugin.setPreferences(
             "CommitMessages", self.commitSpinBox.value())
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.ui	Mon May 20 22:44:12 2019 +0200
@@ -93,6 +93,19 @@
       <string>Log</string>
      </property>
      <layout class="QGridLayout" name="gridLayout_3">
+      <item row="1" column="1">
+       <widget class="QSpinBox" name="logWidthSpinBox">
+        <property name="toolTip">
+         <string>Enter the number of characters of the commit message to be shown in the list</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+        <property name="minimum">
+         <number>10</number>
+        </property>
+       </widget>
+      </item>
       <item row="0" column="0">
        <widget class="QLabel" name="label">
         <property name="text">
@@ -113,6 +126,13 @@
         </property>
        </widget>
       </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>No. of message characters shown in list:</string>
+        </property>
+       </widget>
+      </item>
       <item row="0" column="2">
        <spacer>
         <property name="orientation">
@@ -126,23 +146,13 @@
         </property>
        </spacer>
       </item>
-      <item row="1" column="0">
-       <widget class="QLabel" name="label_7">
-        <property name="text">
-         <string>No. of message characters shown in list:</string>
+      <item row="2" column="0" colspan="3">
+       <widget class="QCheckBox" name="startFullLogCheckBox">
+        <property name="toolTip">
+         <string>Select to show all incoming and the first batch of local changesets</string>
         </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QSpinBox" name="logWidthSpinBox">
-        <property name="toolTip">
-         <string>Enter the number of characters of the commit message to be shown in the list</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-        </property>
-        <property name="minimum">
-         <number>10</number>
+        <property name="text">
+         <string>Start showing incoming and local changesets</string>
         </property>
        </widget>
       </item>
@@ -359,6 +369,7 @@
   <tabstop>hiddenChangesetsCheckBox</tabstop>
   <tabstop>logSpinBox</tabstop>
   <tabstop>logWidthSpinBox</tabstop>
+  <tabstop>startFullLogCheckBox</tabstop>
   <tabstop>commitSpinBox</tabstop>
   <tabstop>commitAuthorsSpinBox</tabstop>
   <tabstop>pullUpdateCheckBox</tabstop>
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Mon May 20 22:44:12 2019 +0200
@@ -63,13 +63,16 @@
     
     ClosedIndicator = " \u2612"
     
-    def __init__(self, vcs, mode="log", parent=None):
+    def __init__(self, vcs, mode="", parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
-        @param mode mode of the dialog (string; one of log, incoming, outgoing)
-        @param parent parent widget (QWidget)
+        @type Hg
+        @param mode mode of the dialog
+        @type str (one of log, full_log, incoming, outgoing)
+        @param parent parent widget
+        @type QWidget
         """
         super(HgLogBrowserDialog, self).__init__(parent)
         self.setupUi(self)
@@ -84,12 +87,20 @@
         self.diffSplitter.setStretchFactor(0, 1)
         self.diffSplitter.setStretchFactor(1, 2)
         
+        if not mode:
+            if vcs.getPlugin().getPreferences("LogBrowserShowFullLog"):
+                mode = "full_log"
+            else:
+                mode = "log"
+        
         if mode == "log":
             self.setWindowTitle(self.tr("Mercurial Log"))
         elif mode == "incoming":
             self.setWindowTitle(self.tr("Mercurial Log (Incoming)"))
         elif mode == "outgoing":
             self.setWindowTitle(self.tr("Mercurial Log (Outgoing)"))
+        elif mode == "full_log":
+            self.setWindowTitle(self.tr("Mercurial Full Log"))
         
         self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
         self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
@@ -117,6 +128,7 @@
         self.fieldCombo.addItem(self.tr("Author"), "author")
         self.fieldCombo.addItem(self.tr("Message"), "message")
         self.fieldCombo.addItem(self.tr("File"), "file")
+        self.fieldCombo.addItem(self.tr("Phase"), "phase")
         
         font = Preferences.getEditorOtherFonts("MonospacedFont")
         self.diffEdit.setFontFamily(font.family())
@@ -127,8 +139,11 @@
         self.__diffGenerator.finished.connect(self.__generatorFinished)
         
         self.vcs = vcs
-        if mode in ("log", "incoming", "outgoing"):
-            self.commandMode = mode
+        if mode in ("log", "incoming", "outgoing", "full_log"):
+            if mode == "full_log":
+                self.commandMode = "incoming"
+            else:
+                self.commandMode = mode
             self.initialCommandMode = mode
         else:
             self.commandMode = "log"
@@ -181,6 +196,7 @@
         self.__edgesRole = Qt.UserRole + 2
         self.__parentsRole = Qt.UserRole + 3
         self.__latestTagRole = Qt.UserRole + 4
+        self.__incomingRole = Qt.UserRole + 5
         
         # roles used in the file tree
         self.__diffFileLineRole = Qt.UserRole
@@ -224,6 +240,8 @@
         self.__initActionsMenu()
         
         self.__finishCallbacks = []
+        if self.initialCommandMode == "full_log":
+            self.__addFinishCallback(self.on_nextButton_clicked)
     
     def __addFinishCallback(self, callback):
         """
@@ -275,6 +293,11 @@
             self.__tagActTriggered)
         self.__tagAct.setToolTip(self.tr("Tag the selected revision"))
         
+        self.__closeHeadsAct = self.__actionsMenu.addAction(
+            UI.PixmapCache.getIcon("closehead"), self.tr("Close Heads"),
+            self.__closeHeadsActTriggered)
+        self.__closeHeadsAct.setToolTip(self.tr("Close the selected heads"))
+        
         self.__switchAct = self.__actionsMenu.addAction(
             UI.PixmapCache.getIcon("vcsSwitch.png"), self.tr("Switch"),
             self.__switchActTriggered)
@@ -499,7 +522,10 @@
         
         self.logTree.clear()
         
-        self.commandMode = self.initialCommandMode
+        if self.initialCommandMode == "full_log":
+            self.commandMode = "incoming"
+        else:
+            self.commandMode = self.initialCommandMode
     
     def __resizeColumnsLog(self):
         """
@@ -595,23 +621,31 @@
         return col, color, edges
     
     def __generateIcon(self, column, color, bottomedges, topedges, dotColor,
-                       currentRev, closed):
+                       currentRev, closed, isDraft):
         """
         Private method to generate an icon containing the revision tree for the
         given data.
         
-        @param column column index of the revision (integer)
-        @param color color of the node (integer)
+        @param column column index of the revision
+        @type int
+        @param color color of the node
+        @type int
         @param bottomedges list of edges for the bottom of the node
-            (list of tuples of three integers)
+        @type list of tuples of (int, int, int)
         @param topedges list of edges for the top of the node
-            (list of tuples of three integers)
-        @param dotColor color to be used for the dot (QColor)
+        @type list of tuples of (int, int, int)
+        @param dotColor color to be used for the dot
+        @type QColor
         @param currentRev flag indicating to draw the icon for the
-            current revision (boolean)
+            current revision
+        @type bool
         @param closed flag indicating to draw an icon for a closed
-            branch (boolean)
-        @return icon for the node (QIcon)
+            branch
+        @type bool
+        @param isDraft flag indicating an entry of phase 'draft'
+        @type bool
+        @return icon for the node
+        @rtype QIcon
         """
         def col2x(col, radius):
             """
@@ -677,14 +711,31 @@
                              radius + 4, radius - 2)
         elif self.commandMode in ("incoming", "outgoing"):
             offset = radius // 2
-            painter.drawConvexPolygon(
-                QPoint(dot_x + offset, dot_y),
-                QPoint(dot_x, dot_y + offset),
-                QPoint(dot_x + offset, dot_y + 2 * offset),
-                QPoint(dot_x + 2 * offset, dot_y + offset)
-            )
+            if self.commandMode == "incoming":
+                # incoming: draw a down arrow
+                painter.drawConvexPolygon(
+                    QPoint(dot_x, dot_y),
+                    QPoint(dot_x + 2 * offset, dot_y),
+                    QPoint(dot_x + offset, dot_y + 2 * offset)
+                )
+            else:
+                # outgoing: draw an up arrow
+                painter.drawConvexPolygon(
+                    QPoint(dot_x + offset, dot_y),
+                    QPoint(dot_x, dot_y + 2 * offset),
+                    QPoint(dot_x + 2 * offset, dot_y + 2 * offset)
+                )
         else:
-            painter.drawEllipse(dot_x, dot_y, radius, radius)
+            if isDraft:
+                # 'draft' phase: draw an up arrow like outgoing
+                offset = radius // 2
+                painter.drawConvexPolygon(
+                    QPoint(dot_x + offset, dot_y),
+                    QPoint(dot_x, dot_y + 2 * offset),
+                    QPoint(dot_x + 2 * offset, dot_y + 2 * offset)
+                )
+            else:
+                painter.drawEllipse(dot_x, dot_y, radius, radius)
         painter.end()
         return QIcon(pix)
     
@@ -833,6 +884,50 @@
                     self.__closedBranchesRevs.append(
                         parts[-2].split(":", 1)[0])
     
+    def __getHeads(self):
+        """
+        Private method to get the list of all heads.
+        """
+        self.__headRevisions = []
+        errMsg = ""
+        
+        args = self.vcs.initCommand("heads")
+        args.append("--closed")
+        args.append("--template")
+        args.append("{rev}\n")
+        
+        output = ""
+        if self.__hgClient:
+            output, errMsg = self.__hgClient.runcommand(args)
+        else:
+            process = QProcess()
+            process.setWorkingDirectory(self.repodir)
+            process.start('hg', args)
+            procStarted = process.waitForStarted(5000)
+            if procStarted:
+                finished = process.waitForFinished(30000)
+                if finished and process.exitCode() == 0:
+                    output = str(process.readAllStandardOutput(),
+                                 self.vcs.getEncoding(), 'replace')
+                else:
+                    if not finished:
+                        errMsg = self.tr(
+                            "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 output:
+            for line in output.splitlines():
+                line = line.strip()
+                if line:
+                    self.__headRevisions.append(line)
+    
     def __getRevisionOfTag(self, tag):
         """
         Private method to get the revision of a tag.
@@ -962,6 +1057,7 @@
             itm.setData(0, self.__parentsRole, parents)
             for parent in parents:
                 self.__childrenInfo[parent].append(int(rev))
+        itm.setData(0, self.__incomingRole, self.commandMode == "incoming")
         
         if self.logTree.topLevelItemCount() > 1:
             topedges = \
@@ -974,7 +1070,8 @@
         icon = self.__generateIcon(column, color, edges, topedges,
                                    QColor(self.__branchColor(branches[0])),
                                    rev == self.__projectRevision,
-                                   rev in self.__closedBranchesRevs)
+                                   rev in self.__closedBranchesRevs,
+                                   phase == "draft")
         itm.setIcon(0, icon)
         
         try:
@@ -1056,7 +1153,12 @@
             else:
                 err = ""
             if err:
-                self.__showError(err)
+                if self.commandMode == "incoming" and \
+                        self.initialCommandMode == "full_log":
+                    # ignore the error
+                    self.commandMode = "log"
+                else:
+                    self.__showError(err)
             elif self.commandMode != "incoming" or \
                 (self.vcs.bundleFile and
                  os.path.exists(self.vcs.bundleFile)) or \
@@ -1066,6 +1168,10 @@
                 if err:
                     self.__showError(err)
                 self.__processBuffer()
+            elif self.commandMode == "incoming" and \
+                    self.initialCommandMode == "full_log":
+                # no incoming changesets, just switch to log mode
+                self.commandMode = "log"
             self.__finish()
         else:
             self.process.kill()
@@ -1112,9 +1218,18 @@
         self.__bundle = bundle
         self.__isFile = isFile
         
+        if self.initialCommandMode == "full_log":
+            if isFile:
+                self.commandMode = "log"
+                self.__finishCallbacks = []
+            else:
+                self.commandMode = "incoming"
+                self.__addFinishCallback(self.on_nextButton_clicked)
+        
         self.sbsSelectLabel.clear()
         
         self.errorGroup.hide()
+        self.errors.clear()
         QApplication.processEvents()
         
         self.__initData()
@@ -1138,6 +1253,7 @@
         self.__started = True
         self.__identifyProject()
         self.__getClosedBranches()
+        self.__getHeads()
         self.__getLogEntries(noEntries=noEntries)
     
     def __procFinished(self, exitCode, exitStatus):
@@ -1303,17 +1419,20 @@
         self.__resizeColumnsLog()
         
         if self.__started:
-            if self.__selectedRevisions:
-                foundItems = self.logTree.findItems(
-                    self.__selectedRevisions[0], Qt.MatchExactly,
-                    self.RevisionColumn)
-                if foundItems:
-                    self.logTree.setCurrentItem(foundItems[0])
+            if not self.__finishCallbacks:
+                # we are really done
+                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))
-            else:
-                self.logTree.setCurrentItem(self.logTree.topLevelItem(0))
-            self.__started = False
+                self.__started = False
         
         if self.commandMode in ("incoming", "outgoing"):
             self.commandMode = "log"    # switch to log mode
@@ -1348,8 +1467,9 @@
             self.__filterLogs()
         self.__updateToolMenuActions()
         
-        # restore current item
-        if self.__selectedRevisions:
+        # restore selected item
+        if self.__selectedRevisions and not self.__finishCallbacks:
+            # we are really done
             for revision in self.__selectedRevisions:
                 items = self.logTree.findItems(
                     revision, Qt.MatchExactly, self.RevisionColumn)
@@ -1452,13 +1572,15 @@
         Private slot to update the status of the tool menu actions and
         the tool menu button.
         """
-        if self.initialCommandMode == "log" and self.projectMode:
+        if self.initialCommandMode in ("log", "full_log") and self.projectMode:
             # do the phase action
             # step 1: count entries with changeable phases
             secret = 0
             draft = 0
             public = 0
-            for itm in self.logTree.selectedItems():
+            for itm in [item for item in self.logTree.selectedItems()
+                        if not item.data(0, self.__incomingRole)]:
+                # count phase for local items only
                 phase = itm.text(self.PhaseColumn)
                 if phase == self.phases["draft"]:
                     draft += 1
@@ -1479,7 +1601,9 @@
             # step 1: count selected entries not belonging to the
             #         current branch
             otherBranches = 0
-            for itm in self.logTree.selectedItems():
+            for itm in [item for item in self.logTree.selectedItems()
+                        if not item.data(0, self.__incomingRole)]:
+                # for local items only
                 branch = itm.text(self.BranchColumn)
                 if branch != self.__projectBranch:
                     otherBranches += 1
@@ -1487,15 +1611,27 @@
             # step 2: set the status of the graft action
             self.__graftAct.setEnabled(otherBranches > 0)
             
-            selectedItemsCount = len(self.logTree.selectedItems())
+            selectedItemsCount = len([
+                itm for itm in self.logTree.selectedItems()
+                if not itm.data(0, self.__incomingRole)
+            ])
+            selectedIncomingItemsCount = len([
+                itm for itm in self.logTree.selectedItems()
+                if itm.data(0, self.__incomingRole)
+            ])
+            
             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 selectedIncomingItemsCount > 0:
+                self.__pullAct.setText(self.tr("Pull Selected Changes"))
+                self.__fetchAct.setText(self.tr("Fetch Selected Changes"))
+            else:
+                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(
@@ -1511,6 +1647,8 @@
             if self.vcs.canPush():
                 self.__pushAct.setEnabled(
                     selectedItemsCount == 1 and
+                    not self.logTree.selectedItems()[0].data(
+                        0, self.__incomingRole) and
                     self.logTree.selectedItems()[0].text(self.PhaseColumn) ==
                     self.phases["draft"])
                 self.__pushAllAct.setEnabled(True)
@@ -1522,7 +1660,20 @@
                 self.vcs.isExtensionActive("strip") and
                 selectedItemsCount == 1)
             
-            self.__bundleAct.setEnabled(self.logTree.topLevelItemCount() > 0)
+            # count incoming items for 'full_log'
+            if self.initialCommandMode == "full_log":
+                # incoming items are at the top
+                incomingCount = 0
+                for row in range(self.logTree.topLevelItemCount()):
+                    if self.logTree.topLevelItem(row).data(
+                            0, self.__incomingRole):
+                        incomingCount += 1
+                    else:
+                        break
+                localCount = self.logTree.topLevelItemCount() - incomingCount
+            else:
+                localCount = self.logTree.topLevelItemCount()
+            self.__bundleAct.setEnabled(localCount > 0)
             self.__unbundleAct.setEnabled(False)
             
             self.__gpgSignAct.setEnabled(
@@ -1532,6 +1683,14 @@
                 self.vcs.isExtensionActive("gpg") and
                 selectedItemsCount == 1)
             
+            if self.vcs.isExtensionActive("closehead"):
+                revs = [itm.text(self.RevisionColumn).strip().split(":", 1)[0]
+                        for itm in self.logTree.selectedItems()
+                        if not itm.data(0, self.__incomingRole)]
+                revs = [rev for rev in revs if rev in self.__headRevisions]
+                self.__closeHeadsAct.setEnabled(len(revs) > 0)
+            else:
+                self.__closeHeadsAct.setEnabled(False)
             self.actionsButton.setEnabled(True)
         
         elif self.initialCommandMode == "incoming" and self.projectMode:
@@ -1545,20 +1704,17 @@
             self.__pullAct.setText(self.tr("Pull Selected Changes"))
             self.__fetchAct.setText(self.tr("Fetch Selected Changes"))
             if self.vcs.canPull() and not bool(self.__bundle):
-                # 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)
+                selectedIncomingItemsCount = len([
+                    itm for itm in self.logTree.selectedItems()
+                    if itm.data(0, self.__incomingRole)
+                ])
+                self.__pullAct.setEnabled(selectedIncomingItemsCount > 0)
                 self.__lfPullAct.setEnabled(
                     self.vcs.isExtensionActive("largefiles") and
                     selectedItemsCount > 0)
                 self.__fetchAct.setEnabled(
                     self.vcs.isExtensionActive("fetch") and
-                    selectedDraftItemsCount > 0)
+                    selectedIncomingItemsCount > 0)
             else:
                 self.__pullAct.setEnabled(False)
                 self.__lfPullAct.setEnabled(False)
@@ -1781,8 +1937,11 @@
         """
         Private slot to handle the Next button.
         """
-        if self.__lastRev > 0 and self.nextButton.isEnabled():
-            self.__getLogEntries(startRev=self.__lastRev - 1)
+        if self.nextButton.isEnabled():
+            if self.__lastRev > 0:
+                self.__getLogEntries(startRev=self.__lastRev - 1)
+            else:
+                self.__getLogEntries()
     
     @pyqtSlot(QDate)
     def on_fromDate_dateChanged(self, date):
@@ -1913,6 +2072,9 @@
             fieldIndex = self.__changesRole
             searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive)
             indexIsRole = True
+        elif txt == "phase":
+            fieldIndex = self.PhaseColumn
+            searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive)
         else:
             fieldIndex = self.__messageRole
             searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive)
@@ -1933,9 +2095,13 @@
         self.limitSpinBox.setEnabled(True)
     
     @pyqtSlot()
-    def on_refreshButton_clicked(self):
+    def on_refreshButton_clicked(self, addNext=False):
         """
         Private slot to refresh the log.
+        
+        @param addNext flag indicating to get a second batch of log entries as
+            well
+        @type bool
         """
         self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
         self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True)
@@ -1951,12 +2117,18 @@
         if self.initialCommandMode in ("incoming", "outgoing"):
             self.nextButton.setEnabled(False)
             self.limitSpinBox.setEnabled(False)
+            if addNext:
+                self.__addFinishCallback(self.on_nextButton_clicked)
         else:
             self.nextButton.setEnabled(True)
             self.limitSpinBox.setEnabled(True)
         
-        self.commandMode = self.initialCommandMode
-        self.start(self.__filename, isFile=self.__isFile,
+        if self.initialCommandMode == "full_log":
+            self.commandMode = "incoming"
+            self.__addFinishCallback(self.on_nextButton_clicked)
+        else:
+            self.commandMode = self.initialCommandMode
+        self.start(self.__filename, bundle=self.__bundle, isFile=self.__isFile,
                    noEntries=self.logTree.topLevelItemCount())
     
     def on_passwordCheckBox_toggled(self, isOn):
@@ -2014,27 +2186,29 @@
         """
         Private slot to handle the Change Phase action.
         """
-        currentPhase = self.logTree.selectedItems()[0].text(self.PhaseColumn)
-        revs = []
-        for itm in self.logTree.selectedItems():
-            if itm.text(self.PhaseColumn) == currentPhase:
-                revs.append(
-                    itm.text(self.RevisionColumn).split(":")[0].strip())
-        
-        if not revs:
-            self.__phaseAct.setEnabled(False)
-            return
-        
-        if currentPhase == self.phases["draft"]:
-            newPhase = self.phases["secret"]
-            data = (revs, "s", True)
-        else:
-            newPhase = self.phases["draft"]
-            data = (revs, "d", False)
-        res = self.vcs.hgPhase(self.repodir, data)
-        if res:
+        itm = self.logTree.selectedItems()[0]
+        if not itm.data(0, self.__incomingRole):
+            currentPhase = itm.text(self.PhaseColumn)
+            revs = []
             for itm in self.logTree.selectedItems():
-                itm.setText(self.PhaseColumn, newPhase)
+                if itm.text(self.PhaseColumn) == currentPhase:
+                    revs.append(
+                        itm.text(self.RevisionColumn).split(":")[0].strip())
+            
+            if not revs:
+                self.__phaseAct.setEnabled(False)
+                return
+            
+            if currentPhase == self.phases["draft"]:
+                newPhase = self.phases["secret"]
+                data = (revs, "s", True)
+            else:
+                newPhase = self.phases["draft"]
+                data = (revs, "d", False)
+            res = self.vcs.hgPhase(self.repodir, data)
+            if res:
+                for itm in self.logTree.selectedItems():
+                    itm.setText(self.PhaseColumn, newPhase)
     
     @pyqtSlot()
     def __graftActTriggered(self):
@@ -2043,7 +2217,8 @@
         """
         revs = []
         
-        for itm in self.logTree.selectedItems():
+        for itm in [item for item in self.logTree.selectedItems()
+                    if not item.data(0, self.__incomingRole)]:
             branch = itm.text(self.BranchColumn)
             if branch != self.__projectBranch:
                 revs.append(
@@ -2069,7 +2244,8 @@
         """
         Private slot to tag the selected revision.
         """
-        if len(self.logTree.selectedItems()) == 1:
+        if len([itm for itm in self.logTree.selectedItems()
+                if not itm.data(0, self.__incomingRole)]) == 1:
             itm = self.logTree.selectedItems()[0]
             rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
             tag = itm.text(self.TagsColumn).strip().split(", ", 1)[0]
@@ -2078,12 +2254,31 @@
                 self.on_refreshButton_clicked()
     
     @pyqtSlot()
+    def __closeHeadsActTriggered(self):
+        """
+        Private slot to close the selected head revisions.
+        """
+        if self.vcs.isExtensionActive("closehead"):
+            revs = [itm.text(self.RevisionColumn).strip().split(":", 1)[0]
+                    for itm in self.logTree.selectedItems()
+                    if not itm.data(0, self.__incomingRole)]
+            revs = [rev for rev in revs if rev in self.__headRevisions]
+            if revs:
+                closeheadExtension = self.vcs.getExtensionObject("closehead")
+                if closeheadExtension is not None:
+                    closeheadExtension.hgCloseheads(
+                        self.repodir, revisions=revs)
+                    
+                    self.on_refreshButton_clicked()
+    
+    @pyqtSlot()
     def __switchActTriggered(self):
         """
         Private slot to switch the working directory to the
         selected revision.
         """
-        if len(self.logTree.selectedItems()) == 1:
+        if len([itm for itm in self.logTree.selectedItems()
+                if not itm.data(0, self.__incomingRole)]) == 1:
             itm = self.logTree.selectedItems()[0]
             rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
             bookmarks = [bm.strip() for bm in
@@ -2121,7 +2316,8 @@
         """
         Private slot to bookmark the selected revision.
         """
-        if len(self.logTree.selectedItems()) == 1:
+        if len([itm for itm in self.logTree.selectedItems()
+                if not itm.data(0, self.__incomingRole)]) == 1:
             itm = self.logTree.selectedItems()[0]
             rev, changeset = \
                 itm.text(self.RevisionColumn).strip().split(":", 1)
@@ -2142,7 +2338,8 @@
         """
         Private slot to move a bookmark to the selected revision.
         """
-        if len(self.logTree.selectedItems()) == 1:
+        if len([itm for itm in self.logTree.selectedItems()
+                if not itm.data(0, self.__incomingRole)]) == 1:
             itm = self.logTree.selectedItems()[0]
             rev, changeset = \
                 itm.text(self.RevisionColumn).strip().split(":", 1)
@@ -2166,7 +2363,8 @@
         Private slot to pull large files of selected revisions.
         """
         revs = []
-        for itm in self.logTree.selectedItems():
+        for itm in [item for item in self.logTree.selectedItems()
+                    if not item.data(0, self.__incomingRole)]:
             rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
             if rev:
                 revs.append(rev)
@@ -2182,22 +2380,20 @@
         """
         shouldReopen = False
         refresh = False
+        addNext = False
         
-        if self.initialCommandMode == "log":
-            shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch(
-                self.repodir)
-            refresh = True
-        elif self.initialCommandMode == "incoming":
+        if self.initialCommandMode in ("log", "full_log", "incoming"):
             revs = []
-            for itm in self.logTree.selectedItems():
+            for itm in [item for item in self.logTree.selectedItems()
+                        if item.data(0, self.__incomingRole)]:
                 rev = itm.text(self.RevisionColumn).split(":")[1].strip()
-                phase = itm.text(self.PhaseColumn).strip()
-                if rev and phase == self.phases["draft"]:
+                if rev:
                     revs.append(rev)
-            if revs:
-                shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch(
-                    self.repodir, )
-                refresh = True
+            shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch(
+                self.repodir, revisions=revs)
+            refresh = True
+            if self.initialCommandMode == "incoming":
+                addNext = True
         if shouldReopen:
             res = E5MessageBox.yesNo(
                 None,
@@ -2210,7 +2406,7 @@
                 return
         
         if refresh:
-            self.on_refreshButton_clicked()
+            self.on_refreshButton_clicked(addNext=addNext)
     
     @pyqtSlot()
     def __pullActTriggered(self):
@@ -2219,20 +2415,19 @@
         """
         shouldReopen = False
         refresh = False
+        addNext = False
         
-        if self.initialCommandMode == "log":
-            shouldReopen = self.vcs.hgPull(self.repodir)
-            refresh = True
-        elif self.initialCommandMode == "incoming":
+        if self.initialCommandMode in ("log", "full_log", "incoming"):
             revs = []
-            for itm in self.logTree.selectedItems():
+            for itm in [item for item in self.logTree.selectedItems()
+                        if item.data(0, self.__incomingRole)]:
                 rev = itm.text(self.RevisionColumn).split(":")[1].strip()
-                phase = itm.text(self.PhaseColumn).strip()
-                if rev and phase == self.phases["draft"]:
+                if rev:
                     revs.append(rev)
-            if revs:
-                shouldReopen = self.vcs.hgPull(self.repodir, revisions=revs)
-                refresh = True
+            shouldReopen = self.vcs.hgPull(self.repodir, revisions=revs)
+            refresh = True
+            if self.initialCommandMode == "incoming":
+                addNext = True
         
         if shouldReopen:
             res = E5MessageBox.yesNo(
@@ -2246,7 +2441,7 @@
                 return
         
         if refresh:
-            self.on_refreshButton_clicked()
+            self.on_refreshButton_clicked(addNext=addNext)
     
     @pyqtSlot()
     def __pushActTriggered(self):
@@ -2255,10 +2450,12 @@
         changeset.
         """
         itm = self.logTree.selectedItems()[0]
-        rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
-        if rev:
-            self.vcs.hgPush(self.repodir, rev=rev)
-            self.on_refreshButton_clicked()
+        if not itm.data(0, self.__incomingRole):
+            rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
+            if rev:
+                self.vcs.hgPush(self.repodir, rev=rev)
+                self.on_refreshButton_clicked(
+                    addNext=self.initialCommandMode == "outgoing")
     
     @pyqtSlot()
     def __pushAllActTriggered(self):
@@ -2274,20 +2471,21 @@
         Private slot to strip changesets from the repository.
         """
         itm = self.logTree.selectedItems()[0]
-        rev = itm.text(self.RevisionColumn).strip().split(":", 1)[1]
-        shouldReopen = self.vcs.getExtensionObject("strip").hgStrip(
-            self.repodir, rev=rev)
-        if shouldReopen:
-            res = E5MessageBox.yesNo(
-                None,
-                self.tr("Strip Changesets"),
-                self.tr(
-                    """The project should be reread. Do this now?"""),
-                yesDefault=True)
-            if res:
-                e5App().getObject("Project").reopenProject()
-                return
-        
+        if not itm.data(0, self.__incomingRole):
+            rev = itm.text(self.RevisionColumn).strip().split(":", 1)[1]
+            shouldReopen = self.vcs.getExtensionObject("strip").hgStrip(
+                self.repodir, rev=rev)
+            if shouldReopen:
+                res = E5MessageBox.yesNo(
+                    None,
+                    self.tr("Strip Changesets"),
+                    self.tr(
+                        """The project should be reread. Do this now?"""),
+                    yesDefault=True)
+                if res:
+                    e5App().getObject("Project").reopenProject()
+                    return
+            
         self.on_refreshButton_clicked()
     
     @pyqtSlot()
@@ -2297,17 +2495,19 @@
         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)
+        if not itm.data(0, self.__incomingRole):
+            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 self.initialCommandMode in ("log", "full_log"):
+            selectedItems = [itm for itm in self.logTree.selectedItems()
+                             if not itm.data(0, self.__incomingRole)]
             if len(selectedItems) == 0:
                 # all revisions of the local repository will be bundled
                 bundleData = {
@@ -2386,7 +2586,8 @@
         Private slot to sign the selected revisions.
         """
         revs = []
-        for itm in self.logTree.selectedItems():
+        for itm in [item for item in self.logTree.selectedItems()
+                    if not item.data(0, self.__incomingRole)]:
             rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip()
             if rev:
                 revs.append(rev)
@@ -2400,11 +2601,12 @@
         """
         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)
+        itm = self.logTree.selectedItems()[0]
+        if not itm.data(0, self.__incomingRole):
+            rev = itm.text(self.RevisionColumn).split(":", 1)[0].strip()
+            if rev:
+                self.vcs.getExtensionObject("gpg").hgGpgVerifySignatures(
+                    self.repodir, rev=rev)
     
     def __selectAllActTriggered(self, select=True):
         """
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py	Mon May 20 22:44:12 2019 +0200
@@ -18,7 +18,7 @@
 from PyQt5.QtCore import pyqtSlot, QProcess, Qt, QTimer, QCoreApplication, \
     QPoint
 from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QHeaderView, \
-    QTreeWidgetItem, QLineEdit, QMenu
+    QTreeWidgetItem, QLineEdit, QMenu, QAbstractItemView
 
 from E5Gui.E5Application import e5App
 from E5Gui import E5MessageBox
@@ -58,6 +58,7 @@
         self.allTagsList = None
         self.__hgClient = vcs.getClient()
         self.__currentRevision = ""
+        self.__currentBranch = ""
         
         self.tagList.headerItem().setText(self.tagList.columnCount(), "")
         self.tagList.header().setSortIndicator(3, Qt.AscendingOrder)
@@ -110,6 +111,9 @@
         if not tags:
             self.setWindowTitle(self.tr("Mercurial Branches List"))
             self.tagList.headerItem().setText(2, self.tr("Status"))
+            if self.vcs.isExtensionActive("closehead"):
+                self.tagList.setSelectionMode(
+                    QAbstractItemView.ExtendedSelection)
         self.activateWindow()
         
         self.tagsList = tagsList
@@ -377,10 +381,10 @@
         """
         Private method to highlight the current branch with a bold font.
         """
-        currentBranch = self.vcs.hgGetCurrentBranch(self.__repoDir)
-        if currentBranch:
+        self.__currentBranch = self.vcs.hgGetCurrentBranch(self.__repoDir)
+        if self.__currentBranch:
             items = self.tagList.findItems(
-                currentBranch, Qt.MatchCaseSensitive, 3)
+                self.__currentBranch, Qt.MatchCaseSensitive, 3)
             if len(items) == 1:
                 font = items[0].font(3)
                 font.setBold(True)
@@ -427,13 +431,24 @@
                     UI.PixmapCache.getIcon("vcsSwitch.png"),
                     self.tr("Switch to"), self.__switchTo)
             else:
-                menu.addAction(
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("vcsSwitch.png"),
                     self.tr("Switch to"), self.__switchTo)
+                act.setEnabled(itm.text(3) != self.__currentBranch)
                 menu.addSeparator()
-                act = menu.addAction(self.tr("Close Branch"),
-                                     self.__closeBranch)
-                act.setEnabled(itm.text(3) != "default")
+                if self.vcs.isExtensionActive("closehead"):
+                    act = menu.addAction(
+                        UI.PixmapCache.getIcon("closehead"),
+                        self.tr("Close Branches"), self.__closeBranchHeads)
+                    act.setEnabled(len([
+                        itm for itm in self.tagList.selectedItems()
+                        if itm.text(3) != "default"
+                    ]) > 0)
+                else:
+                    act = menu.addAction(
+                        UI.PixmapCache.getIcon("closehead"),
+                        self.tr("Close Branch"), self.__closeBranch)
+                    act.setEnabled(itm.text(3) != "default")
             menu.popup(self.tagList.mapToGlobal(pos))
     
     def __switchTo(self):
@@ -493,3 +508,23 @@
                                    revision=currentBranch)
             
             self.on_refreshButton_clicked()
+    
+    def __closeBranchHeads(self):
+        """
+        Private slot to close the selected branches.
+        """
+        branches = [itm.text(3) for itm in self.tagsList.selectedItems()
+                    if itm.text(3) != "default"]
+        
+        from UI.DeleteFilesConfirmationDialog import \
+            DeleteFilesConfirmationDialog
+        dlg = DeleteFilesConfirmationDialog(
+            self.parent(),
+            self.tr("Close Branches"),
+            self.tr(
+                "Do you really want to close all listed branches?"),
+            branches)
+        yes = dlg.exec_() == QDialog.Accepted
+        if yes:
+            self.vcs.getExtensionObject("closehead").hgCloseheads(
+                self.__repoDir, branches)
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py	Mon May 20 22:44:12 2019 +0200
@@ -199,6 +199,13 @@
             if "largefiles" in self.__config["extensions"]:
                 del self.__config["extensions"]["largefiles"]
             self.__config["extensions"]["#largefiles"] = ""
+        
+        if self.closeheadCheckBox.isChecked() and self.__version >= (4, 8, 0):
+            self.__config["extensions"]["closehead"] = ""
+        else:
+            if "closehead" in self.__config["extensions"]:
+                del self.__config["extensions"]["closehead"]
+            self.__config["extensions"]["#closehead"] = ""
         ###################################################################
         ## http_proxy section
         ###################################################################
@@ -335,6 +342,9 @@
                     "strip" in self.__config["extensions"])
                 self.histeditCheckBox.setChecked(
                     "histedit" in self.__config["extensions"])
+                self.closeheadCheckBox.setChecked(
+                    "closehead" in self.__config["extensions"])
+            self.closeheadCheckBox.setEnabled(self.__version >= (4, 8, 0))
             
             # step 3: extract large files information
             if "largefiles" in self.__config:
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.ui	Mon May 20 22:44:12 2019 +0200
@@ -20,7 +20,7 @@
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
-      <number>3</number>
+      <number>1</number>
      </property>
      <widget class="QWidget" name="tab">
       <attribute name="title">
@@ -121,6 +121,16 @@
          </property>
          <layout class="QGridLayout" name="gridLayout_2">
           <item row="0" column="0">
+           <widget class="QCheckBox" name="closeheadCheckBox">
+            <property name="toolTip">
+             <string>Select to activate the closehead extension</string>
+            </property>
+            <property name="text">
+             <string>Close Head</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
            <widget class="QCheckBox" name="fetchCheckBox">
             <property name="toolTip">
              <string>Select to activate the fetch extension</string>
@@ -130,7 +140,7 @@
             </property>
            </widget>
           </item>
-          <item row="0" column="1">
+          <item row="1" column="0">
            <widget class="QCheckBox" name="gpgCheckBox">
             <property name="toolTip">
              <string>Select to activate the GPG extension</string>
@@ -140,7 +150,7 @@
             </property>
            </widget>
           </item>
-          <item row="1" column="0">
+          <item row="1" column="1">
            <widget class="QCheckBox" name="histeditCheckBox">
             <property name="toolTip">
              <string>Select to activate the histedit extension</string>
@@ -150,7 +160,7 @@
             </property>
            </widget>
           </item>
-          <item row="1" column="1">
+          <item row="2" column="0">
            <widget class="QCheckBox" name="largefilesCheckBox">
             <property name="toolTip">
              <string>Select to activate the largefiles extension</string>
@@ -160,7 +170,7 @@
             </property>
            </widget>
           </item>
-          <item row="2" column="0">
+          <item row="2" column="1">
            <widget class="QCheckBox" name="purgeCheckBox">
             <property name="toolTip">
              <string>Select to activate the Purge extension</string>
@@ -170,7 +180,7 @@
             </property>
            </widget>
           </item>
-          <item row="2" column="1">
+          <item row="3" column="0">
            <widget class="QCheckBox" name="queuesCheckBox">
             <property name="toolTip">
              <string>Select to activate the queues extension</string>
@@ -180,7 +190,7 @@
             </property>
            </widget>
           </item>
-          <item row="3" column="0">
+          <item row="3" column="1">
            <widget class="QCheckBox" name="rebaseCheckBox">
             <property name="toolTip">
              <string>Select to activate the rebase extension</string>
@@ -190,7 +200,7 @@
             </property>
            </widget>
           </item>
-          <item row="3" column="1">
+          <item row="4" column="0">
            <widget class="QCheckBox" name="shelveCheckBox">
             <property name="toolTip">
              <string>Select to activate the shelve extension</string>
@@ -200,7 +210,7 @@
             </property>
            </widget>
           </item>
-          <item row="4" column="0">
+          <item row="4" column="1">
            <widget class="QCheckBox" name="stripCheckBox">
             <property name="toolTip">
              <string>Select to activate the strip extension</string>
@@ -672,6 +682,7 @@
   <tabstop>tabWidget</tabstop>
   <tabstop>userNameEdit</tabstop>
   <tabstop>emailEdit</tabstop>
+  <tabstop>closeheadCheckBox</tabstop>
   <tabstop>fetchCheckBox</tabstop>
   <tabstop>gpgCheckBox</tabstop>
   <tabstop>histeditCheckBox</tabstop>
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Mon May 20 22:44:12 2019 +0200
@@ -49,6 +49,7 @@
         from .LargefilesExtension.ProjectHelper import LargefilesProjectHelper
         from .StripExtension.ProjectHelper import StripProjectHelper
         from .HisteditExtension.ProjectHelper import HisteditProjectHelper
+        from .CloseheadExtension.ProjectHelper import CloseheadProjectHelper
         self.__extensions = {
             "mq": QueuesProjectHelper(),
             "fetch": FetchProjectHelper(),
@@ -59,6 +60,7 @@
             "largefiles": LargefilesProjectHelper(),
             "strip": StripProjectHelper(),
             "histedit": HisteditProjectHelper(),
+            "closehead": CloseheadProjectHelper(),
         }
         
         self.__extensionMenuTitles = {}
@@ -554,6 +556,7 @@
         
         self.hgPushBranchAct = E5Action(
             self.tr('Push new branch'),
+            UI.PixmapCache.getIcon("vcsCommit.png"),
             self.tr('Push new branch'),
             0, 0, self, 'mercurial_push_branch')
         self.hgPushBranchAct.setStatusTip(self.tr(
@@ -570,6 +573,7 @@
         
         self.hgCloseBranchAct = E5Action(
             self.tr('Close branch'),
+            UI.PixmapCache.getIcon("closehead"),
             self.tr('Close branch'),
             0, 0, self, 'mercurial_close_branch')
         self.hgCloseBranchAct.setStatusTip(self.tr(
@@ -1517,9 +1521,11 @@
         
         title = self.__toolbar.windowTitle()
         toolbarManager.addToolBar(self.__toolbar, title)
+        toolbarManager.addAction(self.hgIncomingAct, title)
         toolbarManager.addAction(self.hgPullAct, title)
         toolbarManager.addAction(self.vcsUpdateAct, title)
         toolbarManager.addAction(self.vcsCommitAct, title)
+        toolbarManager.addAction(self.hgOutgoingAct, title)
         toolbarManager.addAction(self.hgPushAct, title)
         toolbarManager.addAction(self.hgPushForcedAct, title)
         toolbarManager.addAction(self.hgExtDiffAct, title)
@@ -1539,13 +1545,18 @@
         toolbarManager.addAction(self.hgBookmarkDeleteAct, title)
         toolbarManager.addAction(self.hgBookmarkRenameAct, title)
         toolbarManager.addAction(self.hgBookmarkMoveAct, title)
+        toolbarManager.addAction(self.hgBookmarkIncomingAct, title)
         toolbarManager.addAction(self.hgBookmarkPullAct, title)
+        toolbarManager.addAction(self.hgBookmarkPullCurrentAct, title)
+        toolbarManager.addAction(self.hgBookmarkOutgoingAct, title)
         toolbarManager.addAction(self.hgBookmarkPushAct, title)
+        toolbarManager.addAction(self.hgBookmarkPushCurrentAct, title)
         toolbarManager.addAction(self.hgImportAct, title)
         toolbarManager.addAction(self.hgExportAct, title)
         toolbarManager.addAction(self.hgBundleAct, title)
         toolbarManager.addAction(self.hgPreviewBundleAct, title)
         toolbarManager.addAction(self.hgUnbundleAct, title)
+        toolbarManager.addAction(self.hgDeleteBackupsAct, title)
         
         self.__toolbar.setEnabled(False)
         self.__toolbar.setVisible(False)
@@ -1613,6 +1624,8 @@
                     self.extensionMenus[extensionName].menu()\
                         .isTearOffMenuVisible():
                 self.extensionMenus[extensionName].menu().hideTearOffMenu()
+        if self.vcs.version < (4, 8, 0):
+            self.extensionMenus["closehead"].setEnabled(False)
     
     def __hgExtendedDiff(self):
         """
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveDataDialog.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveDataDialog.py	Mon May 20 22:44:12 2019 +0200
@@ -19,11 +19,14 @@
     """
     Class implementing a dialog to enter the data for a shelve operation.
     """
-    def __init__(self, parent=None):
+    def __init__(self, version, parent=None):
         """
         Constructor
         
-        @param parent reference to the parent widget (QWidget)
+        @param version Mercurial version
+        @type tuple of three int
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super(HgShelveDataDialog, self).__init__(parent)
         self.setupUi(self)
@@ -31,6 +34,10 @@
         self.__initialDateTime = QDateTime.currentDateTime()
         self.dateTimeEdit.setDateTime(self.__initialDateTime)
         
+        if version < (5, 0, 0):
+            self.keepCheckBox.setChecked(False)
+            self.keepCheckBox.hide()
+        
         msh = self.minimumSizeHint()
         self.resize(max(self.width(), msh.width()), msh.height())
     
@@ -38,9 +45,10 @@
         """
         Public method to get the user data.
         
-        @return tuple containing the name (string), date (QDateTime),
-            message (string) and a flag indicating to add/remove
-            new/missing files (boolean)
+        @return tuple containing the name, date, message, a flag indicating
+            to add/remove new/missing files and a flag indicating to keep the
+            shelved changes in the working directory
+        @rtype tuple of (str, QDateTime, str, bool, bool)
         """
         if self.dateTimeEdit.dateTime() != self.__initialDateTime:
             dateTime = self.dateTimeEdit.dateTime()
@@ -51,4 +59,5 @@
             dateTime,
             self.messageEdit.text(),
             self.addRemoveCheckBox.isChecked(),
+            self.keepCheckBox.isChecked(),
         )
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveDataDialog.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveDataDialog.ui	Mon May 20 22:44:12 2019 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>500</width>
-    <height>170</height>
+    <height>167</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -93,6 +93,16 @@
     </widget>
    </item>
    <item row="4" column="0" colspan="2">
+    <widget class="QCheckBox" name="keepCheckBox">
+     <property name="toolTip">
+      <string>Select to shelve, but keep the changes in the working directory</string>
+     </property>
+     <property name="text">
+      <string>Shelve, but keep changes</string>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="0" colspan="2">
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py	Mon May 20 22:44:12 2019 +0200
@@ -101,9 +101,9 @@
         
         res = False
         from .HgShelveDataDialog import HgShelveDataDialog
-        dlg = HgShelveDataDialog()
+        dlg = HgShelveDataDialog(self.vcs.version)
         if dlg.exec_() == QDialog.Accepted:
-            shelveName, dateTime, message, addRemove = dlg.getData()
+            shelveName, dateTime, message, addRemove, keep = dlg.getData()
             
             args = self.vcs.initCommand("shelve")
             if shelveName:
@@ -117,6 +117,8 @@
             if dateTime.isValid():
                 args.append("--date")
                 args.append(dateTime.toString("yyyy-MM-dd hh:mm:ss"))
+            if self.vcs.version >= (5, 0, 0) and keep:
+                args.append("--keep")
             args.append("-v")
             
             if isinstance(name, list):
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/hg.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/hg.py	Mon May 20 22:44:12 2019 +0200
@@ -147,6 +147,7 @@
         from .LargefilesExtension.largefiles import Largefiles
         from .StripExtension.strip import Strip
         from .HisteditExtension.histedit import Histedit
+        from .CloseheadExtension.closehead import Closehead
         self.__extensions = {
             "mq": Queues(self),
             "fetch": Fetch(self),
@@ -157,6 +158,7 @@
             "largefiles": Largefiles(self),
             "strip": Strip(self),
             "histedit": Histedit(self),
+            "closehead": Closehead(self),
         }
     
     def getPlugin(self):
@@ -3441,6 +3443,8 @@
                 extensionName = \
                     line.split("=", 1)[0].strip().split(".")[-1].strip()
                 self.__activeExtensions.append(extensionName)
+        if self.version < (4, 8, 0) and "closehead" in self.__activeExtensions:
+            self.__activeExtensions.remove["closehead"]
         
         if activeExtensions != sorted(self.__activeExtensions):
             self.activeExtensionsChanged.emit()
--- a/eric6/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Mon May 20 22:44:12 2019 +0200
@@ -209,18 +209,7 @@
         self.navigationButton.setEnabled(False)
         self.rightCornerWidgetLayout.addWidget(self.navigationButton)
         
-        if Preferences.getUI("SingleCloseButton") or \
-           not hasattr(self, 'setTabsClosable'):
-            self.closeButton = QToolButton(self)
-            self.closeButton.setIcon(UI.PixmapCache.getIcon("close.png"))
-            self.closeButton.setToolTip(
-                self.tr("Close the current editor"))
-            self.closeButton.setEnabled(False)
-            self.closeButton.clicked[bool].connect(self.__closeButtonClicked)
-            self.rightCornerWidgetLayout.addWidget(self.closeButton)
-        else:
-            self.tabCloseRequested.connect(self.__closeRequested)
-            self.closeButton = None
+        self.tabCloseRequested.connect(self.__closeRequested)
         
         self.setCornerWidget(self.rightCornerWidget, Qt.TopRightCorner)
         
@@ -370,10 +359,7 @@
         editor = assembly.getEditor()
         super(TabWidget, self).addTab(
             assembly, UI.PixmapCache.getIcon("empty.png"), title)
-        if self.closeButton:
-            self.closeButton.setEnabled(True)
-        else:
-            self.setTabsClosable(True)
+        self.setTabsClosable(True)
         self.navigationButton.setEnabled(True)
         
         if editor not in self.editors:
@@ -404,10 +390,7 @@
             index, assembly,
             UI.PixmapCache.getIcon("empty.png"),
             title)
-        if self.closeButton:
-            self.closeButton.setEnabled(True)
-        else:
-            self.setTabsClosable(True)
+        self.setTabsClosable(True)
         self.navigationButton.setEnabled(True)
         
         if editor not in self.editors:
@@ -488,10 +471,7 @@
             super(TabWidget, self).addTab(
                 self.emptyLabel, UI.PixmapCache.getIcon("empty.png"), "")
             self.emptyLabel.show()
-            if self.closeButton:
-                self.closeButton.setEnabled(False)
-            else:
-                self.setTabsClosable(False)
+            self.setTabsClosable(False)
             self.navigationButton.setEnabled(False)
         
     def __relocateTab(self, sourceId, sourceIndex, targetIndex):
--- a/eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Mon May 20 22:44:12 2019 +0200
@@ -17,9 +17,10 @@
 import sys
 import datetime
 
-from PyQt5.QtCore import pyqtSlot, Qt
+from PyQt5.QtCore import pyqtSlot, Qt, QUrl
 from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem, \
     QListWidgetItem, QApplication
+from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
 
 from E5Gui.E5Application import e5App
 from E5Gui import E5MessageBox, E5FileDialog
@@ -39,6 +40,8 @@
     It displays a dialog for entering the parameters
     for the E5MessageBox code generator.
     """
+    ClassifiersUrl = "https://pypi.org/pypi?%3Aaction=list_classifiers"
+    
     def __init__(self, parent=None):
         """
         Constructor
@@ -48,6 +51,8 @@
         super(SetupWizardDialog, self).__init__(parent)
         self.setupUi(self)
         
+        self.__replies = []
+        
         self.dataTabWidget.setCurrentIndex(0)
         
         self.__packageDirCompleter = E5DirCompleter(self.packageEdit)
@@ -69,13 +74,7 @@
                          self.maintainerEmailEdit]:
             lineEdit.setStyleSheet(self.__mandatoryStyleSheet)
         
-        self.developmentStatusComboBox.addItem("", "")
-        
-        self.__populateFromTroveLists()
-        
-        self.licenseClassifierComboBox.setCurrentIndex(
-            self.licenseClassifierComboBox.findText(
-                "(GPLv3)", Qt.MatchContains | Qt.MatchCaseSensitive))
+        self.__loadClassifiersFromPyPI()
         
         self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)
         self.__okButton.setEnabled(False)
@@ -109,9 +108,46 @@
         
         self.__okButton.setEnabled(enable)
     
-    def __populateFromTroveLists(self):
+    def __loadClassifiersFromPyPI(self):
+        """
+        Private method to populate the classifiers list with data retrieved
+        from PyPI.
+        """
+        request = QNetworkRequest(QUrl(SetupWizardDialog.ClassifiersUrl))
+        request.setAttribute(QNetworkRequest.CacheLoadControlAttribute,
+                             QNetworkRequest.AlwaysNetwork)
+        reply = e5App().getObject("UserInterface").networkAccessManager().get(
+            request)
+        reply.finished.connect(lambda: self.__classifiersDownloadDone(reply))
+        self.__replies.append(reply)
+
+    @pyqtSlot()
+    def __classifiersDownloadDone(self, reply):
+        """
+        Private slot called, after the classifiers file has been downloaded
+        from the internet.
+        
+        @param reply reference to the network reply
+        @type QNetworkReply
+        """
+        reply.deleteLater()
+        if reply in self.__replies:
+            self.__replies.remove(reply)
+        if reply.error() == QNetworkReply.NoError:
+            ioEncoding = Preferences.getSystem("IOEncoding")
+            lines = str(reply.readAll(), ioEncoding, 'replace').splitlines()
+            
+            self.__populateClassifiers(lines)
+        
+        reply.close()
+    
+    @pyqtSlot()
+    def on_localClassifiersButton_clicked(self):
         """
         Private method to populate lists from the Trove list file.
+        
+        Note: The trove list file was created from querying
+        "https://pypi.org/pypi?%3Aaction=list_classifiers".
         """
         filename = os.path.join(os.path.dirname(__file__),
                                 "data", "trove_classifiers.txt")
@@ -128,8 +164,24 @@
                 .format(filename, str(err)))
             return
         
+        self.__populateClassifiers(lines)
+    
+    def __populateClassifiers(self, classifiers):
+        """
+        Private method to populate the classifiers.
+        
+        @param classifiers list of classifiers read from a local file or
+            retrieved from PyPI
+        @type list of str
+        """
+        self.licenseClassifierComboBox.clear()
+        self.classifiersList.clear()
+        self.developmentStatusComboBox.clear()
+        
+        self.developmentStatusComboBox.addItem("", "")
+        
         self.__classifiersDict = {}
-        for line in lines:
+        for line in classifiers:
             line = line.strip()
             if line.startswith("License "):
                 self.licenseClassifierComboBox.addItem(
@@ -142,6 +194,10 @@
             else:
                 self.__addClassifierEntry(line)
         self.__classifiersDict = {}
+        
+        self.licenseClassifierComboBox.setCurrentIndex(
+            self.licenseClassifierComboBox.findText(
+                "(GPLv3)", Qt.MatchContains | Qt.MatchCaseSensitive))
     
     def __addClassifierEntry(self, line):
         """
--- a/eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.ui	Mon May 20 22:44:12 2019 +0200
@@ -488,6 +488,16 @@
            </property>
           </spacer>
          </item>
+         <item>
+          <widget class="QPushButton" name="localClassifiersButton">
+           <property name="toolTip">
+            <string>Press to populate the classifiers with data retrieved from a local file.</string>
+           </property>
+           <property name="text">
+            <string>Populate from local file</string>
+           </property>
+          </widget>
+         </item>
         </layout>
        </item>
        <item>
@@ -904,13 +914,8 @@
   <tabstop>licenseEdit</tabstop>
   <tabstop>platformsEdit</tabstop>
   <tabstop>developmentStatusComboBox</tabstop>
+  <tabstop>localClassifiersButton</tabstop>
   <tabstop>classifiersList</tabstop>
-  <tabstop>packagesList</tabstop>
-  <tabstop>deletePackageButton</tabstop>
-  <tabstop>addPackageButton</tabstop>
-  <tabstop>packageEdit</tabstop>
-  <tabstop>packageDirButton</tabstop>
-  <tabstop>autodiscoverPackagesButton</tabstop>
   <tabstop>sourceDirectoryEdit</tabstop>
   <tabstop>sourceDirectoryButton</tabstop>
   <tabstop>excludePatternList</tabstop>
@@ -925,6 +930,12 @@
   <tabstop>deleteScriptButton</tabstop>
   <tabstop>addScriptButton</tabstop>
   <tabstop>projectButton</tabstop>
+  <tabstop>autodiscoverPackagesButton</tabstop>
+  <tabstop>deletePackageButton</tabstop>
+  <tabstop>addPackageButton</tabstop>
+  <tabstop>packageEdit</tabstop>
+  <tabstop>packageDirButton</tabstop>
+  <tabstop>packagesList</tabstop>
  </tabstops>
  <resources/>
  <connections>
--- a/eric6/Plugins/WizardPlugins/SetupWizard/data/trove_classifiers.txt	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Plugins/WizardPlugins/SetupWizard/data/trove_classifiers.txt	Mon May 20 22:44:12 2019 +0200
@@ -55,6 +55,11 @@
 Framework :: Django :: 2.0
 Framework :: Django :: 2.1
 Framework :: Django :: 2.2
+Framework :: Django CMS
+Framework :: Django CMS :: 3.4
+Framework :: Django CMS :: 3.5
+Framework :: Django CMS :: 3.6
+Framework :: Django CMS :: 3.7
 Framework :: Flake8
 Framework :: Flask
 Framework :: Hypothesis
@@ -322,6 +327,7 @@
 Programming Language :: Erlang
 Programming Language :: Euler
 Programming Language :: Euphoria
+Programming Language :: F#
 Programming Language :: Forth
 Programming Language :: Fortran
 Programming Language :: Haskell
--- a/eric6/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Mon May 20 22:44:12 2019 +0200
@@ -356,7 +356,7 @@
         Public Qt slot to get the index of item at row:column of parent.
         
         @param row number of rows
-        @rtype int
+        @type int
         @param column number of columns
         @type int
         @param parent the model parent
@@ -425,7 +425,7 @@
         @rtype str, QBrush or None
         """
         if role == Qt.DisplayRole:
-            return self.tr('Variable name')
+            return self.tr("Variable Name")
         elif role == Qt.BackgroundRole:
             if index.row() >= 2:
                 return self.bgColorChanged
--- a/eric6/Preferences/ConfigurationPages/DebuggerGeneralPage.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/DebuggerGeneralPage.ui	Mon May 20 22:44:12 2019 +0200
@@ -666,14 +666,14 @@
            <item row="1" column="0">
             <widget class="QLabel" name="label_bgChangedItems">
              <property name="text">
-              <string>Background colour of changed elements:</string>
+              <string>Changed elements:</string>
              </property>
             </widget>
            </item>
            <item row="0" column="0">
             <widget class="QLabel" name="label_bgFirstLoaded">
              <property name="text">
-              <string>Background colour of first opened elements:</string>
+              <string>First time opened elements:</string>
              </property>
             </widget>
            </item>
--- a/eric6/Preferences/ConfigurationPages/EditorTypingPage.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/EditorTypingPage.py	Mon May 20 22:44:12 2019 +0200
@@ -53,10 +53,10 @@
             Preferences.getEditorTyping("Python/DedentElse"))
         self.pythonDedentExceptCheckBox.setChecked(
             Preferences.getEditorTyping("Python/DedentExcept"))
-        self.pythonDedentExceptPy24CheckBox.setChecked(
-            Preferences.getEditorTyping("Python/Py24StyleTry"))
         self.pythonInsertImportCheckBox.setChecked(
             Preferences.getEditorTyping("Python/InsertImport"))
+        self.pythonImportBraceTypeCheckBox.setChecked(
+            Preferences.getEditorTyping("Python/ImportBraceType"))
         self.pythonInsertSelfCheckBox.setChecked(
             Preferences.getEditorTyping("Python/InsertSelf"))
         self.pythonInsertBlankCheckBox.setChecked(
@@ -113,12 +113,12 @@
             "Python/DedentExcept",
             self.pythonDedentExceptCheckBox.isChecked())
         Preferences.setEditorTyping(
-            "Python/Py24StyleTry",
-            self.pythonDedentExceptPy24CheckBox.isChecked())
-        Preferences.setEditorTyping(
             "Python/InsertImport",
             self.pythonInsertImportCheckBox.isChecked())
         Preferences.setEditorTyping(
+            "Python/ImportBraceType",
+            self.pythonImportBraceTypeCheckBox.isChecked())
+        Preferences.setEditorTyping(
             "Python/InsertSelf",
             self.pythonInsertSelfCheckBox.isChecked())
         Preferences.setEditorTyping(
--- a/eric6/Preferences/ConfigurationPages/EditorTypingPage.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/EditorTypingPage.ui	Mon May 20 22:44:12 2019 +0200
@@ -162,10 +162,10 @@
           <item>
            <widget class="QCheckBox" name="pythonIndentBraceCheckBox">
             <property name="toolTip">
-             <string>Select to indent to the brace level after typing 'return'</string>
+             <string>Select to indent after typing 'return'</string>
             </property>
             <property name="text">
-             <string>After '(' indent to its level</string>
+             <string>Automatic indent after '('</string>
             </property>
            </widget>
           </item>
@@ -200,6 +200,16 @@
            </widget>
           </item>
           <item>
+           <widget class="QCheckBox" name="pythonInsertImportCheckBox">
+            <property name="toolTip">
+             <string>Select to insert the 'import ' string when the line starts with 'from ...'</string>
+            </property>
+            <property name="text">
+             <string>Automatic insertion of the 'import' string on 'from xxx'</string>
+            </property>
+           </widget>
+          </item>
+          <item>
            <layout class="QHBoxLayout">
             <item>
              <spacer>
@@ -218,15 +228,15 @@
              </spacer>
             </item>
             <item>
-             <widget class="QCheckBox" name="pythonDedentExceptPy24CheckBox">
+             <widget class="QCheckBox" name="pythonImportBraceTypeCheckBox">
               <property name="enabled">
                <bool>false</bool>
               </property>
               <property name="toolTip">
-               <string>Select to treat code as Python 2.4 code</string>
+               <string>Select to create import statements of the form 'from ... import (...)'</string>
               </property>
               <property name="text">
-               <string>Python 2.4 style 'try:' blocks</string>
+               <string>Generate '(...)' type import</string>
               </property>
              </widget>
             </item>
@@ -246,16 +256,6 @@
            </layout>
           </item>
           <item>
-           <widget class="QCheckBox" name="pythonInsertImportCheckBox">
-            <property name="toolTip">
-             <string>Select to insert the 'import' string</string>
-            </property>
-            <property name="text">
-             <string>Automatic insertion of the 'import' string on 'from xxx'</string>
-            </property>
-           </widget>
-          </item>
-          <item>
            <widget class="QCheckBox" name="pythonInsertSelfCheckBox">
             <property name="toolTip">
              <string>Select to insert the 'self' string when declaring a method</string>
@@ -349,10 +349,10 @@
           <item>
            <widget class="QCheckBox" name="rubyIndentBraceCheckBox">
             <property name="toolTip">
-             <string>Select to indent to the brace level after typing 'return'</string>
+             <string>Select to indent after typing 'return'</string>
             </property>
             <property name="text">
-             <string>After '(' indent to its level</string>
+             <string>Automatic indent after '('</string>
             </property>
            </widget>
           </item>
@@ -441,8 +441,8 @@
   <tabstop>pythonInsertQuoteCheckBox</tabstop>
   <tabstop>pythonDedentElseCheckBox</tabstop>
   <tabstop>pythonDedentExceptCheckBox</tabstop>
-  <tabstop>pythonDedentExceptPy24CheckBox</tabstop>
   <tabstop>pythonInsertImportCheckBox</tabstop>
+  <tabstop>pythonImportBraceTypeCheckBox</tabstop>
   <tabstop>pythonInsertSelfCheckBox</tabstop>
   <tabstop>pythonInsertBlankCheckBox</tabstop>
   <tabstop>pythonDedentDefCheckBox</tabstop>
@@ -464,12 +464,12 @@
    <slot>setEnabled(bool)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>99</x>
-     <y>114</y>
+     <x>118</x>
+     <y>113</y>
     </hint>
     <hint type="destinationlabel">
-     <x>116</x>
-     <y>144</y>
+     <x>162</x>
+     <y>139</y>
     </hint>
    </hints>
   </connection>
@@ -480,8 +480,8 @@
    <slot>setChecked(bool)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>196</x>
-     <y>114</y>
+     <x>215</x>
+     <y>113</y>
     </hint>
     <hint type="destinationlabel">
      <x>198</x>
@@ -490,18 +490,18 @@
    </hints>
   </connection>
   <connection>
-   <sender>pythonDedentExceptCheckBox</sender>
+   <sender>pythonInsertImportCheckBox</sender>
    <signal>toggled(bool)</signal>
-   <receiver>pythonDedentExceptPy24CheckBox</receiver>
+   <receiver>pythonImportBraceTypeCheckBox</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>69</x>
-     <y>279</y>
+     <x>82</x>
+     <y>271</y>
     </hint>
     <hint type="destinationlabel">
-     <x>80</x>
-     <y>305</y>
+     <x>92</x>
+     <y>297</y>
     </hint>
    </hints>
   </connection>
--- a/eric6/Preferences/ConfigurationPages/HelpAppearancePage.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/HelpAppearancePage.py	Mon May 20 22:44:12 2019 +0200
@@ -64,8 +64,6 @@
         
         self.styleSheetPicker.setText(Preferences.getHelp("UserStyleSheet"))
         
-        self.tabsCloseButtonCheckBox.setChecked(
-            Preferences.getUI("SingleCloseButton"))
         self.warnOnMultipleCloseCheckBox.setChecked(
             Preferences.getHelp("WarnOnMultipleClose"))
     
@@ -86,8 +84,6 @@
         )
         
         self.__displayMode = displayMode
-        if self.__displayMode != ConfigurationWidget.HelpBrowserMode:
-            self.tabsGroupBox.hide()
     
     def save(self):
         """
@@ -104,12 +100,6 @@
         
         self.saveColours(Preferences.setHelp)
         
-        from ..ConfigurationDialog import ConfigurationWidget
-        if self.__displayMode == ConfigurationWidget.HelpBrowserMode:
-            Preferences.setUI(
-                "SingleCloseButton",
-                self.tabsCloseButtonCheckBox.isChecked())
-        
         Preferences.setHelp(
             "WarnOnMultipleClose",
             self.warnOnMultipleCloseCheckBox.isChecked())
--- a/eric6/Preferences/ConfigurationPages/HelpAppearancePage.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/HelpAppearancePage.ui	Mon May 20 22:44:12 2019 +0200
@@ -195,13 +195,6 @@
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_2">
       <item>
-       <widget class="QCheckBox" name="tabsCloseButtonCheckBox">
-        <property name="text">
-         <string>Show only one close button instead of one for each tab</string>
-        </property>
-       </widget>
-      </item>
-      <item>
        <widget class="QCheckBox" name="warnOnMultipleCloseCheckBox">
         <property name="toolTip">
          <string>Select to issue a warning, if multiple tabs are about to be closed</string>
@@ -243,7 +236,6 @@
   <tabstop>secureURLsColourButton</tabstop>
   <tabstop>autoLoadImagesCheckBox</tabstop>
   <tabstop>styleSheetPicker</tabstop>
-  <tabstop>tabsCloseButtonCheckBox</tabstop>
   <tabstop>warnOnMultipleCloseCheckBox</tabstop>
  </tabstops>
  <resources/>
--- a/eric6/Preferences/ConfigurationPages/IconsPreviewDialog.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/IconsPreviewDialog.py	Mon May 20 22:44:12 2019 +0200
@@ -33,7 +33,7 @@
         self.setupUi(self)
         
         directory = QDir(dirName)
-        for icon in directory.entryList(["*.png"]):
+        for icon in directory.entryList(["*.svg", "*.svgz", "*.png"]):
             QListWidgetItem(
                 QIcon(os.path.join(dirName, icon)),
                 icon, self.iconView)
--- a/eric6/Preferences/ConfigurationPages/InterfacePage.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/InterfacePage.py	Mon May 20 22:44:12 2019 +0200
@@ -47,6 +47,7 @@
         # set initial values
         self.__populateStyleCombo()
         self.__populateLanguageCombo()
+        self.__populateShellPositionCombo()
         
         self.uiBrowsersListFoldersFirstCheckBox.setChecked(
             Preferences.getUI("BrowsersListFoldersFirst"))
@@ -65,23 +66,6 @@
             Preferences.getUI("CaptionFilenameLength"))
         self.styleSheetPicker.setText(Preferences.getUI("StyleSheet"))
         
-        if Preferences.getUI("TopLeftByLeft"):
-            self.tlLeftButton.setChecked(True)
-        else:
-            self.tlTopButton.setChecked(True)
-        if Preferences.getUI("BottomLeftByLeft"):
-            self.blLeftButton.setChecked(True)
-        else:
-            self.blBottomButton.setChecked(True)
-        if Preferences.getUI("TopRightByRight"):
-            self.trRightButton.setChecked(True)
-        else:
-            self.trTopButton.setChecked(True)
-        if Preferences.getUI("BottomRightByRight"):
-            self.brRightButton.setChecked(True)
-        else:
-            self.brTopButton.setChecked(True)
-        
         layoutType = Preferences.getUI("LayoutType")
         if layoutType == "Sidebars":
             index = 0
@@ -114,10 +98,6 @@
         self.numbersCheckBox.setChecked(
             Preferences.getUI("ShowNumbersViewer"))
         
-        self.tabsGroupBox.setEnabled(True)
-        self.tabsCloseButtonCheckBox.setChecked(
-            Preferences.getUI("SingleCloseButton"))
-        
         self.delaySpinBox.setValue(Preferences.getUI("SidebarDelay"))
         
     def save(self):
@@ -156,20 +136,6 @@
             "StyleSheet",
             self.styleSheetPicker.text())
         
-        # save the dockarea corner settings
-        Preferences.setUI(
-            "TopLeftByLeft",
-            self.tlLeftButton.isChecked())
-        Preferences.setUI(
-            "BottomLeftByLeft",
-            self.blLeftButton.isChecked())
-        Preferences.setUI(
-            "TopRightByRight",
-            self.trRightButton.isChecked())
-        Preferences.setUI(
-            "BottomRightByRight",
-            self.brRightButton.isChecked())
-        
         # save the language settings
         uiLanguageIndex = self.languageComboBox.currentIndex()
         if uiLanguageIndex:
@@ -188,6 +154,11 @@
             layoutType = "Sidebars"    # just in case
         Preferences.setUI("LayoutType", layoutType)
         
+        # save the shell position setting
+        shellPositionIndex = self.shellPositionComboBox.currentIndex()
+        shellPosition = self.shellPositionComboBox.itemData(shellPositionIndex)
+        Preferences.setUI("ShellPosition", shellPosition)
+        
         # save the integrated tools activation
         # left side
         Preferences.setUI(
@@ -220,10 +191,6 @@
             "ShowNumbersViewer",
             self.numbersCheckBox.isChecked())
         
-        Preferences.setUI(
-            "SingleCloseButton",
-            self.tabsCloseButtonCheckBox.isChecked())
-        
         Preferences.setUI("SidebarDelay", self.delaySpinBox.value())
         
     def __populateStyleCombo(self):
@@ -242,8 +209,7 @@
         
     def __populateLanguageCombo(self):
         """
-        Private method to initialize the language combobox of the Interface
-        configuration page.
+        Private method to initialize the language combo box.
         """
         self.languageComboBox.clear()
         
@@ -279,7 +245,21 @@
         for locale in localeList:
             self.languageComboBox.addItem(locales[locale], locale)
         self.languageComboBox.setCurrentIndex(currentIndex)
+    
+    def __populateShellPositionCombo(self):
+        """
+        Private method to initialize the shell position combo box.
+        """
+        self.shellPositionComboBox.addItem(self.tr("Left Side"), "left")
+        self.shellPositionComboBox.addItem(self.tr("Right Side"), "right")
+        self.shellPositionComboBox.addItem(self.tr("Bottom Side"), "bottom")
         
+        shellPosition = Preferences.getUI("ShellPosition")
+        if shellPosition not in ("left", "right", "bottom"):
+            shellPosition = "bottom"
+        index = self.shellPositionComboBox.findData(shellPosition)
+        self.shellPositionComboBox.setCurrentIndex(index)
+    
     @pyqtSlot()
     def on_resetLayoutButton_clicked(self):
         """
--- a/eric6/Preferences/ConfigurationPages/InterfacePage.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/InterfacePage.ui	Mon May 20 22:44:12 2019 +0200
@@ -7,10 +7,10 @@
     <x>0</x>
     <y>0</y>
     <width>557</width>
-    <height>1300</height>
+    <height>858</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_3">
+  <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -197,131 +197,6 @@
     </layout>
    </item>
    <item>
-    <widget class="QGroupBox" name="groupBox">
-     <property name="title">
-      <string>Dockarea Corner Usage</string>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <widget class="QGroupBox" name="groupBox_2">
-        <property name="title">
-         <string>Top Left Corner</string>
-        </property>
-        <layout class="QVBoxLayout">
-         <item>
-          <widget class="QRadioButton" name="tlTopButton">
-           <property name="toolTip">
-            <string>Select to assign the top left corner to the top dockarea</string>
-           </property>
-           <property name="text">
-            <string>Top dockarea</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="tlLeftButton">
-           <property name="toolTip">
-            <string>Select to assign the top left corner to the left dockarea</string>
-           </property>
-           <property name="text">
-            <string>Left dockarea</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QGroupBox" name="groupBox_5">
-        <property name="title">
-         <string>Top Right Corner</string>
-        </property>
-        <layout class="QVBoxLayout">
-         <item>
-          <widget class="QRadioButton" name="trTopButton">
-           <property name="toolTip">
-            <string>Select to assign the top right corner to the top dockarea</string>
-           </property>
-           <property name="text">
-            <string>Top dockarea</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="trRightButton">
-           <property name="toolTip">
-            <string>Select to assign the top right corner to the right dockarea</string>
-           </property>
-           <property name="text">
-            <string>Right dockarea</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QGroupBox" name="groupBox_6">
-        <property name="title">
-         <string>Bottom Left Corner</string>
-        </property>
-        <layout class="QVBoxLayout">
-         <item>
-          <widget class="QRadioButton" name="blBottomButton">
-           <property name="toolTip">
-            <string>Select to assign the bottom left corner to the bottom dockarea</string>
-           </property>
-           <property name="text">
-            <string>Bottom dockarea</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="blLeftButton">
-           <property name="toolTip">
-            <string>Select to assign the bottom left corner to the left dockarea</string>
-           </property>
-           <property name="text">
-            <string>Left dockarea</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QGroupBox" name="groupBox_7">
-        <property name="title">
-         <string>Bottom Right Corner</string>
-        </property>
-        <layout class="QVBoxLayout">
-         <item>
-          <widget class="QRadioButton" name="brTopButton">
-           <property name="toolTip">
-            <string>Select to assign the bottom right corner to the bottom dockarea</string>
-           </property>
-           <property name="text">
-            <string>Bottom dockarea</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="brRightButton">
-           <property name="toolTip">
-            <string>Select to assign the bottom right corner to the right dockarea</string>
-           </property>
-           <property name="text">
-            <string>Right dockarea</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
     <widget class="QGroupBox" name="groupBox_8">
      <property name="title">
       <string>Sidebars</string>
@@ -453,6 +328,20 @@
        </item>
       </widget>
      </item>
+     <item row="2" column="0">
+      <widget class="QLabel" name="label_6">
+       <property name="text">
+        <string>Shell Position:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QComboBox" name="shellPositionComboBox">
+       <property name="toolTip">
+        <string>Select the position for the Shell window</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>
@@ -582,22 +471,6 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="tabsGroupBox">
-     <property name="title">
-      <string>Tabs</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
-      <item>
-       <widget class="QCheckBox" name="tabsCloseButtonCheckBox">
-        <property name="text">
-         <string>Show only one close button instead of one for each tab</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
@@ -637,17 +510,10 @@
   <tabstop>filenameLengthSpinBox</tabstop>
   <tabstop>styleComboBox</tabstop>
   <tabstop>styleSheetPicker</tabstop>
-  <tabstop>tlTopButton</tabstop>
-  <tabstop>tlLeftButton</tabstop>
-  <tabstop>trTopButton</tabstop>
-  <tabstop>trRightButton</tabstop>
-  <tabstop>blBottomButton</tabstop>
-  <tabstop>blLeftButton</tabstop>
-  <tabstop>brTopButton</tabstop>
-  <tabstop>brRightButton</tabstop>
   <tabstop>delaySpinBox</tabstop>
   <tabstop>languageComboBox</tabstop>
   <tabstop>layoutComboBox</tabstop>
+  <tabstop>shellPositionComboBox</tabstop>
   <tabstop>templateViewerCheckBox</tabstop>
   <tabstop>fileBrowserCheckBox</tabstop>
   <tabstop>symbolsCheckBox</tabstop>
@@ -657,7 +523,6 @@
   <tabstop>cooperationCheckBox</tabstop>
   <tabstop>ircCheckBox</tabstop>
   <tabstop>numbersCheckBox</tabstop>
-  <tabstop>tabsCloseButtonCheckBox</tabstop>
   <tabstop>resetLayoutButton</tabstop>
  </tabstops>
  <resources/>
--- a/eric6/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Mon May 20 22:44:12 2019 +0200
@@ -90,8 +90,6 @@
         self.styleSheetPicker.setText(
             Preferences.getWebBrowser("UserStyleSheet"))
         
-        self.tabsCloseButtonCheckBox.setChecked(
-            Preferences.getUI("SingleCloseButton"))
         self.warnOnMultipleCloseCheckBox.setChecked(
             Preferences.getWebBrowser("WarnOnMultipleClose"))
         
@@ -120,8 +118,6 @@
         )
         
         self.__displayMode = displayMode
-        if self.__displayMode != ConfigurationWidget.WebBrowserMode:
-            self.tabsGroupBox.hide()
     
     def save(self):
         """
@@ -173,12 +169,6 @@
         
         self.saveColours(Preferences.setWebBrowser)
         
-        from ..ConfigurationDialog import ConfigurationWidget
-        if self.__displayMode == ConfigurationWidget.WebBrowserMode:
-            Preferences.setUI(
-                "SingleCloseButton",
-                self.tabsCloseButtonCheckBox.isChecked())
-        
         Preferences.setWebBrowser(
             "WarnOnMultipleClose",
             self.warnOnMultipleCloseCheckBox.isChecked())
--- a/eric6/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui	Mon May 20 22:44:12 2019 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>499</width>
-    <height>1116</height>
+    <height>905</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_5">
@@ -376,13 +376,6 @@
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_2">
       <item>
-       <widget class="QCheckBox" name="tabsCloseButtonCheckBox">
-        <property name="text">
-         <string>Show only one close button instead of one for each tab</string>
-        </property>
-       </widget>
-      </item>
-      <item>
        <widget class="QCheckBox" name="warnOnMultipleCloseCheckBox">
         <property name="toolTip">
          <string>Select to issue a warning, if multiple tabs are about to be closed</string>
@@ -491,7 +484,6 @@
   <tabstop>secureURLsColourButton</tabstop>
   <tabstop>autoLoadImagesCheckBox</tabstop>
   <tabstop>styleSheetPicker</tabstop>
-  <tabstop>tabsCloseButtonCheckBox</tabstop>
   <tabstop>warnOnMultipleCloseCheckBox</tabstop>
   <tabstop>scrollbarsCheckBox</tabstop>
   <tabstop>toolbarsCheckBox</tabstop>
--- a/eric6/Preferences/ConfigurationPages/WebBrowserPage.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/ConfigurationPages/WebBrowserPage.py	Mon May 20 22:44:12 2019 +0200
@@ -234,7 +234,7 @@
             self.webInspectorPortSpinBox.setValue(
                 Preferences.getWebBrowser("WebInspectorPort"))
         else:
-            self.webInspectorGroup.setEnabled(False)
+            self.webInspectorGroup.hide()
         
         if qVersionTuple() >= (5, 11, 0):
             self.protocolHandlerComboBox.setCurrentIndex(
--- a/eric6/Preferences/__init__.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Preferences/__init__.py	Mon May 20 22:44:12 2019 +0200
@@ -139,14 +139,9 @@
         "Style": "System",
         "StyleSheet": "",
         "ViewManager": "tabview",
-        "LayoutType": "Sidebars",
+        "LayoutType": "Sidebars",           # "Toolboxes" or "Sidebars"
+        "ShellPosition": "bottom",          # "left", "right" or "bottom"
         "SidebarDelay": 200,
-        # allowed values are "Toolboxes" and "Sidebars"
-        "LayoutShellEmbedded": 0,           # 0 = separate
-                                            # 1 = embedded in debug browser
-        "LayoutFileBrowserEmbedded": 0,     # 0 = separate
-                                            # 1 = embedded in debug browser
-                                            # 2 = embedded in project browser
         "BrowsersListFoldersFirst": True,
         "BrowsersHideNonPublic": False,
         "BrowsersListContentsByOccurrence": False,
@@ -160,10 +155,6 @@
         "CaptionShowsFilename": True,
         "CaptionFilenameLength": 100,
         "RecentNumber": 9,
-        "TopLeftByLeft": True,
-        "BottomLeftByLeft": False,
-        "TopRightByRight": True,
-        "BottomRightByRight": False,
         "TabViewManagerFilenameLength": 40,
         "TabViewManagerFilenameOnly": True,
         "ShowFilePreview": True,
@@ -209,11 +200,10 @@
         "ToolbarManagerState": QByteArray(),
         "PreviewSplitterState": QByteArray(),
         "ShowSplash": True,
-        "SingleCloseButton": False,
         "SplitOrientationVertical": False,
         "UseNativeMenuBar": True,
         
-        "PerformVersionCheck": 4,
+        "PerformVersionCheck": 3,
         # 0 = off
         # 1 = at startup
         # 2 = daily
@@ -242,9 +232,9 @@
         "PluginRepositoryUrl6":
         "https://eric-ide.python-projects.org/plugins6/repository.xml",
         "VersionsUrls6": [
+            "https://eric-ide.python-projects.org/versions/versions6",
             "https://die-offenbachs.homelinux.org/eric/versions/"
             "versions6",
-            "https://eric-ide.python-projects.org/versions/versions6",
         ],
         
         "OpenOnStartup": 0,        # 0 = nothing
@@ -708,8 +698,8 @@
         "Python/InsertQuote": True,
         "Python/DedentElse": True,
         "Python/DedentExcept": True,
-        "Python/Py24StyleTry": True,
         "Python/InsertImport": True,
+        "Python/ImportBraceType": False,
         "Python/InsertSelf": True,
         "Python/InsertBlank": True,
         "Python/ColonDetection": True,
@@ -1997,12 +1987,9 @@
                "SingleApplicationMode", "TabViewManagerFilenameOnly",
                "ShowFilePreview", "ShowFilePreviewJS", "ShowFilePreviewSSI",
                "CaptionShowsFilename", "ShowSplash",
-               "SingleCloseButton", "SplitOrientationVertical",
+               "SplitOrientationVertical",
                "UseProxy", "UseSystemProxy", "UseHttpProxyForAll",
-               "TopLeftByLeft", "BottomLeftByLeft",
-               "TopRightByRight", "BottomRightByRight",
                "RequestDownloadFilename",
-               "LayoutShellEmbedded", "LayoutFileBrowserEmbedded",
                "CheckErrorLog", "NotificationsEnabled", "DynamicOnlineCheck",
                "OpenCrashSessionOnStartup", "CrashSessionEnabled",
                "ShowCodeDocumentationViewer", "ShowPyPIPackageManager",
--- a/eric6/Project/Project.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/Project/Project.py	Mon May 20 22:44:12 2019 +0200
@@ -4247,28 +4247,31 @@
         self.dbgActGrp.setEnabled(False)
         self.pluginGrp.setEnabled(False)
         
-    def initMenu(self):
-        """
-        Public slot to initialize the project menu.
-        
-        @return the menu generated (QMenu)
+    def initMenus(self):
+        """
+        Public slot to initialize the project menus.
+        
+        @return tuple of generated menus
+        @rtype tuple of (QMenu, QMenu)
         """
         menu = QMenu(self.tr('&Project'), self.parent())
         self.recentMenu = QMenu(self.tr('Open &Recent Projects'), menu)
-        self.vcsMenu = QMenu(self.tr('&Version Control'), menu)
+        self.sessionMenu = QMenu(self.tr('Session'), menu)
+        self.debuggerMenu = QMenu(self.tr('Debugger'), menu)
+        
+        toolsMenu = QMenu(self.tr('Project-T&ools'), self.parent())
+        self.vcsMenu = QMenu(self.tr('&Version Control'), toolsMenu)
         self.vcsMenu.setTearOffEnabled(True)
         self.vcsProjectHelper.initMenu(self.vcsMenu)
         self.vcsMenu.setEnabled(self.vcsSoftwareAvailable())
-        self.checksMenu = QMenu(self.tr('Chec&k'), menu)
+        self.checksMenu = QMenu(self.tr('Chec&k'), toolsMenu)
         self.checksMenu.setTearOffEnabled(True)
-        self.menuShow = QMenu(self.tr('Sho&w'), menu)
-        self.graphicsMenu = QMenu(self.tr('&Diagrams'), menu)
-        self.sessionMenu = QMenu(self.tr('Session'), menu)
-        self.apidocMenu = QMenu(self.tr('Source &Documentation'), menu)
+        self.menuShow = QMenu(self.tr('Sho&w'), toolsMenu)
+        self.graphicsMenu = QMenu(self.tr('&Diagrams'), toolsMenu)
+        self.packagersMenu = QMenu(self.tr('Pac&kagers'), toolsMenu)
+        self.apidocMenu = QMenu(self.tr('Source &Documentation'), toolsMenu)
         self.apidocMenu.setTearOffEnabled(True)
-        self.debuggerMenu = QMenu(self.tr('Debugger'), menu)
-        self.packagersMenu = QMenu(self.tr('Pac&kagers'), menu)
-        self.makeMenu = QMenu(self.tr('Make'), menu)
+        self.makeMenu = QMenu(self.tr('Make'), toolsMenu)
         
         self.__menus = {
             "Main": menu,
@@ -4328,7 +4331,7 @@
         self.makeMenu.addActions(self.makeGrp.actions())
         self.makeMenu.addSeparator()
         
-        # build the main menu
+        # build the project main menu
         menu.setTearOffEnabled(True)
         menu.addActions(self.actGrp1.actions())
         self.menuRecentAct = menu.addMenu(self.recentMenu)
@@ -4340,20 +4343,6 @@
         menu.addSeparator()
         menu.addActions(self.actGrp2.actions())
         menu.addSeparator()
-        self.menuMakeAct = menu.addMenu(self.makeMenu)
-        menu.addSeparator()
-        self.menuDiagramAct = menu.addMenu(self.graphicsMenu)
-        menu.addSeparator()
-        self.menuCheckAct = menu.addMenu(self.checksMenu)
-        menu.addSeparator()
-        menu.addMenu(self.vcsMenu)
-        menu.addSeparator()
-        self.menuShowAct = menu.addMenu(self.menuShow)
-        menu.addSeparator()
-        self.menuApidocAct = menu.addMenu(self.apidocMenu)
-        menu.addSeparator()
-        self.menuPackagersAct = menu.addMenu(self.packagersMenu)
-        menu.addSeparator()
         menu.addAction(self.propsAct)
         menu.addAction(self.userPropsAct)
         menu.addAction(self.filetypesAct)
@@ -4362,6 +4351,23 @@
         self.menuDebuggerAct = menu.addMenu(self.debuggerMenu)
         self.menuSessionAct = menu.addMenu(self.sessionMenu)
         
+        # build the project tools menu
+        toolsMenu.setTearOffEnabled(True)
+        toolsMenu.addSeparator()
+        self.menuMakeAct = toolsMenu.addMenu(self.makeMenu)
+        toolsMenu.addSeparator()
+        self.menuDiagramAct = toolsMenu.addMenu(self.graphicsMenu)
+        toolsMenu.addSeparator()
+        self.menuCheckAct = toolsMenu.addMenu(self.checksMenu)
+        toolsMenu.addSeparator()
+        toolsMenu.addMenu(self.vcsMenu)
+        toolsMenu.addSeparator()
+        self.menuShowAct = toolsMenu.addMenu(self.menuShow)
+        toolsMenu.addSeparator()
+        self.menuApidocAct = toolsMenu.addMenu(self.apidocMenu)
+        toolsMenu.addSeparator()
+        self.menuPackagersAct = toolsMenu.addMenu(self.packagersMenu)
+        
         self.menuCheckAct.setEnabled(False)
         self.menuShowAct.setEnabled(False)
         self.menuDiagramAct.setEnabled(False)
@@ -4371,8 +4377,10 @@
         self.menuPackagersAct.setEnabled(False)
         self.menuMakeAct.setEnabled(False)
         
-        self.menu = menu
-        return menu
+        self.__menu = menu
+        self.__toolsMenu = toolsMenu
+        
+        return menu, toolsMenu
         
     def initToolbars(self, toolbarManager):
         """
--- a/eric6/QScintilla/Editor.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/QScintilla/Editor.py	Mon May 20 22:44:12 2019 +0200
@@ -8159,8 +8159,8 @@
         Private method to get the requested option via EditorConfig.
         
         If there is no EditorConfig defined, the equivalent built-in option
-        will be used (Preferences.getEditor(). The option must be given as the
-        Preferences option key. The mapping to the EditorConfig option name
+        will be used (Preferences.getEditor() ). The option must be given as
+        the Preferences option key. The mapping to the EditorConfig option name
         will be done within this method.
         
         @param option Preferences option key
--- a/eric6/QScintilla/Shell.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/QScintilla/Shell.py	Mon May 20 22:44:12 2019 +0200
@@ -89,7 +89,7 @@
     
     def shell(self):
         """
-        Public method to get a reference to the terminal widget.
+        Public method to get a reference to the shell widget.
         
         @return reference to the shell widget (Shell)
         """
--- a/eric6/QScintilla/TypingCompleters/CompleterPython.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/QScintilla/TypingCompleters/CompleterPython.py	Mon May 20 22:44:12 2019 +0200
@@ -16,7 +16,7 @@
 import re
 
 from PyQt5.QtCore import QRegExp
-from PyQt5.Qsci import QsciLexerPython
+from PyQt5.Qsci import QsciLexerPython, QsciScintilla
 
 from .CompleterBase import CompleterBase
 
@@ -78,10 +78,10 @@
             Preferences.getEditorTyping("Python/DedentElse")
         self.__dedentExcept = \
             Preferences.getEditorTyping("Python/DedentExcept")
-        self.__py24StyleTry = \
-            Preferences.getEditorTyping("Python/Py24StyleTry")
         self.__insertImport = \
             Preferences.getEditorTyping("Python/InsertImport")
+        self.__importBraceType = \
+            Preferences.getEditorTyping("Python/ImportBraceType")
         self.__insertSelf = \
             Preferences.getEditorTyping("Python/InsertSelf")
         self.__insertBlank = \
@@ -148,8 +148,12 @@
         elif char == ' ':
             txt = self.editor.text(line)[:col]
             if self.__insertImport and self.__importRX.exactMatch(txt):
-                self.editor.insert('import ')
-                self.editor.setCursorPosition(line, col + 7)
+                if self.__importBraceType:
+                    self.editor.insert('import ()')
+                    self.editor.setCursorPosition(line, col + 8)
+                else:
+                    self.editor.insert('import ')
+                    self.editor.setCursorPosition(line, col + 7)
             elif self.__dedentElse and self.__elifRX.exactMatch(txt):
                 self.__dedentToIf()
             elif self.__dedentExcept and self.__exceptRX.exactMatch(txt):
@@ -211,23 +215,31 @@
             if self.__indentBrace:
                 txt = self.editor.text(line - 1)
                 if re.search(":\r?\n", txt) is None:
-                    openCount = len(re.findall("[({[]", txt))
-                    closeCount = len(re.findall(r"[)}\]]", txt))
-                    if openCount > closeCount:
-                        openCount = 0
-                        closeCount = 0
-                        openList = list(re.finditer("[({[]", txt))
-                        index = len(openList) - 1
-                        while index > -1 and openCount == closeCount:
-                            lastOpenIndex = openList[index].start()
-                            txt2 = txt[lastOpenIndex:]
-                            openCount = len(re.findall("[({[]", txt2))
-                            closeCount = len(re.findall(r"[)}\]]", txt2))
-                            index -= 1
-                        if openCount > closeCount and lastOpenIndex > col:
-                            self.editor.insert(' ' * (lastOpenIndex - col + 1))
-                            self.editor.setCursorPosition(
-                                line, lastOpenIndex + 1)
+                    stxt = txt.strip()
+                    if stxt and stxt[-1] in ("(", "[", "{"):
+                        # indent one more level
+                        self.editor.indent(line)
+                        self.editor.editorCommand(QsciScintilla.SCI_VCHOME)
+                    else:
+                        # indent to the level of the opening brace
+                        openCount = len(re.findall("[({[]", txt))
+                        closeCount = len(re.findall(r"[)}\]]", txt))
+                        if openCount > closeCount:
+                            openCount = 0
+                            closeCount = 0
+                            openList = list(re.finditer("[({[]", txt))
+                            index = len(openList) - 1
+                            while index > -1 and openCount == closeCount:
+                                lastOpenIndex = openList[index].start()
+                                txt2 = txt[lastOpenIndex:]
+                                openCount = len(re.findall("[({[]", txt2))
+                                closeCount = len(re.findall(r"[)}\]]", txt2))
+                                index -= 1
+                            if openCount > closeCount and lastOpenIndex > col:
+                                self.editor.insert(
+                                    ' ' * (lastOpenIndex - col + 1))
+                                self.editor.setCursorPosition(
+                                    line, lastOpenIndex + 1)
     
     def __dedentToIf(self):
         """
@@ -313,26 +325,15 @@
         while tryLine >= 0:
             txt = self.editor.text(tryLine)
             edInd = self.editor.indentation(tryLine)
-            if self.__py24StyleTry:
-                if (self.__exceptcRX.indexIn(txt) == 0 or
-                    self.__exceptRX.indexIn(txt) == 0 or
-                    self.__finallyRX.indexIn(txt) == 0) and \
-                        edInd <= indentation:
-                    indentation = edInd - 1
-                elif self.__tryRX.indexIn(txt) == 0 and edInd <= indentation:
-                    self.editor.cancelList()
-                    self.editor.setIndentation(line, edInd)
-                    break
-            else:
-                if self.__finallyRX.indexIn(txt) == 0 and edInd <= indentation:
-                    indentation = edInd - 1
-                elif (self.__tryRX.indexIn(txt) == 0 or
-                      self.__exceptcRX.indexIn(txt) == 0 or
-                      self.__exceptRX.indexIn(txt) == 0) and \
-                        edInd <= indentation:
-                    self.editor.cancelList()
-                    self.editor.setIndentation(line, edInd)
-                    break
+            if self.__finallyRX.indexIn(txt) == 0 and edInd <= indentation:
+                indentation = edInd - 1
+            elif (self.__tryRX.indexIn(txt) == 0 or
+                  self.__exceptcRX.indexIn(txt) == 0 or
+                  self.__exceptRX.indexIn(txt) == 0) and \
+                    edInd <= indentation:
+                self.editor.cancelList()
+                self.editor.setIndentation(line, edInd)
+                break
             tryLine -= 1
     
     def __dedentDefStatement(self):
--- a/eric6/QScintilla/TypingCompleters/CompleterRuby.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/QScintilla/TypingCompleters/CompleterRuby.py	Mon May 20 22:44:12 2019 +0200
@@ -12,7 +12,7 @@
 import re
 
 from PyQt5.QtCore import QRegExp
-from PyQt5.Qsci import QsciLexerRuby
+from PyQt5.Qsci import QsciLexerRuby, QsciScintilla
 
 from .CompleterBase import CompleterBase
 
@@ -141,22 +141,30 @@
             elif self.__insertHereDoc and self.__hereRX.exactMatch(txt):
                 self.editor.insert(self.__hereRX.cap(1))
             elif self.__indentBrace and re.search(":\r?\n", txt) is None:
-                openCount = len(re.findall("[({[]", txt))
-                closeCount = len(re.findall(r"[)}\]]", txt))
-                if openCount > closeCount:
-                    openCount = 0
-                    closeCount = 0
-                    openList = list(re.finditer("[({[]", txt))
-                    index = len(openList) - 1
-                    while index > -1 and openCount == closeCount:
-                        lastOpenIndex = openList[index].start()
-                        txt2 = txt[lastOpenIndex:]
-                        openCount = len(re.findall("[({[]", txt2))
-                        closeCount = len(re.findall(r"[)}\]]", txt2))
-                        index -= 1
-                    if openCount > closeCount and lastOpenIndex > col:
-                        self.editor.insert(' ' * (lastOpenIndex - col + 1))
-                        self.editor.setCursorPosition(line, lastOpenIndex + 1)
+                stxt = txt.strip()
+                if stxt and stxt[-1] in ("(", "[", "{"):
+                    # indent one more level
+                    self.editor.indent(line)
+                    self.editor.editorCommand(QsciScintilla.SCI_VCHOME)
+                else:
+                    # indent to the level of the opening brace
+                    openCount = len(re.findall("[({[]", txt))
+                    closeCount = len(re.findall(r"[)}\]]", txt))
+                    if openCount > closeCount:
+                        openCount = 0
+                        closeCount = 0
+                        openList = list(re.finditer("[({[]", txt))
+                        index = len(openList) - 1
+                        while index > -1 and openCount == closeCount:
+                            lastOpenIndex = openList[index].start()
+                            txt2 = txt[lastOpenIndex:]
+                            openCount = len(re.findall("[({[]", txt2))
+                            closeCount = len(re.findall(r"[)}\]]", txt2))
+                            index -= 1
+                        if openCount > closeCount and lastOpenIndex > col:
+                            self.editor.insert(' ' * (lastOpenIndex - col + 1))
+                            self.editor.setCursorPosition(line,
+                                                          lastOpenIndex + 1)
     
     def __inComment(self, line, col):
         """
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/ThirdParty/EditorConfig/COPYING	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,11 @@
+Copyright 2011-2018 EditorConfig Team, including Hong Xu and Trey Hunner
+
+editorconfig-core-py is free software. You are free to copy,
+modify, and/or redistribute this work under the terms of the BSD
+2-clause license. See the file "LICENSE.BSD" for details.
+
+Parts of this work – the files "fnmatch.py" and "ini.py" -
+are derived from work with copyright held by the Python Software
+Foundation. You are free to copy, modify, and/or redistribute
+those parts under the terms of the Python Software Foundation
+license. See the file "LICENSE.PSF" for details.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/ThirdParty/EditorConfig/LICENSE.BSD	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,22 @@
+Copyright 2011-2018 EditorConfig Team, including Hong Xu and Trey Hunner
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/ThirdParty/EditorConfig/LICENSE.PSF	Mon May 20 22:44:12 2019 +0200
@@ -0,0 +1,192 @@
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF hereby
+grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
+analyze, test, perform and/or display publicly, prepare derivative works,
+distribute, and otherwise use Python alone or in any derivative version,
+provided, however, that PSF's License Agreement and PSF's notice of copyright,
+i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+Python Software Foundation; All Rights Reserved" are retained in Python alone or
+in any derivative version prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+
+4. PSF is making Python available to Licensee on an "AS IS"
+basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee.  This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
+-------------------------------------------
+
+BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
+
+1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
+office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
+Individual or Organization ("Licensee") accessing and otherwise using
+this software in source or binary form and its associated
+documentation ("the Software").
+
+2. Subject to the terms and conditions of this BeOpen Python License
+Agreement, BeOpen hereby grants Licensee a non-exclusive,
+royalty-free, world-wide license to reproduce, analyze, test, perform
+and/or display publicly, prepare derivative works, distribute, and
+otherwise use the Software alone or in any derivative version,
+provided, however, that the BeOpen Python License is retained in the
+Software, alone or in any derivative version prepared by Licensee.
+
+3. BeOpen is making the Software available to Licensee on an "AS IS"
+basis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
+SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
+AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
+DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+5. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+6. This License Agreement shall be governed by and interpreted in all
+respects by the law of the State of California, excluding conflict of
+law provisions.  Nothing in this License Agreement shall be deemed to
+create any relationship of agency, partnership, or joint venture
+between BeOpen and Licensee.  This License Agreement does not grant
+permission to use BeOpen trademarks or trade names in a trademark
+sense to endorse or promote products or services of Licensee, or any
+third party.  As an exception, the "BeOpen Python" logos available at
+http://www.pythonlabs.com/logos.html may be used according to the
+permissions granted on that web page.
+
+7. By copying, installing or otherwise using the software, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
+---------------------------------------
+
+1. This LICENSE AGREEMENT is between the Corporation for National
+Research Initiatives, having an office at 1895 Preston White Drive,
+Reston, VA 20191 ("CNRI"), and the Individual or Organization
+("Licensee") accessing and otherwise using Python 1.6.1 software in
+source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, CNRI
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python 1.6.1
+alone or in any derivative version, provided, however, that CNRI's
+License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
+1995-2001 Corporation for National Research Initiatives; All Rights
+Reserved" are retained in Python 1.6.1 alone or in any derivative
+version prepared by Licensee.  Alternately, in lieu of CNRI's License
+Agreement, Licensee may substitute the following text (omitting the
+quotes): "Python 1.6.1 is made available subject to the terms and
+conditions in CNRI's License Agreement.  This Agreement together with
+Python 1.6.1 may be located on the Internet using the following
+unique, persistent identifier (known as a handle): 1895.22/1013.  This
+Agreement may also be obtained from a proxy server on the Internet
+using the following URL: http://hdl.handle.net/1895.22/1013".
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python 1.6.1 or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python 1.6.1.
+
+4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
+basis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. This License Agreement shall be governed by the federal
+intellectual property law of the United States, including without
+limitation the federal copyright law, and, to the extent such
+U.S. federal law does not apply, by the law of the Commonwealth of
+Virginia, excluding Virginia's conflict of law provisions.
+Notwithstanding the foregoing, with regard to derivative works based
+on Python 1.6.1 that incorporate non-separable material that was
+previously distributed under the GNU General Public License (GPL), the
+law of the Commonwealth of Virginia shall govern this License
+Agreement only as to issues arising under or with respect to
+Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in this
+License Agreement shall be deemed to create any relationship of
+agency, partnership, or joint venture between CNRI and Licensee.  This
+License Agreement does not grant permission to use CNRI trademarks or
+trade name in a trademark sense to endorse or promote products or
+services of Licensee, or any third party.
+
+8. By clicking on the "ACCEPT" button where indicated, or by copying,
+installing or otherwise using Python 1.6.1, Licensee agrees to be
+bound by the terms and conditions of this License Agreement.
+
+        ACCEPT
+
+
+CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
+--------------------------------------------------
+
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
+The Netherlands.  All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
--- a/eric6/ThirdParty/EditorConfig/LICENSE.txt	Wed May 15 22:26:22 2019 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
---------------------------------------------
-
-1. This LICENSE AGREEMENT is between the Python Software Foundation
-("PSF"), and the Individual or Organization ("Licensee") accessing and
-otherwise using this software ("Python") in source or binary form and
-its associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement, PSF hereby
-grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
-analyze, test, perform and/or display publicly, prepare derivative works,
-distribute, and otherwise use Python alone or in any derivative version,
-provided, however, that PSF's License Agreement and PSF's notice of copyright,
-i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-Python Software Foundation; All Rights Reserved" are retained in Python alone or
-in any derivative version prepared by Licensee.
-
-3. In the event Licensee prepares a derivative work that is based on
-or incorporates Python or any part thereof, and wants to make
-the derivative work available to others as provided herein, then
-Licensee hereby agrees to include in any such work a brief summary of
-the changes made to Python.
-
-4. PSF is making Python available to Licensee on an "AS IS"
-basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
-OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-7. Nothing in this License Agreement shall be deemed to create any
-relationship of agency, partnership, or joint venture between PSF and
-Licensee.  This License Agreement does not grant permission to use PSF
-trademarks or trade name in a trademark sense to endorse or promote
-products or services of Licensee, or any third party.
-
-8. By copying, installing or otherwise using Python, Licensee
-agrees to be bound by the terms and conditions of this License
-Agreement.
-
-
-BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
--------------------------------------------
-
-BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
-
-1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
-office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
-Individual or Organization ("Licensee") accessing and otherwise using
-this software in source or binary form and its associated
-documentation ("the Software").
-
-2. Subject to the terms and conditions of this BeOpen Python License
-Agreement, BeOpen hereby grants Licensee a non-exclusive,
-royalty-free, world-wide license to reproduce, analyze, test, perform
-and/or display publicly, prepare derivative works, distribute, and
-otherwise use the Software alone or in any derivative version,
-provided, however, that the BeOpen Python License is retained in the
-Software, alone or in any derivative version prepared by Licensee.
-
-3. BeOpen is making the Software available to Licensee on an "AS IS"
-basis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
-SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
-AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
-DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-5. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-6. This License Agreement shall be governed by and interpreted in all
-respects by the law of the State of California, excluding conflict of
-law provisions.  Nothing in this License Agreement shall be deemed to
-create any relationship of agency, partnership, or joint venture
-between BeOpen and Licensee.  This License Agreement does not grant
-permission to use BeOpen trademarks or trade names in a trademark
-sense to endorse or promote products or services of Licensee, or any
-third party.  As an exception, the "BeOpen Python" logos available at
-http://www.pythonlabs.com/logos.html may be used according to the
-permissions granted on that web page.
-
-7. By copying, installing or otherwise using the software, Licensee
-agrees to be bound by the terms and conditions of this License
-Agreement.
-
-
-CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
----------------------------------------
-
-1. This LICENSE AGREEMENT is between the Corporation for National
-Research Initiatives, having an office at 1895 Preston White Drive,
-Reston, VA 20191 ("CNRI"), and the Individual or Organization
-("Licensee") accessing and otherwise using Python 1.6.1 software in
-source or binary form and its associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement, CNRI
-hereby grants Licensee a nonexclusive, royalty-free, world-wide
-license to reproduce, analyze, test, perform and/or display publicly,
-prepare derivative works, distribute, and otherwise use Python 1.6.1
-alone or in any derivative version, provided, however, that CNRI's
-License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
-1995-2001 Corporation for National Research Initiatives; All Rights
-Reserved" are retained in Python 1.6.1 alone or in any derivative
-version prepared by Licensee.  Alternately, in lieu of CNRI's License
-Agreement, Licensee may substitute the following text (omitting the
-quotes): "Python 1.6.1 is made available subject to the terms and
-conditions in CNRI's License Agreement.  This Agreement together with
-Python 1.6.1 may be located on the Internet using the following
-unique, persistent identifier (known as a handle): 1895.22/1013.  This
-Agreement may also be obtained from a proxy server on the Internet
-using the following URL: http://hdl.handle.net/1895.22/1013".
-
-3. In the event Licensee prepares a derivative work that is based on
-or incorporates Python 1.6.1 or any part thereof, and wants to make
-the derivative work available to others as provided herein, then
-Licensee hereby agrees to include in any such work a brief summary of
-the changes made to Python 1.6.1.
-
-4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
-basis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
-OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-7. This License Agreement shall be governed by the federal
-intellectual property law of the United States, including without
-limitation the federal copyright law, and, to the extent such
-U.S. federal law does not apply, by the law of the Commonwealth of
-Virginia, excluding Virginia's conflict of law provisions.
-Notwithstanding the foregoing, with regard to derivative works based
-on Python 1.6.1 that incorporate non-separable material that was
-previously distributed under the GNU General Public License (GPL), the
-law of the Commonwealth of Virginia shall govern this License
-Agreement only as to issues arising under or with respect to
-Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in this
-License Agreement shall be deemed to create any relationship of
-agency, partnership, or joint venture between CNRI and Licensee.  This
-License Agreement does not grant permission to use CNRI trademarks or
-trade name in a trademark sense to endorse or promote products or
-services of Licensee, or any third party.
-
-8. By clicking on the "ACCEPT" button where indicated, or by copying,
-installing or otherwise using Python 1.6.1, Licensee agrees to be
-bound by the terms and conditions of this License Agreement.
-
-        ACCEPT
-
-
-CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
---------------------------------------------------
-
-Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
-The Netherlands.  All rights reserved.
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Stichting Mathematisch
-Centrum or CWI not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
-THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
-FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
-OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
--- a/eric6/ThirdParty/EditorConfig/README.rst	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/ThirdParty/EditorConfig/README.rst	Mon May 20 22:44:12 2019 +0200
@@ -85,6 +85,4 @@
 License
 =======
 
-Unless otherwise stated, all files are distributed under the PSF license.  The
-odict library (editorconfig/odict.py) is distributed under the New BSD license.
-See LICENSE.txt file for details on PSF license.
+See COPYING file for licensing details.
--- a/eric6/ThirdParty/EditorConfig/editorconfig/__init__.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/ThirdParty/EditorConfig/editorconfig/__init__.py	Mon May 20 22:44:12 2019 +0200
@@ -2,7 +2,7 @@
 
 from editorconfig.versiontools import join_version
 
-VERSION = (0, 12, 0, "final")
+VERSION = (0, 12, 2, "final")
 
 __all__ = ['get_properties', 'EditorConfigError', 'exceptions']
 
--- a/eric6/ThirdParty/EditorConfig/editorconfig/exceptions.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/ThirdParty/EditorConfig/editorconfig/exceptions.py	Mon May 20 22:44:12 2019 +0200
@@ -1,6 +1,6 @@
 """EditorConfig exception classes
 
-Licensed under PSF License (see LICENSE.txt file).
+Licensed under Simplified BSD License (see LICENSE.BSD file).
 
 """
 
--- a/eric6/ThirdParty/EditorConfig/editorconfig/fnmatch.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/ThirdParty/EditorConfig/editorconfig/fnmatch.py	Mon May 20 22:44:12 2019 +0200
@@ -11,7 +11,7 @@
 
 Based on code from fnmatch.py file distributed with Python 2.6.
 
-Licensed under PSF License (see LICENSE.txt file).
+Licensed under PSF License (see LICENSE.PSF file).
 
 Changes to original fnmatch module:
 - translate function supports ``*`` and ``**`` similarly to fnmatch C library
--- a/eric6/ThirdParty/EditorConfig/editorconfig/handler.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/ThirdParty/EditorConfig/editorconfig/handler.py	Mon May 20 22:44:12 2019 +0200
@@ -3,7 +3,7 @@
 Provides ``EditorConfigHandler`` class for locating and parsing
 EditorConfig files relevant to a given filepath.
 
-Licensed under PSF License (see LICENSE.txt file).
+Licensed under Simplified BSD License (see LICENSE.BSD file).
 
 """
 
--- a/eric6/ThirdParty/EditorConfig/editorconfig/ini.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/ThirdParty/EditorConfig/editorconfig/ini.py	Mon May 20 22:44:12 2019 +0200
@@ -2,7 +2,7 @@
 
 Based on code from ConfigParser.py file distributed with Python 2.6.
 
-Licensed under PSF License (see LICENSE.txt file).
+Licensed under PSF License (see LICENSE.PSF file).
 
 Changes to original ConfigParser:
 
--- a/eric6/ThirdParty/EditorConfig/editorconfig/main.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/ThirdParty/EditorConfig/editorconfig/main.py	Mon May 20 22:44:12 2019 +0200
@@ -1,6 +1,6 @@
 """EditorConfig command line interface
 
-Licensed under PSF License (see LICENSE.txt file).
+Licensed under Simplified BSD License (see LICENSE.BSD file).
 
 """
 
--- a/eric6/UI/Browser.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/UI/Browser.py	Mon May 20 22:44:12 2019 +0200
@@ -90,8 +90,6 @@
                                                        'File-Browser'))
         self.setWindowIcon(UI.PixmapCache.getIcon("eric.png"))
         
-        self.__embeddedBrowser = Preferences.getUI("LayoutFileBrowserEmbedded")
-        
         self.__model = BrowserModel()
         self.__sortModel = BrowserSortFilterProxyModel()
         self.__sortModel.setSourceModel(self.__model)
@@ -243,21 +241,11 @@
         self.menu.addAction(
             QCoreApplication.translate('Browser', 'Copy Path to Clipboard'),
             self._copyToClipboard)
-        if self.__embeddedBrowser in [1, 2]:
-            self.menu.addSeparator()
-            self.menu.addAction(
-                QCoreApplication.translate('Browser', 'Configure...'),
-                self.__configure)
 
         # create the menu for multiple selected files
         self.multiMenu = QMenu(self)
         self.multiMenu.addAction(
             QCoreApplication.translate('Browser', 'Open'), self._openItem)
-        if self.__embeddedBrowser in [1, 2]:
-            self.multiMenu.addSeparator()
-            self.multiMenu.addAction(
-                QCoreApplication.translate('Browser', 'Configure...'),
-                self.__configure)
         
         # create the directory menu
         self.dirMenu = QMenu(self)
@@ -285,11 +273,6 @@
         self.dirMenu.addAction(
             QCoreApplication.translate('Browser', 'Copy Path to Clipboard'),
             self._copyToClipboard)
-        if self.__embeddedBrowser in [1, 2]:
-            self.dirMenu.addSeparator()
-            self.dirMenu.addAction(
-                QCoreApplication.translate('Browser', 'Configure...'),
-                self.__configure)
         
         # create the attribute menu
         self.gotoMenu = QMenu(QCoreApplication.translate('Browser', "Goto"),
@@ -303,22 +286,12 @@
             self.__newToplevelDir)
         self.attributeMenu.addSeparator()
         self.attributeMenu.addMenu(self.gotoMenu)
-        if self.__embeddedBrowser in [1, 2]:
-            self.attributeMenu.addSeparator()
-            self.attributeMenu.addAction(
-                QCoreApplication.translate('Browser', 'Configure...'),
-                self.__configure)
         
         # create the background menu
         self.backMenu = QMenu(self)
         self.backMenu.addAction(
             QCoreApplication.translate('Browser', 'New toplevel directory...'),
             self.__newToplevelDir)
-        if self.__embeddedBrowser in [1, 2]:
-            self.backMenu.addSeparator()
-            self.backMenu.addAction(
-                QCoreApplication.translate('Browser', 'Configure...'),
-                self.__configure)
 
     def mouseDoubleClickEvent(self, mouseEvent):
         """
@@ -749,17 +722,6 @@
         """
         self.__model.saveToplevelDirs()
     
-    def __configure(self):
-        """
-        Private method to open the configuration dialog.
-        """
-        if self.__embeddedBrowser == 1:
-            e5App().getObject("UserInterface")\
-                .showPreferences("debuggerGeneralPage")
-        elif self.__embeddedBrowser == 2:
-            e5App().getObject("UserInterface")\
-                .showPreferences("projectBrowserPage")
-    
     def keyboardSearch(self, search):
         """
         Public function to search the tree via the keyboard.
--- a/eric6/UI/SearchWidget.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/UI/SearchWidget.py	Mon May 20 22:44:12 2019 +0200
@@ -4,7 +4,7 @@
 #
 
 """
-Module implementing the search box for the shell, terminal and log viewer.
+Module implementing the search box for the shell and log viewer.
 """
 
 from __future__ import unicode_literals
@@ -17,7 +17,7 @@
 
 class SearchWidget(QWidget):
     """
-    Class implementing the search box for the shell, terminal and log viewer.
+    Class implementing the search box for the shell and log viewer.
     
     @signal searchNext(text, caseSensitive, wholeWord, regexp) emitted when the
         user pressed the next button (string, boolean, boolean)
--- a/eric6/UI/UserInterface.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/UI/UserInterface.py	Mon May 20 22:44:12 2019 +0200
@@ -316,6 +316,7 @@
         self.__notification = None
         self.__readingSession = False
         self.__versionsDialog = None
+        self.__configurationDialog = None
         
         # now setup the connections
         splash.showMessage(self.tr("Setting up connections..."))
@@ -724,6 +725,15 @@
         if interval > 0:
             QApplication.setKeyboardInputInterval(interval)
         
+    def networkAccessManager(self):
+        """
+        Public method to get a reference to the network access manager object.
+        
+        @return reference to the network access manager object
+        @rtype QNetworkAccessManager
+        """
+        return self.__networkManager
+    
     def __createLayout(self, debugServer):
         """
         Private method to create the layout of the various windows.
@@ -809,6 +819,10 @@
         self.__setupDockWindow(self.rToolboxDock, Qt.RightDockWidgetArea,
                                self.rToolbox, self.tr("Right Toolbox"))
         
+        ####################################################
+        ## Populate the left toolbox
+        ####################################################
+        
         # Create the project browser
         logging.debug("Creating Project Browser...")
         from Project.ProjectBrowser import ProjectBrowser
@@ -836,6 +850,10 @@
                                   UI.PixmapCache.getIcon("templateViewer.png"),
                                   self.tr("Template-Viewer"))
         
+        ####################################################
+        ## Populate the right toolbox
+        ####################################################
+        
         if Preferences.getUI("ShowCodeDocumentationViewer"):
             # Create the code documentation viewer
             logging.debug("Creating Code Documentation Viewer...")
@@ -845,10 +863,10 @@
                                   UI.PixmapCache.getIcon("codeDocuViewer.png"),
                                   self.tr("Code Documentation Viewer"))
         
-        # Create the debug viewer maybe without the embedded shell
+        # Create the debug viewer
         logging.debug("Creating Debug Viewer...")
         from Debugger.DebugViewer import DebugViewer
-        self.debugViewer = DebugViewer(debugServer, True, self.viewmanager)
+        self.debugViewer = DebugViewer(debugServer)
         self.rToolbox.addItem(self.debugViewer,
                               UI.PixmapCache.getIcon("debugViewer.png"),
                               self.tr("Debug-Viewer"))
@@ -889,6 +907,10 @@
                                   UI.PixmapCache.getIcon("irc.png"),
                                   self.tr("IRC"))
         
+        ####################################################
+        ## Populate the bottom toolbox
+        ####################################################
+        
         # Create the task viewer part of the user interface
         logging.debug("Creating Task Viewer...")
         from Tasks.TaskViewer import TaskViewer
@@ -905,16 +927,6 @@
                               UI.PixmapCache.getIcon("logViewer.png"),
                               self.tr("Log-Viewer"))
 
-        # Create the shell
-        logging.debug("Creating Shell...")
-        from QScintilla.Shell import ShellAssembly
-        self.shellAssembly = \
-            ShellAssembly(debugServer, self.viewmanager, self.project, True)
-        self.shell = self.shellAssembly.shell()
-        self.hToolbox.insertItem(0, self.shellAssembly,
-                                 UI.PixmapCache.getIcon("shell.png"),
-                                 self.tr("Shell"))
-        
         if Preferences.getUI("ShowFileBrowser"):
             # Create the file browser
             logging.debug("Creating File Browser...")
@@ -942,6 +954,33 @@
                                   UI.PixmapCache.getIcon("numbers.png"),
                                   self.tr("Numbers"))
         
+        ####################################################
+        ## Populate the configurable widgets
+        ####################################################
+        
+        # Create the shell
+        logging.debug("Creating Shell...")
+        self.__shellPosition = Preferences.getUI("ShellPosition")
+        if self.__shellPosition == "left":
+            self.__shellParent = self.lToolboxDock
+        elif self.__shellPosition == "right":
+            self.__shellParent = self.rToolboxDock
+        else:
+            self.__shellParent = self.hToolboxDock
+        from QScintilla.Shell import ShellAssembly
+        self.shellAssembly = \
+            ShellAssembly(debugServer, self.viewmanager, self.project, True)
+        self.shell = self.shellAssembly.shell()
+        self.__shellParent.widget().insertItem(
+            0, self.shellAssembly, UI.PixmapCache.getIcon("shell.png"),
+            self.tr("Shell"))
+        
+        ####################################################
+        ## Set the start index of each toolbox
+        ####################################################
+        
+        self.lToolbox.setCurrentIndex(0)
+        self.rToolbox.setCurrentIndex(0)
         self.hToolbox.setCurrentIndex(0)
         
     def __createSidebarsLayout(self, debugServer):
@@ -964,6 +1003,10 @@
         # Create the right sidebar
         self.rightSidebar = E5SideBar(E5SideBar.East, delay)
         
+        ####################################################
+        ## Populate the left side bar
+        ####################################################
+        
         # Create the project browser
         logging.debug("Creating Project Browser...")
         from Project.ProjectBrowser import ProjectBrowser
@@ -994,6 +1037,10 @@
                 UI.PixmapCache.getIcon("templateViewer.png"),
                 self.tr("Template-Viewer"))
 
+        ####################################################
+        ## Populate the right side bar
+        ####################################################
+        
         if Preferences.getUI("ShowCodeDocumentationViewer"):
             # Create the code documentation viewer
             logging.debug("Creating Code Documentation Viewer...")
@@ -1004,10 +1051,10 @@
                 UI.PixmapCache.getIcon("codeDocuViewer.png"),
                 self.tr("Code Documentation Viewer"))
         
-        # Create the debug viewer maybe without the embedded shell
+        # Create the debug viewer
         logging.debug("Creating Debug Viewer...")
         from Debugger.DebugViewer import DebugViewer
-        self.debugViewer = DebugViewer(debugServer, True, self.viewmanager)
+        self.debugViewer = DebugViewer(debugServer)
         self.rightSidebar.addTab(
             self.debugViewer, UI.PixmapCache.getIcon("debugViewer.png"),
             self.tr("Debug-Viewer"))
@@ -1048,6 +1095,10 @@
                 self.irc, UI.PixmapCache.getIcon("irc.png"),
                 self.tr("IRC"))
         
+        ####################################################
+        ## Populate the bottom side bar
+        ####################################################
+        
         # Create the task viewer part of the user interface
         logging.debug("Creating Task Viewer...")
         from Tasks.TaskViewer import TaskViewer
@@ -1064,16 +1115,6 @@
                                   UI.PixmapCache.getIcon("logViewer.png"),
                                   self.tr("Log-Viewer"))
 
-        # Create the shell
-        logging.debug("Creating Shell...")
-        from QScintilla.Shell import ShellAssembly
-        self.shellAssembly = \
-            ShellAssembly(debugServer, self.viewmanager, self.project, True)
-        self.shell = self.shellAssembly.shell()
-        self.bottomSidebar.insertTab(0, self.shellAssembly,
-                                     UI.PixmapCache.getIcon("shell.png"),
-                                     self.tr("Shell"))
-
         if Preferences.getUI("ShowFileBrowser"):
             # Create the file browser
             logging.debug("Creating File Browser...")
@@ -1101,6 +1142,33 @@
                                       UI.PixmapCache.getIcon("numbers.png"),
                                       self.tr("Numbers"))
         
+        ####################################################
+        ## Populate the configurable widgets
+        ####################################################
+        
+        # Create the shell
+        logging.debug("Creating Shell...")
+        self.__shellPosition = Preferences.getUI("ShellPosition")
+        if self.__shellPosition == "left":
+            self.__shellParent = self.leftSidebar
+        elif self.__shellPosition == "right":
+            self.__shellParent = self.rightSidebar
+        else:
+            self.__shellParent = self.bottomSidebar
+        from QScintilla.Shell import ShellAssembly
+        self.shellAssembly = \
+            ShellAssembly(debugServer, self.viewmanager, self.project, True)
+        self.shell = self.shellAssembly.shell()
+        self.__shellParent.insertTab(0, self.shellAssembly,
+                                     UI.PixmapCache.getIcon("shell.png"),
+                                     self.tr("Shell"))
+        
+        ####################################################
+        ## Set the start index of each side bar
+        ####################################################
+        
+        self.leftSidebar.setCurrentIndex(0)
+        self.rightSidebar.setCurrentIndex(0)
         self.bottomSidebar.setCurrentIndex(0)
         
         # create the central widget
@@ -1121,27 +1189,6 @@
         self.rightSidebar.setSplitter(self.rightSplitter)
         self.bottomSidebar.setSplitter(self.verticalSplitter)
         
-    def __configureDockareaCornerUsage(self):
-        """
-        Private method to configure the usage of the dockarea corners.
-        """
-        if Preferences.getUI("TopLeftByLeft"):
-            self.setCorner(Qt.TopLeftCorner, Qt.LeftDockWidgetArea)
-        else:
-            self.setCorner(Qt.TopLeftCorner, Qt.TopDockWidgetArea)
-        if Preferences.getUI("BottomLeftByLeft"):
-            self.setCorner(Qt.BottomLeftCorner, Qt.LeftDockWidgetArea)
-        else:
-            self.setCorner(Qt.BottomLeftCorner, Qt.BottomDockWidgetArea)
-        if Preferences.getUI("TopRightByRight"):
-            self.setCorner(Qt.TopRightCorner, Qt.RightDockWidgetArea)
-        else:
-            self.setCorner(Qt.TopRightCorner, Qt.TopDockWidgetArea)
-        if Preferences.getUI("BottomRightByRight"):
-            self.setCorner(Qt.BottomRightCorner, Qt.RightDockWidgetArea)
-        else:
-            self.setCorner(Qt.BottomRightCorner, Qt.BottomDockWidgetArea)
-        
     def addSideWidget(self, side, widget, icon, label):
         """
         Public method to add a widget to the sides.
@@ -2746,6 +2793,10 @@
            not Preferences.getUI("UseNativeMenuBar"):
             mb.setNativeMenuBar(False)
         
+        ##############################################################
+        ## File menu
+        ##############################################################
+        
         self.__menus["file"] = self.viewmanager.initFileMenu()
         mb.addMenu(self.__menus["file"])
         self.__menus["file"].addSeparator()
@@ -2759,20 +2810,122 @@
         self.__menus["file"].insertAction(sep, self.newWindowAct)
         self.__menus["file"].aboutToShow.connect(self.__showFileMenu)
         
+        ##############################################################
+        ## Edit menu
+        ##############################################################
+        
         self.__menus["edit"] = self.viewmanager.initEditMenu()
         mb.addMenu(self.__menus["edit"])
         
+        ##############################################################
+        ## Search menu
+        ##############################################################
+        
+        self.__menus["search"] = self.viewmanager.initSearchMenu()
+        mb.addMenu(self.__menus["search"])
+        
+        ##############################################################
+        ## View menu
+        ##############################################################
+        
         self.__menus["view"] = self.viewmanager.initViewMenu()
         mb.addMenu(self.__menus["view"])
+
+        ##############################################################
+        ## Bookmarks menu
+        ##############################################################
+        
+        self.__menus["bookmarks"] = self.viewmanager.initBookmarkMenu()
+        mb.addMenu(self.__menus["bookmarks"])
+        self.__menus["bookmarks"].setTearOffEnabled(True)
+        
+        ##############################################################
+        ## Multiproject menu
+        ##############################################################
+        
+        self.__menus["multiproject"] = self.multiProject.initMenu()
+        mb.addMenu(self.__menus["multiproject"])
+        
+        ##############################################################
+        ## Project menu
+        ##############################################################
+        
+        self.__menus["project"], self.__menus["project_tools"] = \
+            self.project.initMenus()
+        mb.addMenu(self.__menus["project"])
+        mb.addMenu(self.__menus["project_tools"])
+        
+        ##############################################################
+        ## Start and Debug menus
+        ##############################################################
         
         self.__menus["start"], self.__menus["debug"] = \
             self.debuggerUI.initMenus()
         mb.addMenu(self.__menus["start"])
         mb.addMenu(self.__menus["debug"])
         
+        ##############################################################
+        ## Extras menu
+        ##############################################################
+        
+        self.__menus["extras"] = QMenu(self.tr('E&xtras'), self)
+        self.__menus["extras"].setTearOffEnabled(True)
+        self.__menus["extras"].aboutToShow.connect(self.__showExtrasMenu)
+        mb.addMenu(self.__menus["extras"])
+        self.viewmanager.addToExtrasMenu(self.__menus["extras"])
+        
+        ##############################################################
+        ## Extras/Wizards menu
+        ##############################################################
+        
+        self.__menus["wizards"] = QMenu(self.tr('Wi&zards'), self)
+        self.__menus["wizards"].setTearOffEnabled(True)
+        self.__menus["wizards"].aboutToShow.connect(self.__showWizardsMenu)
+        self.wizardsMenuAct = self.__menus["extras"].addMenu(
+            self.__menus["wizards"])
+        self.wizardsMenuAct.setEnabled(False)
+        
+        ##############################################################
+        ## Extras/Macros menu
+        ##############################################################
+        
+        self.__menus["macros"] = self.viewmanager.initMacroMenu()
+        self.__menus["extras"].addMenu(self.__menus["macros"])
+        self.__menus["extras"].addSeparator()
+        
+        ##############################################################
+        ## Extras/VirtualEnv Manager menu entries
+        ##############################################################
+        
+        self.__menus["extras"].addAction(self.virtualenvManagerAct)
+        self.__menus["extras"].addAction(self.virtualenvConfigAct)
+        self.__menus["extras"].addSeparator()
+        
+        ##############################################################
+        ## Extras/Plugins menu
+        ##############################################################
+        
+        pluginsMenu = QMenu(self.tr('P&lugins'), self)
+        pluginsMenu.setIcon(UI.PixmapCache.getIcon("plugin.png"))
+        pluginsMenu.setTearOffEnabled(True)
+        pluginsMenu.addAction(self.pluginInfoAct)
+        pluginsMenu.addAction(self.pluginInstallAct)
+        pluginsMenu.addAction(self.pluginDeinstallAct)
+        pluginsMenu.addSeparator()
+        pluginsMenu.addAction(self.pluginRepoAct)
+        pluginsMenu.addSeparator()
+        pluginsMenu.addAction(
+            self.tr("Configure..."), self.__pluginsConfigure)
+        
+        self.__menus["extras"].addMenu(pluginsMenu)
+        self.__menus["extras"].addSeparator()
+    
+        ##############################################################
+        ## Extras/Unittest menu
+        ##############################################################
+        
         self.__menus["unittest"] = QMenu(self.tr('&Unittest'), self)
         self.__menus["unittest"].setTearOffEnabled(True)
-        mb.addMenu(self.__menus["unittest"])
         self.__menus["unittest"].addAction(self.utDialogAct)
         self.__menus["unittest"].addSeparator()
         self.__menus["unittest"].addAction(self.utRestartAct)
@@ -2781,39 +2934,28 @@
         self.__menus["unittest"].addAction(self.utScriptAct)
         self.__menus["unittest"].addAction(self.utProjectAct)
         
-        self.__menus["multiproject"] = self.multiProject.initMenu()
-        mb.addMenu(self.__menus["multiproject"])
-        
-        self.__menus["project"] = self.project.initMenu()
-        mb.addMenu(self.__menus["project"])
-        
-        self.__menus["extras"] = QMenu(self.tr('E&xtras'), self)
-        self.__menus["extras"].setTearOffEnabled(True)
-        self.__menus["extras"].aboutToShow.connect(self.__showExtrasMenu)
-        mb.addMenu(self.__menus["extras"])
-        self.viewmanager.addToExtrasMenu(self.__menus["extras"])
-        self.__menus["wizards"] = QMenu(self.tr('Wi&zards'), self)
-        self.__menus["wizards"].setTearOffEnabled(True)
-        self.__menus["wizards"].aboutToShow.connect(self.__showWizardsMenu)
-        self.wizardsMenuAct = self.__menus["extras"].addMenu(
-            self.__menus["wizards"])
-        self.wizardsMenuAct.setEnabled(False)
-        self.__menus["macros"] = self.viewmanager.initMacroMenu()
-        self.__menus["extras"].addMenu(self.__menus["macros"])
+        self.__menus["extras"].addMenu(self.__menus["unittest"])
         self.__menus["extras"].addSeparator()
-        self.__menus["extras"].addAction(self.virtualenvManagerAct)
-        self.__menus["extras"].addAction(self.virtualenvConfigAct)
+        
+        ##############################################################
+        ## Extras/Builtin,Plugin,User tools menus
+        ##############################################################
+        
         self.toolGroupsMenu = QMenu(self.tr("Select Tool Group"), self)
         self.toolGroupsMenu.aboutToShow.connect(self.__showToolGroupsMenu)
         self.toolGroupsMenu.triggered.connect(self.__toolGroupSelected)
         self.toolGroupsMenuTriggered = False
-        self.__menus["extras"].addSeparator()
         self.__initToolsMenus(self.__menus["extras"])
         self.__menus["extras"].addSeparator()
         
+        ##############################################################
+        ## Settings menu
+        ##############################################################
+        
         self.__menus["settings"] = QMenu(self.tr('Se&ttings'), self)
         mb.addMenu(self.__menus["settings"])
         self.__menus["settings"].setTearOffEnabled(True)
+        
         self.__menus["settings"].addAction(self.prefAct)
         self.__menus["settings"].addAction(self.prefExportAct)
         self.__menus["settings"].addAction(self.prefImportAct)
@@ -2836,11 +2978,19 @@
         self.__menus["settings"].addSeparator()
         self.__menus["settings"].addAction(self.clearPrivateDataAct)
         
+        ##############################################################
+        ## Window menu
+        ##############################################################
+        
         self.__menus["window"] = QMenu(self.tr('&Window'), self)
         mb.addMenu(self.__menus["window"])
         self.__menus["window"].setTearOffEnabled(True)
         self.__menus["window"].aboutToShow.connect(self.__showWindowMenu)
         
+        ##############################################################
+        ## Window/Windows menu
+        ##############################################################
+        
         self.__menus["subwindow"] = QMenu(self.tr("&Windows"),
                                           self.__menus["window"])
         self.__menus["subwindow"].setTearOffEnabled(True)
@@ -2850,6 +3000,8 @@
         except AttributeError:
             # Qt4
             pass
+        if self.__shellPosition == "left":
+            self.__menus["subwindow"].addAction(self.shellActivateAct)
         self.__menus["subwindow"].addAction(self.pbActivateAct)
         self.__menus["subwindow"].addAction(self.mpbActivateAct)
         if self.templateViewer is not None:
@@ -2864,7 +3016,8 @@
         except AttributeError:
             # Qt4
             self.__menus["subwindow"].addSeparator()
-        self.__menus["subwindow"].addAction(self.shellActivateAct)
+        if self.__shellPosition == "bottom":
+            self.__menus["subwindow"].addAction(self.shellActivateAct)
         self.__menus["subwindow"].addAction(self.taskViewerActivateAct)
         self.__menus["subwindow"].addAction(self.logViewerActivateAct)
         if self.numbersViewer is not None:
@@ -2875,6 +3028,8 @@
             # Qt4
             self.__menus["subwindow"].addSeparator()
         # right side
+        if self.__shellPosition == "right":
+            self.__menus["subwindow"].addAction(self.shellActivateAct)
         if self.codeDocumentationViewer is not None:
             self.__menus["subwindow"].addAction(
                 self.tr("Code Documentation Viewer"),
@@ -2899,6 +3054,10 @@
             # Qt4
             self.__menus["subwindow"].addSeparator()
         
+        ##############################################################
+        ## Window/Toolbars menu
+        ##############################################################
+        
         self.__menus["toolbars"] = \
             QMenu(self.tr("&Toolbars"), self.__menus["window"])
         self.__menus["toolbars"].setTearOffEnabled(True)
@@ -2907,24 +3066,12 @@
         
         self.__showWindowMenu()  # to initialize these actions
 
-        self.__menus["bookmarks"] = self.viewmanager.initBookmarkMenu()
-        mb.addMenu(self.__menus["bookmarks"])
-        self.__menus["bookmarks"].setTearOffEnabled(True)
-
-        self.__menus["plugins"] = QMenu(self.tr('P&lugins'), self)
-        mb.addMenu(self.__menus["plugins"])
-        self.__menus["plugins"].setTearOffEnabled(True)
-        self.__menus["plugins"].addAction(self.pluginInfoAct)
-        self.__menus["plugins"].addAction(self.pluginInstallAct)
-        self.__menus["plugins"].addAction(self.pluginDeinstallAct)
-        self.__menus["plugins"].addSeparator()
-        self.__menus["plugins"].addAction(self.pluginRepoAct)
-        self.__menus["plugins"].addSeparator()
-        self.__menus["plugins"].addAction(
-            self.tr("Configure..."), self.__pluginsConfigure)
-
         mb.addSeparator()
 
+        ##############################################################
+        ## Help menu
+        ##############################################################
+        
         self.__menus["help"] = QMenu(self.tr('&Help'), self)
         mb.addMenu(self.__menus["help"])
         self.__menus["help"].setTearOffEnabled(True)
@@ -3218,7 +3365,7 @@
         self.__statusBar.addPermanentWidget(self.sbZoom)
         self.sbZoom.setWhatsThis(self.tr(
             """<p>This part of the status bar allows zooming the current"""
-            """ editor, shell or terminal.</p>"""
+            """ editor or shell.</p>"""
         ))
         
         self.viewmanager.setSbInfo(
@@ -4085,7 +4232,17 @@
                     state = self.profiles[name][2][5]
                     if not state.isEmpty():
                         self.rightSidebar.restoreState(state)
-                self.__configureDockareaCornerUsage()
+                
+                if self.__layoutType == "Toolboxes":
+                    # set the corner usages
+                    self.setCorner(Qt.TopLeftCorner,
+                                   Qt.LeftDockWidgetArea)
+                    self.setCorner(Qt.BottomLeftCorner,
+                                   Qt.LeftDockWidgetArea)
+                    self.setCorner(Qt.TopRightCorner,
+                                   Qt.RightDockWidgetArea)
+                    self.setCorner(Qt.BottomRightCorner,
+                                   Qt.RightDockWidgetArea)
             
             # step 3: activate the windows of the new profile
             if self.__layoutType == "Toolboxes":
@@ -4196,8 +4353,6 @@
         elif self.__layoutType == "Sidebars":
             self.leftSidebar.show()
             self.leftSidebar.setCurrentWidget(self.projectBrowser)
-        else:
-            self.projectBrowser.show()
         self.projectBrowser.currentWidget().setFocus(
             Qt.ActiveWindowFocusReason)
         
@@ -4211,8 +4366,6 @@
         elif self.__layoutType == "Sidebars":
             self.leftSidebar.show()
             self.leftSidebar.setCurrentWidget(self.multiProjectBrowser)
-        else:
-            self.multiProjectBrowser.show()
         self.multiProjectBrowser.setFocus(Qt.ActiveWindowFocusReason)
         
     def activateDebugViewer(self):
@@ -4225,8 +4378,6 @@
         elif self.__layoutType == "Sidebars":
             self.rightSidebar.show()
             self.rightSidebar.setCurrentWidget(self.debugViewer)
-        else:
-            self.debugViewer.show()
         self.debugViewer.currentWidget().setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateShell(self):
@@ -4234,13 +4385,11 @@
         Private slot to handle the activation of the Shell window.
         """
         if self.__layoutType == "Toolboxes":
-            self.hToolboxDock.show()
-            self.hToolbox.setCurrentWidget(self.shellAssembly)
+            self.__shellParent.show()
+            self.__shellParent.widget().setCurrentWidget(self.shellAssembly)
         elif self.__layoutType == "Sidebars":
-            self.bottomSidebar.show()
-            self.bottomSidebar.setCurrentWidget(self.shellAssembly)
-        else:
-            self.shell.show()
+            self.__shellParent.show()
+            self.__shellParent.setCurrentWidget(self.shellAssembly)
         self.shell.setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateLogViewer(self):
@@ -4253,8 +4402,6 @@
         elif self.__layoutType == "Sidebars":
             self.bottomSidebar.show()
             self.bottomSidebar.setCurrentWidget(self.logViewer)
-        else:
-            self.logViewer.show()
         self.logViewer.setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateTaskViewer(self):
@@ -4267,8 +4414,6 @@
         elif self.__layoutType == "Sidebars":
             self.bottomSidebar.show()
             self.bottomSidebar.setCurrentWidget(self.taskViewer)
-        else:
-            self.taskViewer.show()
         self.taskViewer.setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateTemplateViewer(self):
@@ -4282,8 +4427,6 @@
             elif self.__layoutType == "Sidebars":
                 self.leftSidebar.show()
                 self.leftSidebar.setCurrentWidget(self.templateViewer)
-            else:
-                self.templateViewer.show()
             self.templateViewer.setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateBrowser(self):
@@ -4297,8 +4440,6 @@
             elif self.__layoutType == "Sidebars":
                 self.leftSidebar.show()
                 self.leftSidebar.setCurrentWidget(self.browser)
-            else:
-                self.browser.show()
             self.browser.setFocus(Qt.ActiveWindowFocusReason)
         
     def __toggleLeftToolbox(self):
@@ -4387,8 +4528,6 @@
             elif self.__layoutType == "Sidebars":
                 self.rightSidebar.show()
                 self.rightSidebar.setCurrentWidget(self.cooperation)
-            else:
-                self.cooperation.show()
             self.cooperation.setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateIRC(self):
@@ -4402,8 +4541,6 @@
             elif self.__layoutType == "Sidebars":
                 self.rightSidebar.show()
                 self.rightSidebar.setCurrentWidget(self.irc)
-            else:
-                self.irc.show()
             self.irc.setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateSymbolsViewer(self):
@@ -4417,8 +4554,6 @@
             elif self.__layoutType == "Sidebars":
                 self.leftSidebar.show()
                 self.leftSidebar.setCurrentWidget(self.symbolsViewer)
-            else:
-                self.symbolsViewer.show()
             self.symbolsViewer.setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateNumbersViewer(self):
@@ -4432,8 +4567,6 @@
             elif self.__layoutType == "Sidebars":
                 self.bottomSidebar.show()
                 self.bottomSidebar.setCurrentWidget(self.numbersViewer)
-            else:
-                self.numbersViewer.show()
             self.numbersViewer.setFocus(Qt.ActiveWindowFocusReason)
         
     def __activateViewmanager(self):
@@ -4459,8 +4592,6 @@
                 self.rightSidebar.show()
                 self.rightSidebar.setCurrentWidget(
                     self.codeDocumentationViewer)
-            else:
-                self.codeDocumentationViewer.show()
             if switchFocus:
                 self.codeDocumentationViewer.setFocus(
                     Qt.ActiveWindowFocusReason)
@@ -4476,8 +4607,6 @@
             elif self.__layoutType == "Sidebars":
                 self.rightSidebar.show()
                 self.rightSidebar.setCurrentWidget(self.pipWidget)
-            else:
-                self.pipWidget.show()
             self.pipWidget.setFocus(Qt.ActiveWindowFocusReason)
     
     def __activateCondaWidget(self):
@@ -4491,8 +4620,6 @@
             elif self.__layoutType == "Sidebars":
                 self.rightSidebar.show()
                 self.rightSidebar.setCurrentWidget(self.condaWidget)
-            else:
-                self.condaWidget.show()
             self.condaWidget.setFocus(Qt.ActiveWindowFocusReason)
     
     def __toggleWindow(self, w):
@@ -5853,28 +5980,39 @@
         
         @param pageName name of the configuration page to show (string)
         """
-        from Preferences.ConfigurationDialog import ConfigurationDialog
-        dlg = ConfigurationDialog(
-            self, 'Configuration',
-            expandedEntries=self.__expandedConfigurationEntries,
-        )
-        dlg.preferencesChanged.connect(self.__preferencesChanged)
-        dlg.masterPasswordChanged.connect(self.__masterPasswordChanged)
-        dlg.show()
-        if pageName is not None:
-            dlg.showConfigurationPageByName(pageName)
-        elif self.__lastConfigurationPageName:
-            dlg.showConfigurationPageByName(self.__lastConfigurationPageName)
-        else:
-            dlg.showConfigurationPageByName("empty")
-        dlg.exec_()
-        QApplication.processEvents()
-        if dlg.result() == QDialog.Accepted:
-            dlg.setPreferences()
-            Preferences.syncPreferences()
-            self.__preferencesChanged()
-        self.__lastConfigurationPageName = dlg.getConfigurationPageName()
-        self.__expandedConfigurationEntries = dlg.getExpandedEntries()
+        if self.__configurationDialog is None:
+            # only one invocation at a time is allowed
+            from Preferences.ConfigurationDialog import ConfigurationDialog
+            self.__configurationDialog = ConfigurationDialog(
+                self, 'Configuration',
+                expandedEntries=self.__expandedConfigurationEntries,
+            )
+            self.__configurationDialog.preferencesChanged.connect(
+                self.__preferencesChanged)
+            self.__configurationDialog.masterPasswordChanged.connect(
+                self.__masterPasswordChanged)
+            self.__configurationDialog.show()
+            if pageName is not None:
+                self.__configurationDialog.showConfigurationPageByName(
+                    pageName)
+            elif self.__lastConfigurationPageName:
+                self.__configurationDialog.showConfigurationPageByName(
+                    self.__lastConfigurationPageName)
+            else:
+                self.__configurationDialog.showConfigurationPageByName("empty")
+            self.__configurationDialog.exec_()
+            QApplication.processEvents()
+            if self.__configurationDialog.result() == QDialog.Accepted:
+                self.__configurationDialog.setPreferences()
+                Preferences.syncPreferences()
+                self.__preferencesChanged()
+            self.__lastConfigurationPageName = \
+                self.__configurationDialog.getConfigurationPageName()
+            self.__expandedConfigurationEntries = \
+                self.__configurationDialog.getExpandedEntries()
+            
+            self.__configurationDialog.deleteLater()
+            self.__configurationDialog = None
         
     def __exportPreferences(self):
         """
@@ -5921,8 +6059,6 @@
         self.__httpAlternatives = Preferences.getUI("VersionsUrls6")
         self.performVersionCheck(False)
         
-        self.__configureDockareaCornerUsage()
-        
         from QScintilla.SpellChecker import SpellChecker
         SpellChecker.setDefaultLanguage(
             Preferences.getEditor("SpellCheckingDefaultLanguage"))
--- a/eric6/ViewManager/ViewManager.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/ViewManager/ViewManager.py	Mon May 20 22:44:12 2019 +0200
@@ -2770,27 +2770,6 @@
         autocompletionMenu.addAction(self.autoCompleteFromAPIsAct)
         autocompletionMenu.addAction(self.autoCompleteFromAllAct)
         
-        searchMenu = QMenu(
-            QCoreApplication.translate('ViewManager', '&Search'),
-            self.ui)
-        searchMenu.setTearOffEnabled(True)
-        searchMenu.addAction(self.quickSearchAct)
-        searchMenu.addAction(self.quickSearchBackAct)
-        searchMenu.addAction(self.searchAct)
-        searchMenu.addAction(self.searchNextAct)
-        searchMenu.addAction(self.searchPrevAct)
-        searchMenu.addAction(self.searchNextWordAct)
-        searchMenu.addAction(self.searchPrevWordAct)
-        searchMenu.addAction(self.replaceAct)
-        searchMenu.addSeparator()
-        searchMenu.addAction(self.searchClearMarkersAct)
-        searchMenu.addSeparator()
-        searchMenu.addAction(self.searchFilesAct)
-        searchMenu.addAction(self.replaceFilesAct)
-        searchMenu.addSeparator()
-        searchMenu.addAction(self.searchOpenFilesAct)
-        searchMenu.addAction(self.replaceOpenFilesAct)
-        
         menu = QMenu(QCoreApplication.translate('ViewManager', '&Edit'),
                      self.ui)
         menu.setTearOffEnabled(True)
@@ -2821,8 +2800,6 @@
         menu.addAction(self.calltipsAct)
         menu.addAction(self.codeInfoAct)
         menu.addSeparator()
-        menu.addMenu(searchMenu)
-        menu.addSeparator()
         menu.addAction(self.gotoAct)
         menu.addAction(self.gotoBraceAct)
         menu.addAction(self.gotoLastEditAct)
@@ -3351,6 +3328,36 @@
         ))
         self.replaceOpenFilesAct.triggered.connect(self.__replaceOpenFiles)
         self.searchActions.append(self.replaceOpenFilesAct)
+    
+    def initSearchMenu(self):
+        """
+        Public method to create the Search menu.
+        
+        @return the generated menu
+        @rtype QMenu
+        """
+        menu = QMenu(
+            QCoreApplication.translate('ViewManager', '&Search'),
+            self.ui)
+        menu.setTearOffEnabled(True)
+        menu.addAction(self.quickSearchAct)
+        menu.addAction(self.quickSearchBackAct)
+        menu.addAction(self.searchAct)
+        menu.addAction(self.searchNextAct)
+        menu.addAction(self.searchPrevAct)
+        menu.addAction(self.searchNextWordAct)
+        menu.addAction(self.searchPrevWordAct)
+        menu.addAction(self.replaceAct)
+        menu.addSeparator()
+        menu.addAction(self.searchClearMarkersAct)
+        menu.addSeparator()
+        menu.addAction(self.searchFilesAct)
+        menu.addAction(self.replaceFilesAct)
+        menu.addSeparator()
+        menu.addAction(self.searchOpenFilesAct)
+        menu.addAction(self.replaceOpenFilesAct)
+        
+        return menu
         
     def initSearchToolbars(self, toolbarManager):
         """
@@ -4375,7 +4382,7 @@
     
     def addToExtrasMenu(self, menu):
         """
-        Public method to add some actions to the extras menu.
+        Public method to add some actions to the Extras menu.
         
         @param menu reference to the menu to add actions to (QMenu)
         """
--- a/eric6/VirtualEnv/VirtualenvManager.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/VirtualEnv/VirtualenvManager.py	Mon May 20 22:44:12 2019 +0200
@@ -515,14 +515,22 @@
         else:
             return ""
     
-    def getVirtualenvNames(self):
+    def getVirtualenvNames(self, noRemote=False):
         """
         Public method to get a list of defined virtual environments.
         
+        @param noRemote flag indicating to exclude environments for remote
+            debugging
+        @type bool
         @return list of defined virtual environments
         @rtype list of str
         """
-        return list(self.__virtualEnvironments.keys())
+        environments = list(self.__virtualEnvironments.keys())
+        if noRemote:
+            environments = [name for name in environments
+                            if not self.isRemoteEnvironment(name)]
+        
+        return environments
     
     def getVirtualenvNamesForVariant(self, variant):
         """
--- a/eric6/WebBrowser/WebBrowserTabWidget.py	Wed May 15 22:26:22 2019 +0200
+++ b/eric6/WebBrowser/WebBrowserTabWidget.py	Mon May 20 22:44:12 2019 +0200
@@ -127,20 +127,8 @@
         self.__closedTabsButton.setEnabled(False)
         self.__rightCornerWidgetLayout.addWidget(self.__closedTabsButton)
         
-        self.__closeButton = QToolButton(self)
-        self.__closeButton.setIcon(UI.PixmapCache.getIcon("close.png"))