Merge with default branch. Py2 comp.

Tue, 28 May 2013 20:52:12 +0200

author
T.Rzepka <Tobias.Rzepka@gmail.com>
date
Tue, 28 May 2013 20:52:12 +0200
branch
Py2 comp.
changeset 2677
3d4277929fb3
parent 2670
e60ea6cb8e11 (current diff)
parent 2674
05d3ce1f737b (diff)
child 2678
6e40469b845b

Merge with default branch.

APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
APIs/Python3/eric5.bas file | annotate | diff | comparison | revisions
Debugger/CallStackViewer.py file | annotate | diff | comparison | revisions
Debugger/CallTraceViewer.py file | annotate | diff | comparison | revisions
Debugger/DebugUI.py file | annotate | diff | comparison | revisions
Debugger/DebugViewer.py file | annotate | diff | comparison | revisions
Debugger/EditWatchpointDialog.py file | annotate | diff | comparison | revisions
Debugger/ExceptionLogger.py file | annotate | diff | comparison | revisions
Debugger/VariablesViewer.py file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Globals.__init__.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Utilities.__init__.html file | annotate | diff | comparison | revisions
DocumentationTools/QtHelpGenerator.py file | annotate | diff | comparison | revisions
E5Gui/E5SideBar.py file | annotate | diff | comparison | revisions
E5Network/E5SslCertificatesInfoWidget.py file | annotate | diff | comparison | revisions
E5Network/E5SslInfoWidget.py file | annotate | diff | comparison | revisions
Globals/__init__.py file | annotate | diff | comparison | revisions
Helpviewer/HelpBrowserWV.py file | annotate | diff | comparison | revisions
Helpviewer/QtHelpFiltersDialog.py file | annotate | diff | comparison | revisions
Helpviewer/UrlBar/UrlBar.py file | annotate | diff | comparison | revisions
Network/IRC/IrcChannelWidget.py file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkWidget.py file | annotate | diff | comparison | revisions
Network/IRC/IrcWidget.py file | annotate | diff | comparison | revisions
Plugins/AboutPlugin/AboutDialog.py file | annotate | diff | comparison | revisions
Plugins/PluginEricdoc.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgGraftDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorGeneralPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorStylesPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EmailPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/HelpVirusTotalPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/InterfacePage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/QtPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/ShellPage.py file | annotate | diff | comparison | revisions
Preferences/ProgramsDialog.py file | annotate | diff | comparison | revisions
Preferences/ShortcutsDialog.py file | annotate | diff | comparison | revisions
Preferences/ViewProfileDialog.py file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
Project/ProjectBaseBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectBrowserModel.py file | annotate | diff | comparison | revisions
Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectInterfacesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectSourcesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
QScintilla/APIsManager.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPygments.py file | annotate | diff | comparison | revisions
QScintilla/MiniEditor.py file | annotate | diff | comparison | revisions
QScintilla/QsciScintillaCompat.py file | annotate | diff | comparison | revisions
QScintilla/SearchReplaceWidget.py file | annotate | diff | comparison | revisions
QScintilla/Shell.py file | annotate | diff | comparison | revisions
QScintilla/SortOptionsDialog.py file | annotate | diff | comparison | revisions
Toolbox/Startup.py file | annotate | diff | comparison | revisions
UI/BrowserModel.py file | annotate | diff | comparison | revisions
UI/CompareDialog.py file | annotate | diff | comparison | revisions
UI/DiffDialog.py file | annotate | diff | comparison | revisions
UI/FindFileNameDialog.py file | annotate | diff | comparison | revisions
UI/Previewer.py file | annotate | diff | comparison | revisions
UI/SymbolsWidget.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
Utilities/__init__.py file | annotate | diff | comparison | revisions
ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
eric5.e4p file | annotate | diff | comparison | revisions
eric5.py file | annotate | diff | comparison | revisions
eric5_configure.py file | annotate | diff | comparison | revisions
eric5_doc.py file | annotate | diff | comparison | revisions
eric5_editor.py file | annotate | diff | comparison | revisions
eric5_webbrowser.py file | annotate | diff | comparison | revisions
i18n/eric5_cs.ts file | annotate | diff | comparison | revisions
i18n/eric5_de.ts file | annotate | diff | comparison | revisions
i18n/eric5_en.ts file | annotate | diff | comparison | revisions
i18n/eric5_es.ts file | annotate | diff | comparison | revisions
i18n/eric5_fr.ts file | annotate | diff | comparison | revisions
i18n/eric5_it.ts file | annotate | diff | comparison | revisions
i18n/eric5_ru.ts file | annotate | diff | comparison | revisions
i18n/eric5_tr.ts file | annotate | diff | comparison | revisions
i18n/eric5_zh_CN.GB2312.ts file | annotate | diff | comparison | revisions
install.py file | annotate | diff | comparison | revisions
uninstall.py file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric5.api	Fri May 24 18:39:58 2013 +0200
+++ b/APIs/Python3/eric5.api	Tue May 28 20:52:12 2013 +0200
@@ -573,6 +573,13 @@
 eric5.Debugger.BreakPointViewer.BreakPointViewer.setModel?4(model)
 eric5.Debugger.BreakPointViewer.BreakPointViewer.sourceFile?7
 eric5.Debugger.BreakPointViewer.BreakPointViewer?1(parent=None)
+eric5.Debugger.CallStackViewer.CallStackViewer.FilenameRole?7
+eric5.Debugger.CallStackViewer.CallStackViewer.LinenoRole?7
+eric5.Debugger.CallStackViewer.CallStackViewer.frameSelected?7
+eric5.Debugger.CallStackViewer.CallStackViewer.setDebugger?4(debugUI)
+eric5.Debugger.CallStackViewer.CallStackViewer.setProjectMode?4(enabled)
+eric5.Debugger.CallStackViewer.CallStackViewer.sourceFile?7
+eric5.Debugger.CallStackViewer.CallStackViewer?1(debugServer, parent=None)
 eric5.Debugger.CallTraceViewer.CallTraceViewer.clear?4()
 eric5.Debugger.CallTraceViewer.CallTraceViewer.isCallTraceEnabled?4()
 eric5.Debugger.CallTraceViewer.CallTraceViewer.on_callTrace_itemDoubleClicked?4(item, column)
@@ -791,6 +798,7 @@
 eric5.Debugger.DebugViewer.DebugViewer.handleDebuggingStarted?4()
 eric5.Debugger.DebugViewer.DebugViewer.handleRawInput?4()
 eric5.Debugger.DebugViewer.DebugViewer.handleResetUI?4()
+eric5.Debugger.DebugViewer.DebugViewer.initCallStackViewer?4(projectMode)
 eric5.Debugger.DebugViewer.DebugViewer.isCallTraceEnabled?4()
 eric5.Debugger.DebugViewer.DebugViewer.preferencesChanged?4()
 eric5.Debugger.DebugViewer.DebugViewer.restoreCurrentPage?4()
@@ -1386,6 +1394,7 @@
 eric5.E5Gui.E5SideBar.E5SideBar.count?4()
 eric5.E5Gui.E5SideBar.E5SideBar.currentIndex?4()
 eric5.E5Gui.E5SideBar.E5SideBar.currentWidget?4()
+eric5.E5Gui.E5SideBar.E5SideBar.delay?4()
 eric5.E5Gui.E5SideBar.E5SideBar.enterEvent?4(event)
 eric5.E5Gui.E5SideBar.E5SideBar.eventFilter?4(obj, evt)
 eric5.E5Gui.E5SideBar.E5SideBar.expand?4()
@@ -1403,6 +1412,7 @@
 eric5.E5Gui.E5SideBar.E5SideBar.saveState?4()
 eric5.E5Gui.E5SideBar.E5SideBar.setCurrentIndex?4(index)
 eric5.E5Gui.E5SideBar.E5SideBar.setCurrentWidget?4(widget)
+eric5.E5Gui.E5SideBar.E5SideBar.setDelay?4(delay)
 eric5.E5Gui.E5SideBar.E5SideBar.setOrientation?4(orient)
 eric5.E5Gui.E5SideBar.E5SideBar.setSplitter?4(splitter)
 eric5.E5Gui.E5SideBar.E5SideBar.setTabEnabled?4(index, enabled)
@@ -1417,7 +1427,7 @@
 eric5.E5Gui.E5SideBar.E5SideBar.tabToolTip?4(index)
 eric5.E5Gui.E5SideBar.E5SideBar.tabWhatsThis?4(index)
 eric5.E5Gui.E5SideBar.E5SideBar.widget?4(index)
-eric5.E5Gui.E5SideBar.E5SideBar?1(orientation=None, parent=None)
+eric5.E5Gui.E5SideBar.E5SideBar?1(orientation=None, delay=200, parent=None)
 eric5.E5Gui.E5SingleApplication.E5SingleApplicationClient.processArgs?4(args)
 eric5.E5Gui.E5SingleApplication.E5SingleApplicationClient?1()
 eric5.E5Gui.E5SingleApplication.E5SingleApplicationServer.handleCommand?4(cmd, params)
@@ -1749,6 +1759,9 @@
 eric5.Globals.configDir?7
 eric5.Globals.findPythonInterpreters?4(pyVersion)
 eric5.Globals.getConfigDir?4()
+eric5.Globals.getPyQt4ModulesDirectory?4()
+eric5.Globals.getPythonModulesDirectory?4()
+eric5.Globals.getQtBinariesPath?4()
 eric5.Globals.isLinuxPlatform?4()
 eric5.Globals.isMacPlatform?4()
 eric5.Globals.isWindowsPlatform?4()
@@ -2473,6 +2486,7 @@
 eric5.Helpviewer.HelpBrowserWV.HelpWebPage.getAdBlockedPageEntries?4()
 eric5.Helpviewer.HelpBrowserWV.HelpWebPage.getSslCertificate?4()
 eric5.Helpviewer.HelpBrowserWV.HelpWebPage.getSslCertificateChain?4()
+eric5.Helpviewer.HelpBrowserWV.HelpWebPage.getSslConfiguration?4()
 eric5.Helpviewer.HelpBrowserWV.HelpWebPage.hasValidSslInfo?4()
 eric5.Helpviewer.HelpBrowserWV.HelpWebPage.pageAttributeId?4()
 eric5.Helpviewer.HelpBrowserWV.HelpWebPage.populateNetworkRequest?4(request)
@@ -5767,7 +5781,6 @@
 eric5.Preferences.ConfigurationPages.PythonPage.PythonPage.save?4()
 eric5.Preferences.ConfigurationPages.PythonPage.PythonPage?1()
 eric5.Preferences.ConfigurationPages.PythonPage.create?4(dlg)
-eric5.Preferences.ConfigurationPages.QtPage.QtPage.on_qt4Button_clicked?4()
 eric5.Preferences.ConfigurationPages.QtPage.QtPage.on_qt4PostfixEdit_textChanged?4(txt)
 eric5.Preferences.ConfigurationPages.QtPage.QtPage.on_qt4PrefixEdit_textChanged?4(txt)
 eric5.Preferences.ConfigurationPages.QtPage.QtPage.on_qt4TransButton_clicked?4()
@@ -6608,6 +6621,7 @@
 eric5.QScintilla.Editor.Editor.shouldAutosave?4()
 eric5.QScintilla.Editor.Editor.showMenu?7
 eric5.QScintilla.Editor.Editor.smartIndentLineOrSelection?4()
+eric5.QScintilla.Editor.Editor.sortLines?4()
 eric5.QScintilla.Editor.Editor.startSharedEdit?4()
 eric5.QScintilla.Editor.Editor.streamCommentLine?4()
 eric5.QScintilla.Editor.Editor.streamCommentLineOrSelection?4()
@@ -6976,8 +6990,13 @@
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getFileName?4()
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getFoundTarget?4()
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getLineSeparator?4()
+eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getRectangularSelection?4()
+eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getSelectionCount?4()
+eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getSelectionN?4(index)
+eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getSelections?4()
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getZoom?4()
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.hasIndicator?4(indicator, pos)
+eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.hasSelection?4()
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.indentationGuideView?4()
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.indicatorDefine?4(indicator, style, color)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.lineAt?4(pos)
@@ -6997,6 +7016,7 @@
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.positionFromPoint?4(point)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.replaceTarget?4(replaceStr)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.scrollVertical?4(lines)
+eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.selectionIsRectangle?4()
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setContractedFolds?4(folds)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setCurrentIndicator?4(indicator)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setCursorFlashTime?4(time)
@@ -7007,8 +7027,10 @@
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setIndicator?4(indicator, sline, sindex, eline, eindex)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setIndicatorRange?4(indicator, spos, length)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setLexer?4(lex=None)
+eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setRectangularSelection?4(startLine, startIndex, endLine, endIndex)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setStyleBits?4(bits)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setStyling?4(length, style)
+eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.setVirtualSpaceOptions?4(options)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.showUserList?4(id, lst)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.startStyling?4(pos, mask)
 eric5.QScintilla.QsciScintillaCompat.QsciScintillaCompat.styleAt?4(pos)
@@ -7081,6 +7103,8 @@
 eric5.QScintilla.ShellHistoryDialog.ShellHistoryDialog.on_historyList_itemSelectionChanged?4()
 eric5.QScintilla.ShellHistoryDialog.ShellHistoryDialog.on_reloadButton_clicked?4()
 eric5.QScintilla.ShellHistoryDialog.ShellHistoryDialog?1(history, vm, shell)
+eric5.QScintilla.SortOptionsDialog.SortOptionsDialog.getData?4()
+eric5.QScintilla.SortOptionsDialog.SortOptionsDialog?1(parent=None)
 eric5.QScintilla.SpellChecker.SpellChecker._getDict?5(lang, pwl="", pel="")
 eric5.QScintilla.SpellChecker.SpellChecker._spelling_dict?8
 eric5.QScintilla.SpellChecker.SpellChecker._spelling_lang?8
@@ -7500,7 +7524,7 @@
 eric5.UI.BrowserModel.BrowserModel.removeToplevelDir?4(index)
 eric5.UI.BrowserModel.BrowserModel.rowCount?4(parent=QModelIndex())
 eric5.UI.BrowserModel.BrowserModel.saveToplevelDirs?4()
-eric5.UI.BrowserModel.BrowserModel?1(parent=None)
+eric5.UI.BrowserModel.BrowserModel?1(parent=None, nopopulate=False)
 eric5.UI.BrowserModel.BrowserSysPathItem?1(parent)
 eric5.UI.BrowserSortFilterProxyModel.BrowserSortFilterProxyModel.filterAcceptsRow?4(source_row, source_parent)
 eric5.UI.BrowserSortFilterProxyModel.BrowserSortFilterProxyModel.hasChildren?4(parent=QModelIndex())
@@ -8035,11 +8059,11 @@
 eric5.Utilities.getDirs?4(path, excludeDirs)
 eric5.Utilities.getEnvironmentEntry?4(key, default=None)
 eric5.Utilities.getExecutablePath?4(file)
+eric5.Utilities.getExecutablePaths?4(file)
 eric5.Utilities.getHomeDir?4()
 eric5.Utilities.getPercentReplacement?4(code)
 eric5.Utilities.getPercentReplacementHelp?4()
 eric5.Utilities.getPythonLibPath?4()
-eric5.Utilities.getPythonModulesDirectory?4()
 eric5.Utilities.getPythonVersion?4()
 eric5.Utilities.getQtMacBundle?4(toolname)
 eric5.Utilities.getRealName?4()
@@ -8643,6 +8667,7 @@
 eric5.patch_modpython.modDir?7
 eric5.patch_modpython.progName?7
 eric5.patch_modpython.usage?4(rcode=2)
+eric5.uninstall.exit?4(rcode=0)
 eric5.uninstall.initGlobals?4()
 eric5.uninstall.main?4(argv)
 eric5.uninstall.progLanguages?7
--- a/APIs/Python3/eric5.bas	Fri May 24 18:39:58 2013 +0200
+++ b/APIs/Python3/eric5.bas	Tue May 28 20:52:12 2013 +0200
@@ -58,6 +58,7 @@
 BrowserModel QAbstractItemModel
 BrowserSortFilterProxyModel QSortFilterProxyModel
 BrowserSysPathItem BrowserItem
+CallStackViewer QTreeWidget
 CallTraceViewer QWidget Ui_CallTraceViewer
 ChangeBookmarkCommand QUndoCommand
 ChatWidget QWidget Ui_ChatWidget
@@ -590,6 +591,7 @@
 SnapshotPreview QLabel
 SnapshotRegionGrabber QWidget
 SnapshotTimer QWidget
+SortOptionsDialog QDialog Ui_SortOptionsDialog
 SpecialArrayElementVarItem SpecialVarItem
 SpecialVarItem VariableItem
 SpeedDial QObject
--- a/DebugClients/Python/DebugBase.py	Fri May 24 18:39:58 2013 +0200
+++ b/DebugClients/Python/DebugBase.py	Tue May 28 20:52:12 2013 +0200
@@ -530,13 +530,21 @@
         stack = []
         while fr is not None:
             fname = self._dbgClient.absPath(self.fix_frame_filename(fr))
-            fline = fr.f_lineno
-            ffunc = fr.f_code.co_name
+            if not fname.startswith("<"):
+                fline = fr.f_lineno
+                ffunc = fr.f_code.co_name
+                
+                if ffunc == '?':
+                    ffunc = ''
             
-            if ffunc == '?':
-                ffunc = ''
-            
-            stack.append([fname, fline, ffunc])
+                if ffunc and not ffunc.startswith("<"):
+                    argInfo = inspect.getargvalues(fr)
+                    fargs = inspect.formatargvalues(argInfo[0], argInfo[1],
+                                                    argInfo[2], argInfo[3])
+                else:
+                    fargs = ""
+                
+            stack.append([fname, fline, ffunc, fargs])
             
             if fr == self._dbgClient.mainFrame:
                 fr = None
@@ -579,13 +587,21 @@
             # return from dispatch_call
             fr.f_trace = self.trace_dispatch
             fname = self._dbgClient.absPath(self.fix_frame_filename(fr))
-            fline = fr.f_lineno
-            ffunc = fr.f_code.co_name
-            
-            if ffunc == '?':
-                ffunc = ''
-            
-            stack.append([fname, fline, ffunc])
+            if not fname.startswith("<"):
+                fline = fr.f_lineno
+                ffunc = fr.f_code.co_name
+                
+                if ffunc == '?':
+                    ffunc = ''
+                
+                if ffunc and not ffunc.startswith("<"):
+                    argInfo = inspect.getargvalues(fr)
+                    fargs = inspect.formatargvalues(argInfo[0], argInfo[1],
+                                                    argInfo[2], argInfo[3])
+                else:
+                    fargs = ""
+                
+            stack.append([fname, fline, ffunc, fargs])
             
             if fr == self._dbgClient.mainFrame:
                 fr = None
@@ -653,16 +669,30 @@
                 frlist.reverse()
                 
                 self.currentFrame = frlist[0]
+                self.currentFrameLocals = frlist[0].f_locals
+                # remember the locals because it is reinitialized when accessed
                 
                 for fr in frlist:
                     filename = self._dbgClient.absPath(self.fix_frame_filename(fr))
-                    linenr = fr.f_lineno
                     
                     if os.path.basename(filename).startswith("DebugClient") or \
                        os.path.basename(filename) == "bdb.py":
                         break
                     
-                    exclist.append([filename, linenr])
+                    linenr = fr.f_lineno
+                    ffunc = fr.f_code.co_name
+                    
+                    if ffunc == '?':
+                        ffunc = ''
+                    
+                    if ffunc and not ffunc.startswith("<"):
+                        argInfo = inspect.getargvalues(fr)
+                        fargs = inspect.formatargvalues(argInfo[0], argInfo[1],
+                                                        argInfo[2], argInfo[3])
+                    else:
+                        fargs = ""
+                    
+                    exclist.append([filename, linenr, ffunc, fargs])
             
             self._dbgClient.write("%s%s\n" % (ResponseException, unicode(exclist)))
             
--- a/DebugClients/Python/DebugClientBase.py	Fri May 24 18:39:58 2013 +0200
+++ b/DebugClients/Python/DebugClientBase.py	Tue May 28 20:52:12 2013 +0200
@@ -1231,6 +1231,9 @@
         @param scope 1 to report global variables, 0 for local variables (int)
         @param filter the indices of variable types to be filtered (list of int)
         """
+        if self.currentThread is None:
+            return
+        
         if scope == 0:
             self.framenr = frmnr
         
@@ -1270,6 +1273,9 @@
         @param scope 1 to report global variables, 0 for local variables (int)
         @param filter the indices of variable types to be filtered (list of int)
         """
+        if self.currentThread is None:
+            return
+        
         f = self.currentThread.getCurrentFrame()
         
         while f is not None and frmnr > 0:
--- a/DebugClients/Python3/DebugBase.py	Fri May 24 18:39:58 2013 +0200
+++ b/DebugClients/Python3/DebugBase.py	Tue May 28 20:52:12 2013 +0200
@@ -539,13 +539,21 @@
         stack = []
         while fr is not None:
             fname = self._dbgClient.absPath(self.fix_frame_filename(fr))
-            fline = fr.f_lineno
-            ffunc = fr.f_code.co_name
-            
-            if ffunc == '?':
-                ffunc = ''
-            
-            stack.append([fname, fline, ffunc])
+            if not fname.startswith("<"):
+                fline = fr.f_lineno
+                ffunc = fr.f_code.co_name
+                
+                if ffunc == '?':
+                    ffunc = ''
+                
+                if ffunc and not ffunc.startswith("<"):
+                    argInfo = inspect.getargvalues(fr)
+                    fargs = inspect.formatargvalues(argInfo.args, argInfo.varargs,
+                                                    argInfo.keywords, argInfo.locals)
+                else:
+                    fargs = ""
+                
+                stack.append([fname, fline, ffunc, fargs])
             
             if fr == self._dbgClient.mainFrame:
                 fr = None
@@ -588,13 +596,21 @@
             # return from dispatch_call
             fr.f_trace = self.trace_dispatch
             fname = self._dbgClient.absPath(self.fix_frame_filename(fr))
-            fline = fr.f_lineno
-            ffunc = fr.f_code.co_name
-            
-            if ffunc == '?':
-                ffunc = ''
-            
-            stack.append([fname, fline, ffunc])
+            if not fname.startswith("<"):
+                fline = fr.f_lineno
+                ffunc = fr.f_code.co_name
+                
+                if ffunc == '?':
+                    ffunc = ''
+                
+                if ffunc and not ffunc.startswith("<"):
+                    argInfo = inspect.getargvalues(fr)
+                    fargs = inspect.formatargvalues(argInfo.args, argInfo.varargs,
+                                                    argInfo.keywords, argInfo.locals)
+                else:
+                    fargs = ""
+                
+                stack.append([fname, fline, ffunc, fargs])
             
             if fr == self._dbgClient.mainFrame:
                 fr = None
@@ -661,16 +677,30 @@
                 frlist.reverse()
                 
                 self.currentFrame = frlist[0]
+                self.currentFrameLocals = frlist[0].f_locals
+                # remember the locals because it is reinitialized when accessed
                 
                 for fr in frlist:
                     filename = self._dbgClient.absPath(self.fix_frame_filename(fr))
-                    linenr = fr.f_lineno
                     
                     if os.path.basename(filename).startswith("DebugClient") or \
                        os.path.basename(filename) == "bdb.py":
                         break
                     
-                    exclist.append([filename, linenr])
+                    linenr = fr.f_lineno
+                    ffunc = fr.f_code.co_name
+                    
+                    if ffunc == '?':
+                        ffunc = ''
+                    
+                    if ffunc and not ffunc.startswith("<"):
+                        argInfo = inspect.getargvalues(fr)
+                        fargs = inspect.formatargvalues(argInfo.args, argInfo.varargs,
+                                                        argInfo.keywords, argInfo.locals)
+                    else:
+                        fargs = ""
+                    
+                    exclist.append([filename, linenr, ffunc, fargs])
             
             self._dbgClient.write("{0}{1}\n".format(ResponseException, str(exclist)))
             
--- a/DebugClients/Python3/DebugClientBase.py	Fri May 24 18:39:58 2013 +0200
+++ b/DebugClients/Python3/DebugClientBase.py	Tue May 28 20:52:12 2013 +0200
@@ -1241,6 +1241,9 @@
         @param scope 1 to report global variables, 0 for local variables (int)
         @param filter the indices of variable types to be filtered (list of int)
         """
+        if self.currentThread is None:
+            return
+        
         if scope == 0:
             self.framenr = frmnr
         
@@ -1280,6 +1283,9 @@
         @param scope 1 to report global variables, 0 for local variables (int)
         @param filter the indices of variable types to be filtered (list of int)
         """
+        if self.currentThread is None:
+            return
+        
         f = self.currentThread.getCurrentFrame()
         
         while f is not None and frmnr > 0:
--- a/DebugClients/Ruby/Debuggee.rb	Fri May 24 18:39:58 2013 +0200
+++ b/DebugClients/Ruby/Debuggee.rb	Tue May 28 20:52:12 2013 +0200
@@ -500,7 +500,7 @@
                 exclist = ["%s" % $!.class, "%s" % $!, [file, line]]
                 @frames.each do |_binding, _file, _line, _id|
                     next if [_file, _line] == exclist[-1]
-                    exclist << [_file, _line]
+                    exclist << [_file, _line, '', '']
                 end
                 stdout.printf_excn(exclist)
             end
@@ -1051,7 +1051,7 @@
             for bind, file, line, id in frames
                 break unless bind
                 break if file =~ /\(eval\)/
-                fr_list << [file, line, id ? id.id2name : '']
+                fr_list << [file, line, id ? id.id2name : '', '']
             end
             
             @debugger.write("%s%s\n" % [ResponseLine, fr_list.inspect])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Debugger/CallStackViewer.py	Tue May 28 20:52:12 2013 +0200
@@ -0,0 +1,192 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Call Stack viewer widget.
+"""
+
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+
+from PyQt4.QtCore import pyqtSignal, Qt, QFileInfo
+from PyQt4.QtGui import QTreeWidget, QTreeWidgetItem, QMenu
+
+from E5Gui.E5Application import e5App
+from E5Gui import E5FileDialog, E5MessageBox
+
+import Utilities
+
+
+class CallStackViewer(QTreeWidget):
+    """
+    Class implementing the Call Stack viewer widget.
+    
+    @signal sourceFile(str, int) emitted to show the source of a stack entry
+    @signal frameSelected(int) emitted to signal the selection of a frame entry
+    """
+    sourceFile = pyqtSignal(str, int)
+    frameSelected = pyqtSignal(int)
+    
+    FilenameRole = Qt.UserRole + 1
+    LinenoRole = Qt.UserRole + 2
+    
+    def __init__(self, debugServer, parent=None):
+        """
+        Constructor
+        
+        @param debugServer reference to the debug server object (DebugServer)
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(CallStackViewer, self).__init__(parent)
+        
+        self.setHeaderHidden(True)
+        self.setAlternatingRowColors(True)
+        self.setItemsExpandable(False)
+        self.setRootIsDecorated(False)
+        
+        self.__menu = QMenu(self)
+        self.__sourceAct = self.__menu.addAction(
+            self.trUtf8("Show source"), self.__openSource)
+        self.__menu.addAction(self.trUtf8("Clear"), self.clear)
+        self.__menu.addSeparator()
+        self.__menu.addAction(self.trUtf8("Save"), self.__saveStackTrace)
+        self.setContextMenuPolicy(Qt.CustomContextMenu)
+        self.customContextMenuRequested.connect(self.__showContextMenu)
+        
+        self.__dbs = debugServer
+        
+        # file name, line number, function name, arguments
+        self.__entryFormat = self.trUtf8("File: {0}\nLine: {1}\n{2}{3}")
+        # file name, line number
+        self.__entryFormatShort = self.trUtf8("File: {0}\nLine: {1}")
+        
+        self.__projectMode = False
+        self.__project = None
+        
+        self.__dbs.clientStack.connect(self.__showCallStack)
+        self.itemDoubleClicked.connect(self.__itemDoubleClicked)
+    
+    def setDebugger(self, debugUI):
+        """
+        Public method to set a reference to the Debug UI.
+        
+        @param debugUI reference to the DebugUI object (DebugUI)
+        """
+        debugUI.clientStack.connect(self.__showCallStack)
+    
+    def setProjectMode(self, enabled):
+        """
+        Public slot to set the call trace viewer to project mode.
+        
+        In project mode the call trace info is shown with project relative
+        path names.
+        
+        @param enabled flag indicating to enable the project mode (boolean)
+        """
+        self.__projectMode = enabled
+        if enabled and self.__project is None:
+            self.__project = e5App().getObject("Project")
+    
+    def __showContextMenu(self, coord):
+        """
+        Private slot to show the context menu.
+        
+        @param coord the position of the mouse pointer (QPoint)
+        """
+        if self.topLevelItemCount() > 0:
+            itm = self.currentItem()
+            self.__sourceAct.setEnabled(itm is not None)
+            self.__menu.popup(self.mapToGlobal(coord))
+    
+    def __showCallStack(self, stack):
+        """
+        Public slot to show the call stack of the program being debugged.
+        
+        @param stack list of tuples with call stack data (file name, line number,
+            function name, formatted argument/values list)
+        """
+        self.clear()
+        for fname, fline, ffunc, fargs in stack:
+            if self.__projectMode:
+                dfname = self.__project.getRelativePath(fname)
+            else:
+                dfname = fname
+            if ffunc and not ffunc.startswith("<"):
+                # use normal format
+                itm = QTreeWidgetItem(self,
+                    [self.__entryFormat.format(dfname, fline, ffunc, fargs)])
+            else:
+                # use short format
+                itm = QTreeWidgetItem(self,
+                    [self.__entryFormatShort.format(dfname, fline)])
+            itm.setData(0, self.FilenameRole, fname)
+            itm.setData(0, self.LinenoRole, fline)
+        
+        self.resizeColumnToContents(0)
+    
+    def __itemDoubleClicked(self, itm):
+        """
+        Private slot to handle a double click of a stack entry.
+        
+        @param itm reference to the double clicked item (QTreeWidgetItem)
+        """
+        fname = itm.data(0, self.FilenameRole)
+        fline = itm.data(0, self.LinenoRole)
+        if self.__projectMode:
+            fname = self.__project.getAbsolutePath(fname)
+        self.sourceFile.emit(fname, fline)
+        
+        index = self.indexOfTopLevelItem(itm)
+        self.frameSelected.emit(index)
+    
+    def __openSource(self):
+        """
+        Private slot to show the source for the selected stack entry.
+        """
+        itm = self.currentItem()
+        if itm:
+            self.__itemDoubleClicked(itm)
+    
+    def __saveStackTrace(self):
+        """
+        Private slot to save the stack trace info to a file.
+        """
+        if self.topLevelItemCount() > 0:
+            fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+                self,
+                self.trUtf8("Save Call Stack Info"),
+                "",
+                self.trUtf8("Text Files (*.txt);;All Files (*)"),
+                None,
+                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+            if fname:
+                ext = QFileInfo(fname).suffix()
+                if not ext:
+                    ex = selectedFilter.split("(*")[1].split(")")[0]
+                    if ex:
+                        fname += ex
+                if QFileInfo(fname).exists():
+                    res = E5MessageBox.yesNo(self,
+                        self.trUtf8("Save Call Stack Info"),
+                        self.trUtf8("<p>The file <b>{0}</b> already exists."
+                                    " Overwrite it?</p>").format(fname),
+                        icon=E5MessageBox.Warning)
+                    if not res:
+                        return
+                    fname = Utilities.toNativeSeparators(fname)
+                
+                try:
+                    f = open(fname, "w", encoding="utf-8")
+                    itm = self.topLevelItem(0)
+                    while itm is not None:
+                        f.write("{0}\n".format(itm.text(0)))
+                        f.write(78 * "=" + "\n")
+                        itm = self.itemBelow(itm)
+                    f.close()
+                except IOError as err:
+                    E5MessageBox.critical(self,
+                        self.trUtf8("Error saving Call Stack Info"),
+                        self.trUtf8("""<p>The call stack info could not be written"""
+                                    """ to <b>{0}</b></p><p>Reason: {1}</p>""")\
+                            .format(fname, str(err)))
--- a/Debugger/CallTraceViewer.py	Fri May 24 18:39:58 2013 +0200
+++ b/Debugger/CallTraceViewer.py	Tue May 28 20:52:12 2013 +0200
@@ -34,6 +34,7 @@
         """
         Constructor
         
+        @param debugServer reference to the debug server object (DebugServer)
         @param parent reference to the parent widget (QWidget)
         """
         super(CallTraceViewer, self).__init__(parent)
--- a/Debugger/DebugUI.py	Fri May 24 18:39:58 2013 +0200
+++ b/Debugger/DebugUI.py	Tue May 28 20:52:12 2013 +0200
@@ -1031,7 +1031,7 @@
             res = None
             if stackTrace:
                 try:
-                    file, line = stackTrace[0]
+                    file, line = stackTrace[0][:2]
                     source, encoding = Utilities.readEncodedFile(file)
                     source = source.splitlines(True)
                     if len(source) >= line and \
@@ -1075,8 +1075,8 @@
             if res == E5MessageBox.Yes:
                 self.exceptionInterrupt.emit()
                 stack = []
-                for fn, ln in stackTrace:
-                    stack.append((fn, ln, ''))
+                for fn, ln, func, args in stackTrace:
+                    stack.append((fn, ln, func, args))
                 self.clientStack.emit(stack)
                 self.__getClientVariables()
                 self.ui.setDebugProfile()
@@ -1458,6 +1458,8 @@
                     argv = '--plugin="{0}" {1}'.format(fn, argv)
                     fn = os.path.join(getConfig('ericDir'), "eric5.py")
                 
+                self.debugViewer.initCallStackViewer(runProject)
+                
                 # Ask the client to open the new program.
                 self.debugServer.remoteCoverage(fn, argv, wd, env,
                     autoClearShell=self.autoClearShell, erase=eraseCoverage,
@@ -1567,6 +1569,8 @@
                     argv = '--plugin="{0}" {1}'.format(fn, argv)
                     fn = os.path.join(getConfig('ericDir'), "eric5.py")
                 
+                self.debugViewer.initCallStackViewer(runProject)
+                
                 # Ask the client to open the new program.
                 self.debugServer.remoteProfile(fn, argv, wd, env,
                     autoClearShell=self.autoClearShell, erase=eraseTimings,
@@ -1679,6 +1683,8 @@
                     argv = '--plugin="{0}" {1}'.format(fn, argv)
                     fn = os.path.join(getConfig('ericDir'), "eric5.py")
                 
+                self.debugViewer.initCallStackViewer(runProject)
+                
                 # Ask the client to open the new program.
                 self.debugServer.remoteRun(fn, argv, wd, env,
                     autoClearShell=self.autoClearShell, forProject=runProject,
@@ -1799,6 +1805,8 @@
                     fn = os.path.join(getConfig('ericDir'), "eric5.py")
                     tracePython = True  # override flag because it must be true
                 
+                self.debugViewer.initCallStackViewer(debugProject)
+                
                 # Ask the client to send call trace info
                 enableCallTrace = self.debugViewer.isCallTraceEnabled()
                 self.debugViewer.clearCallTrace()
@@ -1855,6 +1863,8 @@
                 argv = '--plugin="{0}" {1}'.format(fn, argv)
                 fn = os.path.join(getConfig('ericDir'), "eric5.py")
             
+            self.debugViewer.initCallStackViewer(forProject)
+            
             if self.lastStartAction in [1, 2]:
                 # Ask the client to send call trace info
                 enableCallTrace = self.debugViewer.isCallTraceEnabled()
@@ -1920,6 +1930,9 @@
         # Signal that we have started a debugging session
         self.debuggingStarted.emit(fn)
         
+        # Initialize the call stack viewer
+        self.debugViewer.initCallStackViewer(False)
+        
     def __continue(self):
         """
         Private method to handle the Continue action.
--- a/Debugger/DebugViewer.py	Fri May 24 18:39:58 2013 +0200
+++ b/Debugger/DebugViewer.py	Tue May 28 20:52:12 2013 +0200
@@ -178,10 +178,19 @@
         self.__tabWidget.setTabToolTip(index, self.localsViewer.windowTitle())
         
         self.sourceButton.clicked[()].connect(self.__showSource)
-        self.stackComboBox.activated[int].connect(self.__frameSelected)
+        self.stackComboBox.currentIndexChanged[int].connect(self.__frameSelected)
         self.setLocalsFilterButton.clicked[()].connect(self.__setLocalsFilter)
         self.localsFilterEdit.returnPressed.connect(self.__setLocalsFilter)
         
+        from .CallStackViewer import CallStackViewer
+        # add the call stack viewer
+        self.callStackViewer = CallStackViewer(self.debugServer)
+        index = self.__tabWidget.addTab(self.callStackViewer,
+            UI.PixmapCache.getIcon("step.png"), "")
+        self.__tabWidget.setTabToolTip(index, self.callStackViewer.windowTitle())
+        self.callStackViewer.sourceFile.connect(self.sourceFile)
+        self.callStackViewer.frameSelected.connect(self.__callStackFrameSelected)
+        
         from .CallTraceViewer import CallTraceViewer
         # add the call trace viewer
         self.callTraceViewer = CallTraceViewer(self.debugServer)
@@ -257,10 +266,11 @@
         """
         Public method to set a reference to the Debug UI.
         
-        @param debugUI reference to the DebugUI objectTrees
+        @param debugUI reference to the DebugUI object (DebugUI)
         """
         self.debugUI = debugUI
         self.debugUI.clientStack.connect(self.handleClientStack)
+        self.callStackViewer.setDebugger(debugUI)
         
     def handleResetUI(self):
         """
@@ -289,6 +299,15 @@
             self.saveCurrentPage()
             self.__tabWidget.setCurrentWidget(self.shellAssembly)
         
+    def initCallStackViewer(self, projectMode):
+        """
+        Public method to initialize the call stack viewer.
+        
+        @param projectMode flag indicating to enable the project mode (boolean)
+        """
+        self.callStackViewer.clear()
+        self.callStackViewer.setProjectMode(projectMode)
+        
     def isCallTraceEnabled(self):
         """
         Public method to get the state of the call trace function.
@@ -365,6 +384,9 @@
     def handleClientStack(self, stack):
         """
         Public slot to show the call stack of the program being debugged.
+        
+        @param stack list of tuples with call stack data (file name, line number,
+            function name, formatted argument/values list)
         """
         self.framenr = 0
         self.stackComboBox.clear()
@@ -486,3 +508,13 @@
         if current is not None and self.__doThreadListUpdate:
             tid = int(current.text(0))
             self.debugServer.remoteSetThread(tid)
+    
+    def __callStackFrameSelected(self, frameNo):
+        """
+        Private slot to handle the selection of a call stack entry of the
+        call stack viewer.
+        
+        @param frameNo frame number (index) of the selected entry (integer)
+        """
+        if frameNo >= 0:
+            self.stackComboBox.setCurrentIndex(frameNo)
--- a/Debugger/EditWatchpointDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Debugger/EditWatchpointDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -82,7 +82,6 @@
             # should not happen
             self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
         
-        
     def getData(self):
         """
         Public method to retrieve the entered data.
--- a/Debugger/ExceptionLogger.py	Fri May 24 18:39:58 2013 +0200
+++ b/Debugger/ExceptionLogger.py	Tue May 28 20:52:12 2013 +0200
@@ -108,9 +108,9 @@
             itm.setText(0, "{0}, {1}".format(exceptionType, exceptionMessage))
         
         # now add the call stack, most recent call first
-        for fn, ln in stackTrace:
+        for entry in stackTrace:
             excitm = QTreeWidgetItem(itm)
-            excitm.setText(0, "{0}, {1:d}".format(fn, ln))
+            excitm.setText(0, "{0}, {1:d}".format(entry[0], entry[1]))
             
     def debuggingStarted(self):
         """
--- a/Debugger/VariablesViewer.py	Fri May 24 18:39:58 2013 +0200
+++ b/Debugger/VariablesViewer.py	Tue May 28 20:52:12 2013 +0200
@@ -53,7 +53,7 @@
                 # indicate skipped lines by <...> at the
                 # beginning and/or end
                 index = 0
-                while index < len(lines) and lines[index] == "":
+                while index < len(lines) - 1 and lines[index] == "":
                     index += 1
                 dvalue = ""
                 if index > 0:
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Help/source.qhp	Tue May 28 20:52:12 2013 +0200
@@ -77,6 +77,7 @@
           <section title="eric5.Debugger" ref="index-eric5.Debugger.html">
             <section title="eric5.Debugger.BreakPointModel" ref="eric5.Debugger.BreakPointModel.html" />
             <section title="eric5.Debugger.BreakPointViewer" ref="eric5.Debugger.BreakPointViewer.html" />
+            <section title="eric5.Debugger.CallStackViewer" ref="eric5.Debugger.CallStackViewer.html" />
             <section title="eric5.Debugger.CallTraceViewer" ref="eric5.Debugger.CallTraceViewer.html" />
             <section title="eric5.Debugger.Config" ref="eric5.Debugger.Config.html" />
             <section title="eric5.Debugger.DebugClientCapabilities" ref="eric5.Debugger.DebugClientCapabilities.html" />
@@ -858,6 +859,7 @@
             <section title="eric5.QScintilla.SearchReplaceWidget" ref="eric5.QScintilla.SearchReplaceWidget.html" />
             <section title="eric5.QScintilla.Shell" ref="eric5.QScintilla.Shell.html" />
             <section title="eric5.QScintilla.ShellHistoryDialog" ref="eric5.QScintilla.ShellHistoryDialog.html" />
+            <section title="eric5.QScintilla.SortOptionsDialog" ref="eric5.QScintilla.SortOptionsDialog.html" />
             <section title="eric5.QScintilla.SpellChecker" ref="eric5.QScintilla.SpellChecker.html" />
             <section title="eric5.QScintilla.SpellCheckingDialog" ref="eric5.QScintilla.SpellCheckingDialog.html" />
             <section title="eric5.QScintilla.SpellingDictionaryEditDialog" ref="eric5.QScintilla.SpellingDictionaryEditDialog.html" />
@@ -1853,6 +1855,16 @@
       <keyword name="BrowserSortFilterProxyModel.sort" id="BrowserSortFilterProxyModel.sort" ref="eric5.UI.BrowserSortFilterProxyModel.html#BrowserSortFilterProxyModel.sort" />
       <keyword name="BrowserSysPathItem" id="BrowserSysPathItem" ref="eric5.UI.BrowserModel.html#BrowserSysPathItem" />
       <keyword name="BrowserSysPathItem (Constructor)" id="BrowserSysPathItem (Constructor)" ref="eric5.UI.BrowserModel.html#BrowserSysPathItem.__init__" />
+      <keyword name="CallStackViewer" id="CallStackViewer" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer" />
+      <keyword name="CallStackViewer (Constructor)" id="CallStackViewer (Constructor)" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer.__init__" />
+      <keyword name="CallStackViewer (Module)" id="CallStackViewer (Module)" ref="eric5.Debugger.CallStackViewer.html" />
+      <keyword name="CallStackViewer.__itemDoubleClicked" id="CallStackViewer.__itemDoubleClicked" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer.__itemDoubleClicked" />
+      <keyword name="CallStackViewer.__openSource" id="CallStackViewer.__openSource" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer.__openSource" />
+      <keyword name="CallStackViewer.__saveStackTrace" id="CallStackViewer.__saveStackTrace" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer.__saveStackTrace" />
+      <keyword name="CallStackViewer.__showCallStack" id="CallStackViewer.__showCallStack" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer.__showCallStack" />
+      <keyword name="CallStackViewer.__showContextMenu" id="CallStackViewer.__showContextMenu" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer.__showContextMenu" />
+      <keyword name="CallStackViewer.setDebugger" id="CallStackViewer.setDebugger" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer.setDebugger" />
+      <keyword name="CallStackViewer.setProjectMode" id="CallStackViewer.setProjectMode" ref="eric5.Debugger.CallStackViewer.html#CallStackViewer.setProjectMode" />
       <keyword name="CallTraceViewer" id="CallTraceViewer" ref="eric5.Debugger.CallTraceViewer.html#CallTraceViewer" />
       <keyword name="CallTraceViewer (Constructor)" id="CallTraceViewer (Constructor)" ref="eric5.Debugger.CallTraceViewer.html#CallTraceViewer.__init__" />
       <keyword name="CallTraceViewer (Module)" id="CallTraceViewer (Module)" ref="eric5.Debugger.CallTraceViewer.html" />
@@ -2938,6 +2950,7 @@
       <keyword name="DebugViewer" id="DebugViewer" ref="eric5.Debugger.DebugViewer.html#DebugViewer" />
       <keyword name="DebugViewer (Constructor)" id="DebugViewer (Constructor)" ref="eric5.Debugger.DebugViewer.html#DebugViewer.__init__" />
       <keyword name="DebugViewer (Module)" id="DebugViewer (Module)" ref="eric5.Debugger.DebugViewer.html" />
+      <keyword name="DebugViewer.__callStackFrameSelected" id="DebugViewer.__callStackFrameSelected" ref="eric5.Debugger.DebugViewer.html#DebugViewer.__callStackFrameSelected" />
       <keyword name="DebugViewer.__frameSelected" id="DebugViewer.__frameSelected" ref="eric5.Debugger.DebugViewer.html#DebugViewer.__frameSelected" />
       <keyword name="DebugViewer.__setGlobalsFilter" id="DebugViewer.__setGlobalsFilter" ref="eric5.Debugger.DebugViewer.html#DebugViewer.__setGlobalsFilter" />
       <keyword name="DebugViewer.__setLocalsFilter" id="DebugViewer.__setLocalsFilter" ref="eric5.Debugger.DebugViewer.html#DebugViewer.__setLocalsFilter" />
@@ -2949,6 +2962,7 @@
       <keyword name="DebugViewer.handleDebuggingStarted" id="DebugViewer.handleDebuggingStarted" ref="eric5.Debugger.DebugViewer.html#DebugViewer.handleDebuggingStarted" />
       <keyword name="DebugViewer.handleRawInput" id="DebugViewer.handleRawInput" ref="eric5.Debugger.DebugViewer.html#DebugViewer.handleRawInput" />
       <keyword name="DebugViewer.handleResetUI" id="DebugViewer.handleResetUI" ref="eric5.Debugger.DebugViewer.html#DebugViewer.handleResetUI" />
+      <keyword name="DebugViewer.initCallStackViewer" id="DebugViewer.initCallStackViewer" ref="eric5.Debugger.DebugViewer.html#DebugViewer.initCallStackViewer" />
       <keyword name="DebugViewer.isCallTraceEnabled" id="DebugViewer.isCallTraceEnabled" ref="eric5.Debugger.DebugViewer.html#DebugViewer.isCallTraceEnabled" />
       <keyword name="DebugViewer.preferencesChanged" id="DebugViewer.preferencesChanged" ref="eric5.Debugger.DebugViewer.html#DebugViewer.preferencesChanged" />
       <keyword name="DebugViewer.restoreCurrentPage" id="DebugViewer.restoreCurrentPage" ref="eric5.Debugger.DebugViewer.html#DebugViewer.restoreCurrentPage" />
@@ -3601,12 +3615,17 @@
       <keyword name="E5SideBar (Module)" id="E5SideBar (Module)" ref="eric5.E5Gui.E5SideBar.html" />
       <keyword name="E5SideBar.__appFocusChanged" id="E5SideBar.__appFocusChanged" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.__appFocusChanged" />
       <keyword name="E5SideBar.__autoHideToggled" id="E5SideBar.__autoHideToggled" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.__autoHideToggled" />
+      <keyword name="E5SideBar.__cancelDelayTimer" id="E5SideBar.__cancelDelayTimer" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.__cancelDelayTimer" />
+      <keyword name="E5SideBar.__delayedAction" id="E5SideBar.__delayedAction" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.__delayedAction" />
+      <keyword name="E5SideBar.__expandIt" id="E5SideBar.__expandIt" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.__expandIt" />
+      <keyword name="E5SideBar.__shrinkIt" id="E5SideBar.__shrinkIt" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.__shrinkIt" />
       <keyword name="E5SideBar.__splitterMoved" id="E5SideBar.__splitterMoved" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.__splitterMoved" />
       <keyword name="E5SideBar.addTab" id="E5SideBar.addTab" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.addTab" />
       <keyword name="E5SideBar.clear" id="E5SideBar.clear" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.clear" />
       <keyword name="E5SideBar.count" id="E5SideBar.count" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.count" />
       <keyword name="E5SideBar.currentIndex" id="E5SideBar.currentIndex" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.currentIndex" />
       <keyword name="E5SideBar.currentWidget" id="E5SideBar.currentWidget" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.currentWidget" />
+      <keyword name="E5SideBar.delay" id="E5SideBar.delay" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.delay" />
       <keyword name="E5SideBar.enterEvent" id="E5SideBar.enterEvent" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.enterEvent" />
       <keyword name="E5SideBar.eventFilter" id="E5SideBar.eventFilter" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.eventFilter" />
       <keyword name="E5SideBar.expand" id="E5SideBar.expand" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.expand" />
@@ -3624,6 +3643,7 @@
       <keyword name="E5SideBar.saveState" id="E5SideBar.saveState" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.saveState" />
       <keyword name="E5SideBar.setCurrentIndex" id="E5SideBar.setCurrentIndex" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.setCurrentIndex" />
       <keyword name="E5SideBar.setCurrentWidget" id="E5SideBar.setCurrentWidget" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.setCurrentWidget" />
+      <keyword name="E5SideBar.setDelay" id="E5SideBar.setDelay" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.setDelay" />
       <keyword name="E5SideBar.setOrientation" id="E5SideBar.setOrientation" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.setOrientation" />
       <keyword name="E5SideBar.setSplitter" id="E5SideBar.setSplitter" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.setSplitter" />
       <keyword name="E5SideBar.setTabEnabled" id="E5SideBar.setTabEnabled" ref="eric5.E5Gui.E5SideBar.html#E5SideBar.setTabEnabled" />
@@ -4004,6 +4024,7 @@
       <keyword name="Editor.__resetOnlineChangeTraceInfo" id="Editor.__resetOnlineChangeTraceInfo" ref="eric5.QScintilla.Editor.html#Editor.__resetOnlineChangeTraceInfo" />
       <keyword name="Editor.__resetOnlineChangeTraceTimer" id="Editor.__resetOnlineChangeTraceTimer" ref="eric5.QScintilla.Editor.html#Editor.__resetOnlineChangeTraceTimer" />
       <keyword name="Editor.__resetOnlineSyntaxCheckTimer" id="Editor.__resetOnlineSyntaxCheckTimer" ref="eric5.QScintilla.Editor.html#Editor.__resetOnlineSyntaxCheckTimer" />
+      <keyword name="Editor.__resizeLinenoMargin" id="Editor.__resizeLinenoMargin" ref="eric5.QScintilla.Editor.html#Editor.__resizeLinenoMargin" />
       <keyword name="Editor.__restoreBreakpoints" id="Editor.__restoreBreakpoints" ref="eric5.QScintilla.Editor.html#Editor.__restoreBreakpoints" />
       <keyword name="Editor.__saveLastEditPosition" id="Editor.__saveLastEditPosition" ref="eric5.QScintilla.Editor.html#Editor.__saveLastEditPosition" />
       <keyword name="Editor.__searchCurrentWord" id="Editor.__searchCurrentWord" ref="eric5.QScintilla.Editor.html#Editor.__searchCurrentWord" />
@@ -4193,6 +4214,7 @@
       <keyword name="Editor.shortenEmptyLines" id="Editor.shortenEmptyLines" ref="eric5.QScintilla.Editor.html#Editor.shortenEmptyLines" />
       <keyword name="Editor.shouldAutosave" id="Editor.shouldAutosave" ref="eric5.QScintilla.Editor.html#Editor.shouldAutosave" />
       <keyword name="Editor.smartIndentLineOrSelection" id="Editor.smartIndentLineOrSelection" ref="eric5.QScintilla.Editor.html#Editor.smartIndentLineOrSelection" />
+      <keyword name="Editor.sortLines" id="Editor.sortLines" ref="eric5.QScintilla.Editor.html#Editor.sortLines" />
       <keyword name="Editor.startSharedEdit" id="Editor.startSharedEdit" ref="eric5.QScintilla.Editor.html#Editor.startSharedEdit" />
       <keyword name="Editor.streamCommentLine" id="Editor.streamCommentLine" ref="eric5.QScintilla.Editor.html#Editor.streamCommentLine" />
       <keyword name="Editor.streamCommentLineOrSelection" id="Editor.streamCommentLineOrSelection" ref="eric5.QScintilla.Editor.html#Editor.streamCommentLineOrSelection" />
@@ -5158,6 +5180,7 @@
       <keyword name="HelpWebPage.getAdBlockedPageEntries" id="HelpWebPage.getAdBlockedPageEntries" ref="eric5.Helpviewer.HelpBrowserWV.html#HelpWebPage.getAdBlockedPageEntries" />
       <keyword name="HelpWebPage.getSslCertificate" id="HelpWebPage.getSslCertificate" ref="eric5.Helpviewer.HelpBrowserWV.html#HelpWebPage.getSslCertificate" />
       <keyword name="HelpWebPage.getSslCertificateChain" id="HelpWebPage.getSslCertificateChain" ref="eric5.Helpviewer.HelpBrowserWV.html#HelpWebPage.getSslCertificateChain" />
+      <keyword name="HelpWebPage.getSslConfiguration" id="HelpWebPage.getSslConfiguration" ref="eric5.Helpviewer.HelpBrowserWV.html#HelpWebPage.getSslConfiguration" />
       <keyword name="HelpWebPage.hasValidSslInfo" id="HelpWebPage.hasValidSslInfo" ref="eric5.Helpviewer.HelpBrowserWV.html#HelpWebPage.hasValidSslInfo" />
       <keyword name="HelpWebPage.pageAttributeId" id="HelpWebPage.pageAttributeId" ref="eric5.Helpviewer.HelpBrowserWV.html#HelpWebPage.pageAttributeId" />
       <keyword name="HelpWebPage.populateNetworkRequest" id="HelpWebPage.populateNetworkRequest" ref="eric5.Helpviewer.HelpBrowserWV.html#HelpWebPage.populateNetworkRequest" />
@@ -7263,6 +7286,7 @@
       <keyword name="MiniEditor.__redo" id="MiniEditor.__redo" ref="eric5.QScintilla.MiniEditor.html#MiniEditor.__redo" />
       <keyword name="MiniEditor.__replace" id="MiniEditor.__replace" ref="eric5.QScintilla.MiniEditor.html#MiniEditor.__replace" />
       <keyword name="MiniEditor.__resetLanguage" id="MiniEditor.__resetLanguage" ref="eric5.QScintilla.MiniEditor.html#MiniEditor.__resetLanguage" />
+      <keyword name="MiniEditor.__resizeLinenoMargin" id="MiniEditor.__resizeLinenoMargin" ref="eric5.QScintilla.MiniEditor.html#MiniEditor.__resizeLinenoMargin" />
       <keyword name="MiniEditor.__save" id="MiniEditor.__save" ref="eric5.QScintilla.MiniEditor.html#MiniEditor.__save" />
       <keyword name="MiniEditor.__saveAs" id="MiniEditor.__saveAs" ref="eric5.QScintilla.MiniEditor.html#MiniEditor.__saveAs" />
       <keyword name="MiniEditor.__saveFile" id="MiniEditor.__saveFile" ref="eric5.QScintilla.MiniEditor.html#MiniEditor.__saveFile" />
@@ -8232,7 +8256,6 @@
       <keyword name="Project.__initProjectTypes" id="Project.__initProjectTypes" ref="eric5.Project.Project.html#Project.__initProjectTypes" />
       <keyword name="Project.__loadDiagram" id="Project.__loadDiagram" ref="eric5.Project.Project.html#Project.__loadDiagram" />
       <keyword name="Project.__loadRecent" id="Project.__loadRecent" ref="eric5.Project.Project.html#Project.__loadRecent" />
-      <keyword name="Project.__makePpathRe" id="Project.__makePpathRe" ref="eric5.Project.Project.html#Project.__makePpathRe" />
       <keyword name="Project.__openRecent" id="Project.__openRecent" ref="eric5.Project.Project.html#Project.__openRecent" />
       <keyword name="Project.__pluginCreateArchive" id="Project.__pluginCreateArchive" ref="eric5.Project.Project.html#Project.__pluginCreateArchive" />
       <keyword name="Project.__pluginCreatePkgList" id="Project.__pluginCreatePkgList" ref="eric5.Project.Project.html#Project.__pluginCreatePkgList" />
@@ -8957,8 +8980,13 @@
       <keyword name="QsciScintillaCompat.getFileName" id="QsciScintillaCompat.getFileName" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getFileName" />
       <keyword name="QsciScintillaCompat.getFoundTarget" id="QsciScintillaCompat.getFoundTarget" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getFoundTarget" />
       <keyword name="QsciScintillaCompat.getLineSeparator" id="QsciScintillaCompat.getLineSeparator" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getLineSeparator" />
+      <keyword name="QsciScintillaCompat.getRectangularSelection" id="QsciScintillaCompat.getRectangularSelection" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getRectangularSelection" />
+      <keyword name="QsciScintillaCompat.getSelectionCount" id="QsciScintillaCompat.getSelectionCount" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getSelectionCount" />
+      <keyword name="QsciScintillaCompat.getSelectionN" id="QsciScintillaCompat.getSelectionN" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getSelectionN" />
+      <keyword name="QsciScintillaCompat.getSelections" id="QsciScintillaCompat.getSelections" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getSelections" />
       <keyword name="QsciScintillaCompat.getZoom" id="QsciScintillaCompat.getZoom" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getZoom" />
       <keyword name="QsciScintillaCompat.hasIndicator" id="QsciScintillaCompat.hasIndicator" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.hasIndicator" />
+      <keyword name="QsciScintillaCompat.hasSelection" id="QsciScintillaCompat.hasSelection" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.hasSelection" />
       <keyword name="QsciScintillaCompat.indentationGuideView" id="QsciScintillaCompat.indentationGuideView" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.indentationGuideView" />
       <keyword name="QsciScintillaCompat.indicatorDefine" id="QsciScintillaCompat.indicatorDefine" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.indicatorDefine" />
       <keyword name="QsciScintillaCompat.lineAt" id="QsciScintillaCompat.lineAt" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.lineAt" />
@@ -8978,6 +9006,7 @@
       <keyword name="QsciScintillaCompat.positionFromPoint" id="QsciScintillaCompat.positionFromPoint" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.positionFromPoint" />
       <keyword name="QsciScintillaCompat.replaceTarget" id="QsciScintillaCompat.replaceTarget" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.replaceTarget" />
       <keyword name="QsciScintillaCompat.scrollVertical" id="QsciScintillaCompat.scrollVertical" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.scrollVertical" />
+      <keyword name="QsciScintillaCompat.selectionIsRectangle" id="QsciScintillaCompat.selectionIsRectangle" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.selectionIsRectangle" />
       <keyword name="QsciScintillaCompat.setContractedFolds" id="QsciScintillaCompat.setContractedFolds" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setContractedFolds" />
       <keyword name="QsciScintillaCompat.setCurrentIndicator" id="QsciScintillaCompat.setCurrentIndicator" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setCurrentIndicator" />
       <keyword name="QsciScintillaCompat.setCursorFlashTime" id="QsciScintillaCompat.setCursorFlashTime" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setCursorFlashTime" />
@@ -8988,8 +9017,10 @@
       <keyword name="QsciScintillaCompat.setIndicator" id="QsciScintillaCompat.setIndicator" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setIndicator" />
       <keyword name="QsciScintillaCompat.setIndicatorRange" id="QsciScintillaCompat.setIndicatorRange" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setIndicatorRange" />
       <keyword name="QsciScintillaCompat.setLexer" id="QsciScintillaCompat.setLexer" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setLexer" />
+      <keyword name="QsciScintillaCompat.setRectangularSelection" id="QsciScintillaCompat.setRectangularSelection" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setRectangularSelection" />
       <keyword name="QsciScintillaCompat.setStyleBits" id="QsciScintillaCompat.setStyleBits" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setStyleBits" />
       <keyword name="QsciScintillaCompat.setStyling" id="QsciScintillaCompat.setStyling" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setStyling" />
+      <keyword name="QsciScintillaCompat.setVirtualSpaceOptions" id="QsciScintillaCompat.setVirtualSpaceOptions" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.setVirtualSpaceOptions" />
       <keyword name="QsciScintillaCompat.showUserList" id="QsciScintillaCompat.showUserList" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.showUserList" />
       <keyword name="QsciScintillaCompat.startStyling" id="QsciScintillaCompat.startStyling" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.startStyling" />
       <keyword name="QsciScintillaCompat.styleAt" id="QsciScintillaCompat.styleAt" ref="eric5.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.styleAt" />
@@ -9030,7 +9061,6 @@
       <keyword name="QtPage (Constructor)" id="QtPage (Constructor)" ref="eric5.Preferences.ConfigurationPages.QtPage.html#QtPage.__init__" />
       <keyword name="QtPage (Module)" id="QtPage (Module)" ref="eric5.Preferences.ConfigurationPages.QtPage.html" />
       <keyword name="QtPage.__updateQt4Sample" id="QtPage.__updateQt4Sample" ref="eric5.Preferences.ConfigurationPages.QtPage.html#QtPage.__updateQt4Sample" />
-      <keyword name="QtPage.on_qt4Button_clicked" id="QtPage.on_qt4Button_clicked" ref="eric5.Preferences.ConfigurationPages.QtPage.html#QtPage.on_qt4Button_clicked" />
       <keyword name="QtPage.on_qt4PostfixEdit_textChanged" id="QtPage.on_qt4PostfixEdit_textChanged" ref="eric5.Preferences.ConfigurationPages.QtPage.html#QtPage.on_qt4PostfixEdit_textChanged" />
       <keyword name="QtPage.on_qt4PrefixEdit_textChanged" id="QtPage.on_qt4PrefixEdit_textChanged" ref="eric5.Preferences.ConfigurationPages.QtPage.html#QtPage.on_qt4PrefixEdit_textChanged" />
       <keyword name="QtPage.on_qt4TransButton_clicked" id="QtPage.on_qt4TransButton_clicked" ref="eric5.Preferences.ConfigurationPages.QtPage.html#QtPage.on_qt4TransButton_clicked" />
@@ -9201,6 +9231,7 @@
       <keyword name="SearchReplaceWidget.__findByReturnPressed" id="SearchReplaceWidget.__findByReturnPressed" ref="eric5.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__findByReturnPressed" />
       <keyword name="SearchReplaceWidget.__findNextPrev" id="SearchReplaceWidget.__findNextPrev" ref="eric5.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__findNextPrev" />
       <keyword name="SearchReplaceWidget.__markOccurrences" id="SearchReplaceWidget.__markOccurrences" ref="eric5.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__markOccurrences" />
+      <keyword name="SearchReplaceWidget.__selectionBoundary" id="SearchReplaceWidget.__selectionBoundary" ref="eric5.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__selectionBoundary" />
       <keyword name="SearchReplaceWidget.__showFind" id="SearchReplaceWidget.__showFind" ref="eric5.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__showFind" />
       <keyword name="SearchReplaceWidget.__showReplace" id="SearchReplaceWidget.__showReplace" ref="eric5.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.__showReplace" />
       <keyword name="SearchReplaceWidget.findNext" id="SearchReplaceWidget.findNext" ref="eric5.QScintilla.SearchReplaceWidget.html#SearchReplaceWidget.findNext" />
@@ -9319,6 +9350,7 @@
       <keyword name="Shell.__raw_input" id="Shell.__raw_input" ref="eric5.QScintilla.Shell.html#Shell.__raw_input" />
       <keyword name="Shell.__reset" id="Shell.__reset" ref="eric5.QScintilla.Shell.html#Shell.__reset" />
       <keyword name="Shell.__resetAndClear" id="Shell.__resetAndClear" ref="eric5.QScintilla.Shell.html#Shell.__resetAndClear" />
+      <keyword name="Shell.__resizeLinenoMargin" id="Shell.__resizeLinenoMargin" ref="eric5.QScintilla.Shell.html#Shell.__resizeLinenoMargin" />
       <keyword name="Shell.__rsearchHistory" id="Shell.__rsearchHistory" ref="eric5.QScintilla.Shell.html#Shell.__rsearchHistory" />
       <keyword name="Shell.__searchHistory" id="Shell.__searchHistory" ref="eric5.QScintilla.Shell.html#Shell.__searchHistory" />
       <keyword name="Shell.__searchNext" id="Shell.__searchNext" ref="eric5.QScintilla.Shell.html#Shell.__searchNext" />
@@ -9522,6 +9554,10 @@
       <keyword name="SnapshotTimer.paintEvent" id="SnapshotTimer.paintEvent" ref="eric5.Snapshot.SnapshotTimer.html#SnapshotTimer.paintEvent" />
       <keyword name="SnapshotTimer.start" id="SnapshotTimer.start" ref="eric5.Snapshot.SnapshotTimer.html#SnapshotTimer.start" />
       <keyword name="SnapshotTimer.stop" id="SnapshotTimer.stop" ref="eric5.Snapshot.SnapshotTimer.html#SnapshotTimer.stop" />
+      <keyword name="SortOptionsDialog" id="SortOptionsDialog" ref="eric5.QScintilla.SortOptionsDialog.html#SortOptionsDialog" />
+      <keyword name="SortOptionsDialog (Constructor)" id="SortOptionsDialog (Constructor)" ref="eric5.QScintilla.SortOptionsDialog.html#SortOptionsDialog.__init__" />
+      <keyword name="SortOptionsDialog (Module)" id="SortOptionsDialog (Module)" ref="eric5.QScintilla.SortOptionsDialog.html" />
+      <keyword name="SortOptionsDialog.getData" id="SortOptionsDialog.getData" ref="eric5.QScintilla.SortOptionsDialog.html#SortOptionsDialog.getData" />
       <keyword name="SourceStat" id="SourceStat" ref="eric5.DataViews.CodeMetrics.html#SourceStat" />
       <keyword name="SourceStat (Constructor)" id="SourceStat (Constructor)" ref="eric5.DataViews.CodeMetrics.html#SourceStat.__init__" />
       <keyword name="SourceStat.dedent" id="SourceStat.dedent" ref="eric5.DataViews.CodeMetrics.html#SourceStat.dedent" />
@@ -11774,6 +11810,7 @@
       <keyword name="ViewManager.__editSelectBrace" id="ViewManager.__editSelectBrace" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editSelectBrace" />
       <keyword name="ViewManager.__editShowCallTips" id="ViewManager.__editShowCallTips" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editShowCallTips" />
       <keyword name="ViewManager.__editSmartIndent" id="ViewManager.__editSmartIndent" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editSmartIndent" />
+      <keyword name="ViewManager.__editSortSelectedLines" id="ViewManager.__editSortSelectedLines" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editSortSelectedLines" />
       <keyword name="ViewManager.__editSpellingDictionary" id="ViewManager.__editSpellingDictionary" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editSpellingDictionary" />
       <keyword name="ViewManager.__editStreamComment" id="ViewManager.__editStreamComment" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editStreamComment" />
       <keyword name="ViewManager.__editToggleComment" id="ViewManager.__editToggleComment" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editToggleComment" />
@@ -11787,6 +11824,7 @@
       <keyword name="ViewManager.__editorConfigChanged" id="ViewManager.__editorConfigChanged" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editorConfigChanged" />
       <keyword name="ViewManager.__editorOpened" id="ViewManager.__editorOpened" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editorOpened" />
       <keyword name="ViewManager.__editorSaved" id="ViewManager.__editorSaved" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editorSaved" />
+      <keyword name="ViewManager.__editorSelectionChanged" id="ViewManager.__editorSelectionChanged" ref="eric5.ViewManager.ViewManager.html#ViewManager.__editorSelectionChanged" />
       <keyword name="ViewManager.__enableSpellingActions" id="ViewManager.__enableSpellingActions" ref="eric5.ViewManager.ViewManager.html#ViewManager.__enableSpellingActions" />
       <keyword name="ViewManager.__eolPixmap" id="ViewManager.__eolPixmap" ref="eric5.ViewManager.ViewManager.html#ViewManager.__eolPixmap" />
       <keyword name="ViewManager.__exportMenuTriggered" id="ViewManager.__exportMenuTriggered" ref="eric5.ViewManager.ViewManager.html#ViewManager.__exportMenuTriggered" />
@@ -11853,6 +11891,7 @@
       <keyword name="ViewManager.__showBookmarkMenu" id="ViewManager.__showBookmarkMenu" ref="eric5.ViewManager.ViewManager.html#ViewManager.__showBookmarkMenu" />
       <keyword name="ViewManager.__showBookmarkedMenu" id="ViewManager.__showBookmarkedMenu" ref="eric5.ViewManager.ViewManager.html#ViewManager.__showBookmarkedMenu" />
       <keyword name="ViewManager.__showBookmarksMenu" id="ViewManager.__showBookmarksMenu" ref="eric5.ViewManager.ViewManager.html#ViewManager.__showBookmarksMenu" />
+      <keyword name="ViewManager.__showEditSpellingMenu" id="ViewManager.__showEditSpellingMenu" ref="eric5.ViewManager.ViewManager.html#ViewManager.__showEditSpellingMenu" />
       <keyword name="ViewManager.__showFileMenu" id="ViewManager.__showFileMenu" ref="eric5.ViewManager.ViewManager.html#ViewManager.__showFileMenu" />
       <keyword name="ViewManager.__showRecentMenu" id="ViewManager.__showRecentMenu" ref="eric5.ViewManager.ViewManager.html#ViewManager.__showRecentMenu" />
       <keyword name="ViewManager.__spellCheck" id="ViewManager.__spellCheck" ref="eric5.ViewManager.ViewManager.html#ViewManager.__spellCheck" />
@@ -12397,6 +12436,7 @@
       <keyword name="exeDisplayData" id="exeDisplayData" ref="eric5.Plugins.PluginVcsSubversion.html#exeDisplayData" />
       <keyword name="exeDisplayDataList" id="exeDisplayDataList" ref="eric5.Plugins.PluginEricdoc.html#exeDisplayDataList" />
       <keyword name="exit" id="exit" ref="eric5.install.html#exit" />
+      <keyword name="exit" id="exit" ref="eric5.uninstall.html#exit" />
       <keyword name="expand_indent" id="expand_indent" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html#expand_indent" />
       <keyword name="exportPreferences" id="exportPreferences" ref="eric5.Preferences.__init__.html#exportPreferences" />
       <keyword name="exportShortcuts" id="exportShortcuts" ref="eric5.Preferences.Shortcuts.html#exportShortcuts" />
@@ -12452,6 +12492,7 @@
       <keyword name="getEditorTyping" id="getEditorTyping" ref="eric5.Preferences.__init__.html#getEditorTyping" />
       <keyword name="getEnvironmentEntry" id="getEnvironmentEntry" ref="eric5.Utilities.__init__.html#getEnvironmentEntry" />
       <keyword name="getExecutablePath" id="getExecutablePath" ref="eric5.Utilities.__init__.html#getExecutablePath" />
+      <keyword name="getExecutablePaths" id="getExecutablePaths" ref="eric5.Utilities.__init__.html#getExecutablePaths" />
       <keyword name="getExistingDirectory" id="getExistingDirectory" ref="eric5.E5Gui.E5FileDialog.html#getExistingDirectory" />
       <keyword name="getExporter" id="getExporter" ref="eric5.QScintilla.Exporters.__init__.html#getExporter" />
       <keyword name="getFileNameFromUrl" id="getFileNameFromUrl" ref="eric5.Helpviewer.HelpUtilities.html#getFileNameFromUrl" />
@@ -12492,14 +12533,16 @@
       <keyword name="getProject" id="getProject" ref="eric5.Preferences.__init__.html#getProject" />
       <keyword name="getProjectBrowserColour" id="getProjectBrowserColour" ref="eric5.Preferences.__init__.html#getProjectBrowserColour" />
       <keyword name="getProjectBrowserFlags" id="getProjectBrowserFlags" ref="eric5.Preferences.__init__.html#getProjectBrowserFlags" />
+      <keyword name="getPyQt4ModulesDirectory" id="getPyQt4ModulesDirectory" ref="eric5.Globals.__init__.html#getPyQt4ModulesDirectory" />
       <keyword name="getPython" id="getPython" ref="eric5.Preferences.__init__.html#getPython" />
       <keyword name="getPythonLibPath" id="getPythonLibPath" ref="eric5.Utilities.__init__.html#getPythonLibPath" />
-      <keyword name="getPythonModulesDirectory" id="getPythonModulesDirectory" ref="eric5.Utilities.__init__.html#getPythonModulesDirectory" />
+      <keyword name="getPythonModulesDirectory" id="getPythonModulesDirectory" ref="eric5.Globals.__init__.html#getPythonModulesDirectory" />
       <keyword name="getPythonVersion" id="getPythonVersion" ref="eric5.Utilities.__init__.html#getPythonVersion" />
       <keyword name="getQt" id="getQt" ref="eric5.Preferences.__init__.html#getQt" />
       <keyword name="getQt4DocDir" id="getQt4DocDir" ref="eric5.Preferences.__init__.html#getQt4DocDir" />
       <keyword name="getQt4TranslationsDir" id="getQt4TranslationsDir" ref="eric5.Preferences.__init__.html#getQt4TranslationsDir" />
       <keyword name="getQt5DocDir" id="getQt5DocDir" ref="eric5.Preferences.__init__.html#getQt5DocDir" />
+      <keyword name="getQtBinariesPath" id="getQtBinariesPath" ref="eric5.Globals.__init__.html#getQtBinariesPath" />
       <keyword name="getQtMacBundle" id="getQtMacBundle" ref="eric5.Utilities.__init__.html#getQtMacBundle" />
       <keyword name="getRealName" id="getRealName" ref="eric5.Utilities.__init__.html#getRealName" />
       <keyword name="getRegistryData" id="getRegistryData" ref="eric5.Debugger.DebuggerInterfaceNone.html#getRegistryData" />
@@ -12898,6 +12941,7 @@
       <file>eric5.DebugClients.Ruby.__init__.html</file>
       <file>eric5.Debugger.BreakPointModel.html</file>
       <file>eric5.Debugger.BreakPointViewer.html</file>
+      <file>eric5.Debugger.CallStackViewer.html</file>
       <file>eric5.Debugger.CallTraceViewer.html</file>
       <file>eric5.Debugger.Config.html</file>
       <file>eric5.Debugger.DebugClientCapabilities.html</file>
@@ -13517,6 +13561,7 @@
       <file>eric5.QScintilla.SearchReplaceWidget.html</file>
       <file>eric5.QScintilla.Shell.html</file>
       <file>eric5.QScintilla.ShellHistoryDialog.html</file>
+      <file>eric5.QScintilla.SortOptionsDialog.html</file>
       <file>eric5.QScintilla.SpellChecker.html</file>
       <file>eric5.QScintilla.SpellCheckingDialog.html</file>
       <file>eric5.QScintilla.SpellingDictionaryEditDialog.html</file>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Debugger.CallStackViewer.html	Tue May 28 20:52:12 2013 +0200
@@ -0,0 +1,178 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.Debugger.CallStackViewer</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>eric5.Debugger.CallStackViewer</h1>
+<p>
+Module implementing the Call Stack viewer widget.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#CallStackViewer">CallStackViewer</a></td>
+<td>Class implementing the Call Stack viewer widget.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="CallStackViewer" ID="CallStackViewer"></a>
+<h2>CallStackViewer</h2>
+<p>
+    Class implementing the Call Stack viewer widget.
+</p><h3>Signals</h3>
+<dl>
+<dt>frameSelected(int)</dt>
+<dd>
+emitted to signal the selection of a frame entry
+</dd><dt>sourceFile(str, int)</dt>
+<dd>
+emitted to show the source of a stack entry
+</dd>
+</dl>
+<h3>Derived from</h3>
+QTreeWidget
+<h3>Class Attributes</h3>
+<table>
+<tr><td>FilenameRole</td></tr><tr><td>LinenoRole</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#CallStackViewer.__init__">CallStackViewer</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#CallStackViewer.__itemDoubleClicked">__itemDoubleClicked</a></td>
+<td>Private slot to handle a double click of a stack entry.</td>
+</tr><tr>
+<td><a href="#CallStackViewer.__openSource">__openSource</a></td>
+<td>Private slot to show the source for the selected stack entry.</td>
+</tr><tr>
+<td><a href="#CallStackViewer.__saveStackTrace">__saveStackTrace</a></td>
+<td>Private slot to save the stack trace info to a file.</td>
+</tr><tr>
+<td><a href="#CallStackViewer.__showCallStack">__showCallStack</a></td>
+<td>Public slot to show the call stack of the program being debugged.</td>
+</tr><tr>
+<td><a href="#CallStackViewer.__showContextMenu">__showContextMenu</a></td>
+<td>Private slot to show the context menu.</td>
+</tr><tr>
+<td><a href="#CallStackViewer.setDebugger">setDebugger</a></td>
+<td>Public method to set a reference to the Debug UI.</td>
+</tr><tr>
+<td><a href="#CallStackViewer.setProjectMode">setProjectMode</a></td>
+<td>Public slot to set the call trace viewer to project mode.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="CallStackViewer.__init__" ID="CallStackViewer.__init__"></a>
+<h4>CallStackViewer (Constructor)</h4>
+<b>CallStackViewer</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>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="CallStackViewer.__itemDoubleClicked" ID="CallStackViewer.__itemDoubleClicked"></a>
+<h4>CallStackViewer.__itemDoubleClicked</h4>
+<b>__itemDoubleClicked</b>(<i>itm</i>)
+<p>
+        Private slot to handle a double click of a stack entry.
+</p><dl>
+<dt><i>itm</i></dt>
+<dd>
+reference to the double clicked item (QTreeWidgetItem)
+</dd>
+</dl><a NAME="CallStackViewer.__openSource" ID="CallStackViewer.__openSource"></a>
+<h4>CallStackViewer.__openSource</h4>
+<b>__openSource</b>(<i></i>)
+<p>
+        Private slot to show the source for the selected stack entry.
+</p><a NAME="CallStackViewer.__saveStackTrace" ID="CallStackViewer.__saveStackTrace"></a>
+<h4>CallStackViewer.__saveStackTrace</h4>
+<b>__saveStackTrace</b>(<i></i>)
+<p>
+        Private slot to save the stack trace info to a file.
+</p><a NAME="CallStackViewer.__showCallStack" ID="CallStackViewer.__showCallStack"></a>
+<h4>CallStackViewer.__showCallStack</h4>
+<b>__showCallStack</b>(<i>stack</i>)
+<p>
+        Public slot to show the call stack of the program being debugged.
+</p><dl>
+<dt><i>stack</i></dt>
+<dd>
+list of tuples with call stack data (file name, line number,
+            function name, formatted argument/values list)
+</dd>
+</dl><a NAME="CallStackViewer.__showContextMenu" ID="CallStackViewer.__showContextMenu"></a>
+<h4>CallStackViewer.__showContextMenu</h4>
+<b>__showContextMenu</b>(<i>coord</i>)
+<p>
+        Private slot to show the context menu.
+</p><dl>
+<dt><i>coord</i></dt>
+<dd>
+the position of the mouse pointer (QPoint)
+</dd>
+</dl><a NAME="CallStackViewer.setDebugger" ID="CallStackViewer.setDebugger"></a>
+<h4>CallStackViewer.setDebugger</h4>
+<b>setDebugger</b>(<i>debugUI</i>)
+<p>
+        Public method to set a reference to the Debug UI.
+</p><dl>
+<dt><i>debugUI</i></dt>
+<dd>
+reference to the DebugUI object (DebugUI)
+</dd>
+</dl><a NAME="CallStackViewer.setProjectMode" ID="CallStackViewer.setProjectMode"></a>
+<h4>CallStackViewer.setProjectMode</h4>
+<b>setProjectMode</b>(<i>enabled</i>)
+<p>
+        Public slot to set the call trace viewer to project mode.
+</p><p>
+        In project mode the call trace info is shown with project relative
+        path names.
+</p><dl>
+<dt><i>enabled</i></dt>
+<dd>
+flag indicating to enable the project mode (boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.Debugger.CallTraceViewer.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.Debugger.CallTraceViewer.html	Tue May 28 20:52:12 2013 +0200
@@ -110,7 +110,10 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>debugServer</i></dt>
+<dd>
+reference to the debug server object (DebugServer)
+</dd><dt><i>parent</i></dt>
 <dd>
 reference to the parent widget (QWidget)
 </dd>
--- a/Documentation/Source/eric5.Debugger.DebugViewer.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.Debugger.DebugViewer.html	Tue May 28 20:52:12 2013 +0200
@@ -84,6 +84,9 @@
 <td><a href="#DebugViewer.__init__">DebugViewer</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#DebugViewer.__callStackFrameSelected">__callStackFrameSelected</a></td>
+<td>Private slot to handle the selection of a call stack entry of the call stack viewer.</td>
+</tr><tr>
 <td><a href="#DebugViewer.__frameSelected">__frameSelected</a></td>
 <td>Private slot to handle the selection of a new stack frame number.</td>
 </tr><tr>
@@ -117,6 +120,9 @@
 <td><a href="#DebugViewer.handleResetUI">handleResetUI</a></td>
 <td>Public method to reset the SBVviewer.</td>
 </tr><tr>
+<td><a href="#DebugViewer.initCallStackViewer">initCallStackViewer</a></td>
+<td>Public method to initialize the call stack viewer.</td>
+</tr><tr>
 <td><a href="#DebugViewer.isCallTraceEnabled">isCallTraceEnabled</a></td>
 <td>Public method to get the state of the call trace function.</td>
 </tr><tr>
@@ -188,6 +194,17 @@
                 have the file browser in a separate window or embedded
                 in the project browser instead.
 </dd>
+</dl><a NAME="DebugViewer.__callStackFrameSelected" ID="DebugViewer.__callStackFrameSelected"></a>
+<h4>DebugViewer.__callStackFrameSelected</h4>
+<b>__callStackFrameSelected</b>(<i>frameNo</i>)
+<p>
+        Private slot to handle the selection of a call stack entry of the
+        call stack viewer.
+</p><dl>
+<dt><i>frameNo</i></dt>
+<dd>
+frame number (index) of the selected entry (integer)
+</dd>
 </dl><a NAME="DebugViewer.__frameSelected" ID="DebugViewer.__frameSelected"></a>
 <h4>DebugViewer.__frameSelected</h4>
 <b>__frameSelected</b>(<i>frmnr</i>)
@@ -246,7 +263,13 @@
 <b>handleClientStack</b>(<i>stack</i>)
 <p>
         Public slot to show the call stack of the program being debugged.
-</p><a NAME="DebugViewer.handleDebuggingStarted" ID="DebugViewer.handleDebuggingStarted"></a>
+</p><dl>
+<dt><i>stack</i></dt>
+<dd>
+list of tuples with call stack data (file name, line number,
+            function name, formatted argument/values list)
+</dd>
+</dl><a NAME="DebugViewer.handleDebuggingStarted" ID="DebugViewer.handleDebuggingStarted"></a>
 <h4>DebugViewer.handleDebuggingStarted</h4>
 <b>handleDebuggingStarted</b>(<i></i>)
 <p>
@@ -263,7 +286,17 @@
 <b>handleResetUI</b>(<i></i>)
 <p>
         Public method to reset the SBVviewer.
-</p><a NAME="DebugViewer.isCallTraceEnabled" ID="DebugViewer.isCallTraceEnabled"></a>
+</p><a NAME="DebugViewer.initCallStackViewer" ID="DebugViewer.initCallStackViewer"></a>
+<h4>DebugViewer.initCallStackViewer</h4>
+<b>initCallStackViewer</b>(<i>projectMode</i>)
+<p>
+        Public method to initialize the call stack viewer.
+</p><dl>
+<dt><i>projectMode</i></dt>
+<dd>
+flag indicating to enable the project mode (boolean)
+</dd>
+</dl><a NAME="DebugViewer.isCallTraceEnabled" ID="DebugViewer.isCallTraceEnabled"></a>
 <h4>DebugViewer.isCallTraceEnabled</h4>
 <b>isCallTraceEnabled</b>(<i></i>)
 <p>
@@ -319,7 +352,7 @@
 </p><dl>
 <dt><i>debugUI</i></dt>
 <dd>
-reference to the DebugUI objectTrees
+reference to the DebugUI object (DebugUI)
 </dd>
 </dl><a NAME="DebugViewer.setVariablesFilter" ID="DebugViewer.setVariablesFilter"></a>
 <h4>DebugViewer.setVariablesFilter</h4>
--- a/Documentation/Source/eric5.E5Gui.E5SideBar.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.E5Gui.E5SideBar.html	Tue May 28 20:52:12 2013 +0200
@@ -67,6 +67,18 @@
 <td><a href="#E5SideBar.__autoHideToggled">__autoHideToggled</a></td>
 <td>Private slot to handle the toggling of the autohide button.</td>
 </tr><tr>
+<td><a href="#E5SideBar.__cancelDelayTimer">__cancelDelayTimer</a></td>
+<td>Private method to cancel the current delay timer.</td>
+</tr><tr>
+<td><a href="#E5SideBar.__delayedAction">__delayedAction</a></td>
+<td>Private slot to handle the firing of the delay timer.</td>
+</tr><tr>
+<td><a href="#E5SideBar.__expandIt">__expandIt</a></td>
+<td>Private method to expand the sidebar.</td>
+</tr><tr>
+<td><a href="#E5SideBar.__shrinkIt">__shrinkIt</a></td>
+<td>Private method to shrink the sidebar.</td>
+</tr><tr>
 <td><a href="#E5SideBar.__splitterMoved">__splitterMoved</a></td>
 <td>Private slot to react on splitter moves.</td>
 </tr><tr>
@@ -85,6 +97,9 @@
 <td><a href="#E5SideBar.currentWidget">currentWidget</a></td>
 <td>Public method to get a reference to the current widget.</td>
 </tr><tr>
+<td><a href="#E5SideBar.delay">delay</a></td>
+<td>Public method to get the delay value for the expand/shrink delay in milliseconds.</td>
+</tr><tr>
 <td><a href="#E5SideBar.enterEvent">enterEvent</a></td>
 <td>Protected method to handle the mouse entering this widget.</td>
 </tr><tr>
@@ -92,7 +107,7 @@
 <td>Protected method to handle some events for the tabbar.</td>
 </tr><tr>
 <td><a href="#E5SideBar.expand">expand</a></td>
-<td>Public method to expand the sidebar.</td>
+<td>Public method to record a expand request.</td>
 </tr><tr>
 <td><a href="#E5SideBar.indexOf">indexOf</a></td>
 <td>Public method to get the index of the given widget.</td>
@@ -136,6 +151,9 @@
 <td><a href="#E5SideBar.setCurrentWidget">setCurrentWidget</a></td>
 <td>Public slot to set the current widget.</td>
 </tr><tr>
+<td><a href="#E5SideBar.setDelay">setDelay</a></td>
+<td>Public method to set the delay value for the expand/shrink delay in milliseconds.</td>
+</tr><tr>
 <td><a href="#E5SideBar.setOrientation">setOrientation</a></td>
 <td>Public method to set the orientation of the sidebar.</td>
 </tr><tr>
@@ -158,7 +176,7 @@
 <td>Public method to set the WhatsThis text of a tab.</td>
 </tr><tr>
 <td><a href="#E5SideBar.shrink">shrink</a></td>
-<td>Public method to shrink the sidebar.</td>
+<td>Public method to record a shrink request.</td>
 </tr><tr>
 <td><a href="#E5SideBar.shutdown">shutdown</a></td>
 <td>Public method to shut down the object.</td>
@@ -185,13 +203,16 @@
 </table>
 <a NAME="E5SideBar.__init__" ID="E5SideBar.__init__"></a>
 <h4>E5SideBar (Constructor)</h4>
-<b>E5SideBar</b>(<i>orientation=None, parent=None</i>)
+<b>E5SideBar</b>(<i>orientation=None, delay=200, parent=None</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>orientation</i></dt>
 <dd>
 orientation of the sidebar widget (North, East, South, West)
+</dd><dt><i>delay</i></dt>
+<dd>
+value for the expand/shrink delay in milliseconds (integer)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
@@ -219,7 +240,27 @@
 <dd>
 flag indicating the checked state of the button (boolean)
 </dd>
-</dl><a NAME="E5SideBar.__splitterMoved" ID="E5SideBar.__splitterMoved"></a>
+</dl><a NAME="E5SideBar.__cancelDelayTimer" ID="E5SideBar.__cancelDelayTimer"></a>
+<h4>E5SideBar.__cancelDelayTimer</h4>
+<b>__cancelDelayTimer</b>(<i></i>)
+<p>
+        Private method to cancel the current delay timer.
+</p><a NAME="E5SideBar.__delayedAction" ID="E5SideBar.__delayedAction"></a>
+<h4>E5SideBar.__delayedAction</h4>
+<b>__delayedAction</b>(<i></i>)
+<p>
+        Private slot to handle the firing of the delay timer.
+</p><a NAME="E5SideBar.__expandIt" ID="E5SideBar.__expandIt"></a>
+<h4>E5SideBar.__expandIt</h4>
+<b>__expandIt</b>(<i></i>)
+<p>
+        Private method to expand the sidebar.
+</p><a NAME="E5SideBar.__shrinkIt" ID="E5SideBar.__shrinkIt"></a>
+<h4>E5SideBar.__shrinkIt</h4>
+<b>__shrinkIt</b>(<i></i>)
+<p>
+        Private method to shrink the sidebar.
+</p><a NAME="E5SideBar.__splitterMoved" ID="E5SideBar.__splitterMoved"></a>
 <h4>E5SideBar.__splitterMoved</h4>
 <b>__splitterMoved</b>(<i>pos, index</i>)
 <p>
@@ -285,6 +326,16 @@
 <dd>
 reference to the current widget (QWidget)
 </dd>
+</dl><a NAME="E5SideBar.delay" ID="E5SideBar.delay"></a>
+<h4>E5SideBar.delay</h4>
+<b>delay</b>(<i></i>)
+<p>
+        Public method to get the delay value for the expand/shrink delay in milliseconds.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+value for the expand/shrink delay in milliseconds (integer)
+</dd>
 </dl><a NAME="E5SideBar.enterEvent" ID="E5SideBar.enterEvent"></a>
 <h4>E5SideBar.enterEvent</h4>
 <b>enterEvent</b>(<i>event</i>)
@@ -317,7 +368,7 @@
 <h4>E5SideBar.expand</h4>
 <b>expand</b>(<i></i>)
 <p>
-        Public method to expand the sidebar.
+        Public method to record a expand request.
 </p><a NAME="E5SideBar.indexOf" ID="E5SideBar.indexOf"></a>
 <h4>E5SideBar.indexOf</h4>
 <b>indexOf</b>(<i>widget</i>)
@@ -474,6 +525,16 @@
 <dd>
 reference to the widget to become the current widget (QWidget)
 </dd>
+</dl><a NAME="E5SideBar.setDelay" ID="E5SideBar.setDelay"></a>
+<h4>E5SideBar.setDelay</h4>
+<b>setDelay</b>(<i>delay</i>)
+<p>
+        Public method to set the delay value for the expand/shrink delay in milliseconds.
+</p><dl>
+<dt><i>delay</i></dt>
+<dd>
+value for the expand/shrink delay in milliseconds (integer)
+</dd>
 </dl><a NAME="E5SideBar.setOrientation" ID="E5SideBar.setOrientation"></a>
 <h4>E5SideBar.setOrientation</h4>
 <b>setOrientation</b>(<i>orient</i>)
@@ -563,7 +624,7 @@
 <h4>E5SideBar.shrink</h4>
 <b>shrink</b>(<i></i>)
 <p>
-        Public method to shrink the sidebar.
+        Public method to record a shrink request.
 </p><a NAME="E5SideBar.shutdown" ID="E5SideBar.shutdown"></a>
 <h4>E5SideBar.shutdown</h4>
 <b>shutdown</b>(<i></i>)
--- a/Documentation/Source/eric5.Globals.__init__.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.Globals.__init__.html	Tue May 28 20:52:12 2013 +0200
@@ -43,6 +43,15 @@
 <td><a href="#getConfigDir">getConfigDir</a></td>
 <td>Module function to get the name of the directory storing the config data.</td>
 </tr><tr>
+<td><a href="#getPyQt4ModulesDirectory">getPyQt4ModulesDirectory</a></td>
+<td>Function to determine the path to PyQt4's modules directory.</td>
+</tr><tr>
+<td><a href="#getPythonModulesDirectory">getPythonModulesDirectory</a></td>
+<td>Function to determine the path to Python's modules directory.</td>
+</tr><tr>
+<td><a href="#getQtBinariesPath">getQtBinariesPath</a></td>
+<td>Module function to get the path of the Qt binaries.</td>
+</tr><tr>
 <td><a href="#isLinuxPlatform">isLinuxPlatform</a></td>
 <td>Function to check, if this is a Linux platform.</td>
 </tr><tr>
@@ -101,6 +110,45 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="getPyQt4ModulesDirectory" ID="getPyQt4ModulesDirectory"></a>
+<h2>getPyQt4ModulesDirectory</h2>
+<b>getPyQt4ModulesDirectory</b>(<i></i>)
+<p>
+    Function to determine the path to PyQt4's modules directory.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+path to the PyQt4 modules directory (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="getPythonModulesDirectory" ID="getPythonModulesDirectory"></a>
+<h2>getPythonModulesDirectory</h2>
+<b>getPythonModulesDirectory</b>(<i></i>)
+<p>
+    Function to determine the path to Python's modules directory.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+path to the Python modules directory (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="getQtBinariesPath" ID="getQtBinariesPath"></a>
+<h2>getQtBinariesPath</h2>
+<b>getQtBinariesPath</b>(<i></i>)
+<p>
+    Module function to get the path of the Qt binaries.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+path of the Qt binaries (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="isLinuxPlatform" ID="isLinuxPlatform"></a>
 <h2>isLinuxPlatform</h2>
 <b>isLinuxPlatform</b>(<i></i>)
--- a/Documentation/Source/eric5.Helpviewer.HelpBrowserWV.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.Helpviewer.HelpBrowserWV.html	Tue May 28 20:52:12 2013 +0200
@@ -1162,6 +1162,9 @@
 <td><a href="#HelpWebPage.getSslCertificateChain">getSslCertificateChain</a></td>
 <td>Public method to get a reference to the SSL certificate chain.</td>
 </tr><tr>
+<td><a href="#HelpWebPage.getSslConfiguration">getSslConfiguration</a></td>
+<td>Public method to return a reference to the current SSL configuration.</td>
+</tr><tr>
 <td><a href="#HelpWebPage.hasValidSslInfo">hasValidSslInfo</a></td>
 <td>Public method to check, if the page has a valid SSL certificate.</td>
 </tr><tr>
@@ -1331,6 +1334,16 @@
 <dd>
 SSL certificate chain (list of QSslCertificate)
 </dd>
+</dl><a NAME="HelpWebPage.getSslConfiguration" ID="HelpWebPage.getSslConfiguration"></a>
+<h4>HelpWebPage.getSslConfiguration</h4>
+<b>getSslConfiguration</b>(<i></i>)
+<p>
+        Public method to return a reference to the current SSL configuration.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the SSL configuration in use (QSslConfiguration)
+</dd>
 </dl><a NAME="HelpWebPage.hasValidSslInfo" ID="HelpWebPage.hasValidSslInfo"></a>
 <h4>HelpWebPage.hasValidSslInfo</h4>
 <b>hasValidSslInfo</b>(<i></i>)
--- a/Documentation/Source/eric5.Preferences.ConfigurationPages.QtPage.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.Preferences.ConfigurationPages.QtPage.html	Tue May 28 20:52:12 2013 +0200
@@ -66,9 +66,6 @@
 <td><a href="#QtPage.__updateQt4Sample">__updateQt4Sample</a></td>
 <td>Private slot to update the Qt4 tools sample label.</td>
 </tr><tr>
-<td><a href="#QtPage.on_qt4Button_clicked">on_qt4Button_clicked</a></td>
-<td>Private slot to handle the Qt4 directory selection.</td>
-</tr><tr>
 <td><a href="#QtPage.on_qt4PostfixEdit_textChanged">on_qt4PostfixEdit_textChanged</a></td>
 <td>Private slot to handle a change in the entered Qt directory.</td>
 </tr><tr>
@@ -96,11 +93,6 @@
 <b>__updateQt4Sample</b>(<i></i>)
 <p>
         Private slot to update the Qt4 tools sample label.
-</p><a NAME="QtPage.on_qt4Button_clicked" ID="QtPage.on_qt4Button_clicked"></a>
-<h4>QtPage.on_qt4Button_clicked</h4>
-<b>on_qt4Button_clicked</b>(<i></i>)
-<p>
-        Private slot to handle the Qt4 directory selection.
 </p><a NAME="QtPage.on_qt4PostfixEdit_textChanged" ID="QtPage.on_qt4PostfixEdit_textChanged"></a>
 <h4>QtPage.on_qt4PostfixEdit_textChanged</h4>
 <b>on_qt4PostfixEdit_textChanged</b>(<i>txt</i>)
--- a/Documentation/Source/eric5.Project.Project.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.Project.Project.html	Tue May 28 20:52:12 2013 +0200
@@ -224,9 +224,6 @@
 <td><a href="#Project.__loadRecent">__loadRecent</a></td>
 <td>Private method to load the recently opened project filenames.</td>
 </tr><tr>
-<td><a href="#Project.__makePpathRe">__makePpathRe</a></td>
-<td>Private method to generate a regular expression for the project path.</td>
-</tr><tr>
 <td><a href="#Project.__openRecent">__openRecent</a></td>
 <td>Private method to open a project from the list of rencently opened projects.</td>
 </tr><tr>
@@ -860,11 +857,6 @@
 <b>__loadRecent</b>(<i></i>)
 <p>
         Private method to load the recently opened project filenames.
-</p><a NAME="Project.__makePpathRe" ID="Project.__makePpathRe"></a>
-<h4>Project.__makePpathRe</h4>
-<b>__makePpathRe</b>(<i></i>)
-<p>
-        Private method to generate a regular expression for the project path.
 </p><a NAME="Project.__openRecent" ID="Project.__openRecent"></a>
 <h4>Project.__openRecent</h4>
 <b>__openRecent</b>(<i>act</i>)
--- a/Documentation/Source/eric5.QScintilla.Editor.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.QScintilla.Editor.html	Tue May 28 20:52:12 2013 +0200
@@ -443,6 +443,9 @@
 <td><a href="#Editor.__resetOnlineSyntaxCheckTimer">__resetOnlineSyntaxCheckTimer</a></td>
 <td>Private method to reset the online syntax check timer.</td>
 </tr><tr>
+<td><a href="#Editor.__resizeLinenoMargin">__resizeLinenoMargin</a></td>
+<td>Private slot to resize the line numbers margin.</td>
+</tr><tr>
 <td><a href="#Editor.__restoreBreakpoints">__restoreBreakpoints</a></td>
 <td>Private method to restore the breakpoints.</td>
 </tr><tr>
@@ -1010,6 +1013,9 @@
 <td><a href="#Editor.smartIndentLineOrSelection">smartIndentLineOrSelection</a></td>
 <td>Public slot to indent current line smartly.</td>
 </tr><tr>
+<td><a href="#Editor.sortLines">sortLines</a></td>
+<td>Public slot to sort the lines spanned by a rectangular selection.</td>
+</tr><tr>
 <td><a href="#Editor.startSharedEdit">startSharedEdit</a></td>
 <td>Public slot to start a shared edit session for the editor.</td>
 </tr><tr>
@@ -1935,6 +1941,11 @@
 <b>__resetOnlineSyntaxCheckTimer</b>(<i></i>)
 <p>
         Private method to reset the online syntax check timer.
+</p><a NAME="Editor.__resizeLinenoMargin" ID="Editor.__resizeLinenoMargin"></a>
+<h4>Editor.__resizeLinenoMargin</h4>
+<b>__resizeLinenoMargin</b>(<i></i>)
+<p>
+        Private slot to resize the line numbers margin.
 </p><a NAME="Editor.__restoreBreakpoints" ID="Editor.__restoreBreakpoints"></a>
 <h4>Editor.__restoreBreakpoints</h4>
 <b>__restoreBreakpoints</b>(<i></i>)
@@ -3551,6 +3562,11 @@
 <b>smartIndentLineOrSelection</b>(<i></i>)
 <p>
         Public slot to indent current line smartly.
+</p><a NAME="Editor.sortLines" ID="Editor.sortLines"></a>
+<h4>Editor.sortLines</h4>
+<b>sortLines</b>(<i></i>)
+<p>
+        Public slot to sort the lines spanned by a rectangular selection.
 </p><a NAME="Editor.startSharedEdit" ID="Editor.startSharedEdit"></a>
 <h4>Editor.startSharedEdit</h4>
 <b>startSharedEdit</b>(<i></i>)
--- a/Documentation/Source/eric5.QScintilla.MiniEditor.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.QScintilla.MiniEditor.html	Tue May 28 20:52:12 2013 +0200
@@ -183,6 +183,9 @@
 <td><a href="#MiniEditor.__resetLanguage">__resetLanguage</a></td>
 <td>Private method used to reset the language selection.</td>
 </tr><tr>
+<td><a href="#MiniEditor.__resizeLinenoMargin">__resizeLinenoMargin</a></td>
+<td>Private slot to resize the line numbers margin.</td>
+</tr><tr>
 <td><a href="#MiniEditor.__save">__save</a></td>
 <td>Private slot to save a file.</td>
 </tr><tr>
@@ -578,6 +581,11 @@
 <b>__resetLanguage</b>(<i></i>)
 <p>
         Private method used to reset the language selection.
+</p><a NAME="MiniEditor.__resizeLinenoMargin" ID="MiniEditor.__resizeLinenoMargin"></a>
+<h4>MiniEditor.__resizeLinenoMargin</h4>
+<b>__resizeLinenoMargin</b>(<i></i>)
+<p>
+        Private slot to resize the line numbers margin.
 </p><a NAME="MiniEditor.__save" ID="MiniEditor.__save"></a>
 <h4>MiniEditor.__save</h4>
 <b>__save</b>(<i></i>)
--- a/Documentation/Source/eric5.QScintilla.QsciScintillaCompat.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.QScintilla.QsciScintillaCompat.html	Tue May 28 20:52:12 2013 +0200
@@ -199,12 +199,27 @@
 <td><a href="#QsciScintillaCompat.getLineSeparator">getLineSeparator</a></td>
 <td>Public method to get the line separator for the current eol mode.</td>
 </tr><tr>
+<td><a href="#QsciScintillaCompat.getRectangularSelection">getRectangularSelection</a></td>
+<td>Public method to retrieve the start and end of a rectangular selection.</td>
+</tr><tr>
+<td><a href="#QsciScintillaCompat.getSelectionCount">getSelectionCount</a></td>
+<td>Public method to get the number of active selections.</td>
+</tr><tr>
+<td><a href="#QsciScintillaCompat.getSelectionN">getSelectionN</a></td>
+<td>Public method to get the start and end of a selection given by it's index.</td>
+</tr><tr>
+<td><a href="#QsciScintillaCompat.getSelections">getSelections</a></td>
+<td>Public method to get the start and end coordinates of all active selections.</td>
+</tr><tr>
 <td><a href="#QsciScintillaCompat.getZoom">getZoom</a></td>
 <td>Public method used to retrieve the current zoom factor.</td>
 </tr><tr>
 <td><a href="#QsciScintillaCompat.hasIndicator">hasIndicator</a></td>
 <td>Public method to test for the existence of an indicator.</td>
 </tr><tr>
+<td><a href="#QsciScintillaCompat.hasSelection">hasSelection</a></td>
+<td>Public method to check for a selection.</td>
+</tr><tr>
 <td><a href="#QsciScintillaCompat.indentationGuideView">indentationGuideView</a></td>
 <td>Public method to get the indentation guide view.</td>
 </tr><tr>
@@ -262,6 +277,9 @@
 <td><a href="#QsciScintillaCompat.scrollVertical">scrollVertical</a></td>
 <td>Public method to scroll the text area.</td>
 </tr><tr>
+<td><a href="#QsciScintillaCompat.selectionIsRectangle">selectionIsRectangle</a></td>
+<td>Public method to check, if the current selection is rectangular.</td>
+</tr><tr>
 <td><a href="#QsciScintillaCompat.setContractedFolds">setContractedFolds</a></td>
 <td>Public method to set a list of line numbers of collapsed folds.</td>
 </tr><tr>
@@ -292,12 +310,18 @@
 <td><a href="#QsciScintillaCompat.setLexer">setLexer</a></td>
 <td>Public method to set the lexer.</td>
 </tr><tr>
+<td><a href="#QsciScintillaCompat.setRectangularSelection">setRectangularSelection</a></td>
+<td>Public method to set a rectangular selection.</td>
+</tr><tr>
 <td><a href="#QsciScintillaCompat.setStyleBits">setStyleBits</a></td>
 <td>Public method to set the number of bits to be used for styling.</td>
 </tr><tr>
 <td><a href="#QsciScintillaCompat.setStyling">setStyling</a></td>
 <td>Public method to style some text.</td>
 </tr><tr>
+<td><a href="#QsciScintillaCompat.setVirtualSpaceOptions">setVirtualSpaceOptions</a></td>
+<td>Public method to set the virtual space usage options.</td>
+</tr><tr>
 <td><a href="#QsciScintillaCompat.showUserList">showUserList</a></td>
 <td>Public method to show a user supplied list.</td>
 </tr><tr>
@@ -789,6 +813,49 @@
 <dd>
 eol string (string)
 </dd>
+</dl><a NAME="QsciScintillaCompat.getRectangularSelection" ID="QsciScintillaCompat.getRectangularSelection"></a>
+<h4>QsciScintillaCompat.getRectangularSelection</h4>
+<b>getRectangularSelection</b>(<i></i>)
+<p>
+        Public method to retrieve the start and end of a rectangular selection.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple with start line and index and end line and index
+            (tuple of four int)
+</dd>
+</dl><a NAME="QsciScintillaCompat.getSelectionCount" ID="QsciScintillaCompat.getSelectionCount"></a>
+<h4>QsciScintillaCompat.getSelectionCount</h4>
+<b>getSelectionCount</b>(<i></i>)
+<p>
+        Public method to get the number of active selections.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+number of active selection (integer)
+</dd>
+</dl><a NAME="QsciScintillaCompat.getSelectionN" ID="QsciScintillaCompat.getSelectionN"></a>
+<h4>QsciScintillaCompat.getSelectionN</h4>
+<b>getSelectionN</b>(<i>index</i>)
+<p>
+        Public method to get the start and end of a selection given by it's index.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple with start line and index and end line and index
+            (tuple of four int) for the given selection
+</dd>
+</dl><a NAME="QsciScintillaCompat.getSelections" ID="QsciScintillaCompat.getSelections"></a>
+<h4>QsciScintillaCompat.getSelections</h4>
+<b>getSelections</b>(<i></i>)
+<p>
+        Public method to get the start and end coordinates of all active selections.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of tuples with start line and index and end line and index
+            of each active selection (list of tuples of four int)
+</dd>
 </dl><a NAME="QsciScintillaCompat.getZoom" ID="QsciScintillaCompat.getZoom"></a>
 <h4>QsciScintillaCompat.getZoom</h4>
 <b>getZoom</b>(<i></i>)
@@ -818,6 +885,16 @@
 <dd>
 flag indicating the existence of the indicator (boolean)
 </dd>
+</dl><a NAME="QsciScintillaCompat.hasSelection" ID="QsciScintillaCompat.hasSelection"></a>
+<h4>QsciScintillaCompat.hasSelection</h4>
+<b>hasSelection</b>(<i></i>)
+<p>
+        Public method to check for a selection.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the presence of a selection (boolean)
+</dd>
 </dl><a NAME="QsciScintillaCompat.indentationGuideView" ID="QsciScintillaCompat.indentationGuideView"></a>
 <h4>QsciScintillaCompat.indentationGuideView</h4>
 <b>indentationGuideView</b>(<i></i>)
@@ -1043,6 +1120,16 @@
 number of lines to scroll (negative scrolls up,
             positive scrolls down) (integer)
 </dd>
+</dl><a NAME="QsciScintillaCompat.selectionIsRectangle" ID="QsciScintillaCompat.selectionIsRectangle"></a>
+<h4>QsciScintillaCompat.selectionIsRectangle</h4>
+<b>selectionIsRectangle</b>(<i></i>)
+<p>
+        Public method to check, if the current selection is rectangular.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a rectangular selection (boolean)
+</dd>
 </dl><a NAME="QsciScintillaCompat.setContractedFolds" ID="QsciScintillaCompat.setContractedFolds"></a>
 <h4>QsciScintillaCompat.setContractedFolds</h4>
 <b>setContractedFolds</b>(<i>folds</i>)
@@ -1192,6 +1279,25 @@
 <dd>
 the lexer to be set or None to reset it.
 </dd>
+</dl><a NAME="QsciScintillaCompat.setRectangularSelection" ID="QsciScintillaCompat.setRectangularSelection"></a>
+<h4>QsciScintillaCompat.setRectangularSelection</h4>
+<b>setRectangularSelection</b>(<i>startLine, startIndex, endLine, endIndex</i>)
+<p>
+        Public method to set a rectangular selection.
+</p><dl>
+<dt><i>startLine</i></dt>
+<dd>
+line number of the start of the selection (int)
+</dd><dt><i>startIndex</i></dt>
+<dd>
+index number of the start of the selection (int)
+</dd><dt><i>endLine</i></dt>
+<dd>
+line number of the end of the selection (int)
+</dd><dt><i>endIndex</i></dt>
+<dd>
+index number of the end of the selection (int)
+</dd>
 </dl><a NAME="QsciScintillaCompat.setStyleBits" ID="QsciScintillaCompat.setStyleBits"></a>
 <h4>QsciScintillaCompat.setStyleBits</h4>
 <b>setStyleBits</b>(<i>bits</i>)
@@ -1215,6 +1321,16 @@
 <dd>
 style to set for text (integer)
 </dd>
+</dl><a NAME="QsciScintillaCompat.setVirtualSpaceOptions" ID="QsciScintillaCompat.setVirtualSpaceOptions"></a>
+<h4>QsciScintillaCompat.setVirtualSpaceOptions</h4>
+<b>setVirtualSpaceOptions</b>(<i>options</i>)
+<p>
+        Public method to set the virtual space usage options.
+</p><dl>
+<dt><i>options</i></dt>
+<dd>
+usage options to set (integer, 0 to 3)
+</dd>
 </dl><a NAME="QsciScintillaCompat.showUserList" ID="QsciScintillaCompat.showUserList"></a>
 <h4>QsciScintillaCompat.showUserList</h4>
 <b>showUserList</b>(<i>id, lst</i>)
--- a/Documentation/Source/eric5.QScintilla.SearchReplaceWidget.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.QScintilla.SearchReplaceWidget.html	Tue May 28 20:52:12 2013 +0200
@@ -232,6 +232,9 @@
 <td><a href="#SearchReplaceWidget.__markOccurrences">__markOccurrences</a></td>
 <td>Private method to mark all occurrences of the search text.</td>
 </tr><tr>
+<td><a href="#SearchReplaceWidget.__selectionBoundary">__selectionBoundary</a></td>
+<td>Private method to calculate the current selection boundary.</td>
+</tr><tr>
 <td><a href="#SearchReplaceWidget.__showFind">__showFind</a></td>
 <td>Private method to display this widget in find mode.</td>
 </tr><tr>
@@ -345,6 +348,23 @@
 <dd>
 text to search for (string)
 </dd>
+</dl><a NAME="SearchReplaceWidget.__selectionBoundary" ID="SearchReplaceWidget.__selectionBoundary"></a>
+<h4>SearchReplaceWidget.__selectionBoundary</h4>
+<b>__selectionBoundary</b>(<i>selections=None</i>)
+<p>
+        Private method to calculate the current selection boundary.
+</p><dl>
+<dt><i>selections</i></dt>
+<dd>
+optional parameter giving the selections to
+            calculate the boundary for (list of tuples of four integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of start line and index and end line and index
+            (tuple of four integer)
+</dd>
 </dl><a NAME="SearchReplaceWidget.__showFind" ID="SearchReplaceWidget.__showFind"></a>
 <h4>SearchReplaceWidget.__showFind</h4>
 <b>__showFind</b>(<i>text=''</i>)
--- a/Documentation/Source/eric5.QScintilla.Shell.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.QScintilla.Shell.html	Tue May 28 20:52:12 2013 +0200
@@ -207,6 +207,9 @@
 <td><a href="#Shell.__resetAndClear">__resetAndClear</a></td>
 <td>Private slot to handle the 'reset and clear' context menu entry.</td>
 </tr><tr>
+<td><a href="#Shell.__resizeLinenoMargin">__resizeLinenoMargin</a></td>
+<td>Private slot to resize the line numbers margin.</td>
+</tr><tr>
 <td><a href="#Shell.__rsearchHistory">__rsearchHistory</a></td>
 <td>Private method used to reverse search the history.</td>
 </tr><tr>
@@ -715,6 +718,11 @@
 <b>__resetAndClear</b>(<i></i>)
 <p>
         Private slot to handle the 'reset and clear' context menu entry.
+</p><a NAME="Shell.__resizeLinenoMargin" ID="Shell.__resizeLinenoMargin"></a>
+<h4>Shell.__resizeLinenoMargin</h4>
+<b>__resizeLinenoMargin</b>(<i></i>)
+<p>
+        Private slot to resize the line numbers margin.
 </p><a NAME="Shell.__rsearchHistory" ID="Shell.__rsearchHistory"></a>
 <h4>Shell.__rsearchHistory</h4>
 <b>__rsearchHistory</b>(<i>txt, startIdx=-1</i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.QScintilla.SortOptionsDialog.html	Tue May 28 20:52:12 2013 +0200
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.QScintilla.SortOptionsDialog</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>eric5.QScintilla.SortOptionsDialog</h1>
+<p>
+Module implementing a dialog to enter the sort options for a line sort.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#SortOptionsDialog">SortOptionsDialog</a></td>
+<td>Class implementing a dialog to enter the sort options for a line sort.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="SortOptionsDialog" ID="SortOptionsDialog"></a>
+<h2>SortOptionsDialog</h2>
+<p>
+    Class implementing a dialog to enter the sort options for a line sort.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_SortOptionsDialog
+<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="#SortOptionsDialog.__init__">SortOptionsDialog</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#SortOptionsDialog.getData">getData</a></td>
+<td>Public method to get the selected options.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="SortOptionsDialog.__init__" ID="SortOptionsDialog.__init__"></a>
+<h4>SortOptionsDialog (Constructor)</h4>
+<b>SortOptionsDialog</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="SortOptionsDialog.getData" ID="SortOptionsDialog.getData"></a>
+<h4>SortOptionsDialog.getData</h4>
+<b>getData</b>(<i></i>)
+<p>
+        Public method to get the selected options.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple of three flags indicating ascending order, alphanumeric sort
+            and case sensitivity (tuple of three boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.UI.BrowserModel.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.UI.BrowserModel.html	Tue May 28 20:52:12 2013 +0200
@@ -1398,13 +1398,16 @@
 </table>
 <a NAME="BrowserModel.__init__" ID="BrowserModel.__init__"></a>
 <h4>BrowserModel (Constructor)</h4>
-<b>BrowserModel</b>(<i>parent=None</i>)
+<b>BrowserModel</b>(<i>parent=None, nopopulate=False</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>parent</i></dt>
 <dd>
 reference to parent object (QObject)
+</dd><dt><i>nopopulate=</i></dt>
+<dd>
+flag indicating to not populate the model (boolean)
 </dd>
 </dl><a NAME="BrowserModel.__populateModel" ID="BrowserModel.__populateModel"></a>
 <h4>BrowserModel.__populateModel</h4>
--- a/Documentation/Source/eric5.Utilities.__init__.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.Utilities.__init__.html	Tue May 28 20:52:12 2013 +0200
@@ -109,6 +109,9 @@
 <td><a href="#getExecutablePath">getExecutablePath</a></td>
 <td>Function to build the full path of an executable file from the environment.</td>
 </tr><tr>
+<td><a href="#getExecutablePaths">getExecutablePaths</a></td>
+<td>Function to build all full path of an executable file from the environment.</td>
+</tr><tr>
 <td><a href="#getHomeDir">getHomeDir</a></td>
 <td>Function to get a users home directory</td>
 </tr><tr>
@@ -121,9 +124,6 @@
 <td><a href="#getPythonLibPath">getPythonLibPath</a></td>
 <td>Function to determine the path to Python's library.</td>
 </tr><tr>
-<td><a href="#getPythonModulesDirectory">getPythonModulesDirectory</a></td>
-<td>Function to determine the path to Python's modules directory.</td>
-</tr><tr>
 <td><a href="#getPythonVersion">getPythonVersion</a></td>
 <td>Function to get the Python version (major, minor) as an integer value.</td>
 </tr><tr>
@@ -802,6 +802,26 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="getExecutablePaths" ID="getExecutablePaths"></a>
+<h2>getExecutablePaths</h2>
+<b>getExecutablePaths</b>(<i>file</i>)
+<p>
+    Function to build all full path of an executable file from the environment.
+</p><dl>
+<dt><i>file</i></dt>
+<dd>
+filename of the executable (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+list of full executable names (list of strings), if the executable file
+        is accessible via the searchpath defined by the PATH environment variable,
+        or an empty list otherwise.
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="getHomeDir" ID="getHomeDir"></a>
 <h2>getHomeDir</h2>
 <b>getHomeDir</b>(<i></i>)
@@ -859,19 +879,6 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
-<a NAME="getPythonModulesDirectory" ID="getPythonModulesDirectory"></a>
-<h2>getPythonModulesDirectory</h2>
-<b>getPythonModulesDirectory</b>(<i></i>)
-<p>
-    Function to determine the path to Python's modules directory.
-</p><dl>
-<dt>Returns:</dt>
-<dd>
-path to the Python modules directory (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr /><hr />
 <a NAME="getPythonVersion" ID="getPythonVersion"></a>
 <h2>getPythonVersion</h2>
 <b>getPythonVersion</b>(<i></i>)
--- a/Documentation/Source/eric5.ViewManager.ViewManager.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.ViewManager.ViewManager.html	Tue May 28 20:52:12 2013 +0200
@@ -311,6 +311,9 @@
 <td><a href="#ViewManager.__editSmartIndent">__editSmartIndent</a></td>
 <td>Private method to handle the smart indent action</td>
 </tr><tr>
+<td><a href="#ViewManager.__editSortSelectedLines">__editSortSelectedLines</a></td>
+<td>Private slot to sort the selected lines.</td>
+</tr><tr>
 <td><a href="#ViewManager.__editSpellingDictionary">__editSpellingDictionary</a></td>
 <td>Private slot to edit the given spelling dictionary.</td>
 </tr><tr>
@@ -350,6 +353,9 @@
 <td><a href="#ViewManager.__editorSaved">__editorSaved</a></td>
 <td>Private slot to handle the editorSaved signal.</td>
 </tr><tr>
+<td><a href="#ViewManager.__editorSelectionChanged">__editorSelectionChanged</a></td>
+<td>Private slot to handle changes of the current editors selection.</td>
+</tr><tr>
 <td><a href="#ViewManager.__enableSpellingActions">__enableSpellingActions</a></td>
 <td>Private method to set the enabled state of the spelling actions.</td>
 </tr><tr>
@@ -548,6 +554,9 @@
 <td><a href="#ViewManager.__showBookmarksMenu">__showBookmarksMenu</a></td>
 <td>Private method to handle the show bookmarks menu signal.</td>
 </tr><tr>
+<td><a href="#ViewManager.__showEditSpellingMenu">__showEditSpellingMenu</a></td>
+<td>Private method to set up the edit dictionaries menu.</td>
+</tr><tr>
 <td><a href="#ViewManager.__showFileMenu">__showFileMenu</a></td>
 <td>Private method to set up the file menu.</td>
 </tr><tr>
@@ -1143,6 +1152,11 @@
 <b>__editSmartIndent</b>(<i></i>)
 <p>
         Private method to handle the smart indent action
+</p><a NAME="ViewManager.__editSortSelectedLines" ID="ViewManager.__editSortSelectedLines"></a>
+<h4>ViewManager.__editSortSelectedLines</h4>
+<b>__editSortSelectedLines</b>(<i></i>)
+<p>
+        Private slot to sort the selected lines.
 </p><a NAME="ViewManager.__editSpellingDictionary" ID="ViewManager.__editSpellingDictionary"></a>
 <h4>ViewManager.__editSpellingDictionary</h4>
 <b>__editSpellingDictionary</b>(<i>dictionaryFile</i>)
@@ -1220,7 +1234,12 @@
 <dd>
 filename of the saved editor
 </dd>
-</dl><a NAME="ViewManager.__enableSpellingActions" ID="ViewManager.__enableSpellingActions"></a>
+</dl><a NAME="ViewManager.__editorSelectionChanged" ID="ViewManager.__editorSelectionChanged"></a>
+<h4>ViewManager.__editorSelectionChanged</h4>
+<b>__editorSelectionChanged</b>(<i></i>)
+<p>
+        Private slot to handle changes of the current editors selection.
+</p><a NAME="ViewManager.__enableSpellingActions" ID="ViewManager.__enableSpellingActions"></a>
 <h4>ViewManager.__enableSpellingActions</h4>
 <b>__enableSpellingActions</b>(<i></i>)
 <p>
@@ -1621,6 +1640,11 @@
 <b>__showBookmarksMenu</b>(<i></i>)
 <p>
         Private method to handle the show bookmarks menu signal.
+</p><a NAME="ViewManager.__showEditSpellingMenu" ID="ViewManager.__showEditSpellingMenu"></a>
+<h4>ViewManager.__showEditSpellingMenu</h4>
+<b>__showEditSpellingMenu</b>(<i></i>)
+<p>
+        Private method to set up the edit dictionaries menu.
 </p><a NAME="ViewManager.__showFileMenu" ID="ViewManager.__showFileMenu"></a>
 <h4>ViewManager.__showFileMenu</h4>
 <b>__showFileMenu</b>(<i></i>)
--- a/Documentation/Source/eric5.uninstall.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/eric5.uninstall.html	Tue May 28 20:52:12 2013 +0200
@@ -34,6 +34,9 @@
 <h3>Functions</h3>
 <table>
 <tr>
+<td><a href="#exit">exit</a></td>
+<td>Exit the uninstall script.</td>
+</tr><tr>
 <td><a href="#initGlobals">initGlobals</a></td>
 <td>Sets the values of globals that need more than a simple assignment.</td>
 </tr><tr>
@@ -51,6 +54,14 @@
 </tr>
 </table>
 <hr /><hr />
+<a NAME="exit" ID="exit"></a>
+<h2>exit</h2>
+<b>exit</b>(<i>rcode=0</i>)
+<p>
+    Exit the uninstall script.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="initGlobals" ID="initGlobals"></a>
 <h2>initGlobals</h2>
 <b>initGlobals</b>(<i></i>)
--- a/Documentation/Source/index-eric5.Debugger.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/index-eric5.Debugger.html	Tue May 28 20:52:12 2013 +0200
@@ -37,6 +37,9 @@
 <td><a href="eric5.Debugger.BreakPointViewer.html">BreakPointViewer</a></td>
 <td>Module implementing the Breakpoint viewer widget.</td>
 </tr><tr>
+<td><a href="eric5.Debugger.CallStackViewer.html">CallStackViewer</a></td>
+<td>Module implementing the Call Stack viewer widget.</td>
+</tr><tr>
 <td><a href="eric5.Debugger.CallTraceViewer.html">CallTraceViewer</a></td>
 <td>Module implementing the Call Trace viewer widget.</td>
 </tr><tr>
--- a/Documentation/Source/index-eric5.QScintilla.html	Fri May 24 18:39:58 2013 +0200
+++ b/Documentation/Source/index-eric5.QScintilla.html	Tue May 28 20:52:12 2013 +0200
@@ -80,6 +80,9 @@
 <td><a href="eric5.QScintilla.ShellHistoryDialog.html">ShellHistoryDialog</a></td>
 <td>Module implementing the shell history dialog.</td>
 </tr><tr>
+<td><a href="eric5.QScintilla.SortOptionsDialog.html">SortOptionsDialog</a></td>
+<td>Module implementing a dialog to enter the sort options for a line sort.</td>
+</tr><tr>
 <td><a href="eric5.QScintilla.SpellChecker.html">SpellChecker</a></td>
 <td>Module implementing the spell checker for the editor component.</td>
 </tr><tr>
--- a/DocumentationTools/QtHelpGenerator.py	Fri May 24 18:39:58 2013 +0200
+++ b/DocumentationTools/QtHelpGenerator.py	Tue May 28 20:52:12 2013 +0200
@@ -14,7 +14,7 @@
 import shutil
 import subprocess
 
-from Utilities import joinext, relpath, html_encode
+from Utilities import joinext, relpath, html_encode, getQtBinariesPath
 
 HelpCollection = r"""<?xml version="1.0" encoding="utf-8" ?>
 <QHelpCollectionProject version="1.0">
@@ -261,8 +261,8 @@
         # generate the compressed files
         shutil.copy(os.path.join(self.outputDir, HelpProjectFile), self.htmlDir)
         os.chdir(self.htmlDir)
-        subprocess.call(["qhelpgenerator", "source.qhp",
-                         "-o", os.path.join(self.outputDir, HelpHelpFile)])
+        subprocess.call([os.path.join(getQtBinariesPath(), "qhelpgenerator"),
+                         "source.qhp", "-o", os.path.join(self.outputDir, HelpHelpFile)])
         os.remove(HelpProjectFile)
         
         if self.createCollection:
@@ -270,6 +270,7 @@
             sys.stdout.flush()
             sys.stderr.flush()
             os.chdir(self.outputDir)
-            subprocess.call(["qcollectiongenerator", "source.qhcp", "-o", "collection.qhc"])
+            subprocess.call([os.path.join(getQtBinariesPath(), "qcollectiongenerator"),
+                             "source.qhcp", "-o", "collection.qhc"])
         
         os.chdir(cwd)
--- a/E5Gui/E5SideBar.py	Fri May 24 18:39:58 2013 +0200
+++ b/E5Gui/E5SideBar.py	Tue May 28 20:52:12 2013 +0200
@@ -9,7 +9,7 @@
 
 from __future__ import unicode_literals    # __IGNORE_WARNING__
 
-from PyQt4.QtCore import QEvent, QSize, Qt, QByteArray, QDataStream, QIODevice
+from PyQt4.QtCore import QEvent, QSize, Qt, QByteArray, QDataStream, QIODevice, QTimer
 from PyQt4.QtGui import QTabBar, QWidget, QStackedWidget, QBoxLayout, QToolButton, \
     QSizePolicy
 
@@ -30,11 +30,12 @@
     South = 2
     West = 3
     
-    def __init__(self, orientation=None, parent=None):
+    def __init__(self, orientation=None, delay=200, parent=None):
         """
         Constructor
         
         @param orientation orientation of the sidebar widget (North, East, South, West)
+        @param delay value for the expand/shrink delay in milliseconds (integer)
         @param parent parent widget (QWidget)
         """
         super(E5SideBar, self).__init__(parent)
@@ -63,6 +64,13 @@
         self.layout.addWidget(self.__stackedWidget)
         self.setLayout(self.layout)
         
+        # initialize the delay timer
+        self.__actionMethod = None
+        self.__delayTimer = QTimer(self)
+        self.__delayTimer.setSingleShot(True)
+        self.__delayTimer.setInterval(delay)
+        self.__delayTimer.timeout.connect(self.__delayedAction)
+        
         self.__minimized = False
         self.__minSize = 0
         self.__maxSize = 0
@@ -107,9 +115,47 @@
         if self.splitter:
             self.splitterSizes = self.splitter.sizes()
     
+    def __delayedAction(self):
+        """
+        Private slot to handle the firing of the delay timer.
+        """
+        if self.__actionMethod is not None:
+            self.__actionMethod()
+    
+    def setDelay(self, delay):
+        """
+        Public method to set the delay value for the expand/shrink delay in milliseconds.
+        
+        @param delay value for the expand/shrink delay in milliseconds (integer)
+        """
+        self.__delayTimer.setInterval(delay)
+    
+    def delay(self):
+        """
+        Public method to get the delay value for the expand/shrink delay in milliseconds.
+        
+        @return value for the expand/shrink delay in milliseconds (integer)
+        """
+        return self.__delayTimer.interval()
+    
+    def __cancelDelayTimer(self):
+        """
+        Private method to cancel the current delay timer.
+        """
+        self.__delayTimer.stop()
+        self.__actionMethod = None
+    
     def shrink(self):
         """
-        Public method to shrink the sidebar.
+        Public method to record a shrink request.
+        """
+        self.__delayTimer.stop()
+        self.__actionMethod = self.__shrinkIt
+        self.__delayTimer.start()
+   
+    def __shrinkIt(self):
+        """
+        Private method to shrink the sidebar.
         """
         self.__minimized = True
         self.__bigSize = self.size()
@@ -128,10 +174,20 @@
             self.setFixedHeight(self.__tabBar.minimumSizeHint().height())
         else:
             self.setFixedWidth(self.__tabBar.minimumSizeHint().width())
+        
+        self.__actionMethod = None
     
     def expand(self):
         """
-        Public method to expand the sidebar.
+        Public method to record a expand request.
+        """
+        self.__delayTimer.stop()
+        self.__actionMethod = self.__expandIt
+        self.__delayTimer.start()
+    
+    def __expandIt(self):
+        """
+        Private method to expand the sidebar.
         """
         self.__minimized = False
         self.__stackedWidget.show()
@@ -146,6 +202,8 @@
             self.setMaximumWidth(self.__maxSize)
         if self.splitter:
             self.splitter.setSizes(self.splitterSizes)
+        
+        self.__actionMethod = None
     
     def isMinimized(self):
         """
@@ -587,6 +645,8 @@
         """
         if self.__autoHide and self.isMinimized():
             self.expand()
+        else:
+            self.__cancelDelayTimer()
     
     def leaveEvent(self, event):
         """
@@ -596,6 +656,8 @@
         """
         if self.__autoHide and not self.__hasFocus and not self.isMinimized():
             self.shrink()
+        else:
+            self.__cancelDelayTimer()
     
     def shutdown(self):
         """
--- a/E5Network/E5SslCertificatesInfoWidget.py	Fri May 24 18:39:58 2013 +0200
+++ b/E5Network/E5SslCertificatesInfoWidget.py	Tue May 28 20:52:12 2013 +0200
@@ -50,9 +50,15 @@
         self.__chain = certificateChain[:]
         
         for cert in self.__chain:
-            name = cert.subjectInfo(QSslCertificate.CommonName)
+            if qVersion() >= "5.0.0":
+                name = ", ".join(cert.subjectInfo(QSslCertificate.CommonName))
+            else:
+                name = cert.subjectInfo(QSslCertificate.CommonName)
             if not name:
-                name = cert.subjectInfo(QSslCertificate.Organization)
+                if qVersion() >= "5.0.0":
+                    name = ", ".join(cert.subjectInfo(QSslCertificate.Organization))
+                else:
+                    name = cert.subjectInfo(QSslCertificate.Organization)
             if not name:
                 name = cert.serialNumber()
             self.chainComboBox.addItem(name)
--- a/E5Network/E5SslInfoWidget.py	Fri May 24 18:39:58 2013 +0200
+++ b/E5Network/E5SslInfoWidget.py	Tue May 28 20:52:12 2013 +0200
@@ -170,7 +170,10 @@
         @param pos position to show at (QPoint)
         """
         self.adjustSize()
-        p = QPoint(pos.x() - self.width(), pos.y() + 10)
+        xpos = pos.x() - self.width()
+        if xpos < 0:
+            xpos = 10
+        p = QPoint(xpos, pos.y() + 10)
         self.move(p)
         self.show()
     
--- a/Globals/__init__.py	Fri May 24 18:39:58 2013 +0200
+++ b/Globals/__init__.py	Tue May 28 20:52:12 2013 +0200
@@ -12,7 +12,7 @@
 import sys
 import os
 
-from PyQt4.QtCore import QDir
+from PyQt4.QtCore import QDir, QLibraryInfo
 
 # names of the various settings objects
 settingsNameOrganization = "Eric5"
@@ -147,6 +147,49 @@
     configDir = os.path.expanduser(d)
 
 
+def getPythonModulesDirectory():
+    """
+    Function to determine the path to Python's modules directory.
+    
+    @return path to the Python modules directory (string)
+    """
+    import distutils.sysconfig
+    return distutils.sysconfig.get_python_lib(True)
+
+
+def getPyQt4ModulesDirectory():
+    """
+    Function to determine the path to PyQt4's modules directory.
+    
+    @return path to the PyQt4 modules directory (string)
+    """
+    import distutils.sysconfig
+    return os.path.join(distutils.sysconfig.get_python_lib(True), "PyQt4")
+    
+
+def getQtBinariesPath():
+    """
+    Module function to get the path of the Qt binaries.
+    
+    @return path of the Qt binaries (string)
+    """
+    path = ""
+    if isWindowsPlatform():
+        # check for PyQt4 installer first (designer is test object)
+        modDir = getPyQt4ModulesDirectory()
+        if os.path.exists(os.path.join(modDir, "bin", "designer.exe")):
+            path = os.path.join(modDir, "bin")
+        elif os.path.exists(os.path.join(modDir, "designer.exe")):
+            path = modDir
+    
+    if not path:
+        path = QLibraryInfo.location(QLibraryInfo.BinariesPath)
+        if not os.path.exists(path):
+            path = ""
+    
+    return QDir.toNativeSeparators(path)
+
+
 ################################################################################
 ## functions for searching a Python2/3 interpreter
 ################################################################################
--- a/Helpviewer/HelpBrowserWV.py	Fri May 24 18:39:58 2013 +0200
+++ b/Helpviewer/HelpBrowserWV.py	Tue May 28 20:52:12 2013 +0200
@@ -496,6 +496,14 @@
         chain = self.__sslConfiguration.peerCertificateChain()
         return chain
     
+    def getSslConfiguration(self):
+        """
+        Public method to return a reference to the current SSL configuration.
+        
+        @return reference to the SSL configuration in use (QSslConfiguration)
+        """
+        return self.__sslConfiguration
+    
     def showSslInfo(self, pos):
         """
         Public slot to show some SSL information for the loaded page.
--- a/Helpviewer/QtHelpFiltersDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Helpviewer/QtHelpFiltersDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -125,7 +125,8 @@
         """
         Private slot to remove a filter.
         """
-        itm = self.filtersList.takeItem(self.filtersList.currentRow())
+        row = self.filtersList.currentRow()
+        itm = self.filtersList.takeItem(row)
         if itm is None:
             return
         
@@ -133,7 +134,7 @@
         self.__removedFilters.append(itm.text())
         del itm
         if self.filtersList.count():
-            self.filtersList.setCurrentRow(0)
+            self.filtersList.setCurrentRow(row)
     
     @pyqtSlot()
     def on_removeAttributeButton_clicked(self):
--- a/Helpviewer/UrlBar/UrlBar.py	Fri May 24 18:39:58 2013 +0200
+++ b/Helpviewer/UrlBar/UrlBar.py	Tue May 28 20:52:12 2013 +0200
@@ -204,6 +204,10 @@
                         valid = not sslInfo.isBlacklisted()
                     else:
                         valid = sslInfo.isValid()
+                    if valid:
+                        config = self.__browser.page().getSslConfiguration()
+                        if config is None or config.sessionCipher().isNull():
+                            valid = False
                     self.__sslLabel.setValidity(valid)
                     return
             
--- a/Network/IRC/IrcChannelWidget.py	Fri May 24 18:39:58 2013 +0200
+++ b/Network/IRC/IrcChannelWidget.py	Tue May 28 20:52:12 2013 +0200
@@ -934,7 +934,6 @@
             "{0} {1}".format(match.group(1), ircFilter(match.group(2))))
         return True
     
-    
     def __handleCtcp(self, match):
         """
         Private method to handle a CTCP channel command.
--- a/Plugins/AboutPlugin/AboutDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/AboutPlugin/AboutDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -13,7 +13,7 @@
 
 from .Ui_AboutDialog import Ui_AboutDialog
 
-import Utilities
+import Preferences
 
 import UI.PixmapCache
 import UI.Info
@@ -765,10 +765,9 @@
         ## LICENSE
         ####################################################################
         
-        if Utilities.isWindowsPlatform():
-            self.licenseEdit.setFontFamily("Lucida Console")
-        else:
-            self.licenseEdit.setFontFamily("Monospace")
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.licenseEdit.setFontFamily(font.family())
+        self.licenseEdit.setFontPointSize(font.pointSize())
         
         self.licenseEdit.setPlainText(licenseText)
         
--- a/Plugins/AboutPlugin/AboutDialog.ui	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/AboutPlugin/AboutDialog.ui	Tue May 28 20:52:12 2013 +0200
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>AboutDialog</class>
- <widget class="QDialog" name="AboutDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="AboutDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
@@ -9,28 +10,28 @@
     <height>450</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>About Eric</string>
   </property>
-  <layout class="QVBoxLayout" >
+  <layout class="QVBoxLayout">
    <item>
-    <layout class="QHBoxLayout" >
+    <layout class="QHBoxLayout">
      <item>
-      <widget class="QLabel" name="ericPixmap" >
-       <property name="scaledContents" >
+      <widget class="QLabel" name="ericPixmap">
+       <property name="scaledContents">
         <bool>false</bool>
        </property>
       </widget>
      </item>
      <item>
-      <widget class="QLabel" name="ericLabel" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Preferred" hsizetype="Expanding" >
+      <widget class="QLabel" name="ericLabel">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
-       <property name="font" >
+       <property name="font">
         <font>
          <family>Sans Serif</family>
          <pointsize>11</pointsize>
@@ -46,81 +47,78 @@
     </layout>
    </item>
    <item>
-    <widget class="QTabWidget" name="aboutTabWidget" >
-     <property name="currentIndex" >
+    <widget class="QTabWidget" name="aboutTabWidget">
+     <property name="currentIndex">
       <number>0</number>
      </property>
-     <widget class="QWidget" name="about" >
-      <attribute name="title" >
+     <widget class="QWidget" name="about">
+      <attribute name="title">
        <string>&amp;About</string>
       </attribute>
-      <layout class="QVBoxLayout" >
+      <layout class="QVBoxLayout">
        <item>
-        <widget class="QTextBrowser" name="aboutEdit" >
-         <property name="frameShape" >
+        <widget class="QTextBrowser" name="aboutEdit">
+         <property name="frameShape">
           <enum>QFrame::NoFrame</enum>
          </property>
-         <property name="openExternalLinks" >
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="authors" >
-      <attribute name="title" >
-       <string>A&amp;uthors</string>
-      </attribute>
-      <layout class="QVBoxLayout" >
-       <item>
-        <widget class="QTextEdit" name="authorsEdit" >
-         <property name="frameShape" >
-          <enum>QFrame::NoFrame</enum>
-         </property>
-         <property name="readOnly" >
+         <property name="openExternalLinks">
           <bool>true</bool>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="thanks" >
-      <attribute name="title" >
-       <string>&amp;Thanks To</string>
+     <widget class="QWidget" name="authors">
+      <attribute name="title">
+       <string>A&amp;uthors</string>
       </attribute>
-      <layout class="QVBoxLayout" >
+      <layout class="QVBoxLayout">
        <item>
-        <widget class="QTextEdit" name="thanksEdit" >
-         <property name="frameShape" >
+        <widget class="QTextEdit" name="authorsEdit">
+         <property name="frameShape">
           <enum>QFrame::NoFrame</enum>
          </property>
-         <property name="readOnly" >
+         <property name="readOnly">
           <bool>true</bool>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="license" >
-      <attribute name="title" >
-       <string>&amp;License Agreement</string>
+     <widget class="QWidget" name="thanks">
+      <attribute name="title">
+       <string>&amp;Thanks To</string>
       </attribute>
-      <layout class="QVBoxLayout" >
+      <layout class="QVBoxLayout">
        <item>
-        <widget class="QTextEdit" name="licenseEdit" >
-         <property name="frameShape" >
+        <widget class="QTextEdit" name="thanksEdit">
+         <property name="frameShape">
           <enum>QFrame::NoFrame</enum>
          </property>
-         <property name="lineWrapMode" >
-          <enum>QTextEdit::FixedColumnWidth</enum>
-         </property>
-         <property name="lineWrapColumnOrWidth" >
-          <number>80</number>
-         </property>
-         <property name="readOnly" >
+         <property name="readOnly">
           <bool>true</bool>
          </property>
-         <property name="acceptRichText" >
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="license">
+      <attribute name="title">
+       <string>&amp;License Agreement</string>
+      </attribute>
+      <layout class="QVBoxLayout">
+       <item>
+        <widget class="QTextEdit" name="licenseEdit">
+         <property name="frameShape">
+          <enum>QFrame::NoFrame</enum>
+         </property>
+         <property name="lineWrapMode">
+          <enum>QTextEdit::NoWrap</enum>
+         </property>
+         <property name="readOnly">
+          <bool>true</bool>
+         </property>
+         <property name="acceptRichText">
           <bool>false</bool>
          </property>
         </widget>
@@ -130,18 +128,18 @@
     </widget>
    </item>
    <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <tabstops>
   <tabstop>aboutTabWidget</tabstop>
   <tabstop>aboutEdit</tabstop>
@@ -157,11 +155,11 @@
    <receiver>AboutDialog</receiver>
    <slot>accept()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>83</x>
      <y>423</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>83</x>
      <y>434</y>
     </hint>
@@ -173,11 +171,11 @@
    <receiver>AboutDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>135</x>
      <y>420</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>136</x>
      <y>435</y>
     </hint>
--- a/Plugins/PluginEricdoc.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/PluginEricdoc.py	Tue May 28 20:52:12 2013 +0200
@@ -66,7 +66,7 @@
     })
     
     # 2. Qt Help Generator
-    exe = 'qhelpgenerator'
+    exe = os.path.join(Utilities.getQtBinariesPath(), 'qhelpgenerator')
     if Utilities.isWindowsPlatform():
         exe += '.exe'
     dataList.append({
@@ -82,7 +82,7 @@
     })
     
     # 3. Qt Collection Generator
-    exe = 'qcollectiongenerator'
+    exe = os.path.join(Utilities.getQtBinariesPath(), 'qcollectiongenerator')
     if Utilities.isWindowsPlatform():
         exe += '.exe'
     dataList.append({
--- a/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -49,10 +49,9 @@
         self.vcs = vcs
         self.__hgClient = self.vcs.getClient()
         
-        if Utilities.isWindowsPlatform():
-            self.contents.setFontFamily("Lucida Console")
-        else:
-            self.contents.setFontFamily("Monospace")
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.contents.setFontFamily(font.family())
+        self.contents.setFontPointSize(font.pointSize())
         
         self.cNormalFormat = self.contents.currentCharFormat()
         self.cAddedFormat = self.contents.currentCharFormat()
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -384,51 +384,52 @@
         errMsg = ""
         parents = [-1]
         
-        args = []
-        args.append("parents")
-        if self.commandMode == "incoming":
-            if self.bundle:
-                args.append("--repository")
-                args.append(self.bundle)
-            elif self.vcs.bundleFile and os.path.exists(self.vcs.bundleFile):
-                args.append("--repository")
-                args.append(self.vcs.bundleFile)
-        args.append("--template")
-        args.append("{rev}\n")
-        args.append("-r")
-        args.append(rev)
-        if not self.projectMode:
-            args.append(self.filename)
-        
-        output = ""
-        if self.__hgClient:
-            output, errMsg = self.__hgClient.runcommand(args)
-        else:
-            process = QProcess()
-            process.setWorkingDirectory(self.repodir)
-            process.start('hg', args)
-            procStarted = process.waitForStarted()
-            if procStarted:
-                finished = process.waitForFinished(30000)
-                if finished and process.exitCode() == 0:
-                    output = \
-                        str(process.readAllStandardOutput(),
-                            Preferences.getSystem("IOEncoding"),
-                            'replace')
+        if int(rev) > 0:
+            args = []
+            args.append("parents")
+            if self.commandMode == "incoming":
+                if self.bundle:
+                    args.append("--repository")
+                    args.append(self.bundle)
+                elif self.vcs.bundleFile and os.path.exists(self.vcs.bundleFile):
+                    args.append("--repository")
+                    args.append(self.vcs.bundleFile)
+            args.append("--template")
+            args.append("{rev}\n")
+            args.append("-r")
+            args.append(rev)
+            if not self.projectMode:
+                args.append(self.filename)
+            
+            output = ""
+            if self.__hgClient:
+                output, errMsg = self.__hgClient.runcommand(args)
+            else:
+                process = QProcess()
+                process.setWorkingDirectory(self.repodir)
+                process.start('hg', args)
+                procStarted = process.waitForStarted()
+                if procStarted:
+                    finished = process.waitForFinished(30000)
+                    if finished and process.exitCode() == 0:
+                        output = \
+                            str(process.readAllStandardOutput(),
+                                Preferences.getSystem("IOEncoding"),
+                                'replace')
+                    else:
+                        if not finished:
+                            errMsg = self.trUtf8(
+                                "The hg process did not finish within 30s.")
                 else:
-                    if not finished:
-                        errMsg = self.trUtf8(
-                            "The hg process did not finish within 30s.")
-            else:
-                errMsg = self.trUtf8("Could not start the hg executable.")
-        
-        if errMsg:
-            E5MessageBox.critical(self,
-                self.trUtf8("Mercurial Error"),
-                errMsg)
-        
-        if output:
-            parents = [int(p) for p in output.strip().splitlines()]
+                    errMsg = self.trUtf8("Could not start the hg executable.")
+            
+            if errMsg:
+                E5MessageBox.critical(self,
+                    self.trUtf8("Mercurial Error"),
+                    errMsg)
+            
+            if output:
+                parents = [int(p) for p in output.strip().splitlines()]
         
         return parents
     
@@ -475,7 +476,7 @@
                 self.__projectRevision = outputList[0].strip()
                 if self.__projectRevision.endswith("+"):
                     self.__projectRevision = self.__projectRevision[:-1]
-                    self.__projectBranch = outputList[1].strip()
+                self.__projectBranch = outputList[1].strip()
     
     def __getClosedBranches(self):
         """
@@ -909,6 +910,10 @@
         
         self.__filterLogsEnabled = True
         self.__filterLogs()
+        
+        self.__updateDiffButtons()
+        self.__updatePhaseButton()
+        self.__updateGraftButton()
     
     def __readStdout(self):
         """
@@ -1008,24 +1013,27 @@
         """
         Private slot to update the status of the phase button.
         """
-        # step 1: count entries with changeable phases
-        secret = 0
-        draft = 0
-        public = 0
-        for itm in self.logTree.selectedItems():
-            phase = itm.text(self.PhaseColumn)
-            if phase == "draft":
-                draft += 1
-            elif phase == "secret":
-                secret += 1
+        if self.initialCommandMode == "log":
+            # step 1: count entries with changeable phases
+            secret = 0
+            draft = 0
+            public = 0
+            for itm in self.logTree.selectedItems():
+                phase = itm.text(self.PhaseColumn)
+                if phase == "draft":
+                    draft += 1
+                elif phase == "secret":
+                    secret += 1
+                else:
+                    public += 1
+            
+            # step 2: set the status of the phase button
+            if public == 0 and \
+               ((secret > 0 and draft == 0) or \
+                (secret == 0 and draft > 0)):
+                self.phaseButton.setEnabled(True)
             else:
-                public += 1
-        
-        # step 2: set the status of the phase button
-        if public == 0 and \
-           ((secret > 0 and draft == 0) or \
-            (secret == 0 and draft > 0)):
-            self.phaseButton.setEnabled(True)
+                self.phaseButton.setEnabled(False)
         else:
             self.phaseButton.setEnabled(False)
     
@@ -1034,6 +1042,24 @@
         Private slot to update the status of the graft button.
         """
         if self.graftButton.isVisible():
+            if self.initialCommandMode == "log":
+                # step 1: count selected entries not belonging to the current branch
+                otherBranches = 0
+                for itm in self.logTree.selectedItems():
+                    branch = itm.text(self.BranchColumn)
+                    if branch != self.__projectBranch:
+                        otherBranches += 1
+                
+                # step 2: set the status of the graft button
+                self.graftButton.setEnabled(otherBranches > 0)
+            else:
+                self.graftButton.setEnabled(False)
+    
+    def __updateGraftButton(self):
+        """
+        Private slot to update the status of the graft button.
+        """
+        if self.graftButton.isVisible():
             # step 1: count selected entries not belonging to the current branch
             otherBranches = 0
             for itm in self.logTree.selectedItems():
@@ -1103,7 +1129,10 @@
         """
         Private slot to handle the Diff to Parent 1 button.
         """
-        itm = self.logTree.selectedItems()[0]
+        if len(self.logTree.selectedItems()):
+            itm = self.logTree.selectedItems()[0]
+        else:
+            itm = self.logTree.currentItem()
         if itm is None:
             self.diffP1Button.setEnabled(False)
             return
@@ -1121,7 +1150,10 @@
         """
         Private slot to handle the Diff to Parent 2 button.
         """
-        itm = self.logTree.selectedItems()[0]
+        if len(self.logTree.selectedItems()):
+            itm = self.logTree.selectedItems()[0]
+        else:
+            itm = self.logTree.currentItem()
         if itm is None:
             self.diffP2Button.setEnabled(False)
             return
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -205,50 +205,52 @@
         errMsg = ""
         parents = []
         
-        args = []
-        args.append("parents")
-        if self.mode == "incoming":
-            if self.bundle:
-                args.append("--repository")
-                args.append(self.bundle)
-            elif self.vcs.bundleFile and os.path.exists(self.vcs.bundleFile):
-                args.append("--repository")
-                args.append(self.vcs.bundleFile)
-        args.append("--template")
-        args.append("{rev}:{node|short}\n")
-        args.append("-r")
-        args.append(rev)
-        if not self.projectMode:
-            args.append(self.filename)
-        
-        output = ""
-        if self.__hgClient:
-            output, errMsg = self.__hgClient.runcommand(args)
-        else:
-            process = QProcess()
-            process.setWorkingDirectory(self.repodir)
-            process.start('hg', args)
-            procStarted = process.waitForStarted()
-            if procStarted:
-                finished = process.waitForFinished(30000)
-                if finished and process.exitCode() == 0:
-                    output = \
-                        str(process.readAllStandardOutput(),
-                            Preferences.getSystem("IOEncoding"),
-                            'replace')
+        if int(rev) > 0:
+            args = []
+            args.append("parents")
+            if self.mode == "incoming":
+                if self.bundle:
+                    args.append("--repository")
+                    args.append(self.bundle)
+                elif self.vcs.bundleFile and os.path.exists(self.vcs.bundleFile):
+                    args.append("--repository")
+                    args.append(self.vcs.bundleFile)
+            args.append("--template")
+            args.append("{rev}:{node|short}\n")
+            args.append("-r")
+            args.append(rev)
+            if not self.projectMode:
+                args.append(self.filename)
+            
+            output = ""
+            if self.__hgClient:
+                output, errMsg = self.__hgClient.runcommand(args)
+            else:
+                process = QProcess()
+                process.setWorkingDirectory(self.repodir)
+                process.start('hg', args)
+                procStarted = process.waitForStarted()
+                if procStarted:
+                    finished = process.waitForFinished(30000)
+                    if finished and process.exitCode() == 0:
+                        output = \
+                            str(process.readAllStandardOutput(),
+                                Preferences.getSystem("IOEncoding"),
+                                'replace')
+                    else:
+                        if not finished:
+                            errMsg = self.trUtf8(
+                                "The hg process did not finish within 30s.")
                 else:
-                    if not finished:
-                        errMsg = self.trUtf8("The hg process did not finish within 30s.")
-            else:
-                errMsg = self.trUtf8("Could not start the hg executable.")
-        
-        if errMsg:
-            E5MessageBox.critical(self,
-                self.trUtf8("Mercurial Error"),
-                errMsg)
-        
-        if output:
-            parents = [p for p in output.strip().splitlines()]
+                    errMsg = self.trUtf8("Could not start the hg executable.")
+            
+            if errMsg:
+                E5MessageBox.critical(self,
+                    self.trUtf8("Mercurial Error"),
+                    errMsg)
+            
+            if output:
+                parents = [p for p in output.strip().splitlines()]
         
         return parents
     
--- a/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -143,7 +143,6 @@
         """
         self.__updateOK()
     
-    
     @pyqtSlot(str)
     def on_id1Edit_textChanged(self, txt):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -633,6 +633,8 @@
             return
         
         self.vcs.hgRevert(names)
+        self.raise_()
+        self.activateWindow()
         self.on_refreshButton_clicked()
         
         project = e5App().getObject("Project")
--- a/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py	Tue May 28 20:52:12 2013 +0200
@@ -378,7 +378,6 @@
         self.hgQueueGotoForceAct.triggered[()].connect(self.__hgQueueGotoPatchForced)
         self.actions.append(self.hgQueueGotoForceAct)
     
-    
     def __initGuardsActions(self):
         """
         Public method to generate the guards action objects.
@@ -692,7 +691,6 @@
         self.vcs.getExtensionObject("mq")\
             .hgQueueShowHeader(self.project.getProjectPath())
     
-    
     def __hgQueuePushPopPatches(self, name, operation, all=False, named=False,
                                 force=False):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -142,7 +142,6 @@
         """
         self.__updateOK()
     
-    
     @pyqtSlot(str)
     def on_id1Edit_textChanged(self, txt):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/hg.py	Tue May 28 20:52:12 2013 +0200
@@ -10,16 +10,13 @@
 from __future__ import unicode_literals    # __IGNORE_WARNING__
 try:
     str = unicode
+    import urllib as parse
 except (NameError):
-    pass
+    import urllib.parse as parse    # __IGNORE_WARNING__
 
 import os
 import shutil
 import re
-try:  # Py3
-    import urllib.parse as parse
-except:
-    import urllib as parse
 
 from PyQt4.QtCore import QProcess, pyqtSignal, QFileInfo, QFileSystemWatcher
 from PyQt4.QtGui import QApplication, QDialog, QInputDialog
@@ -108,6 +105,7 @@
         self.serveDlg = None
         
         self.bundleFile = None
+        self.__lastChangeGroupPath = None
         
         self.statusCache = {}
         
@@ -2148,7 +2146,7 @@
             fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                 None,
                 self.trUtf8("Create changegroup"),
-                repodir,
+                self.__lastChangeGroupPath or repodir,
                 self.trUtf8("Mercurial Changegroup Files (*.hg)"),
                 None,
                 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
@@ -2171,6 +2169,7 @@
                 if not res:
                     return
             fname = Utilities.toNativeSeparators(fname)
+            self.__lastChangeGroupPath = os.path.dirname(fname)
             
             args = []
             args.append('bundle')
@@ -2211,9 +2210,11 @@
         file = E5FileDialog.getOpenFileName(
             None,
             self.trUtf8("Preview changegroup"),
-            repodir,
+            self.__lastChangeGroupPath or repodir,
             self.trUtf8("Mercurial Changegroup Files (*.hg);;All Files (*)"))
         if file:
+            self.__lastChangeGroupPath = os.path.dirname(file)
+            
             if self.getPlugin().getPreferences("UseLogBrowser"):
                 from .HgLogBrowserDialog import HgLogBrowserDialog
                 self.logBrowser = \
@@ -2244,9 +2245,11 @@
         file = E5FileDialog.getOpenFileName(
             None,
             self.trUtf8("Preview changegroup"),
-            repodir,
+            self.__lastChangeGroupPath or repodir,
             self.trUtf8("Mercurial Changegroup Files (*.hg);;All Files (*)"))
         if file:
+            self.__lastChangeGroupPath = os.path.dirname(file)
+            
             args = []
             args.append('identify')
             args.append(file)
@@ -2277,9 +2280,11 @@
         files = E5FileDialog.getOpenFileNames(
             None,
             self.trUtf8("Apply changegroups"),
-            repodir,
+            self.__lastChangeGroupPath or repodir,
             self.trUtf8("Mercurial Changegroup Files (*.hg);;All Files (*)"))
         if files:
+            self.__lastChangeGroupPath = os.path.dirname(files[0])
+            
             update = E5MessageBox.yesNo(self.__ui,
                 self.trUtf8("Apply changegroups"),
                 self.trUtf8("""Shall the working directory be updated?"""),
--- a/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -24,6 +24,7 @@
 from .Ui_SvnDiffDialog import Ui_SvnDiffDialog
 
 import Utilities
+import Preferences
 
 
 class SvnDiffDialog(QWidget, SvnDialogMixin, Ui_SvnDiffDialog):
@@ -47,10 +48,9 @@
         
         self.vcs = vcs
         
-        if Utilities.isWindowsPlatform():
-            self.contents.setFontFamily("Lucida Console")
-        else:
-            self.contents.setFontFamily("Monospace")
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.contents.setFontFamily(font.family())
+        self.contents.setFontPointSize(font.pointSize())
         
         self.cNormalFormat = self.contents.currentCharFormat()
         self.cAddedFormat = self.contents.currentCharFormat()
--- a/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -651,6 +651,8 @@
             return
         
         self.vcs.vcsRevert(names)
+        self.raise_()
+        self.activateWindow()
         self.on_refreshButton_clicked()
         
         project = e5App().getObject("Project")
--- a/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -47,10 +47,9 @@
         self.process = QProcess()
         self.vcs = vcs
         
-        if Utilities.isWindowsPlatform():
-            self.contents.setFontFamily("Lucida Console")
-        else:
-            self.contents.setFontFamily("Monospace")
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.contents.setFontFamily(font.family())
+        self.contents.setFontPointSize(font.pointSize())
         
         self.cNormalFormat = self.contents.currentCharFormat()
         self.cAddedFormat = self.contents.currentCharFormat()
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -766,6 +766,8 @@
             return
         
         self.vcs.vcsRevert(names)
+        self.raise_()
+        self.activateWindow()
         self.on_refreshButton_clicked()
         
         project = e5App().getObject("Project")
--- a/Preferences/ConfigurationPages/EditorGeneralPage.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/EditorGeneralPage.py	Tue May 28 20:52:12 2013 +0200
@@ -9,6 +9,8 @@
 
 from __future__ import unicode_literals    # __IGNORE_WARNING__
 
+from PyQt4.Qsci import QsciScintillaBase
+
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorGeneralPage import Ui_EditorGeneralPage
 
@@ -45,6 +47,12 @@
         self.comment0CheckBox.setChecked(
             Preferences.getEditor("CommentColumn0"))
         
+        virtualSpaceOptions = Preferences.getEditor("VirtualSpaceOptions")
+        self.vsSelectionCheckBox.setChecked(
+            virtualSpaceOptions & QsciScintillaBase.SCVS_RECTANGULARSELECTION)
+        self.vsUserCheckBox.setChecked(
+            virtualSpaceOptions & QsciScintillaBase.SCVS_USERACCESSIBLE)
+        
     def save(self):
         """
         Public slot to save the Editor General configuration.
@@ -66,6 +74,13 @@
         Preferences.setEditor("CommentColumn0",
             self.comment0CheckBox.isChecked())
         
+        virtualSpaceOptions = QsciScintillaBase.SCVS_NONE
+        if self.vsSelectionCheckBox.isChecked():
+            virtualSpaceOptions |= QsciScintillaBase.SCVS_RECTANGULARSELECTION
+        if self.vsUserCheckBox.isChecked():
+            virtualSpaceOptions |= QsciScintillaBase.SCVS_USERACCESSIBLE
+        Preferences.setEditor("VirtualSpaceOptions", virtualSpaceOptions)
+        
     def on_tabforindentationCheckBox_toggled(self, checked):
         """
         Private slot used to set the tab conversion check box.
--- a/Preferences/ConfigurationPages/EditorGeneralPage.ui	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/EditorGeneralPage.ui	Tue May 28 20:52:12 2013 +0200
@@ -6,11 +6,11 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>553</width>
+    <width>559</width>
     <height>593</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -217,6 +217,45 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Virtual Space</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Virtual space is the space after the last character of a line. It is not allocated unless some text is entered or copied into it. Usage of virtual space can be configured with these selections.</string>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="vsSelectionCheckBox">
+        <property name="toolTip">
+         <string>Select to enable a rectangular selection to extend into virtual space</string>
+        </property>
+        <property name="text">
+         <string>Selection may access virtual space</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="vsUserCheckBox">
+        <property name="toolTip">
+         <string>Select to allow the cursor to be moved into virtual space</string>
+        </property>
+        <property name="text">
+         <string>Cursor can move into virtual space</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
--- a/Preferences/ConfigurationPages/EditorStylesPage.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/EditorStylesPage.py	Tue May 28 20:52:12 2013 +0200
@@ -79,8 +79,6 @@
         self.monospacedFontSample.setFont(self.monospacedFont)
         self.monospacedCheckBox.setChecked(
             Preferences.getEditor("UseMonospacedFont"))
-        self.linenowidthSlider.setValue(
-            Preferences.getEditor("LinenoWidth"))
         self.linenoCheckBox.setChecked(
             Preferences.getEditor("LinenoMargin"))
         self.foldingCheckBox.setChecked(
@@ -208,8 +206,6 @@
         Preferences.setEditor("UseMonospacedFont",
             self.monospacedCheckBox.isChecked())
         
-        Preferences.setEditor("LinenoWidth",
-            self.linenowidthSlider.value())
         Preferences.setEditor("LinenoMargin",
             self.linenoCheckBox.isChecked())
         Preferences.setEditor("FoldingMargin",
--- a/Preferences/ConfigurationPages/EditorStylesPage.ui	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/EditorStylesPage.ui	Tue May 28 20:52:12 2013 +0200
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>587</width>
-    <height>1913</height>
+    <width>591</width>
+    <height>1966</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_5">
@@ -232,58 +232,6 @@
       <item>
        <layout class="QHBoxLayout">
         <item>
-         <widget class="QLabel" name="TextLabel13_2_2_2">
-          <property name="text">
-           <string>Linenumbers width:</string>
-          </property>
-          <property name="buddy">
-           <cstring>linenowidthSlider</cstring>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QSlider" name="linenowidthSlider">
-          <property name="toolTip">
-           <string>Move to set the width of the linenumbers margin.</string>
-          </property>
-          <property name="minimum">
-           <number>2</number>
-          </property>
-          <property name="maximum">
-           <number>8</number>
-          </property>
-          <property name="value">
-           <number>4</number>
-          </property>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="tickInterval">
-           <number>1</number>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLCDNumber" name="linenowidthLCD">
-          <property name="toolTip">
-           <string>Displays the selected width of the linenumbers margin.</string>
-          </property>
-          <property name="digitCount">
-           <number>1</number>
-          </property>
-          <property name="segmentStyle">
-           <enum>QLCDNumber::Flat</enum>
-          </property>
-          <property name="value" stdset="0">
-           <double>4.000000000000000</double>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <layout class="QHBoxLayout">
-        <item>
          <widget class="QLabel" name="TextLabel1_4_2_2">
           <property name="text">
            <string>Folding style:</string>
@@ -1134,9 +1082,6 @@
         <property name="text">
          <string>Initial zoom factor:</string>
         </property>
-        <property name="buddy">
-         <cstring>linenowidthSlider</cstring>
-        </property>
        </widget>
       </item>
       <item>
@@ -1563,7 +1508,6 @@
   <tabstop>linenoCheckBox</tabstop>
   <tabstop>foldingCheckBox</tabstop>
   <tabstop>unifiedMarginsCheckBox</tabstop>
-  <tabstop>linenowidthSlider</tabstop>
   <tabstop>foldingStyleComboBox</tabstop>
   <tabstop>marginsForegroundButton</tabstop>
   <tabstop>marginsBackgroundButton</tabstop>
@@ -1612,22 +1556,6 @@
  <resources/>
  <connections>
   <connection>
-   <sender>linenowidthSlider</sender>
-   <signal>valueChanged(int)</signal>
-   <receiver>linenowidthLCD</receiver>
-   <slot>display(int)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>483</x>
-     <y>378</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>554</x>
-     <y>382</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
    <sender>edgeLineColumnSlider</sender>
    <signal>valueChanged(int)</signal>
    <receiver>edgeLineColumnLCD</receiver>
--- a/Preferences/ConfigurationPages/EmailPage.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/EmailPage.py	Tue May 28 20:52:12 2013 +0200
@@ -69,7 +69,6 @@
         Preferences.setUser("MailServerUseTLS",
             self.useTlsCheckBox.isChecked())
     
-    
     def __updateTestButton(self):
         """
         Private slot to update the enabled state of the test button.
--- a/Preferences/ConfigurationPages/HelpVirusTotalPage.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/HelpVirusTotalPage.py	Tue May 28 20:52:12 2013 +0200
@@ -44,7 +44,6 @@
             Preferences.getHelp("VirusTotalSecure"))
         self.vtServiceKeyEdit.setText(
             Preferences.getHelp("VirusTotalServiceKey"))
-        
     
     def save(self):
         """
--- a/Preferences/ConfigurationPages/InterfacePage.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/InterfacePage.py	Tue May 28 20:52:12 2013 +0200
@@ -108,6 +108,8 @@
         self.initColour("LogStdErrColour", self.stderrTextColourButton,
             Preferences.getUI)
         
+        self.delaySpinBox.setValue(Preferences.getUI("SidebarDelay"))
+        
     def save(self):
         """
         Public slot to save the Interface configuration.
@@ -180,6 +182,8 @@
         Preferences.setUI("SingleCloseButton",
             self.tabsCloseButtonCheckBox.isChecked())
         
+        Preferences.setUI("SidebarDelay", self.delaySpinBox.value())
+        
         self.saveColours(Preferences.setUI)
         
     def __populateStyleCombo(self):
--- a/Preferences/ConfigurationPages/InterfacePage.ui	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/InterfacePage.ui	Tue May 28 20:52:12 2013 +0200
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>555</width>
+    <width>557</width>
     <height>1121</height>
    </rect>
   </property>
@@ -378,6 +378,54 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_8">
+     <property name="title">
+      <string>Sidebars</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_3">
+      <item>
+       <widget class="QLabel" name="label_5">
+        <property name="text">
+         <string>Delay:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QSpinBox" name="delaySpinBox">
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+        <property name="suffix">
+         <string> ms</string>
+        </property>
+        <property name="maximum">
+         <number>2000</number>
+        </property>
+        <property name="singleStep">
+         <number>100</number>
+        </property>
+        <property name="value">
+         <number>200</number>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>396</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <widget class="Line" name="line9_2">
      <property name="frameShape">
       <enum>QFrame::HLine</enum>
@@ -594,6 +642,7 @@
   <tabstop>blLeftButton</tabstop>
   <tabstop>brTopButton</tabstop>
   <tabstop>brRightButton</tabstop>
+  <tabstop>delaySpinBox</tabstop>
   <tabstop>languageComboBox</tabstop>
   <tabstop>layoutComboBox</tabstop>
   <tabstop>separateShellButton</tabstop>
--- a/Preferences/ConfigurationPages/QtPage.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/QtPage.py	Tue May 28 20:52:12 2013 +0200
@@ -33,14 +33,9 @@
         self.setupUi(self)
         self.setObjectName("QtPage")
         
-        self.qt4Completer = E5DirCompleter(self.qt4Edit)
         self.qt4TransCompleter = E5DirCompleter(self.qt4TransEdit)
         
-        if not Utilities.isMacPlatform():
-            self.qt4Group.hide()
-        
         # set initial values
-        self.qt4Edit.setText(Preferences.getQt("Qt4Dir"))
         self.qt4TransEdit.setText(Preferences.getQt("Qt4TranslationsDir"))
         self.qt4PrefixEdit.setText(Preferences.getQt("QtToolsPrefix4"))
         self.qt4PostfixEdit.setText(Preferences.getQt("QtToolsPostfix4"))
@@ -50,26 +45,11 @@
         """
         Public slot to save the Qt configuration.
         """
-        Preferences.setQt("Qt4Dir", self.qt4Edit.text())
         Preferences.setQt("Qt4TranslationsDir", self.qt4TransEdit.text())
         Preferences.setQt("QtToolsPrefix4", self.qt4PrefixEdit.text())
         Preferences.setQt("QtToolsPostfix4", self.qt4PostfixEdit.text())
         
     @pyqtSlot()
-    def on_qt4Button_clicked(self):
-        """
-        Private slot to handle the Qt4 directory selection.
-        """
-        dir = E5FileDialog.getExistingDirectory(
-            self,
-            self.trUtf8("Select Qt4 Directory"),
-            self.qt4Edit.text(),
-            E5FileDialog.Options(E5FileDialog.ShowDirsOnly))
-            
-        if dir:
-            self.qt4Edit.setText(Utilities.toNativeSeparators(dir))
-        
-    @pyqtSlot()
     def on_qt4TransButton_clicked(self):
         """
         Private slot to handle the Qt4 translations directory selection.
--- a/Preferences/ConfigurationPages/QtPage.ui	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/QtPage.ui	Tue May 28 20:52:12 2013 +0200
@@ -32,39 +32,6 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="qt4Group">
-     <property name="title">
-      <string>Qt Directory</string>
-     </property>
-     <layout class="QGridLayout" name="_2">
-      <item row="0" column="0" colspan="2">
-       <widget class="QLabel" name="TextLabel1_2_2_4">
-        <property name="text">
-         <string>&lt;font color=&quot;#FF0000&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; This setting is activated at the next startup of the application.&lt;/font&gt;</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QLineEdit" name="qt4Edit">
-        <property name="toolTip">
-         <string>Enter the path of the Qt directory.</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QPushButton" name="qt4Button">
-        <property name="toolTip">
-         <string>Press to select the Qt directory via a directory selection dialog</string>
-        </property>
-        <property name="text">
-         <string>...</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
     <widget class="QGroupBox" name="groupBox_3">
      <property name="title">
       <string>Qt Translations Directory</string>
@@ -186,8 +153,6 @@
   </layout>
  </widget>
  <tabstops>
-  <tabstop>qt4Edit</tabstop>
-  <tabstop>qt4Button</tabstop>
   <tabstop>qt4TransEdit</tabstop>
   <tabstop>qt4TransButton</tabstop>
   <tabstop>qt4PrefixEdit</tabstop>
--- a/Preferences/ConfigurationPages/ShellPage.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/ShellPage.py	Tue May 28 20:52:12 2013 +0200
@@ -30,8 +30,6 @@
         self.setObjectName("ShellPage")
         
         # set initial values
-        self.shellLinenowidthSlider.setValue(
-            Preferences.getShell("LinenoWidth"))
         self.shellLinenoCheckBox.setChecked(
             Preferences.getShell("LinenoMargin"))
         self.shellWordWrapCheckBox.setChecked(
@@ -58,8 +56,6 @@
         """
         Public slot to save the Shell configuration.
         """
-        Preferences.setShell("LinenoWidth",
-            self.shellLinenowidthSlider.value())
         Preferences.setShell("LinenoMargin",
             self.shellLinenoCheckBox.isChecked())
         Preferences.setShell("WrapEnabled",
--- a/Preferences/ConfigurationPages/ShellPage.ui	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ConfigurationPages/ShellPage.ui	Tue May 28 20:52:12 2013 +0200
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>585</width>
+    <width>587</width>
     <height>538</height>
    </rect>
   </property>
@@ -32,55 +32,6 @@
     </widget>
    </item>
    <item>
-    <layout class="QHBoxLayout">
-     <item>
-      <widget class="QLabel" name="TextLabel13_2_2_2_2">
-       <property name="text">
-        <string>Linenumbers width:</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QSlider" name="shellLinenowidthSlider">
-       <property name="toolTip">
-        <string>Move to set the width of the linenumbers margin.</string>
-       </property>
-       <property name="minimum">
-        <number>2</number>
-       </property>
-       <property name="maximum">
-        <number>8</number>
-       </property>
-       <property name="value">
-        <number>2</number>
-       </property>
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="tickInterval">
-        <number>1</number>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLCDNumber" name="shellLinenowidthLCD">
-       <property name="toolTip">
-        <string>Displays the selected width of the linenumbers margin.</string>
-       </property>
-       <property name="digitCount">
-        <number>1</number>
-       </property>
-       <property name="segmentStyle">
-        <enum>QLCDNumber::Flat</enum>
-       </property>
-       <property name="value" stdset="0">
-        <double>2.000000000000000</double>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
     <layout class="QGridLayout">
      <item row="0" column="0">
       <widget class="QCheckBox" name="shellLinenoCheckBox">
@@ -283,7 +234,6 @@
   </layout>
  </widget>
  <tabstops>
-  <tabstop>shellLinenowidthSlider</tabstop>
   <tabstop>shellLinenoCheckBox</tabstop>
   <tabstop>shellACEnabledCheckBox</tabstop>
   <tabstop>shellSyntaxHighlightingCheckBox</tabstop>
@@ -292,22 +242,5 @@
   <tabstop>shellHistorySpinBox</tabstop>
  </tabstops>
  <resources/>
- <connections>
-  <connection>
-   <sender>shellLinenowidthSlider</sender>
-   <signal>valueChanged(int)</signal>
-   <receiver>shellLinenowidthLCD</receiver>
-   <slot>display(int)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>209</x>
-     <y>74</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>366</x>
-     <y>73</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
+ <connections/>
 </ui>
--- a/Preferences/ProgramsDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ProgramsDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -85,31 +85,38 @@
         exe = Utilities.isWindowsPlatform() and \
             "{0}.exe".format(Utilities.generateQtToolName("lrelease")) or \
             Utilities.generateQtToolName("lrelease")
+        exe = os.path.join(Utilities.getQtBinariesPath(), exe)
         version = self.__createProgramEntry(self.trUtf8("Translation Converter (Qt)"),
                     exe, '-version', 'lrelease', -1)
         # 1b. Qt Designer
         if Utilities.isWindowsPlatform():
-            exe = "{0}.exe".format(Utilities.generateQtToolName("designer"))
+            exe = os.path.join(Utilities.getQtBinariesPath(),
+                "{0}.exe".format(Utilities.generateQtToolName("designer")))
         elif Utilities.isMacPlatform():
             exe = Utilities.getQtMacBundle("designer")
         else:
-            exe = Utilities.generateQtToolName("designer")
+            exe = os.path.join(Utilities.getQtBinariesPath(),
+                Utilities.generateQtToolName("designer"))
         self.__createProgramEntry(self.trUtf8("Qt Designer"), exe, version=version)
         # 1c. Qt Linguist
         if Utilities.isWindowsPlatform():
-            exe = "{0}.exe".format(Utilities.generateQtToolName("linguist"))
+            exe = os.path.join(Utilities.getQtBinariesPath(),
+                "{0}.exe".format(Utilities.generateQtToolName("linguist")))
         elif Utilities.isMacPlatform():
             exe = Utilities.getQtMacBundle("linguist")
         else:
-            exe = Utilities.generateQtToolName("linguist")
+            exe = os.path.join(Utilities.getQtBinariesPath(),
+                Utilities.generateQtToolName("linguist"))
         self.__createProgramEntry(self.trUtf8("Qt Linguist"), exe, version=version)
         # 1d. Qt Assistant
         if Utilities.isWindowsPlatform():
-            exe = "{0}.exe".format(Utilities.generateQtToolName("assistant"))
+            exe = os.path.join(Utilities.getQtBinariesPath(),
+                "{0}.exe".format(Utilities.generateQtToolName("assistant")))
         elif Utilities.isMacPlatform():
             exe = Utilities.getQtMacBundle("assistant")
         else:
-            exe = Utilities.generateQtToolName("assistant")
+            exe = os.path.join(Utilities.getQtBinariesPath(),
+                Utilities.generateQtToolName("assistant"))
         self.__createProgramEntry(self.trUtf8("Qt Assistant"), exe, version=version)
         
         # 2. do the PyQt programs
--- a/Preferences/ShortcutsDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/ShortcutsDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -428,7 +428,6 @@
                     itm.setHidden(False)
             topItem.setHidden(childHiddenCount == topItem.childCount())
     
-    
     @pyqtSlot(bool)
     def on_actionButton_toggled(self, checked):
         """
--- a/Preferences/__init__.py	Fri May 24 18:39:58 2013 +0200
+++ b/Preferences/__init__.py	Tue May 28 20:52:12 2013 +0200
@@ -36,7 +36,7 @@
 from E5Network.E5Ftp import E5FtpProxyType
 
 from Globals import settingsNameOrganization, settingsNameGlobal, settingsNameRecent, \
-    isWindowsPlatform, findPythonInterpreters
+    isWindowsPlatform, findPythonInterpreters, getPyQt4ModulesDirectory
 
 from Project.ProjectBrowserFlags import SourcesBrowserFlag, FormsBrowserFlag, \
     ResourcesBrowserFlag, TranslationsBrowserFlag, InterfacesBrowserFlag, \
@@ -101,6 +101,7 @@
         "StyleSheet": "",
         "ViewManager": "tabview",
         "LayoutType": "Sidebars",
+        "SidebarDelay": 200,
         # allowed values are "Toolboxes" and "Sidebars"
         "LayoutShellEmbedded": 0,           # 0 = separate
                                             # 1 = embedded in debug browser
@@ -225,7 +226,6 @@
         "AutosaveInterval": 0,
         "TabWidth": 4,
         "IndentWidth": 4,
-        "LinenoWidth": 4,
         "IndentationGuides": True,
         "UnifiedMargins": False,
         "LinenoMargin": True,
@@ -317,6 +317,8 @@
         "PreviewMarkdownFileNameExtensions": ["md", "markdown"],
         "PreviewRestFileNameExtensions": ["rst"],
         
+        "VirtualSpaceOptions": QsciScintilla.SCVS_NONE,
+        
         # All (most) lexers
         "AllFoldCompact": True,
         
@@ -789,7 +791,6 @@
     
     # defaults for the shell settings
     shellDefaults = {
-        "LinenoWidth": 4,
         "LinenoMargin": True,
         "AutoCompletionEnabled": True,
         "CallTipsEnabled": True,
@@ -807,7 +808,6 @@
         "Qt4TranslationsDir": "",
         "QtToolsPrefix4": "",
         "QtToolsPostfix4": "",
-        "Qt4Dir": "",
     }
     
     # defaults for corba related stuff
@@ -1378,7 +1378,8 @@
     elif key in ["TabViewManagerFilenameLength", "CaptionFilenameLength",
                  "ProxyPort/Http", "ProxyPort/Https", "ProxyPort/Ftp",
                  "ProxyType/Ftp", "OpenOnStartup",
-                 "PerformVersionCheck", "RecentNumber", "NotificationTimeout"]:
+                 "PerformVersionCheck", "RecentNumber", "NotificationTimeout",
+                 "SidebarDelay"]:
         return int(prefClass.settings.value("UI/" + key,
             prefClass.uiDefaults[key]))
     elif key in ["ProxyPassword/Http", "ProxyPassword/Https",
@@ -1429,6 +1430,39 @@
         if sys.version_info[0] == 2:
             prefClass.settings.remove("UI/ViewProfiles")
         return viewProfiles
+    elif key in "ViewProfiles2":
+        profiles = prefClass.settings.value("UI/ViewProfiles2")
+        if profiles is not None:
+            viewProfiles = {}
+            profiles = json.loads(profiles)
+            for name in ["edit", "debug"]:
+                viewProfiles[name] = [
+                    QByteArray.fromBase64(profiles[name][0].encode()),
+                    profiles[name][1][:],
+                    []
+                ]
+                for bs in profiles[name][2]:
+                    viewProfiles[name][2].append(QByteArray.fromBase64(bs.encode()))
+        else:
+            # migrate from the old ViewProfiles settings
+            try:
+                profiles = prefClass.settings.value("UI/ViewProfiles")
+            except TypeError:
+                profiles = None
+            if profiles is not None:
+                viewProfiles = {}
+                for name in ["edit", "debug"]:
+                    viewProfiles[name] = [
+                        QByteArray(profiles[name][4]),
+                        profiles[name][5][:],
+                        []
+                    ]
+                    for b in profiles[name][6]:
+                        viewProfiles[name][2].append(QByteArray(b))
+            else:
+                # use the defaults
+                viewProfiles = prefClass.uiDefaults["ViewProfiles2"]
+        return viewProfiles
     elif key in ["ToolbarManagerState", "PreviewSplitterState"]:
         state = prefClass.settings.value("UI/" + key)
         if state is not None:
@@ -1545,14 +1579,15 @@
                "SpellCheckingDefaultLanguage", "SpellCheckingPersonalWordList",
                "SpellCheckingPersonalExcludeList"]:
         return prefClass.settings.value("Editor/" + key, prefClass.editorDefaults[key])
-    elif key in ["AutosaveInterval", "TabWidth", "IndentWidth", "LinenoWidth",
+    elif key in ["AutosaveInterval", "TabWidth", "IndentWidth",
                  "FoldingStyle", "WarnFilesize", "EdgeMode", "EdgeColumn",
                  "CaretWidth", "AutoCompletionSource", "AutoCompletionThreshold",
                  "CallTipsVisible", "CallTipsStyle", "MarkOccurrencesTimeout",
                  "AutoSpellCheckChunkSize", "SpellCheckingMinWordSize",
                  "PostScriptLevel", "EOLMode", "ZoomFactor", "WhitespaceSize",
                  "OnlineSyntaxCheckInterval", "OnlineChangeTraceInterval",
-                 "WrapLongLinesMode", "WrapVisualFlag", "CallTipsPosition"]:
+                 "WrapLongLinesMode", "WrapVisualFlag", "CallTipsPosition",
+                 "VirtualSpaceOptions"]:
         return int(prefClass.settings.value("Editor/" + key,
             prefClass.editorDefaults[key]))
     elif key in ["AdditionalOpenFilters", "AdditionalSaveFilters",
@@ -1884,7 +1919,7 @@
         f.fromString(prefClass.settings.value("Shell/" + key,
             prefClass.shellDefaults[key]))
         return f
-    elif key in ["LinenoWidth", "MaxHistoryEntries"]:
+    elif key in ["MaxHistoryEntries"]:
         return int(prefClass.settings.value("Shell/" + key,
             prefClass.shellDefaults[key]))
     else:
@@ -2264,8 +2299,7 @@
     if s == "":
         s = QLibraryInfo.location(QLibraryInfo.TranslationsPath)
     if s == "" and isWindowsPlatform():
-        from PyQt4 import pyqtconfig
-        transPath = os.path.join(pyqtconfig._pkg_config["pyqt_mod_dir"], "translations")
+        transPath = os.path.join(getPyQt4ModulesDirectory(), "translations")
         if os.path.exists(transPath):
             s = transPath
     return s
@@ -2281,11 +2315,6 @@
     """
     if key == "Qt4TranslationsDir":
         return getQt4TranslationsDir(prefClass)
-    elif key == "Qt4Dir":
-        p = prefClass.settings.value("Qt/" + key, prefClass.qtDefaults[key])
-        if p == "":
-            p = QLibraryInfo.location(QLibraryInfo.BinariesPath)
-        return p
     else:
         return prefClass.settings.value("Qt/" + key, prefClass.qtDefaults[key])
     
--- a/Project/Project.py	Fri May 24 18:39:58 2013 +0200
+++ b/Project/Project.py	Tue May 28 20:52:12 2013 +0200
@@ -20,7 +20,6 @@
 import fnmatch
 import copy
 import zipfile
-import re
 
 from PyQt4.QtCore import QFile, QFileInfo, pyqtSignal, QCryptographicHash, QIODevice, \
     QByteArray, QObject, Qt
@@ -367,7 +366,6 @@
         self.__dirty = False      # dirty flag
         self.pfile = ""         # name of the project file
         self.ppath = ""         # name of the project directory
-        self.ppathRe = None
         self.translationsRoot = ""  # the translations prefix
         self.name = ""
         self.opened = False
@@ -625,21 +623,6 @@
                 self.pdata[index].remove(file)
             self.setDirty(True)
         
-    def __makePpathRe(self):
-        """
-        Private method to generate a regular expression for the project path.
-        """
-        ppathRe = (self.ppath + os.sep)\
-            .replace("\\", "@@")\
-            .replace("/", "@@")\
-            .replace("@@", r"[\\/]")
-        if ppathRe.endswith(r"[\\/]"):
-            ppathRe += "*"
-        if Utilities.isWindowsPlatform():
-            self.ppathRe = re.compile(ppathRe, re.IGNORECASE)
-        else:
-            self.ppathRe = re.compile(ppathRe)
-        
     def __readProject(self, fn):
         """
         Private method to read in a project (.e4p) file.
@@ -664,7 +647,6 @@
         
         self.pfile = os.path.abspath(fn)
         self.ppath = os.path.abspath(os.path.dirname(fn))
-        self.__makePpathRe()
         
         # insert filename into list of recently opened projects
         self.__syncRecent()
@@ -759,7 +741,6 @@
         if res:
             self.pfile = os.path.abspath(fn)
             self.ppath = os.path.abspath(os.path.dirname(fn))
-            self.__makePpathRe()
             self.name = os.path.splitext(os.path.basename(fn))[0]
             self.setDirty(False)
             
@@ -826,7 +807,6 @@
         self.sessActGrp.findChild(QAction, "project_load_session").setEnabled(enable)
         self.sessActGrp.findChild(QAction, "project_delete_session").setEnabled(enable)
         
-        
     def __readSession(self, quiet=False, indicator=""):
         """
         Private method to read in the project session file (.e4s)
@@ -1907,7 +1887,6 @@
         if dlg.exec_() == QDialog.Accepted:
             self.closeProject()
             dlg.storeData()
-            self.__makePpathRe()
             self.pdata["VCS"] = ['None']
             self.opened = True
             if not self.pdata["FILETYPES"]:
@@ -2135,7 +2114,6 @@
             else:
                 self.newProjectHooks.emit()
                 self.newProject.emit()
-            
 
     def newProjectAddFiles(self, mainscript):
         """
@@ -2874,10 +2852,14 @@
         
         @param path path to be checked (string)
         """
-        if self.ppath and path == self.ppath:
-            return True
-        elif self.ppathRe:
-            return self.ppathRe.match(path) is not None
+        if self.ppath:
+            if path == self.ppath:
+                return True
+            elif Utilities.normcasepath(Utilities.toNativeSeparators(path)).startswith(
+                 Utilities.normcasepath(Utilities.toNativeSeparators(self.ppath + "/"))):
+                return True
+            else:
+                return False
         else:
             return False
         
@@ -2935,7 +2917,7 @@
             if self.ppath and path == self.ppath:
                 return ""
             else:
-                return self.ppathRe.sub("", path, 1)
+                return path[len(self.ppath) + 1:]
         else:
             return path
         
--- a/Project/ProjectBrowserModel.py	Fri May 24 18:39:58 2013 +0200
+++ b/Project/ProjectBrowserModel.py	Tue May 28 20:52:12 2013 +0200
@@ -223,7 +223,7 @@
         
         @param parent reference to parent object (Project.Project)
         """
-        super(ProjectBrowserModel, self).__init__(parent)
+        super(ProjectBrowserModel, self).__init__(parent, nopopulate=True)
         
         rootData = self.trUtf8("Name")
         self.rootItem = BrowserItem(None, rootData)
--- a/Project/ProjectTranslationsBrowser.py	Fri May 24 18:39:58 2013 +0200
+++ b/Project/ProjectTranslationsBrowser.py	Tue May 28 20:52:12 2013 +0200
@@ -1059,7 +1059,9 @@
         
         if self.project.getProjectType() in \
                 ["Qt4", "Qt4C", "E4Plugin", "PySide", "PySideC"]:
-            lrelease = Utilities.generateQtToolName("lrelease")
+            lrelease = os.path.join(
+                    Utilities.getQtBinariesPath(),
+                    Utilities.generateQtToolName("lrelease"))
         else:
             return
         if Utilities.isWindowsPlatform():
--- a/QScintilla/APIsManager.py	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/APIsManager.py	Tue May 28 20:52:12 2013 +0200
@@ -16,7 +16,7 @@
 
 from . import Lexers
 import Preferences
-import Utilities
+import Globals
 
 
 class APIs(QObject):
@@ -167,9 +167,8 @@
         @return list of installed API files (list of strings)
         """
         if self.__apis is not None:
-            if Utilities.isWindowsPlatform():
-                from PyQt4 import pyqtconfig
-                qsciPath = os.path.join(pyqtconfig._pkg_config["pyqt_mod_dir"], "qsci")
+            if Globals.isWindowsPlatform():
+                qsciPath = os.path.join(Globals.getPyQt4ModulesDirectory(), "qsci")
                 if os.path.exists(qsciPath):
                     # it's the installer
                     apidir = os.path.join(qsciPath, "api", self.__lexer.lexer())
--- a/QScintilla/Editor.py	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/Editor.py	Tue May 28 20:52:12 2013 +0200
@@ -278,6 +278,7 @@
         
         # configure the margins
         self.__setMarginsDisplay()
+        self.linesChanged.connect(self.__resizeLinenoMargin)
         
         self.marginClicked.connect(self.__marginClicked)
         
@@ -1690,6 +1691,7 @@
             return True
         
         if self.filetype == "":
+            # 1) Determine by first line
             line0 = self.text(0)
             if line0.startswith("#!") and \
                ("python2" in line0 or \
@@ -1699,15 +1701,23 @@
             
             if self.fileName is not None:
                 ext = os.path.splitext(self.fileName)[1]
-                if ext in [".py", ".pyw"] and \
-                   Preferences.getProject("DeterminePyFromProject") and \
-                   self.project.isOpen() and \
-                   self.project.isProjectFile(self.fileName):
-                    isProjectPy2 = \
-                        self.project.getProjectLanguage() in ["Python", "Python2"]
-                    if isProjectPy2:
-                        self.filetype = "Python2"
-                    return isProjectPy2
+                if ext in [".py", ".pyw"]:
+                    # 2) .py and .pyw are ambiguous; determine from project
+                    if Preferences.getProject("DeterminePyFromProject") and \
+                       self.project.isOpen() and \
+                       self.project.isProjectFile(self.fileName):
+                        isProjectPy2 = \
+                            self.project.getProjectLanguage() in ["Python", "Python2"]
+                        if isProjectPy2:
+                            self.filetype = "Python2"
+                        return isProjectPy2
+                    else:
+                        # 3) determine by compiling the sources
+                        syntaxError = Utilities.compile(self.fileName,
+                            self.text(), True)[0]
+                        if not syntaxError:
+                            self.filetype = "Python2"
+                            return True
                 
                 if ext in self.dbs.getExtensions('Python2'):
                     self.filetype = "Python2"
@@ -1725,6 +1735,7 @@
             return True
         
         if self.filetype == "":
+            # 1) Determine by first line
             line0 = self.text(0)
             if line0.startswith("#!") and \
                "python3" in line0:
@@ -1733,14 +1744,22 @@
             
             if self.fileName is not None:
                 ext = os.path.splitext(self.fileName)[1]
-                if ext in [".py", ".pyw"] and \
-                   Preferences.getProject("DeterminePyFromProject") and \
-                   self.project.isOpen() and \
-                   self.project.isProjectFile(self.fileName):
-                    isProjectPy3 = self.project.getProjectLanguage() in ["Python3"]
-                    if isProjectPy3:
-                        self.filetype = "Python3"
-                    return isProjectPy3
+                if ext in [".py", ".pyw"]:
+                    # 2) .py and .pyw are ambiguous; determine from project
+                    if Preferences.getProject("DeterminePyFromProject") and \
+                       self.project.isOpen() and \
+                       self.project.isProjectFile(self.fileName):
+                        isProjectPy3 = self.project.getProjectLanguage() in ["Python3"]
+                        if isProjectPy3:
+                            self.filetype = "Python3"
+                        return isProjectPy3
+                    else:
+                        # 3) determine by compiling the sources
+                        syntaxError = Utilities.compile(self.fileName, 
+                            self.text(), False)[0]
+                        if not syntaxError:
+                            self.filetype = "Python3"
+                            return True
                 
                 if ext in self.dbs.getExtensions('Python3'):
                     self.filetype = "Python3"
@@ -3658,7 +3677,6 @@
                     lineNo -= 1
                 else:
                     lineNo += 1
-            
     
     ############################################################################
     ## Setup methods below
@@ -3831,8 +3849,7 @@
         linenoMargin = Preferences.getEditor("LinenoMargin")
         self.setMarginLineNumbers(self.__linenoMargin, linenoMargin)
         if linenoMargin:
-            self.setMarginWidth(self.__linenoMargin,
-                                ' ' + '8' * Preferences.getEditor("LinenoWidth"))
+            self.__resizeLinenoMargin()
         else:
             self.setMarginWidth(self.__linenoMargin, 0)
         
@@ -3854,7 +3871,15 @@
         else:
             self.setMarginWidth(self.__foldMargin, 0)
             self.setFolding(QsciScintilla.NoFoldStyle, self.__foldMargin)
-        
+    
+    def __resizeLinenoMargin(self):
+        """
+        Private slot to resize the line numbers margin.
+        """
+        linenoMargin = Preferences.getEditor("LinenoMargin")
+        if linenoMargin:
+            self.setMarginWidth(self.__linenoMargin, '8' * (len(str(self.lines())) + 1))
+    
     def __setTextDisplay(self):
         """
         Private method to configure the text display.
@@ -3960,6 +3985,8 @@
         if Preferences.getEditor("OverrideEditAreaColours"):
             self.setColor(Preferences.getEditorColour("EditAreaForeground"))
             self.setPaper(Preferences.getEditorColour("EditAreaBackground"))
+        
+        self.setVirtualSpaceOptions(Preferences.getEditor("VirtualSpaceOptions"))
     
     def __setEolMode(self):
         """
@@ -6709,3 +6736,79 @@
                     match = matches[-1]
             line, index = self.lineIndexFromPosition(match.start())
             self.setSelection(line, index + len(match.group(0)), line, index)
+    
+    #######################################################################
+    ## Sort related methods
+    #######################################################################
+    
+    def sortLines(self):
+        """
+        Public slot to sort the lines spanned by a rectangular selection.
+        """
+        if not self.selectionIsRectangle():
+            return
+        
+        from .SortOptionsDialog import SortOptionsDialog
+        dlg = SortOptionsDialog()
+        if dlg.exec_() == QDialog.Accepted:
+            ascending, alnum, caseSensitive = dlg.getData()
+            origStartLine, origStartIndex, origEndLine, origEndIndex = \
+                self.getRectangularSelection()
+            # convert to upper-left to lower-right
+            startLine = min(origStartLine, origEndLine)
+            startIndex = min(origStartIndex, origEndIndex)
+            endLine = max(origStartLine, origEndLine)
+            endIndex = max(origStartIndex, origEndIndex)
+            
+            # step 1: extract the text of the rectangular selection and the lines
+            selText = {}
+            txtLines = {}
+            for line in range(startLine, endLine + 1):
+                txtLines[line] = self.text(line)
+                txt = txtLines[line][startIndex:endIndex].strip()
+                if not alnum:
+                    try:
+                        txt = float(txt)
+                    except ValueError:
+                        E5MessageBox.critical(self,
+                            self.trUtf8("Sort Lines"),
+                            self.trUtf8("""The selection contains illegal data for a"""
+                                        """ numerical sort."""))
+                        return
+                
+                if txt in selText:
+                    selText[txt].append(line)
+                else:
+                    selText[txt] = [line]
+            
+            # step 2: calculate the sort parameters
+            reverse = not ascending
+            if alnum and not caseSensitive:
+                keyFun = str.lower
+            else:
+                keyFun = None
+            
+            # step 3: sort the lines
+            eol = self.getLineSeparator()
+            lastWithEol = True
+            newLines = []
+            for txt in sorted(selText.keys(), key=keyFun, reverse=reverse):
+                for line in selText[txt]:
+                    txt = txtLines[line]
+                    if not txt.endswith(eol):
+                        lastWithEol = False
+                        txt += eol
+                    newLines.append(txt)
+            if not lastWithEol:
+                newLines[-1] = newLines[-1][:-len(eol)]
+            
+            # step 4: replace the lines by the sorted ones
+            self.setSelection(startLine, 0, endLine + 1, 0)
+            self.beginUndoAction()
+            self.replaceSelectedText("".join(newLines))
+            self.endUndoAction()
+            
+            # step 5: reset the rectangular selection
+            self.setRectangularSelection(origStartLine, origStartIndex,
+                                         origEndLine, origEndIndex)
+            self.selectionChanged.emit()
--- a/QScintilla/Lexers/LexerPygments.py	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/Lexers/LexerPygments.py	Tue May 28 20:52:12 2013 +0200
@@ -449,7 +449,7 @@
                 cpos += tlen
                 if tlen and cpos < textLen:
                     self.editor.setStyling(tlen, style)
-                else:
+                if cpos >= textLen:
                     break
             self.editor.startStyling(cpos, 0x3f)
     
--- a/QScintilla/MiniEditor.py	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/MiniEditor.py	Tue May 28 20:52:12 2013 +0200
@@ -171,6 +171,7 @@
         self.__textEdit.textChanged.connect(self.__documentWasModified)
         self.__textEdit.modificationChanged.connect(self.__modificationChanged)
         self.__textEdit.cursorPositionChanged.connect(self.__cursorPositionChanged)
+        self.__textEdit.linesChanged.connect(self.__resizeLinenoMargin)
         
         self.__textEdit.setContextMenuPolicy(Qt.CustomContextMenu)
         self.__textEdit.customContextMenuRequested.connect(self.__contextMenuRequested)
@@ -2094,8 +2095,7 @@
         linenoMargin = Preferences.getEditor("LinenoMargin")
         self.__textEdit.setMarginLineNumbers(0, linenoMargin)
         if linenoMargin:
-            self.__textEdit.setMarginWidth(0,
-                ' ' + '8' * Preferences.getEditor("LinenoWidth"))
+            self.__resizeLinenoMargin()
         else:
             self.__textEdit.setMarginWidth(0, 16)
         
@@ -2120,6 +2120,15 @@
         else:
             self.__textEdit.setFolding(QsciScintilla.NoFoldStyle)
     
+    def __resizeLinenoMargin(self):
+        """
+        Private slot to resize the line numbers margin.
+        """
+        linenoMargin = Preferences.getEditor("LinenoMargin")
+        if linenoMargin:
+            self.__textEdit.setMarginWidth(
+                0, '8' * (len(str(self.__textEdit.lines())) + 1))
+    
     def __setTextDisplay(self):
         """
         Private method to configure the text display.
@@ -2206,6 +2215,9 @@
         if Preferences.getEditor("OverrideEditAreaColours"):
             self.__textEdit.setColor(Preferences.getEditorColour("EditAreaForeground"))
             self.__textEdit.setPaper(Preferences.getEditorColour("EditAreaBackground"))
+        
+        self.__textEdit.setVirtualSpaceOptions(
+            Preferences.getEditor("VirtualSpaceOptions"))
     
     def __setEolMode(self):
         """
--- a/QScintilla/QsciScintillaCompat.py	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/QsciScintillaCompat.py	Tue May 28 20:52:12 2013 +0200
@@ -113,10 +113,14 @@
         weight = -font.weight()
         italic = font.italic()
         underline = font.underline()
+        bold = font.bold()
         for style in rangeLow + rangeHigh:
             self.SendScintilla(QsciScintilla.SCI_STYLESETFONT, style, f)
             self.SendScintilla(QsciScintilla.SCI_STYLESETSIZE, style, ps)
-            self.SendScintilla(QsciScintilla.SCI_STYLESETWEIGHT, style, weight)
+            try:
+                self.SendScintilla(QsciScintilla.SCI_STYLESETWEIGHT, style, weight)
+            except AttributeError:
+                self.SendScintilla(QsciScintilla.SCI_STYLESETBOLD, style, bold)
             self.SendScintilla(QsciScintilla.SCI_STYLESETITALIC, style, italic)
             self.SendScintilla(QsciScintilla.SCI_STYLESETUNDERLINE, style, underline)
     
@@ -309,7 +313,7 @@
         return self.SendScintilla(QsciScintilla.SCI_GETINDENTATIONGUIDES)
     
     ###########################################################################
-    # methods below are missing from QScintilla
+    ## methods below are missing from QScintilla
     ###########################################################################
 
     def zoomIn(self, zoom=1):
@@ -472,6 +476,99 @@
         """
         self.SendScintilla(QsciScintilla.SCI_LINEENDEXTEND)
     
+    def hasSelection(self):
+        """
+        Public method to check for a selection.
+        
+        @return flag indicating the presence of a selection (boolean)
+        """
+        return self.getSelection()[0] != -1
+    
+    def selectionIsRectangle(self):
+        """
+        Public method to check, if the current selection is rectangular.
+        
+        @return flag indicating a rectangular selection (boolean)
+        """
+        startLine, startIndex, endLine, endIndex = self.getSelection()
+        return startLine != -1 and \
+               startLine != endLine and \
+               self.SendScintilla(QsciScintilla.SCI_SELECTIONISRECTANGLE)
+    
+    def getRectangularSelection(self):
+        """
+        Public method to retrieve the start and end of a rectangular selection.
+        
+        @return tuple with start line and index and end line and index
+            (tuple of four int)
+        """
+        if not self.selectionIsRectangle():
+            return (-1, -1, -1, -1)
+        
+        startPos = self.SendScintilla(QsciScintilla.SCI_GETRECTANGULARSELECTIONANCHOR)
+        endPos = self.SendScintilla(QsciScintilla.SCI_GETRECTANGULARSELECTIONCARET)
+        startLine, startIndex = self.lineIndexFromPosition(startPos)
+        endLine, endIndex = self.lineIndexFromPosition(endPos)
+        
+        return (startLine, startIndex, endLine, endIndex)
+    
+    def setRectangularSelection(self, startLine, startIndex, endLine, endIndex):
+        """
+        Public method to set a rectangular selection.
+        
+        @param startLine line number of the start of the selection (int)
+        @param startIndex index number of the start of the selection (int)
+        @param endLine line number of the end of the selection (int)
+        @param endIndex index number of the end of the selection (int)
+        """
+        startPos = self.positionFromLineIndex(startLine, startIndex)
+        endPos = self.positionFromLineIndex(endLine, endIndex)
+        
+        self.SendScintilla(QsciScintilla.SCI_SETRECTANGULARSELECTIONANCHOR, startPos)
+        self.SendScintilla(QsciScintilla.SCI_SETRECTANGULARSELECTIONCARET, endPos)
+    
+    def getSelectionCount(self):
+        """
+        Public method to get the number of active selections.
+        
+        @return number of active selection (integer)
+        """
+        return self.SendScintilla(QsciScintilla.SCI_GETSELECTIONS)
+    
+    def getSelectionN(self, index):
+        """
+        Public method to get the start and end of a selection given by it's index.
+        
+        @return tuple with start line and index and end line and index
+            (tuple of four int) for the given selection
+        """
+        startPos = self.SendScintilla(QsciScintilla.SCI_GETSELECTIONNSTART, index)
+        endPos = self.SendScintilla(QsciScintilla.SCI_GETSELECTIONNEND, index)
+        startLine, startIndex = self.lineIndexFromPosition(startPos)
+        endLine, endIndex = self.lineIndexFromPosition(endPos)
+        
+        return (startLine, startIndex, endLine, endIndex)
+    
+    def getSelections(self):
+        """
+        Public method to get the start and end coordinates of all active selections.
+        
+        @return list of tuples with start line and index and end line and index
+            of each active selection (list of tuples of four int)
+        """
+        selections = []
+        for index in range(self.getSelectionCount()):
+            selections.append(self.getSelectionN(index))
+        return selections
+    
+    def setVirtualSpaceOptions(self, options):
+        """
+        Public method to set the virtual space usage options.
+        
+        @param options usage options to set (integer, 0 to 3)
+        """
+        self.SendScintilla(QsciScintilla.SCI_SETVIRTUALSPACEOPTIONS, options)
+    
     def getLineSeparator(self):
         """
         Public method to get the line separator for the current eol mode.
@@ -963,7 +1060,6 @@
             QsciScintilla.SC_MARKNUM_FOLDEREND, foreColor)
         self.SendScintilla(QsciScintilla.SCI_MARKERSETBACK,
             QsciScintilla.SC_MARKNUM_FOLDEREND, backColor)
-        
     
     ###########################################################################
     # interface methods to the standard keyboard command set
--- a/QScintilla/ReplaceWidget.ui	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/ReplaceWidget.ui	Tue May 28 20:52:12 2013 +0200
@@ -6,10 +6,16 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>795</width>
+    <width>805</width>
     <height>56</height>
    </rect>
   </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <property name="windowTitle">
    <string>Find and Replace</string>
   </property>
--- a/QScintilla/SearchReplaceWidget.py	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/SearchReplaceWidget.py	Tue May 28 20:52:12 2013 +0200
@@ -146,9 +146,33 @@
         self.havefound = False
         self.__pos = None
         self.__findBackwards = False
-        self.__selection = None
+        self.__selections = []
         self.__finding = False
-
+    
+    def __selectionBoundary(self, selections=None):
+        """
+        Private method to calculate the current selection boundary.
+        
+        @param selections optional parameter giving the selections to
+            calculate the boundary for (list of tuples of four integer)
+        @return tuple of start line and index and end line and index
+            (tuple of four integer)
+        """
+        if selections is None:
+            selections = self.__selections
+        if selections:
+            lineNumbers = [sel[0] for sel in selections] + \
+                          [sel[2] for sel in selections]
+            indexNumbers = [sel[1] for sel in selections] + \
+                           [sel[3] for sel in selections]
+            startLine, startIndex, endLine, endIndex = (
+                min(lineNumbers), min(indexNumbers),
+                max(lineNumbers), max(indexNumbers))
+        else:
+            startLine, startIndex, endLine, endIndex = -1, -1, -1, -1
+        
+        return startLine, startIndex, endLine, endIndex
+    
     def on_findtextCombo_editTextChanged(self, txt):
         """
         Private slot to enable/disable the find buttons.
@@ -265,10 +289,7 @@
         lineTo = -1
         indexTo = -1
         if self.ui.selectionCheckBox.isChecked():
-            lineFrom = self.__selection[0]
-            indexFrom = self.__selection[1]
-            lineTo = self.__selection[2]
-            indexTo = self.__selection[3]
+            lineFrom, indexFrom, lineTo, indexTo = self.__selectionBoundary()
         
         aw.clearSearchIndicators()
         ok = aw.findFirstTarget(txt,
@@ -280,7 +301,21 @@
             tgtPos, tgtLen = aw.getFoundTarget()
             if tgtLen == 0:
                 break
-            aw.setSearchIndicator(tgtPos, tgtLen)
+            if len(self.__selections) > 1:
+                lineFrom, indexFrom = aw.lineIndexFromPosition(tgtPos)
+                lineTo, indexTo = aw.lineIndexFromPosition(tgtPos + tgtLen)
+                for sel in self.__selections:
+                    if lineFrom == sel[0] and \
+                       indexFrom >= sel[1] and \
+                       indexTo <= sel[3]:
+                        indicate = True
+                        break
+                else:
+                    indicate = False
+            else:
+                indicate = True
+            if indicate:
+                aw.setSearchIndicator(tgtPos, tgtLen)
             ok = aw.findNextTarget()
     
     def __findNextPrev(self, txt, backwards):
@@ -301,12 +336,12 @@
         
         ok = True
         lineFrom, indexFrom, lineTo, indexTo = aw.getSelection()
+        boundary = self.__selectionBoundary()
         if backwards:
             if self.ui.selectionCheckBox.isChecked() and \
-               (lineFrom, indexFrom, lineTo, indexTo) == self.__selection:
+               (lineFrom, indexFrom, lineTo, indexTo) == boundary:
                 # initial call
-                line = self.__selection[2]
-                index = self.__selection[3]
+                line, index = boundary[2:]
             else:
                 if (lineFrom, indexFrom) == (-1, -1):
                     # no selection present
@@ -314,20 +349,19 @@
                     index = cindex
                 else:
                     line = lineFrom
-                    index = indexFrom - 1
+                    index = indexFrom
             if self.ui.selectionCheckBox.isChecked() and \
-               line == self.__selection[0] and \
+               line == boundary[0] and \
                index >= 0 and \
-               index < self.__selection[1]:
+               index < boundary[1]:
                 ok = False
             
             if ok and index < 0:
                 line -= 1
                 if self.ui.selectionCheckBox.isChecked():
-                    if line < self.__selection[0]:
+                    if line < boundary[0]:
                         if self.ui.wrapCheckBox.isChecked():
-                            line = self.__selection[2]
-                            index = self.__selection[3]
+                            line, index = boundary[2:]
                         else:
                             ok = False
                     else:
@@ -343,10 +377,9 @@
                         index = aw.lineLength(line)
         else:
             if self.ui.selectionCheckBox.isChecked() and \
-               (lineFrom, indexFrom, lineTo, indexTo) == self.__selection:
+               (lineFrom, indexFrom, lineTo, indexTo) == boundary:
                 # initial call
-                line = self.__selection[0]
-                index = self.__selection[1]
+                line, index = boundary[:2]
             else:
                 line = lineTo
                 index = indexTo
@@ -362,19 +395,44 @@
         
         if ok and self.ui.selectionCheckBox.isChecked():
             lineFrom, indexFrom, lineTo, indexTo = aw.getSelection()
-            if (lineFrom == self.__selection[0] and indexFrom >= self.__selection[1]) or \
-               (lineFrom > self.__selection[0] and lineFrom < self.__selection[2]) or \
-               (lineFrom == self.__selection[2] and indexFrom <= self.__selection[3]):
+            if len(self.__selections) > 1:
+                for sel in self.__selections:
+                    if lineFrom == sel[0] and \
+                       indexFrom >= sel[1] and \
+                       indexTo <= sel[3]:
+                        ok = True
+                        break
+                else:
+                    ok = False
+            elif (lineFrom == boundary[0] and indexFrom >= boundary[1]) or \
+               (lineFrom > boundary[0] and lineFrom < boundary[2]) or \
+               (lineFrom == boundary[2] and indexFrom <= boundary[3]):
                 ok = True
             else:
-                if self.ui.wrapCheckBox.isChecked():
-                    # try it again
-                    if backwards:
-                        line = self.__selection[2]
-                        index = self.__selection[3]
+                ok = False
+            if not ok and len(self.__selections) > 1:
+                # try again
+                while not ok and \
+                      ((backwards and lineFrom >= boundary[0]) or \
+                       (not backwards and lineFrom <= boundary[2])):
+                    for ind in range(len(self.__selections)):
+                        if lineFrom == self.__selections[ind][0]:
+                            after = indexTo > self.__selections[ind][3]
+                            if backwards:
+                                if after:
+                                    line, index = self.__selections[ind][2:]
+                                else:
+                                    if ind > 0:
+                                        line, index = self.__selections[ind - 1][2:]
+                            else:
+                                if after:
+                                    if ind < len(self.__selections) - 1:
+                                        line, index = self.__selections[ind + 1][:2]
+                                else:
+                                    line, index = self.__selections[ind][:2]
+                            break
                     else:
-                        line = self.__selection[0]
-                        index = self.__selection[1]
+                        break
                     ok = aw.findFirst(txt,
                         self.ui.regexpCheckBox.isChecked(),
                         self.ui.caseCheckBox.isChecked(),
@@ -384,23 +442,52 @@
                         line, index)
                     if ok:
                         lineFrom, indexFrom, lineTo, indexTo = aw.getSelection()
-                        if (lineFrom == self.__selection[0] and \
-                            indexFrom >= self.__selection[1]) or \
-                           (lineFrom > self.__selection[0] and \
-                            lineFrom < self.__selection[2]) or \
-                           (lineFrom == self.__selection[2] \
-                            and indexFrom <= self.__selection[3]):
+                        if lineFrom < boundary[0] or lineFrom > boundary[2] or \
+                           indexFrom < boundary[1] or indexFrom > boundary[3] or \
+                           indexTo < boundary[1] or indexTo > boundary[3]:
+                            ok = False
+                            break
+            if not ok:
+                if self.ui.wrapCheckBox.isChecked():
+                    # try it again
+                    if backwards:
+                        line, index = boundary[2:]
+                    else:
+                        line, index = boundary[:2]
+                    ok = aw.findFirst(txt,
+                        self.ui.regexpCheckBox.isChecked(),
+                        self.ui.caseCheckBox.isChecked(),
+                        self.ui.wordCheckBox.isChecked(),
+                        self.ui.wrapCheckBox.isChecked(),
+                        not backwards,
+                        line, index)
+                    if ok:
+                        lineFrom, indexFrom, lineTo, indexTo = aw.getSelection()
+                        if len(self.__selections) > 1:
+                            for sel in self.__selections:
+                                if lineFrom == sel[0] and \
+                                   indexFrom >= sel[1] and \
+                                   indexTo <= sel[3]:
+                                    ok = True
+                                    break
+                            else:
+                                ok = False
+                        elif (lineFrom == boundary[0] and \
+                            indexFrom >= boundary[1]) or \
+                           (lineFrom > boundary[0] and \
+                            lineFrom < boundary[2]) or \
+                           (lineFrom == boundary[2] \
+                            and indexFrom <= boundary[3]):
                             ok = True
                         else:
                             ok = False
-                            aw.selectAll(False)
-                            aw.setCursorPosition(cline, cindex)
-                            aw.ensureCursorVisible()
                 else:
                     ok = False
-                    aw.selectAll(False)
-                    aw.setCursorPosition(cline, cindex)
-                    aw.ensureCursorVisible()
+            
+            if not ok:
+                aw.selectAll(False)
+                aw.setCursorPosition(cline, cindex)
+                aw.ensureCursorVisible()
         
         self.__finding = False
         
@@ -457,16 +544,17 @@
         """
         if not self.__finding:
             if editor.hasSelectedText():
-                line1, index1, line2, index2 = editor.getSelection()
+                selections = editor.getSelections()
+                line1, index1, line2, index2 = self.__selectionBoundary(selections)
                 if line1 != line2:
                     self.ui.selectionCheckBox.setEnabled(True)
                     self.ui.selectionCheckBox.setChecked(True)
-                    self.__selection = (line1, index1, line2, index2)
+                    self.__selections = selections
                     return
             
             self.ui.selectionCheckBox.setEnabled(False)
             self.ui.selectionCheckBox.setChecked(False)
-            self.__selection = None
+            self.__selections = []
 
     @pyqtSlot()
     def on_replaceButton_clicked(self):
@@ -550,9 +638,9 @@
         
         aw = self.viewmanager.activeWindow()
         cline, cindex = aw.getCursorPosition()
+        boundary = self.__selectionBoundary()
         if self.ui.selectionCheckBox.isChecked():
-            line = self.__selection[0]
-            index = self.__selection[1]
+            line, index = boundary[:2]
         else:
             line = 0
             index = 0
@@ -564,12 +652,49 @@
         
         if ok and self.ui.selectionCheckBox.isChecked():
             lineFrom, indexFrom, lineTo, indexTo = aw.getSelection()
-            if (lineFrom == self.__selection[0] and indexFrom >= self.__selection[1]) or \
-               (lineFrom > self.__selection[0] and lineFrom < self.__selection[2]) or \
-               (lineFrom == self.__selection[2] and indexFrom <= self.__selection[3]):
+            if len(self.__selections) > 1:
+                for sel in self.__selections:
+                    if lineFrom == sel[0] and \
+                       indexFrom >= sel[1] and \
+                       indexTo <= sel[3]:
+                        ok = True
+                        break
+                else:
+                    ok = False
+            elif (lineFrom == boundary[0] and indexFrom >= boundary[1]) or \
+               (lineFrom > boundary[0] and lineFrom < boundary[2]) or \
+               (lineFrom == boundary[2] and indexFrom <= boundary[3]):
                 ok = True
             else:
                 ok = False
+            if not ok and len(self.__selections) > 1:
+                # try again
+                while not ok and lineFrom <= boundary[2]:
+                    for ind in range(len(self.__selections)):
+                        if lineFrom == self.__selections[ind][0]:
+                            after = indexTo > self.__selections[ind][3]
+                            if after:
+                                if ind < len(self.__selections) - 1:
+                                    line, index = self.__selections[ind + 1][:2]
+                            else:
+                                line, index = self.__selections[ind][:2]
+                        break
+                    else:
+                        break
+                    ok = aw.findFirst(ftxt,
+                            self.ui.regexpCheckBox.isChecked(),
+                            self.ui.caseCheckBox.isChecked(),
+                            self.ui.wordCheckBox.isChecked(),
+                            False, True, line, index)
+                    if ok:
+                        lineFrom, indexFrom, lineTo, indexTo = aw.getSelection()
+                        if lineFrom < boundary[0] or lineFrom > boundary[2] or \
+                           indexFrom < boundary[1] or indexFrom > boundary[3] or \
+                           indexTo < boundary[1] or indexTo > boundary[3]:
+                            ok = False
+                            break
+            
+            if not ok:
                 aw.selectAll(False)
                 aw.setCursorPosition(cline, cindex)
                 aw.ensureCursorVisible()
--- a/QScintilla/SearchWidget.ui	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/SearchWidget.ui	Tue May 28 20:52:12 2013 +0200
@@ -6,10 +6,16 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>947</width>
+    <width>959</width>
     <height>25</height>
    </rect>
   </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <property name="windowTitle">
    <string>Find</string>
   </property>
--- a/QScintilla/Shell.py	Fri May 24 18:39:58 2013 +0200
+++ b/QScintilla/Shell.py	Tue May 28 20:52:12 2013 +0200
@@ -140,6 +140,7 @@
         ))
         
         self.userListActivated.connect(self.__completionListSelected)
+        self.linesChanged.connect(self.__resizeLinenoMargin)
         
         self.__showStdOutErr = Preferences.getShell("ShowStdOutErr")
         if self.__showStdOutErr:
@@ -156,7 +157,7 @@
         dbs.clientSyntaxError.connect(self.__clientError)
         self.dbs = dbs
         
-        # Initialise instance variables.
+        # Initialize instance variables.
         self.__initialise()
         self.prline = 0
         self.prcol = 0
@@ -275,6 +276,14 @@
         
         self.grabGesture(Qt.PinchGesture)
         
+    def __resizeLinenoMargin(self):
+        """
+        Private slot to resize the line numbers margin.
+        """
+        linenoMargin = Preferences.getShell("LinenoMargin")
+        if linenoMargin:
+            self.setMarginWidth(0, '8' * (len(str(self.lines())) + 1))
+        
     def closeShell(self):
         """
         Public method to shutdown the shell.
@@ -333,7 +342,7 @@
         linenoMargin = Preferences.getShell("LinenoMargin")
         self.setMarginLineNumbers(0, linenoMargin)
         if linenoMargin:
-            self.setMarginWidth(0, ' ' + '8' * Preferences.getShell("LinenoWidth"))
+            self.__resizeLinenoMargin()
         else:
             self.setMarginWidth(0, 0)
         
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QScintilla/SortOptionsDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter the sort options for a line sort.
+"""
+
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+
+from PyQt4.QtGui import QDialog
+
+from .Ui_SortOptionsDialog import Ui_SortOptionsDialog
+
+
+class SortOptionsDialog(QDialog, Ui_SortOptionsDialog):
+    """
+    Class implementing a dialog to enter the sort options for a line sort.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(SortOptionsDialog, self).__init__(parent)
+        self.setupUi(self)
+    
+    def getData(self):
+        """
+        Public method to get the selected options.
+        
+        @return tuple of three flags indicating ascending order, alphanumeric sort
+            and case sensitivity (tuple of three boolean)
+        """
+        return (
+            self.ascendingButton.isChecked(),
+            self.alnumButton.isChecked(),
+            self.respectCaseButton.isChecked()
+        )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QScintilla/SortOptionsDialog.ui	Tue May 28 20:52:12 2013 +0200
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SortOptionsDialog</class>
+ <widget class="QDialog" name="SortOptionsDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>209</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Sort Options</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="directionGroupBox">
+     <property name="title">
+      <string>Direction</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <widget class="QRadioButton" name="ascendingButton">
+        <property name="toolTip">
+         <string>Select to sort in ascending order</string>
+        </property>
+        <property name="text">
+         <string>Ascending</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="descendingButton">
+        <property name="toolTip">
+         <string>Select to sort in descending order</string>
+        </property>
+        <property name="text">
+         <string>Descending</string>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="typeGroupBox">
+     <property name="title">
+      <string>Type</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QRadioButton" name="alnumButton">
+        <property name="toolTip">
+         <string>Select to sort alphanumerically</string>
+        </property>
+        <property name="text">
+         <string>Alphanumerical</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="numButton">
+        <property name="toolTip">
+         <string>Select to sort numerically</string>
+        </property>
+        <property name="text">
+         <string>Numerical</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="caseGroupBox">
+     <property name="title">
+      <string>Case Sensitivity</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_3">
+      <item>
+       <widget class="QRadioButton" name="respectCaseButton">
+        <property name="toolTip">
+         <string>Select to respect the case while sorting</string>
+        </property>
+        <property name="text">
+         <string>Respect Case</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QRadioButton" name="ignoreCaseButton">
+        <property name="toolTip">
+         <string>Select to ignore the case while sorting</string>
+        </property>
+        <property name="text">
+         <string>Ignore Case</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </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>ascendingButton</tabstop>
+  <tabstop>descendingButton</tabstop>
+  <tabstop>alnumButton</tabstop>
+  <tabstop>numButton</tabstop>
+  <tabstop>respectCaseButton</tabstop>
+  <tabstop>ignoreCaseButton</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>SortOptionsDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>227</x>
+     <y>191</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>208</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>SortOptionsDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>295</x>
+     <y>197</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>208</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>alnumButton</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>caseGroupBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>49</x>
+     <y>95</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>47</x>
+     <y>127</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- a/ThirdParty/Pygments/pygments/lexers/__init__.py	Fri May 24 18:39:58 2013 +0200
+++ b/ThirdParty/Pygments/pygments/lexers/__init__.py	Tue May 28 20:52:12 2013 +0200
@@ -187,7 +187,7 @@
         if rv == 1.0:
             return lexer(**options)
         result.append((rv, lexer))
-    result.sort()
+    result.sort(key=lambda k: k[0])
     if not result[-1][0] and primary is not None:
         return primary(**options)
     return result[-1][1](**options)
--- a/Toolbox/Startup.py	Fri May 24 18:39:58 2013 +0200
+++ b/Toolbox/Startup.py	Tue May 28 20:52:12 2013 +0200
@@ -133,8 +133,7 @@
     Module function to set the Qt library paths correctly for windows systems.
     """
     if Globals.isWindowsPlatform():
-        from PyQt4 import pyqtconfig
-        libPath = os.path.join(pyqtconfig._pkg_config["pyqt_mod_dir"], "plugins")
+        libPath = os.path.join(Globals.getPyQt4ModulesDirectory(), "plugins")
         if os.path.exists(libPath):
             libPath = QDir.fromNativeSeparators(libPath)
             libraryPaths = QApplication.libraryPaths()
--- a/UI/BrowserModel.py	Fri May 24 18:39:58 2013 +0200
+++ b/UI/BrowserModel.py	Tue May 28 20:52:12 2013 +0200
@@ -35,23 +35,25 @@
     """
     Class implementing the browser model.
     """
-    def __init__(self, parent=None):
+    def __init__(self, parent=None, nopopulate=False):
         """
         Constructor
         
         @param parent reference to parent object (QObject)
+        @keyparam nopopulate flag indicating to not populate the model (boolean)
         """
         super(BrowserModel, self).__init__(parent)
         
-        rootData = QApplication.translate("BrowserModel", "Name")
-        self.rootItem = BrowserItem(None, rootData)
-        
         self.progDir = None
         self.watchedItems = {}
         self.watcher = QFileSystemWatcher(self)
         self.watcher.directoryChanged.connect(self.directoryChanged)
         
-        self.__populateModel()
+        if not nopopulate:
+            rootData = QApplication.translate("BrowserModel", "Name")
+            self.rootItem = BrowserItem(None, rootData)
+            
+            self.__populateModel()
     
     def columnCount(self, parent=QModelIndex()):
         """
--- a/UI/CompareDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/UI/CompareDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -122,12 +122,11 @@
         
         self.on_synchronizeCheckBox_toggled(True)
         
-        if Utilities.isWindowsPlatform():
-            self.contents_1.setFontFamily("Lucida Console")
-            self.contents_2.setFontFamily("Lucida Console")
-        else:
-            self.contents_1.setFontFamily("Monospace")
-            self.contents_2.setFontFamily("Monospace")
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.contents_1.setFontFamily(font.family())
+        self.contents_1.setFontPointSize(font.pointSize())
+        self.contents_2.setFontFamily(font.family())
+        self.contents_2.setFontPointSize(font.pointSize())
         self.fontHeight = QFontMetrics(self.contents_1.currentFont()).height()
         
         self.cNormalFormat = self.contents_1.currentCharFormat()
--- a/UI/DiffDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/UI/DiffDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -226,10 +226,9 @@
         
         self.updateInterval = 20    # update every 20 lines
         
-        if Utilities.isWindowsPlatform():
-            self.contents.setFontFamily("Lucida Console")
-        else:
-            self.contents.setFontFamily("Monospace")
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.contents.setFontFamily(font.family())
+        self.contents.setFontPointSize(font.pointSize())
         
         self.cNormalFormat = self.contents.currentCharFormat()
         self.cAddedFormat = self.contents.currentCharFormat()
--- a/UI/FindFileNameDialog.py	Fri May 24 18:39:58 2013 +0200
+++ b/UI/FindFileNameDialog.py	Tue May 28 20:52:12 2013 +0200
@@ -182,7 +182,6 @@
         if self.searchDirCheckBox.isChecked():
             self.__searchFile()
         
-        
     @pyqtSlot()
     def on_searchDirButton_clicked(self):
         """
--- a/UI/SymbolsWidget.py	Fri May 24 18:39:58 2013 +0200
+++ b/UI/SymbolsWidget.py	Tue May 28 20:52:12 2013 +0200
@@ -9,6 +9,7 @@
 
 from __future__ import unicode_literals    # __IGNORE_WARNING__
 
+import sys
 import unicodedata
 try:  # Py3
     import html.entities as html_entities
@@ -47,13 +48,13 @@
             self.trUtf8("Name"),
         ]
         
-        self.__tables = (
+        self.__tables = [
             # first   last     display name
             (0x0,    0x1f,   self.trUtf8("Control Characters")),
             (0x20,   0x7f,   self.trUtf8("Basic Latin")),
-            (0x80,   0x100,  self.trUtf8("Latin-1 Supplement")),
-            (0x100,  0x180,  self.trUtf8("Latin Extended A")),
-            (0x180,  0x24f,  self.trUtf8("Latin Extended B")),
+            (0x80,   0xff,   self.trUtf8("Latin-1 Supplement")),
+            (0x100,  0x17f,  self.trUtf8("Latin Extended-A")),
+            (0x180,  0x24f,  self.trUtf8("Latin Extended-B")),
             (0x250,  0x2af,  self.trUtf8("IPA Extensions")),
             (0x2b0,  0x2ff,  self.trUtf8("Spacing Modifier Letters")),
             (0x300,  0x36f,  self.trUtf8("Combining Diacritical Marks")),
@@ -65,6 +66,10 @@
             (0x600,  0x6ff,  self.trUtf8("Arabic")),
             (0x700,  0x74f,  self.trUtf8("Syriac")),
             (0x780,  0x7bf,  self.trUtf8("Thaana")),
+            (0x7c0,  0x7ff,  self.trUtf8("N'Ko")),
+            (0x800,  0x83f,  self.trUtf8("Samaritan")),
+            (0x840,  0x85f,  self.trUtf8("Mandaic")),
+            (0x8a0,  0x8ff,  self.trUtf8("Arabic Extended-A")),
             (0x900,  0x97f,  self.trUtf8("Devanagari")),
             (0x980,  0x9ff,  self.trUtf8("Bengali")),
             (0xa00,  0xa7f,  self.trUtf8("Gurmukhi")),
@@ -82,8 +87,9 @@
             (0x10a0, 0x10ff, self.trUtf8("Georgian")),
             (0x1100, 0x11ff, self.trUtf8("Hangul Jamo")),
             (0x1200, 0x137f, self.trUtf8("Ethiopic")),
+            (0x1380, 0x139f, self.trUtf8("Ethiopic Supplement")),
             (0x13a0, 0x13ff, self.trUtf8("Cherokee")),
-            (0x1400, 0x167f, self.trUtf8("Canadian Aboriginal Syllabics")),
+            (0x1400, 0x167f, self.trUtf8("Unified Canadian Aboriginal Syllabics")),
             (0x1680, 0x169f, self.trUtf8("Ogham")),
             (0x16a0, 0x16ff, self.trUtf8("Runic")),
             (0x1700, 0x171f, self.trUtf8("Tagalog")),
@@ -92,10 +98,22 @@
             (0x1760, 0x177f, self.trUtf8("Tagbanwa")),
             (0x1780, 0x17ff, self.trUtf8("Khmer")),
             (0x1800, 0x18af, self.trUtf8("Mongolian")),
+            (0x18b0, 0x18ff, self.trUtf8("Unified Canadian Aboriginal Syllabics Extended")),
             (0x1900, 0x194f, self.trUtf8("Limbu")),
             (0x1950, 0x197f, self.trUtf8("Tai Le")),
             (0x19e0, 0x19ff, self.trUtf8("Khmer Symbols")),
+            (0x1a00, 0x1a1f, self.trUtf8("Buginese")),
+            (0x1a20, 0x1aaf, self.trUtf8("Tai Tham")),
+            (0x1b00, 0x1b7f, self.trUtf8("Balinese")),
+            (0x1b80, 0x1bbf, self.trUtf8("Sundanese")),
+            (0x1bc0, 0x1bff, self.trUtf8("Batak")),
+            (0x1c00, 0x1c4f, self.trUtf8("Lepcha")),
+            (0x1c50, 0x1c7f, self.trUtf8("Ol Chiki")),
+            (0x1cc0, 0x1ccf, self.trUtf8("Sundanese Supplement")),
+            (0x1cd0, 0x1cff, self.trUtf8("Vedic Extensions")),
             (0x1d00, 0x1d7f, self.trUtf8("Phonetic Extensions")),
+            (0x1d80, 0x1dbf, self.trUtf8("Phonetic Extensions Supplement")),
+            (0x1dc0, 0x1dff, self.trUtf8("Combining Diacritical Marks Supplement")),
             (0x1e00, 0x1eff, self.trUtf8("Latin Extended Additional")),
             (0x1f00, 0x1fff, self.trUtf8("Greek Extended")),
             (0x2000, 0x206f, self.trUtf8("General Punctuation")),
@@ -122,6 +140,14 @@
             (0x2980, 0x29ff, self.trUtf8("Miscellaneous Mathematical Symbols-B")),
             (0x2a00, 0x2aff, self.trUtf8("Supplemental Mathematical Operators")),
             (0x2b00, 0x2bff, self.trUtf8("Miscellaneous Symbols and Arcolumns")),
+            (0x2c00, 0x2c5f, self.trUtf8("Glagolitic")),
+            (0x2c60, 0x2c7f, self.trUtf8("Latin Extended-C")),
+            (0x2c80, 0x2cff, self.trUtf8("Coptic")),
+            (0x2d00, 0x2d2f, self.trUtf8("Georgian Supplement")),
+            (0x2d30, 0x2d7f, self.trUtf8("Tifinagh")),
+            (0x2d80, 0x2ddf, self.trUtf8("Ethiopic Extended")),
+            (0x2de0, 0x2dff, self.trUtf8("Cyrillic Extended-A")),
+            (0x2e00, 0x2e7f, self.trUtf8("Supplemental Punctuation")),
             (0x2e80, 0x2eff, self.trUtf8("CJK Radicals Supplement")),
             (0x2f00, 0x2fdf, self.trUtf8("KangXi Radicals")),
             (0x2ff0, 0x2fff, self.trUtf8("Ideographic Description Chars")),
@@ -132,15 +158,38 @@
             (0x3130, 0x318f, self.trUtf8("Hangul Compatibility Jamo")),
             (0x3190, 0x319f, self.trUtf8("Kanbun")),
             (0x31a0, 0x31bf, self.trUtf8("Bopomofo Extended")),
+            (0x31c0, 0x31ef, self.trUtf8("CJK Strokes")),
             (0x31f0, 0x31ff, self.trUtf8("Katakana Phonetic Extensions")),
             (0x3200, 0x32ff, self.trUtf8("Enclosed CJK Letters and Months")),
             (0x3300, 0x33ff, self.trUtf8("CJK Compatibility")),
-            (0x3400, 0x4db5, self.trUtf8("CJK Unified Ideogr. Ext. A")),
+            (0x3400, 0x4dbf, self.trUtf8("CJK Unified Ideogr. Ext. A")),
             (0x4dc0, 0x4dff, self.trUtf8("Yijing Hexagram Symbols")),
-            (0x4e00, 0x9fbb, self.trUtf8("CJK Unified Ideographs")),
+            (0x4e00, 0x9fff, self.trUtf8("CJK Unified Ideographs")),
             (0xa000, 0xa48f, self.trUtf8("Yi Syllables")),
             (0xa490, 0xa4cf, self.trUtf8("Yi Radicals")),
-            (0xac00, 0xd7a3, self.trUtf8("Hangul Syllables")),
+            (0xa4d0, 0xa4ff, self.trUtf8("Lisu")),
+            (0xa500, 0xa63f, self.trUtf8("Vai")),
+            (0xa640, 0xa69f, self.trUtf8("Cyrillic Extended-B")),
+            (0xa6a0, 0xa6ff, self.trUtf8("Bamum")),
+            (0xa700, 0xa71f, self.trUtf8("Modifier Tone Letters")),
+            (0xa720, 0xa7ff, self.trUtf8("Latin Extended-D")),
+            (0xa800, 0xa82f, self.trUtf8("Syloti Nagri")),
+            (0xa830, 0xa83f, self.trUtf8("Common Indic Number Forms")),
+            (0xa840, 0xa87f, self.trUtf8("Phags-pa")),
+            (0xa880, 0xa8df, self.trUtf8("Saurashtra")),
+            (0xa8e0, 0xa8ff, self.trUtf8("Devanagari Extended")),
+            (0xa900, 0xa92f, self.trUtf8("Kayah Li")),
+            (0xa930, 0xa95f, self.trUtf8("Rejang")),
+            (0xa960, 0xa97f, self.trUtf8("Hangul Jamo Extended-A")),
+            (0xa980, 0xa9df, self.trUtf8("Javanese")),
+            (0xaa00, 0xaa5f, self.trUtf8("Cham")),
+            (0xaa60, 0xaa7f, self.trUtf8("Myanmar Extended-A")),
+            (0xaa80, 0xaadf, self.trUtf8("Tai Viet")),
+            (0xaae0, 0xaaff, self.trUtf8("Meetei Mayek Extensions")),
+            (0xab00, 0xab2f, self.trUtf8("Ethiopic Extended-A")),
+            (0xabc0, 0xabff, self.trUtf8("Meetei Mayek")),
+            (0xac00, 0xd7af, self.trUtf8("Hangul Syllables")),
+            (0xd7b0, 0xd7ff, self.trUtf8("Hangul Jamo Extended-B")),
             (0xd800, 0xdb7f, self.trUtf8("High Surrogates")),
             (0xdb80, 0xdbff, self.trUtf8("High Private Use Surrogates")),
             (0xdc00, 0xdfff, self.trUtf8("Low Surrogates")),
@@ -149,23 +198,81 @@
             (0xfb00, 0xfb4f, self.trUtf8("Alphabetic Presentation Forms")),
             (0xfb50, 0xfdff, self.trUtf8("Arabic Presentation Forms-A")),
             (0xfe00, 0xfe0f, self.trUtf8("Variation Selectors")),
+            (0xfe10, 0xfe1f, self.trUtf8("Vertical Forms")),
             (0xfe20, 0xfe2f, self.trUtf8("Combining Half Marks")),
             (0xfe30, 0xfe4f, self.trUtf8("CJK Compatibility Forms")),
             (0xfe50, 0xfe6f, self.trUtf8("Small Form Variants")),
-            (0xfe70, 0xfefe, self.trUtf8("Arabic Presentation Forms-B")),
-            (0xfeff, 0xfeff, self.trUtf8("Specials")),
+            (0xfe70, 0xfeff, self.trUtf8("Arabic Presentation Forms-B")),
             (0xff00, 0xffef, self.trUtf8("Half- and Fullwidth Forms")),
             (0xfff0, 0xffff, self.trUtf8("Specials")),
-            (0x10300, 0x1032f, self.trUtf8("Old Italic")),
-            (0x10330, 0x1034f, self.trUtf8("Gothic")),
-            (0x10400, 0x1044f, self.trUtf8("Deseret")),
-            (0x1d000, 0x1d0ff, self.trUtf8("Byzantine Musical Symbols")),
-            (0x1d100, 0x1d1ff, self.trUtf8("Musical Symbols")),
-            (0x1d400, 0x1d7ff, self.trUtf8("Mathematical Alphanumeric Symbols")),
-            (0x20000, 0x2a6d6, self.trUtf8("CJK Unified Ideogr. Ext. B")),
-            (0x2f800, 0x2fa1f, self.trUtf8("CJK Compatapility Ideogr. Suppl.")),
-            (0xe0000, 0xe007f, self.trUtf8("Tags")),
-        )
+        ]
+        if sys.maxunicode > 0xffff:
+            self.__tables.extend([
+                (0x10000, 0x1007f, self.trUtf8("Linear B Syllabary")),
+                (0x10080, 0x100ff, self.trUtf8("Linear B Ideograms")),
+                (0x10100, 0x1013f, self.trUtf8("Aegean Numbers")),
+                (0x10140, 0x1018f, self.trUtf8("Ancient Greek Numbers")),
+                (0x10190, 0x101cf, self.trUtf8("Ancient Symbols")),
+                (0x101d0, 0x101ff, self.trUtf8("Phaistos Disc")),
+                (0x10280, 0x1029f, self.trUtf8("Lycian")),
+                (0x102a0, 0x102df, self.trUtf8("Carian")),
+                (0x10300, 0x1032f, self.trUtf8("Old Italic")),
+                (0x10330, 0x1034f, self.trUtf8("Gothic")),
+                (0x10380, 0x1039f, self.trUtf8("Ugaritic")),
+                (0x103a0, 0x103df, self.trUtf8("Old Persian")),
+                (0x10400, 0x1044f, self.trUtf8("Deseret")),
+                (0x10450, 0x1047f, self.trUtf8("Shavian")),
+                (0x10480, 0x104af, self.trUtf8("Osmanya")),
+                (0x10800, 0x1083f, self.trUtf8("Cypriot Syllabary")),
+                (0x10840, 0x1085f, self.trUtf8("Imperial Aramaic")),
+                (0x10900, 0x1091f, self.trUtf8("Phoenician")),
+                (0x10920, 0x1093f, self.trUtf8("Lydian")),
+                (0x10980, 0x1099f, self.trUtf8("Meroitic Hieroglyphs")),
+                (0x109a0, 0x109ff, self.trUtf8("Meroitic Cursive")),
+                (0x10a00, 0x10a5f, self.trUtf8("Kharoshthi")),
+                (0x10a60, 0x10a7f, self.trUtf8("Old South Arabian")),
+                (0x10b00, 0x10b3f, self.trUtf8("Avestan")),
+                (0x10b40, 0x10b5f, self.trUtf8("Inscriptional Parthian")),
+                (0x10b60, 0x10b7f, self.trUtf8("Inscriptional Pahlavi")),
+                (0x10c00, 0x10c4f, self.trUtf8("Old Turkic")),
+                (0x10e60, 0x10e7f, self.trUtf8("Rumi Numeral Symbols")),
+                (0x11000, 0x1107f, self.trUtf8("Brahmi")),
+                (0x11080, 0x110cf, self.trUtf8("Kaithi")),
+                (0x110d0, 0x110ff, self.trUtf8("Sora Sompeng")),
+                (0x11100, 0x1114f, self.trUtf8("Chakma")),
+                (0x11180, 0x111df, self.trUtf8("Sharada")),
+                (0x11680, 0x116cf, self.trUtf8("Takri")),
+                (0x12000, 0x123ff, self.trUtf8("Cuneiform")),
+                (0x12400, 0x1247f, self.trUtf8("Cuneiform Numbers and Punctuation")),
+                (0x13000, 0x1342f, self.trUtf8("Egyptian Hieroglyphs")),
+                (0x16800, 0x16a3f, self.trUtf8("Bamum Supplement")),
+                (0x16f00, 0x16f9f, self.trUtf8("Miao")),
+                (0x1b000, 0x1b0ff, self.trUtf8("Kana Supplement")),
+                (0x1d000, 0x1d0ff, self.trUtf8("Byzantine Musical Symbols")),
+                (0x1d100, 0x1d1ff, self.trUtf8("Musical Symbols")),
+                (0x1d200, 0x1d24f, self.trUtf8("Ancient Greek Musical Notation")),
+                (0x1d300, 0x1d35f, self.trUtf8("Tai Xuan Jing Symbols")),
+                (0x1d360, 0x1d37f, self.trUtf8("Counting Rod Numerals")),
+                (0x1d400, 0x1d7ff, self.trUtf8("Mathematical Alphanumeric Symbols")),
+                (0x1ee00, 0x1eeff, self.trUtf8("Arabic Mathematical Alphabetic Symbols")),
+                (0x1f000, 0x1f02f, self.trUtf8("Mahjong Tiles")),
+                (0x1f030, 0x1f09f, self.trUtf8("Domino Tiles")),
+                (0x1f0a0, 0x1f0ff, self.trUtf8("Playing Cards")),
+                (0x1f100, 0x1f1ff, self.trUtf8("Enclosed Alphanumeric Supplement")),
+                (0x1f200, 0x1f2ff, self.trUtf8("Enclosed Ideographic Supplement")),
+                (0x1f300, 0x1f5ff, self.trUtf8("Miscellaneous Symbols And Pictographs")),
+                (0x1f600, 0x1f64f, self.trUtf8("Emoticons")),
+                (0x1f680, 0x1f6ff, self.trUtf8("Transport And Map Symbols")),
+                (0x1f700, 0x1f77f, self.trUtf8("Alchemical Symbols")),
+                (0x20000, 0x2a6df, self.trUtf8("CJK Unified Ideogr. Ext. B")),
+                (0x2a700, 0x2b73f, self.trUtf8("CJK Unified Ideographs Extension C")),
+                (0x2b740, 0x2b81f, self.trUtf8("CJK Unified Ideographs Extension D")),
+                (0x2f800, 0x2fa1f, self.trUtf8("CJK Compatapility Ideogr. Suppl.")),
+                (0xe0000, 0xe007f, self.trUtf8("Tags")),
+                (0xe0100, 0xe01ef, self.trUtf8("Variation Selectors Supplement")),
+                (0xf0000, 0xfffff, self.trUtf8("Supplementary Private Use Area-A")),
+                (0x100000, 0x10ffff, self.trUtf8("Supplementary Private Use Area-B")),
+            ])
         self.__currentTableIndex = 0
     
     def getTableNames(self):
@@ -232,30 +339,21 @@
             if col == 0:
                 return str(id)
             elif col == 1:
-                try:
-                    return chr(id)
-                except ValueError:
-                    return chr(65533)
+                return chr(id)
             elif col == 2:
                 return "0x{0:04x}".format(id)
             elif col == 3:
                 if id in html_entities.codepoint2name:
                     return "&{0};".format(html_entities.codepoint2name[id])
             elif col == 4:
-                try:
-                    return unicodedata.name(chr(id), '').title()
-                except ValueError:
-                    return self.trUtf8("not possible: narrow Python build")
+                return unicodedata.name(chr(id), '').title()
         
         if role == Qt.BackgroundColorRole:
             if index.column() == 0:
                 return QColor(Qt.lightGray)
         
         if role == Qt.TextColorRole:
-            try:
-                char = chr(id)
-            except ValueError:
-                char = chr(65533)
+            char = chr(id)
             if self.__isDigit(char):
                 return QColor(Qt.darkBlue)
             elif self.__isLetter(char):
--- a/UI/UserInterface.py	Fri May 24 18:39:58 2013 +0200
+++ b/UI/UserInterface.py	Tue May 28 20:52:12 2013 +0200
@@ -713,14 +713,15 @@
         """
         from E5Gui.E5SideBar import E5SideBar
         
+        delay = Preferences.getUI("SidebarDelay")
         # Create the left sidebar
-        self.leftSidebar = E5SideBar(E5SideBar.West)
+        self.leftSidebar = E5SideBar(E5SideBar.West, delay)
         
         # Create the bottom sidebar
-        self.bottomSidebar = E5SideBar(E5SideBar.South)
+        self.bottomSidebar = E5SideBar(E5SideBar.South, delay)
         
         # Create the right sidebar
-        self.rightSidebar = E5SideBar(E5SideBar.East)
+        self.rightSidebar = E5SideBar(E5SideBar.East, delay)
         
         # Create the project browser
         logging.debug("Creating Project Browser...")
@@ -1024,9 +1025,12 @@
                 else:
                     argsStr = "{0} {1}".format(argsStr, arg)
                 continue
-
-            ext = os.path.splitext(arg)[1]
-            ext = os.path.normcase(ext)
+            
+            try:
+                ext = os.path.splitext(arg)[1]
+                ext = os.path.normcase(ext)
+            except IndexError:
+                ext = ""
 
             if ext in ['.e4p']:
                 self.project.openProject(arg)
@@ -1600,12 +1604,14 @@
         
         # check for Qt4/Qt5 designer and linguist
         if Utilities.isWindowsPlatform():
-            designerExe = "{0}.exe".format(Utilities.generateQtToolName("designer"))
+            designerExe = os.path.join(Utilities.getQtBinariesPath(),
+                "{0}.exe".format(Utilities.generateQtToolName("designer")))
         elif Utilities.isMacPlatform():
             designerExe = Utilities.getQtMacBundle("designer")
         else:
-            designerExe = Utilities.generateQtToolName("designer")
-        if Utilities.isinpath(designerExe):
+            designerExe = os.path.join(Utilities.getQtBinariesPath(),
+                Utilities.generateQtToolName("designer"))
+        if os.path.exists(designerExe):
             self.designer4Act = E5Action(self.trUtf8('Qt-Designer'),
                     UI.PixmapCache.getIcon("designer4.png"),
                     self.trUtf8('Qt-&Designer...'), 0, 0, self, 'qt_designer4')
@@ -1620,12 +1626,14 @@
             self.designer4Act = None
         
         if Utilities.isWindowsPlatform():
-            linguistExe = "{0}.exe".format(Utilities.generateQtToolName("linguist"))
+            linguistExe = os.path.join(Utilities.getQtBinariesPath(),
+                "{0}.exe".format(Utilities.generateQtToolName("linguist")))
         elif Utilities.isMacPlatform():
             linguistExe = Utilities.getQtMacBundle("linguist")
         else:
-            linguistExe = Utilities.generateQtToolName("linguist")
-        if Utilities.isinpath(linguistExe):
+            linguistExe = os.path.join(Utilities.getQtBinariesPath(),
+                Utilities.generateQtToolName("linguist"))
+        if os.path.exists(linguistExe):
             self.linguist4Act = E5Action(self.trUtf8('Qt-Linguist'),
                     UI.PixmapCache.getIcon("linguist4.png"),
                     self.trUtf8('Qt-&Linguist...'), 0, 0, self, 'qt_linguist4')
@@ -3754,9 +3762,11 @@
             designer, args = Utilities.prepareQtMacBundle("designer", version, args)
         else:
             if version == 4:
-                designer = Utilities.generateQtToolName("designer")
+                designer = os.path.join(
+                    Utilities.getQtBinariesPath(),
+                    Utilities.generateQtToolName("designer"))
             if Utilities.isWindowsPlatform():
-                designer = designer + '.exe'
+                designer += '.exe'
         
         proc = QProcess()
         if not proc.startDetached(designer, args):
@@ -3811,9 +3821,11 @@
             linguist, args = Utilities.prepareQtMacBundle("linguist", version, args)
         else:
             if version == 4:
-                linguist = Utilities.generateQtToolName("linguist")
+                linguist = os.path.join(
+                    Utilities.getQtBinariesPath(),
+                    Utilities.generateQtToolName("linguist"))
             if Utilities.isWindowsPlatform():
-                linguist = linguist + '.exe'
+                linguist += '.exe'
         
         proc = QProcess()
         if not proc.startDetached(linguist, args):
@@ -3855,9 +3867,11 @@
             assistant, args = Utilities.prepareQtMacBundle("assistant", version, args)
         else:
             if version == 4:
-                assistant = Utilities.generateQtToolName("assistant")
+                assistant = os.path.join(
+                    Utilities.getQtBinariesPath(),
+                    Utilities.generateQtToolName("assistant"))
             if Utilities.isWindowsPlatform():
-                assistant = assistant + '.exe'
+                assistant += '.exe'
         
         proc = QProcess()
         if not proc.startDetached(assistant, args):
@@ -4178,9 +4192,8 @@
                toolProcData[1] not in ["insert", "replaceSelection"]:
                 # not connected to an editor or wrong mode
                 while toolProc.canReadLine():
-                    s = "{0} - ".format(program)
                     output = str(toolProc.readLine(), ioEncoding, 'replace')
-                    s.append(output)
+                    s = "{0} - {1}".format(program, output)
                     self.appendToStdout(s)
             else:
                 if toolProcData[1] == "insert":
@@ -4201,9 +4214,8 @@
             toolProc.setReadChannel(QProcess.StandardError)
             
             while toolProc.canReadLine():
-                s = "{0} - ".format(program)
                 error = str(toolProc.readLine(), ioEncoding, 'replace')
-                s.append(error)
+                s = "{0} - {1}".format(program, error)
                 self.appendToStderr(s)
         
     def __toolFinished(self, exitCode, exitStatus):
@@ -4695,8 +4707,13 @@
         SpellChecker.setDefaultLanguage(
             Preferences.getEditor("SpellCheckingDefaultLanguage"))
         
+        if self.layout == "Sidebars":
+            delay = Preferences.getUI("SidebarDelay")
+            self.leftSidebar.setDelay(delay)
+            self.bottomSidebar.setDelay(delay)
+            self.rightSidebar.setDelay(delay)
+        
         self.preferencesChanged.emit()
-        
     
     def __masterPasswordChanged(self, oldPassword, newPassword):
         """
--- a/Utilities/__init__.py	Fri May 24 18:39:58 2013 +0200
+++ b/Utilities/__init__.py	Tue May 28 20:52:12 2013 +0200
@@ -52,6 +52,8 @@
 # import these methods into the Utilities namespace
 from Globals import isWindowsPlatform, isLinuxPlatform, isMacPlatform  # __IGNORE_WARNING__
 from Globals import getConfigDir, setConfigDir  # __IGNORE_WARNING__
+from Globals import getPythonModulesDirectory, getPyQt4ModulesDirectory  # __IGNORE_WARNING__
+from Globals import getQtBinariesPath  # __IGNORE_WARNING__
 
 from E5Gui.E5Application import e5App
 
@@ -659,6 +661,41 @@
     return ""
     
 
+def getExecutablePaths(file):
+    """
+    Function to build all full path of an executable file from the environment.
+    
+    @param file filename of the executable (string)
+    @return list of full executable names (list of strings), if the executable file
+        is accessible via the searchpath defined by the PATH environment variable,
+        or an empty list otherwise.
+    """
+    paths = []
+    
+    if os.path.isabs(file):
+        if os.access(file, os.X_OK):
+            return [file]
+        else:
+            return []
+        
+    cur_path = os.path.join(os.curdir, file)
+    if os.path.exists(cur_path):
+        if os.access(cur_path, os.X_OK):
+            paths.append(cur_path)
+
+    path = os.getenv('PATH')
+    
+    # environment variable not defined
+    if path is not None:
+        dirs = path.split(os.pathsep)
+        for dir in dirs:
+            exe = os.path.join(dir, file)
+            if os.access(exe, os.X_OK) and exe not in paths:
+                paths.append(exe)
+    
+    return paths
+    
+
 def isExecutable(exe):
     """
     Function to check, if a file is executable.
@@ -1070,16 +1107,6 @@
     return QDir.homePath()
     
 
-def getPythonModulesDirectory():
-    """
-    Function to determine the path to Python's modules directory.
-    
-    @return path to the Python modules directory (string)
-    """
-    import distutils.sysconfig
-    return distutils.sysconfig.get_python_lib(True)
-    
-
 def getPythonLibPath():
     """
     Function to determine the path to Python's library.
@@ -1286,7 +1313,7 @@
     @param toolname  plain name of the tool (e.g. "designer") (string)
     @return bundle name of the Qt tool (string)
     """
-    qtDir = Preferences.getQt("Qt4Dir")
+    qtDir = getQtBinariesPath()
     bundles = [
         os.path.join(qtDir, 'bin', generateQtToolName(toolname.capitalize())) + ".app",
         os.path.join(qtDir, 'bin', generateQtToolName(toolname)) + ".app",
--- a/ViewManager/ViewManager.py	Fri May 24 18:39:58 2013 +0200
+++ b/ViewManager/ViewManager.py	Tue May 28 20:52:12 2013 +0200
@@ -1175,6 +1175,22 @@
         self.calltipsAct.triggered[()].connect(self.__editShowCallTips)
         self.editActions.append(self.calltipsAct)
         
+        self.sortAct = E5Action(QApplication.translate('ViewManager', 'Sort'),
+                QApplication.translate('ViewManager', 'Sort'),
+                QKeySequence(QApplication.translate('ViewManager',
+                    "Ctrl+Alt+S", "Edit|Sort")),
+                0,
+                self.editActGrp, 'vm_edit_sort')
+        self.sortAct.setStatusTip(QApplication.translate('ViewManager',
+            'Sort the lines containing the rectangular selection'))
+        self.sortAct.setWhatsThis(QApplication.translate('ViewManager',
+            """<b>Sort</b>"""
+            """<p>Sort the lines spanned by a rectangular selection based on the"""
+            """ selection ignoring leading and trailing whitespace.</p>"""
+        ))
+        self.sortAct.triggered[()].connect(self.__editSortSelectedLines)
+        self.editActions.append(self.sortAct)
+        
         self.editActGrp.setEnabled(False)
         self.copyActGrp.setEnabled(False)
         
@@ -1792,28 +1808,6 @@
         self.editActions.append(act)
         
         act = E5Action(QApplication.translate('ViewManager',
-                        'Convert selection to lower case'),
-                      QApplication.translate('ViewManager',
-                        'Convert selection to lower case'),
-                      QKeySequence(QApplication.translate('ViewManager', 'Alt+Shift+U')),
-                      0,
-                      self.editorActGrp, 'vm_edit_convert_selection_lower')
-        self.esm.setMapping(act, QsciScintilla.SCI_LOWERCASE)
-        act.triggered[()].connect(self.esm.map)
-        self.editActions.append(act)
-        
-        act = E5Action(QApplication.translate('ViewManager',
-                        'Convert selection to upper case'),
-                      QApplication.translate('ViewManager',
-                        'Convert selection to upper case'),
-                      QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Shift+U')),
-                      0,
-                      self.editorActGrp, 'vm_edit_convert_selection_upper')
-        self.esm.setMapping(act, QsciScintilla.SCI_UPPERCASE)
-        act.triggered[()].connect(self.esm.map)
-        self.editActions.append(act)
-        
-        act = E5Action(QApplication.translate('ViewManager',
                         'Move to end of display line'),
                       QApplication.translate('ViewManager',
                         'Move to end of display line'),
@@ -2290,6 +2284,28 @@
             self.editActions.append(act)
         
         self.editorActGrp.setEnabled(False)
+        
+        self.editLowerCaseAct = E5Action(QApplication.translate('ViewManager',
+                        'Convert selection to lower case'),
+                    QApplication.translate('ViewManager',
+                        'Convert selection to lower case'),
+                    QKeySequence(QApplication.translate('ViewManager', 'Alt+Shift+U')),
+                    0,
+                    self.editActGrp, 'vm_edit_convert_selection_lower')
+        self.esm.setMapping(self.editLowerCaseAct, QsciScintilla.SCI_LOWERCASE)
+        self.editLowerCaseAct.triggered[()].connect(self.esm.map)
+        self.editActions.append(self.editLowerCaseAct)
+        
+        self.editUpperCaseAct = E5Action(QApplication.translate('ViewManager',
+                        'Convert selection to upper case'),
+                    QApplication.translate('ViewManager',
+                        'Convert selection to upper case'),
+                    QKeySequence(QApplication.translate('ViewManager', 'Ctrl+Shift+U')),
+                    0,
+                    self.editActGrp, 'vm_edit_convert_selection_upper')
+        self.esm.setMapping(self.editUpperCaseAct, QsciScintilla.SCI_UPPERCASE)
+        self.editUpperCaseAct.triggered[()].connect(self.esm.map)
+        self.editActions.append(self.editUpperCaseAct)
     
     def initEditMenu(self):
         """
@@ -2348,6 +2364,10 @@
         menu.addAction(self.streamCommentAct)
         menu.addAction(self.boxCommentAct)
         menu.addSeparator()
+        menu.addAction(self.editUpperCaseAct)
+        menu.addAction(self.editLowerCaseAct)
+        menu.addAction(self.sortAct)
+        menu.addSeparator()
         menu.addMenu(autocompletionMenu)
         menu.addSeparator()
         menu.addMenu(searchMenu)
@@ -3617,14 +3637,13 @@
             QApplication.translate('ViewManager', "Project Exception List"),
             self.__editProjectPEL)
         self.__editSpellingMenu.addSeparator()
-        self.__editSpellingMenu.addAction(
+        self.__editUserPwlAct = self.__editSpellingMenu.addAction(
             QApplication.translate('ViewManager', "User Word List"),
             self.__editUserPWL)
-        self.__editSpellingMenu.addAction(
+        self.__editUserPelAct = self.__editSpellingMenu.addAction(
             QApplication.translate('ViewManager', "User Exception List"),
             self.__editUserPEL)
-        self.__editProjectPwlAct.setEnabled(False)
-        self.__editProjectPelAct.setEnabled(False)
+        self.__editSpellingMenu.aboutToShow.connect(self.__showEditSpellingMenu)
         
         menu.addAction(self.spellCheckAct)
         menu.addAction(self.autoSpellCheckAct)
@@ -3884,6 +3903,7 @@
         editor.encodingChanged.connect(self.__editorConfigChanged)
         editor.selectionChanged.connect(self.__searchWidget.selectionChanged)
         editor.selectionChanged.connect(self.__replaceWidget.selectionChanged)
+        editor.selectionChanged.connect(self.__editorSelectionChanged)
         editor.lastEditPositionAvailable.connect(self.__lastEditPositionAvailable)
         editor.zoomValueChanged.connect(self.zoomValueChanged)
         
@@ -5409,6 +5429,23 @@
     ## Below are the action methods for the spell checking functions
     ##################################################################
     
+    def __showEditSpellingMenu(self):
+        """
+        Private method to set up the edit dictionaries menu.
+        """
+        proj = e5App().getObject("Project")
+        projetOpen = proj.isOpen()
+        pwl = e5App().getObject("Project").getProjectDictionaries()[0]
+        self.__editProjectPwlAct.setEnabled(projetOpen and bool(pwl))
+        pel = e5App().getObject("Project").getProjectDictionaries()[1]
+        self.__editProjectPelAct.setEnabled(projetOpen and bool(pel))
+        
+        from QScintilla.SpellChecker import SpellChecker
+        pwl = SpellChecker.getUserDictionaryPath()
+        self.__editUserPwlAct.setEnabled(bool(pwl))
+        pel = SpellChecker.getUserDictionaryPath(True)
+        self.__editUserPelAct.setEnabled(bool(pel))
+    
     def __setAutoSpellChecking(self):
         """
         Private slot to set the automatic spell checking of all editors.
@@ -5431,26 +5468,14 @@
         Private slot to edit the project word list.
         """
         pwl = e5App().getObject("Project").getProjectDictionaries()[0]
-        if pwl:
-            self.__editSpellingDictionary(pwl)
-        else:
-            E5MessageBox.warning(self.ui,
-                QApplication.translate('ViewManager', "Edit Project Word List"),
-                QApplication.translate('ViewManager',
-                    """No word list defined for the current project."""))
+        self.__editSpellingDictionary(pwl)
     
     def __editProjectPEL(self):
         """
         Private slot to edit the project exception list.
         """
         pel = e5App().getObject("Project").getProjectDictionaries()[1]
-        if pel:
-            self.__editSpellingDictionary(pel)
-        else:
-            E5MessageBox.warning(self.ui,
-                QApplication.translate('ViewManager', "Edit Project Exception List"),
-                QApplication.translate('ViewManager',
-                    """No exception list defined for the current project."""))
+        self.__editSpellingDictionary(pel)
     
     def __editUserPWL(self):
         """
@@ -5725,6 +5750,11 @@
                 self.gotoPreviousDefAct.setEnabled(False)
                 self.gotoNextDefAct.setEnabled(False)
             
+            self.sortAct.setEnabled(editor.selectionIsRectangle())
+            enable = editor.hasSelection()
+            self.editUpperCaseAct.setEnabled(enable)
+            self.editLowerCaseAct.setEnabled(enable)
+            
             if setSb:
                 line, pos = editor.getCursorPosition()
                 enc = editor.getEncoding()
@@ -5881,6 +5911,27 @@
             fn, line + 1, pos, encoding=enc, language=lang, eol=eol, zoom=zoom)
         self._checkActions(editor, False)
     
+    def __editorSelectionChanged(self):
+        """
+        Private slot to handle changes of the current editors selection.
+        """
+        editor = self.sender()
+        if editor:
+            self.sortAct.setEnabled(editor.selectionIsRectangle())
+            enable = editor.hasSelection()
+            self.editUpperCaseAct.setEnabled(enable)
+            self.editLowerCaseAct.setEnabled(enable)
+        else:
+            self.sortAct.setEnabled(False)
+    
+    def __editSortSelectedLines(self):
+        """
+        Private slot to sort the selected lines.
+        """
+        editor = self.activeWindow()
+        if editor:
+            editor.sortLines()
+    
     ##################################################################
     ## Below are protected utility methods
     ##################################################################
--- a/changelog	Fri May 24 18:39:58 2013 +0200
+++ b/changelog	Tue May 28 20:52:12 2013 +0200
@@ -9,12 +9,25 @@
   -- changed the 'import' statements to improve startup behavior
   -- removed the QtHelp dependancy; support is only available,
      if the QtHelp module could be imported
+  -- changed code to be compatible with latest PyQt4 Windows installers
+  -- introduced a configurable delay timer to get smoother sidebars behavior
 - Debugger
+  -- Debug Viewer
+     --- added a viewer for the call stack leading to the current line
   -- Variables Viewer
      --- changed the way multi line strings are shown in the value
          column
 - Editor
   -- added the capability to preview HTML, Mardown and ReST files
+  -- added the capability to sort lines spanned by a rectangular selection
+     based on the selected text
+  -- added entires to convert the selection to upper/lower case to the
+     edit menu
+  -- changed the line numbers margin to adjust themselves to the size needed
+  -- added support for virtual space
+- Mini Editor
+  -- changed the line numbers margin to adjust themselves to the size needed
+  -- added support for virtual space
 - Multi Project
   -- extended the context menus of the multi project browser to be able
      to add projects this way
@@ -23,6 +36,10 @@
      --- added a context menu entry to delete the selected directory
   -- Project Forms Viewer
      --- added support for more widgets in the code creation dialog
+- Shell
+  -- changed the line numbers margin to adjust themselves to the size needed
+- Symbols Viewer
+  -- extended the list of supported unicode code blocks
 - Template Viewer
   -- added a context menu entry to reload the templates
   -- changed logic such, that the templates are only written, if they contain
--- a/eric5.e4p	Fri May 24 18:39:58 2013 +0200
+++ b/eric5.e4p	Tue May 28 20:52:12 2013 +0200
@@ -57,10 +57,6 @@
     <Source>DebugClients/Ruby/Config.rb</Source>
     <Source>DebugClients/Ruby/__init__.rb</Source>
     <Source>DebugClients/Ruby/AsyncIO.rb</Source>
-    <Source>Examples/modpython.py</Source>
-    <Source>Examples/hallo.py</Source>
-    <Source>Examples/rhallo.py</Source>
-    <Source>Examples/modpython_dbg.py</Source>
     <Source>patch_modpython.py</Source>
     <Source>UI/DiffDialog.py</Source>
     <Source>UI/CompareDialog.py</Source>
@@ -1069,11 +1065,17 @@
     <Source>E5Network/E5SslCertificatesInfoWidget.py</Source>
     <Source>E5Network/E5SslCertificatesInfoDialog.py</Source>
     <Source>E5Network/E5SslInfoWidget.py</Source>
+    <Source>QScintilla/SortOptionsDialog.py</Source>
+    <Source>Debugger/CallStackViewer.py</Source>
     <Source>Utilities/compatibility_fixes.py</Source>
     <Source>Utilities/SyntaxCheck.py</Source>
     <Source>Utilities/py2flakes/checker.py</Source>
     <Source>Utilities/py2flakes/messages.py</Source>
     <Source>Utilities/py2flakes/__init__.py</Source>
+    <Source>Examples/hallo.py</Source>
+    <Source>Examples/modpython.py</Source>
+    <Source>Examples/modpython_dbg.py</Source>
+    <Source>Examples/rhallo.py</Source>
   </Sources>
   <Forms>
     <Form>PyUnit/UnittestDialog.ui</Form>
@@ -1386,26 +1388,27 @@
     <Form>UI/Previewer.ui</Form>
     <Form>E5Network/E5SslCertificatesInfoDialog.ui</Form>
     <Form>E5Network/E5SslCertificatesInfoWidget.ui</Form>
+    <Form>QScintilla/SortOptionsDialog.ui</Form>
   </Forms>
   <Translations>
-    <Translation>i18n/eric5_cs.qm</Translation>
     <Translation>i18n/eric5_cs.ts</Translation>
-    <Translation>i18n/eric5_de.qm</Translation>
     <Translation>i18n/eric5_de.ts</Translation>
-    <Translation>i18n/eric5_es.qm</Translation>
     <Translation>i18n/eric5_es.ts</Translation>
-    <Translation>i18n/eric5_fr.qm</Translation>
     <Translation>i18n/eric5_fr.ts</Translation>
-    <Translation>i18n/eric5_it.qm</Translation>
     <Translation>i18n/eric5_it.ts</Translation>
-    <Translation>i18n/eric5_ru.qm</Translation>
     <Translation>i18n/eric5_ru.ts</Translation>
-    <Translation>i18n/eric5_tr.qm</Translation>
     <Translation>i18n/eric5_tr.ts</Translation>
-    <Translation>i18n/eric5_zh_CN.GB2312.qm</Translation>
     <Translation>i18n/eric5_zh_CN.GB2312.ts</Translation>
     <Translation>i18n/eric5_en.ts</Translation>
+    <Translation>i18n/eric5_cs.qm</Translation>
+    <Translation>i18n/eric5_de.qm</Translation>
     <Translation>i18n/eric5_en.qm</Translation>
+    <Translation>i18n/eric5_es.qm</Translation>
+    <Translation>i18n/eric5_fr.qm</Translation>
+    <Translation>i18n/eric5_it.qm</Translation>
+    <Translation>i18n/eric5_ru.qm</Translation>
+    <Translation>i18n/eric5_tr.qm</Translation>
+    <Translation>i18n/eric5_zh_CN.GB2312.qm</Translation>
   </Translations>
   <Resources>
     <Resource>IconEditor/cursors/cursors.qrc</Resource>
@@ -1415,23 +1418,13 @@
   </Resources>
   <Interfaces/>
   <Others>
-    <Other>icons</Other>
-    <Other>CSSs</Other>
-    <Other>DTDs</Other>
-    <Other>Documentation/mod_python.pdf</Other>
-    <Other>DesignerTemplates</Other>
-    <Other>pixmaps</Other>
     <Other>README-PyXML.txt</Other>
     <Other>THANKS</Other>
     <Other>pylint.rc</Other>
     <Other>README-i18n.txt</Other>
     <Other>README-passive-debugging.txt</Other>
     <Other>README</Other>
-    <Other>Documentation/Source</Other>
-    <Other>Documentation/mod_python.odt</Other>
     <Other>default.e4k</Other>
-    <Other>Styles</Other>
-    <Other>CodeTemplates</Other>
     <Other>Plugins/ViewManagerPlugins/Listspace/preview.png</Other>
     <Other>Plugins/ViewManagerPlugins/Tabview/preview.png</Other>
     <Other>Plugins/VcsPlugins/vcsPySvn/icons/pysvn.png</Other>
@@ -1451,7 +1444,6 @@
     <Other>ThirdParty/Pygments/pygments/CHANGES</Other>
     <Other>ThirdParty/Pygments/pygments/AUTHORS</Other>
     <Other>ThirdParty/Pygments/pygments/PKG-INFO</Other>
-    <Other>Documentation/Help</Other>
     <Other>DebugClients/Python/coverage/htmlfiles</Other>
     <Other>IconEditor/cursors/aim-cursor.xpm</Other>
     <Other>IconEditor/cursors/colorpicker-cursor.xpm</Other>
@@ -1464,8 +1456,6 @@
     <Other>eric5config.linux</Other>
     <Other>eric5.e4p</Other>
     <Other>README-eric5-doc.txt</Other>
-    <Other>Documentation/eric5-plugin.odt</Other>
-    <Other>Documentation/eric5-plugin.pdf</Other>
     <Other>APIs/Ruby/eric5.api</Other>
     <Other>APIs/Python3/eric5.api</Other>
     <Other>eric5.desktop</Other>
@@ -1477,8 +1467,6 @@
     <Other>patches</Other>
     <Other>Plugins/VcsPlugins/vcsMercurial/icons/startServer.png</Other>
     <Other>Plugins/VcsPlugins/vcsMercurial/icons/stopServer.png</Other>
-    <Other>CSSs/blue.css</Other>
-    <Other>CSSs/default.css</Other>
     <Other>Plugins/VcsPlugins/vcsMercurial/styles/logBrowserBookmark.style</Other>
     <Other>Plugins/VcsPlugins/vcsMercurial/styles/logDialogBookmark.style</Other>
     <Other>README-MacOSX.txt</Other>
@@ -1505,6 +1493,19 @@
     <Other>Helpviewer/data/javascript/jquery.js</Other>
     <Other>README-Raspberry.txt</Other>
     <Other>eric5_webbrowser.desktop</Other>
+    <Other>icons</Other>
+    <Other>CSSs</Other>
+    <Other>DTDs</Other>
+    <Other>DesignerTemplates</Other>
+    <Other>pixmaps</Other>
+    <Other>Documentation/eric5-plugin.odt</Other>
+    <Other>Documentation/eric5-plugin.pdf</Other>
+    <Other>Documentation/mod_python.odt</Other>
+    <Other>Documentation/mod_python.pdf</Other>
+    <Other>Documentation/Source</Other>
+    <Other>Styles</Other>
+    <Other>CodeTemplates</Other>
+    <Other>Documentation/Help</Other>
   </Others>
   <MainScript>eric5.py</MainScript>
   <Vcs>
--- a/eric5.py	Fri May 24 18:39:58 2013 +0200
+++ b/eric5.py	Tue May 28 20:52:12 2013 +0200
@@ -54,10 +54,7 @@
         break
 
 # make Third-Party package available as a packages repository
-try:
-    import pygments     # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
-except ImportError:
-    sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments"))
+sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments"))
 
 from E5Gui.E5Application import E5Application
 
@@ -218,16 +215,13 @@
         splash = SplashScreen()
 
     # modify the executable search path for the PyQt4 installer
-    try:
-        from PyQt4 import pyqtconfig
-        pyqtDataDir = pyqtconfig._pkg_config["pyqt_mod_dir"]
+    if Globals.isWindowsPlatform():
+        pyqtDataDir = Globals.getPyQt4ModulesDirectory()
         if os.path.exists(os.path.join(pyqtDataDir, "bin")):
             path = os.path.join(pyqtDataDir, "bin") + os.pathsep + os.environ["PATH"]
         else:
             path = pyqtDataDir + os.pathsep + os.environ["PATH"]
         os.environ["PATH"] = path
-    except (AttributeError, ImportError):
-        pass
     
     pluginFile = None
     noopen = False
--- a/eric5_configure.py	Fri May 24 18:39:58 2013 +0200
+++ b/eric5_configure.py	Tue May 28 20:52:12 2013 +0200
@@ -31,10 +31,7 @@
         break
 
 # make ThirdParty package available as a packages repository
-try:
-    import pygments     # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
-except ImportError:
-    sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments"))
+sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments"))
 
 from Globals import AppInfo
 
--- a/eric5_doc.py	Fri May 24 18:39:58 2013 +0200
+++ b/eric5_doc.py	Tue May 28 20:52:12 2013 +0200
@@ -260,6 +260,10 @@
         qtHelpFolder == "" or '/' in qtHelpFolder or \
         qtHelpTitle == ""):
         usage()
+    
+    if qtHelpCreation:
+        from PyQt4.QtCore import QCoreApplication
+        app = QCoreApplication(sys.argv)    # __IGNORE_WARNING__
 
     input = output = 0
     basename = ""
--- a/eric5_editor.py	Fri May 24 18:39:58 2013 +0200
+++ b/eric5_editor.py	Tue May 28 20:52:12 2013 +0200
@@ -33,10 +33,7 @@
         break
 
 # make ThirdParty package available as a packages repository
-try:
-    import pygments     # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
-except ImportError:
-    sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments"))
+sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments"))
 
 from Globals import AppInfo
 
--- a/eric5_webbrowser.py	Fri May 24 18:39:58 2013 +0200
+++ b/eric5_webbrowser.py	Tue May 28 20:52:12 2013 +0200
@@ -33,10 +33,7 @@
         break
 
 # make ThirdParty package available as a packages repository
-try:
-    import pygments     # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
-except ImportError:
-    sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments"))
+sys.path.insert(2, os.path.join(os.path.dirname(__file__), "ThirdParty", "Pygments"))
 
 import Globals
 from Globals import AppInfo
--- a/i18n/eric5_cs.ts	Fri May 24 18:39:58 2013 +0200
+++ b/i18n/eric5_cs.ts	Tue May 28 20:52:12 2013 +0200
@@ -3,32 +3,32 @@
 <context>
     <name>AboutDialog</name>
     <message>
-        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="13"/>
+        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="14"/>
         <source>About Eric</source>
         <translation>O Erikovi</translation>
     </message>
     <message>
-        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="55"/>
+        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="56"/>
         <source>&amp;About</source>
         <translation>O &amp;aplikaci</translation>
     </message>
     <message>
-        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="72"/>
+        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="73"/>
         <source>A&amp;uthors</source>
         <translation>A&amp;utoři</translation>
     </message>
     <message>
-        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="89"/>
+        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="90"/>
         <source>&amp;Thanks To</source>
         <translation>&amp;Poděkování autorům</translation>
     </message>
     <message>
-        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="106"/>
+        <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="107"/>
         <source>&amp;License Agreement</source>
         <translation>&amp;Licenční ujednání</translation>
     </message>
     <message>
-        <location filename="Plugins/AboutPlugin/AboutDialog.py" line="22"/>
+        <location filename="Plugins/AboutPlugin/AboutDialog.py" line="24"/>
         <source>&lt;p&gt;{0} is an Integrated Development Environment for the Python programming language. It is written using the PyQt Python bindings for the Qt GUI toolkit and the QScintilla editor widget.&lt;/p&gt;&lt;p&gt;For more information see &lt;a href=&quot;{1}&quot;&gt;{1}&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Please send bug reports to &lt;a href=&quot;mailto:{2}&quot;&gt;{2}&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;To request a new feature please send an email to &lt;a href=&quot;mailto:{3}&quot;&gt;{3}&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;{0} uses third party software which is copyrighted by it&apos;s respective copyright holder. For details see the copyright notice of the individual package.&lt;/p&gt;</source>
         <translation>&lt;p&gt;{0} je integrované vývojové prostředí pro jazyk Python. Byl napsán za použití nadstavby PyQt pro GUI toolkit Qt a widgetu editoru QScintilla.&lt;/p&gt;&lt;p&gt;Více informací naleznete na &lt;a href=&quot;{1}&quot;&gt;{1}&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Hlášení o chybách nebo požadavky na nové vlastnosti zasílejte, prosím, na &lt;a href=&quot;mailto:{2}&quot;&gt;{2}&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Požadavky na nové vlastnosti posílejte na email &lt;a href=&quot;mailto:{3}&quot;&gt;{3}&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;{0} používá software třetích stran, na který vlastní copyright vlastníci tohoto software. Více informací o těchto copyrightech naleznete v jednotlivých balíčcích.&lt;/p&gt;</translation>
     </message>
@@ -36,42 +36,42 @@
 <context>
     <name>AboutPlugin</name>
     <message>
-        <location filename="Plugins/PluginAbout.py" line="80"/>
+        <location filename="Plugins/PluginAbout.py" line="82"/>
         <source>Display information about this software</source>
         <translation>Zobrazit informace a tomto software</translation>
     </message>
     <message>
-        <location filename="Plugins/PluginAbout.py" line="89"/>
+        <location filename="Plugins/PluginAbout.py" line="91"/>
         <source>About Qt</source>
         <translation>O Qt</translation>
     </message>
     <message>
-        <location filename="Plugins/PluginAbout.py" line="89"/>
+        <location filename="Plugins/PluginAbout.py" line="91"/>
         <source>About &amp;Qt</source>
         <translation>O &amp;Qt</translation>
     </message>
     <message>
-        <location filename="Plugins/PluginAbout.py" line="92"/>
-        <source>Display information about the Qt toolkit</source>
-        <translation>Zobrazit informace o Qt toolkitu</translation>
-    </message>
-    <message>
         <location filename="Plugins/PluginAbout.py" line="94"/>
+        <source>Display information about the Qt toolkit</source>
+        <translation>Zobrazit informace o Qt toolkitu</translation>
+    </message>
+    <message>
+        <location filename="Plugins/PluginAbout.py" line="96"/>
         <source>&lt;b&gt;About Qt&lt;/b&gt;&lt;p&gt;Display some information about the Qt toolkit.&lt;/p&gt;</source>
         <translation>&lt;b&gt;O Qt&lt;/b&gt;&lt;p&gt;Zobrazit informace o Qt toolkitu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Plugins/PluginAbout.py" line="76"/>
+        <location filename="Plugins/PluginAbout.py" line="78"/>
         <source>About {0}</source>
         <translation>O aplikaci {0}</translation>
     </message>
     <message>
-        <location filename="Plugins/PluginAbout.py" line="76"/>
+        <location filename="Plugins/PluginAbout.py" line="78"/>
         <source>&amp;About {0}</source>
         <translation>O &amp;aplikaci {0}</translation>
     </message>
     <message>
-        <location filename="Plugins/PluginAbout.py" line="81"/>
+        <location filename="Plugins/PluginAbout.py" line="83"/>
         <source>&lt;b&gt;About {0}&lt;/b&gt;&lt;p&gt;Display some information about this software.&lt;/p&gt;</source>
         <translation>&lt;b&gt;O aplikaci {0}&lt;/b&gt;&lt;p&gt;Zobrazí informace o tomto software.&lt;/p&gt;</translation>
     </message>
@@ -79,12 +79,12 @@
 <context>
     <name>AdBlockAccessHandler</name>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockAccessHandler.py" line="43"/>
+        <location filename="Helpviewer/AdBlock/AdBlockAccessHandler.py" line="45"/>
         <source>Subscribe?</source>
         <translation>Odebírat?</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockAccessHandler.py" line="43"/>
+        <location filename="Helpviewer/AdBlock/AdBlockAccessHandler.py" line="45"/>
         <source>&lt;p&gt;Subscribe to this AdBlock subscription?&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Přihlásit k odběru tento AdBlock?&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
@@ -125,22 +125,22 @@
         <translation type="obsolete">Přidat vlastní pravidlo</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="139"/>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="141"/>
         <source>Learn more about writing rules...</source>
         <translation>Další informace o pravidlech psaní...</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="134"/>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="136"/>
         <source>Update Subscription</source>
         <translation>Aktualizovat odběr</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="123"/>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="125"/>
         <source>Browse Subscriptions...</source>
         <translation>Procházet odběry...</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="212"/>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="214"/>
         <source>Remove Subscription</source>
         <translation>Odebrat odběr</translation>
     </message>
@@ -155,42 +155,42 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="36"/>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="38"/>
         <source>Search...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="118"/>
-        <source>Add Rule</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="120"/>
+        <source>Add Rule</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="122"/>
         <source>Remove Rule</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="129"/>
-        <source>Disable Subscription</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="131"/>
+        <source>Disable Subscription</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="133"/>
         <source>Enable Subscription</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="136"/>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="138"/>
         <source>Update All Subscriptions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="204"/>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="206"/>
         <source>&lt;p&gt;Do you really want to remove subscription &lt;b&gt;{0}&lt;/b&gt; and all subscriptions requiring it?&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{1}&lt;/li&gt;&lt;/ul&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="210"/>
+        <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="212"/>
         <source>&lt;p&gt;Do you really want to remove subscription &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -233,7 +233,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockExceptionsDialog.py" line="33"/>
+        <location filename="Helpviewer/AdBlock/AdBlockExceptionsDialog.py" line="35"/>
         <source>Enter host to be added...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -241,17 +241,17 @@
 <context>
     <name>AdBlockIcon</name>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="36"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="38"/>
         <source>AdBlock lets you block unwanted content on web pages.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="70"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="72"/>
         <source>Disable AdBlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="73"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="75"/>
         <source>Enable AdBlock</source>
         <translation type="unfinished">Zapnout AdBlock</translation>
     </message>
@@ -261,42 +261,42 @@
         <translation type="obsolete">AdBlock konfigurace</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="95"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="97"/>
         <source>Blocked URL (AdBlock Rule) - click to edit rule</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="100"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="102"/>
         <source>{0} with ({1})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="105"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="107"/>
         <source>No content blocked</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="114"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="116"/>
         <source>AdBlock</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="79"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="81"/>
         <source>Remove AdBlock Exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="83"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="85"/>
         <source>Add AdBlock Exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="86"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="88"/>
         <source>AdBlock Exceptions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="89"/>
+        <location filename="Helpviewer/AdBlock/AdBlockIcon.py" line="91"/>
         <source>AdBlock Configuration...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -304,7 +304,7 @@
 <context>
     <name>AdBlockManager</name>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockManager.py" line="136"/>
+        <location filename="Helpviewer/AdBlock/AdBlockManager.py" line="138"/>
         <source>Custom Rules</source>
         <translation>Vlastní pravidla</translation>
     </message>
@@ -320,27 +320,27 @@
 <context>
     <name>AdBlockSubscription</name>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="273"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="275"/>
         <source>Load subscription rules</source>
         <translation>Nahrát odebíraná pravidla</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="434"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="436"/>
         <source>Downloading subscription rules</source>
         <translation>Stažení odebíraných pravidel</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="376"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="378"/>
         <source>Got empty subscription rules.</source>
         <translation>Odebíraná pravidla jsou prázdná.</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="454"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="456"/>
         <source>Saving subscription rules</source>
         <translation>Ukládání odebíraných pravidel</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="265"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="267"/>
         <source>Unable to open adblock file &apos;{0}&apos; for reading.</source>
         <translation>Nelze otevřít adblock soubor &apos;{0}&apos; pro čtení.</translation>
     </message>
@@ -350,22 +350,22 @@
         <translation type="obsolete">Adblock soubor &apos;{0}&apos; nezačíná s [Adblock.</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="366"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="368"/>
         <source>&lt;p&gt;Subscription rules could not be downloaded.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Pravidla pro předplatné nelze stáhnout.&lt;/p&gt;&lt;p&gt;Chyba: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="454"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="456"/>
         <source>Unable to open adblock file &apos;{0}&apos; for writing.</source>
         <translation>Nelze otevřít adblock soubor &apos;{0}&apos; pro zápis.</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="273"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="275"/>
         <source>AdBlock file &apos;{0}&apos; does not start with [Adblock.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="434"/>
+        <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="436"/>
         <source>&lt;p&gt;AdBlock subscription &lt;b&gt;{0}&lt;/b&gt; has a wrong checksum.&lt;br/&gt;Found: {1}&lt;br/&gt;Calculated: {2}&lt;br/&gt;Use it anyway?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -373,27 +373,27 @@
 <context>
     <name>AdBlockTreeWidget</name>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="116"/>
+        <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="118"/>
         <source>Add Custom Rule</source>
         <translation type="unfinished">Přidat vlastní pravidlo</translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="116"/>
+        <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="118"/>
         <source>Write your rule here:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="167"/>
-        <source>Add Rule</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="169"/>
+        <source>Add Rule</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="171"/>
         <source>Remove Rule</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="221"/>
+        <location filename="Helpviewer/AdBlock/AdBlockTreeWidget.py" line="223"/>
         <source>{0} (recently updated)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -401,7 +401,7 @@
 <context>
     <name>AddBookmarkDialog</name>
     <message>
-        <location filename="Helpviewer/Bookmarks/AddBookmarkDialog.py" line="195"/>
+        <location filename="Helpviewer/Bookmarks/AddBookmarkDialog.py" line="197"/>
         <source>Add Bookmark</source>
         <translation>Přidat záložku</translation>
     </message>
@@ -421,17 +421,17 @@
         <translation>Zadejte adresu</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/AddBookmarkDialog.py" line="109"/>
+        <location filename="Helpviewer/Bookmarks/AddBookmarkDialog.py" line="111"/>
         <source>Url</source>
         <translation>Url</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/AddBookmarkDialog.py" line="110"/>
+        <location filename="Helpviewer/Bookmarks/AddBookmarkDialog.py" line="112"/>
         <source>Title</source>
         <translation>Titulek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/AddBookmarkDialog.py" line="192"/>
+        <location filename="Helpviewer/Bookmarks/AddBookmarkDialog.py" line="194"/>
         <source>Add Folder</source>
         <translation>Přidat složku</translation>
     </message>
@@ -554,32 +554,32 @@
         <translation>&amp;Typ souboru:</translation>
     </message>
     <message>
-        <location filename="Project/AddDirectoryDialog.py" line="96"/>
+        <location filename="Project/AddDirectoryDialog.py" line="98"/>
         <source>Select directory</source>
         <translation>Výběr adresáře</translation>
     </message>
     <message>
-        <location filename="Project/AddDirectoryDialog.py" line="60"/>
+        <location filename="Project/AddDirectoryDialog.py" line="62"/>
         <source>Source Files</source>
         <translation>Zdrojové soubory</translation>
     </message>
     <message>
-        <location filename="Project/AddDirectoryDialog.py" line="61"/>
-        <source>Forms Files</source>
-        <translation>Soubory s formuláři</translation>
-    </message>
-    <message>
         <location filename="Project/AddDirectoryDialog.py" line="63"/>
+        <source>Forms Files</source>
+        <translation>Soubory s formuláři</translation>
+    </message>
+    <message>
+        <location filename="Project/AddDirectoryDialog.py" line="65"/>
         <source>Interface Files</source>
         <translation>Interface soubory</translation>
     </message>
     <message>
+        <location filename="Project/AddDirectoryDialog.py" line="66"/>
+        <source>Other Files (*)</source>
+        <translation>Jiné soubory (*)</translation>
+    </message>
+    <message>
         <location filename="Project/AddDirectoryDialog.py" line="64"/>
-        <source>Other Files (*)</source>
-        <translation>Jiné soubory (*)</translation>
-    </message>
-    <message>
-        <location filename="Project/AddDirectoryDialog.py" line="62"/>
         <source>Resource Files</source>
         <translation>Resource soubory</translation>
     </message>
@@ -669,77 +669,77 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="Project/AddFileDialog.py" line="62"/>
+        <location filename="Project/AddFileDialog.py" line="64"/>
         <source>Select target directory</source>
         <translation>Výběr cílového adresáře</translation>
     </message>
     <message>
-        <location filename="Project/AddFileDialog.py" line="104"/>
+        <location filename="Project/AddFileDialog.py" line="106"/>
         <source>Select Files</source>
         <translation>Výběr souborů</translation>
     </message>
     <message>
+        <location filename="Project/AddFileDialog.py" line="114"/>
+        <source>Select user-interface files</source>
+        <translation>Výběr user-interface souborů</translation>
+    </message>
+    <message>
+        <location filename="Project/AddFileDialog.py" line="122"/>
+        <source>Select resource files</source>
+        <translation>Výběr resource souborů</translation>
+    </message>
+    <message>
+        <location filename="Project/AddFileDialog.py" line="148"/>
+        <source>All Files (*)</source>
+        <translation>Všechny soubory (*)</translation>
+    </message>
+    <message>
+        <location filename="Project/AddFileDialog.py" line="130"/>
+        <source>Select source files</source>
+        <translation>Výběr zdrojových souborů</translation>
+    </message>
+    <message>
+        <location filename="Project/AddFileDialog.py" line="138"/>
+        <source>Select interface files</source>
+        <translation>Výběr interface souborů</translation>
+    </message>
+    <message>
+        <location filename="Project/AddFileDialog.py" line="146"/>
+        <source>Select translation files</source>
+        <translation>Výběr souborů s překlady</translation>
+    </message>
+    <message>
+        <location filename="Project/AddFileDialog.py" line="149"/>
+        <source>Select files</source>
+        <translation>Výběr souborů</translation>
+    </message>
+    <message>
+        <location filename="Project/AddFileDialog.py" line="94"/>
+        <source>Source Files ({0});;Forms Files ({1});;Resource Files ({2});;Interface Files ({3});;Translation Files ({4});;All Files (*)</source>
+        <translation>Zdrojové soubory ({0});;Soubory s formuláři ({1});;Resource soubory ({2});;Interface soubory ({3});; Soubory s překlady ({4});;Všechny soubory (*)</translation>
+    </message>
+    <message>
         <location filename="Project/AddFileDialog.py" line="112"/>
-        <source>Select user-interface files</source>
-        <translation>Výběr user-interface souborů</translation>
+        <source>Forms Files ({0})</source>
+        <translation>Soubory s formuláři ({0})</translation>
     </message>
     <message>
         <location filename="Project/AddFileDialog.py" line="120"/>
-        <source>Select resource files</source>
-        <translation>Výběr resource souborů</translation>
-    </message>
-    <message>
-        <location filename="Project/AddFileDialog.py" line="146"/>
-        <source>All Files (*)</source>
-        <translation>Všechny soubory (*)</translation>
+        <source>Resource Files ({0})</source>
+        <translation>Zdrojové soubory {0})</translation>
     </message>
     <message>
         <location filename="Project/AddFileDialog.py" line="128"/>
-        <source>Select source files</source>
-        <translation>Výběr zdrojových souborů</translation>
+        <source>Source Files ({0});;All Files (*)</source>
+        <translation>Zdrojové soubory ({0});;Všechny soubory (*)</translation>
     </message>
     <message>
         <location filename="Project/AddFileDialog.py" line="136"/>
-        <source>Select interface files</source>
-        <translation>Výběr interface souborů</translation>
+        <source>Interface Files ({0})</source>
+        <translation>Interface soubory ({0})</translation>
     </message>
     <message>
         <location filename="Project/AddFileDialog.py" line="144"/>
-        <source>Select translation files</source>
-        <translation>Výběr souborů s překlady</translation>
-    </message>
-    <message>
-        <location filename="Project/AddFileDialog.py" line="147"/>
-        <source>Select files</source>
-        <translation>Výběr souborů</translation>
-    </message>
-    <message>
-        <location filename="Project/AddFileDialog.py" line="92"/>
-        <source>Source Files ({0});;Forms Files ({1});;Resource Files ({2});;Interface Files ({3});;Translation Files ({4});;All Files (*)</source>
-        <translation>Zdrojové soubory ({0});;Soubory s formuláři ({1});;Resource soubory ({2});;Interface soubory ({3});; Soubory s překlady ({4});;Všechny soubory (*)</translation>
-    </message>
-    <message>
-        <location filename="Project/AddFileDialog.py" line="110"/>
-        <source>Forms Files ({0})</source>
-        <translation>Soubory s formuláři ({0})</translation>
-    </message>
-    <message>
-        <location filename="Project/AddFileDialog.py" line="118"/>
-        <source>Resource Files ({0})</source>
-        <translation>Zdrojové soubory {0})</translation>
-    </message>
-    <message>
-        <location filename="Project/AddFileDialog.py" line="126"/>
-        <source>Source Files ({0});;All Files (*)</source>
-        <translation>Zdrojové soubory ({0});;Všechny soubory (*)</translation>
-    </message>
-    <message>
-        <location filename="Project/AddFileDialog.py" line="134"/>
-        <source>Interface Files ({0})</source>
-        <translation>Interface soubory ({0})</translation>
-    </message>
-    <message>
-        <location filename="Project/AddFileDialog.py" line="142"/>
         <source>Translation Files ({0})</source>
         <translation>Soubory s překlady ({0})</translation>
     </message>
@@ -762,22 +762,22 @@
         <translation>Seznam nalezených souborů.</translation>
     </message>
     <message>
-        <location filename="Project/AddFoundFilesDialog.py" line="39"/>
+        <location filename="Project/AddFoundFilesDialog.py" line="41"/>
         <source>Add All</source>
         <translation>Přidat vše</translation>
     </message>
     <message>
-        <location filename="Project/AddFoundFilesDialog.py" line="41"/>
+        <location filename="Project/AddFoundFilesDialog.py" line="43"/>
         <source>Add all files.</source>
         <translation>Přidat všechny soubory.</translation>
     </message>
     <message>
-        <location filename="Project/AddFoundFilesDialog.py" line="42"/>
-        <source>Add Selected</source>
-        <translation>Přidat vybrané</translation>
-    </message>
-    <message>
         <location filename="Project/AddFoundFilesDialog.py" line="44"/>
+        <source>Add Selected</source>
+        <translation>Přidat vybrané</translation>
+    </message>
+    <message>
+        <location filename="Project/AddFoundFilesDialog.py" line="46"/>
         <source>Add selected files only.</source>
         <translation>Přidat jen vybrané soubory.</translation>
     </message>
@@ -1117,7 +1117,7 @@
 <context>
     <name>AddProjectDialog</name>
     <message>
-        <location filename="MultiProject/AddProjectDialog.py" line="62"/>
+        <location filename="MultiProject/AddProjectDialog.py" line="64"/>
         <source>Add Project</source>
         <translation>Nový projekt</translation>
     </message>
@@ -1177,12 +1177,12 @@
         <translation>&amp;Popis:</translation>
     </message>
     <message>
-        <location filename="MultiProject/AddProjectDialog.py" line="44"/>
+        <location filename="MultiProject/AddProjectDialog.py" line="46"/>
         <source>Project Properties</source>
         <translation>Nastavení projektu</translation>
     </message>
     <message>
-        <location filename="MultiProject/AddProjectDialog.py" line="62"/>
+        <location filename="MultiProject/AddProjectDialog.py" line="64"/>
         <source>Project Files (*.e4p)</source>
         <translation>Soubory projektu (*.e4p)</translation>
     </message>
@@ -1208,32 +1208,32 @@
 <context>
     <name>ApplicationDiagramBuilder</name>
     <message>
-        <location filename="Graphics/ApplicationDiagramBuilder.py" line="42"/>
+        <location filename="Graphics/ApplicationDiagramBuilder.py" line="44"/>
         <source>Application Diagram {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Graphics/ApplicationDiagramBuilder.py" line="62"/>
+        <location filename="Graphics/ApplicationDiagramBuilder.py" line="64"/>
         <source>Parsing modules...</source>
         <translation type="unfinished">Parsování modulů...</translation>
     </message>
     <message>
-        <location filename="Graphics/ApplicationDiagramBuilder.py" line="185"/>
-        <source>&lt;&lt;Application&gt;&gt;</source>
-        <translation type="unfinished">&lt;&lt;Aplikace&gt;&gt;</translation>
-    </message>
-    <message>
         <location filename="Graphics/ApplicationDiagramBuilder.py" line="187"/>
+        <source>&lt;&lt;Application&gt;&gt;</source>
+        <translation type="unfinished">&lt;&lt;Aplikace&gt;&gt;</translation>
+    </message>
+    <message>
+        <location filename="Graphics/ApplicationDiagramBuilder.py" line="189"/>
         <source>&lt;&lt;Others&gt;&gt;</source>
         <translation type="unfinished">&lt;&lt;Ostatní&gt;&gt;</translation>
     </message>
     <message>
-        <location filename="Graphics/ApplicationDiagramBuilder.py" line="270"/>
+        <location filename="Graphics/ApplicationDiagramBuilder.py" line="272"/>
         <source>Load Diagram</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Graphics/ApplicationDiagramBuilder.py" line="270"/>
+        <location filename="Graphics/ApplicationDiagramBuilder.py" line="272"/>
         <source>&lt;p&gt;The diagram belongs to the project &lt;b&gt;{0}&lt;/b&gt;. Shall this project be opened?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1457,22 +1457,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/UrlBar/BookmarkActionSelectionDialog.py" line="47"/>
+        <location filename="Helpviewer/UrlBar/BookmarkActionSelectionDialog.py" line="49"/>
         <source>Add Bookmark</source>
         <translation type="unfinished">Přidat záložku</translation>
     </message>
     <message>
-        <location filename="Helpviewer/UrlBar/BookmarkActionSelectionDialog.py" line="50"/>
+        <location filename="Helpviewer/UrlBar/BookmarkActionSelectionDialog.py" line="52"/>
         <source>Edit Bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/UrlBar/BookmarkActionSelectionDialog.py" line="54"/>
+        <location filename="Helpviewer/UrlBar/BookmarkActionSelectionDialog.py" line="56"/>
         <source>Remove from Speed Dial</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/UrlBar/BookmarkActionSelectionDialog.py" line="57"/>
+        <location filename="Helpviewer/UrlBar/BookmarkActionSelectionDialog.py" line="59"/>
         <source>Add to Speed Dial</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1693,62 +1693,62 @@
 <context>
     <name>Bookmarks</name>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="126"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="132"/>
         <source>Mercurial Bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="144"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="150"/>
         <source>Delete Bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="144"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="150"/>
         <source>Select the bookmark to be deleted:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="156"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="162"/>
         <source>Delete Mercurial Bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="185"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="191"/>
         <source>Rename Mercurial Bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="219"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="225"/>
         <source>Move Mercurial Bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="305"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="311"/>
         <source>Pull Bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="305"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="311"/>
         <source>Select the bookmark to be pulled:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="317"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="323"/>
         <source>Pulling bookmark from a remote Mercurial repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="339"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="345"/>
         <source>Push Bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="339"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="345"/>
         <source>Select the bookmark to be push:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="351"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py" line="357"/>
         <source>Pushing bookmark to a remote Mercurial repository</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1781,32 +1781,32 @@
         <translation>Přidat s&amp;ložku</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="138"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="140"/>
         <source>&amp;Open</source>
         <translation>&amp;Otevřít</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="139"/>
-        <source>Open in New &amp;Tab</source>
-        <translation>Otevřít v novém &amp;tabu</translation>
-    </message>
-    <message>
         <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="141"/>
+        <source>Open in New &amp;Tab</source>
+        <translation>Otevřít v novém &amp;tabu</translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="143"/>
         <source>Edit &amp;Name</source>
         <translation>Editovat &amp;název</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="144"/>
-        <source>Edit &amp;Address</source>
-        <translation>Editovat &amp;adresu</translation>
-    </message>
-    <message>
         <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="146"/>
+        <source>Edit &amp;Address</source>
+        <translation>Editovat &amp;adresu</translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="148"/>
         <source>&amp;Delete</source>
         <translation>&amp;Smazat</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="252"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="254"/>
         <source>New Folder</source>
         <translation>Nová složka</translation>
     </message>
@@ -1816,7 +1816,7 @@
         <translation>Stisknout pro smazání vybraných položek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="149"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="151"/>
         <source>&amp;Properties...</source>
         <translation type="unfinished">&amp;Natavení...</translation>
     </message>
@@ -1849,27 +1849,27 @@
         <translation type="unfinished">Zrušit</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="85"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="87"/>
         <source>Choose Directory ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="95"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="97"/>
         <source>Choose File ...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="119"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="121"/>
         <source>&lt;b&gt;Importing from {0}&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="125"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="127"/>
         <source>Finish</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="140"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImportDialog.py" line="142"/>
         <source>Error importing bookmarks</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1887,12 +1887,12 @@
 <context>
     <name>BookmarksImporters</name>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImporters/__init__.py" line="42"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImporters/__init__.py" line="44"/>
         <source>XBEL File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImporters/__init__.py" line="46"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImporters/__init__.py" line="48"/>
         <source>HTML File</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1900,32 +1900,32 @@
 <context>
     <name>BookmarksManager</name>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="24"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="26"/>
         <source>Bookmarks Bar</source>
         <translation>Panel záložek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="25"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="27"/>
         <source>Bookmarks Menu</source>
         <translation>Menu záložek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="132"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="134"/>
         <source>Loading Bookmarks</source>
         <translation>Nahrání záložek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="144"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="146"/>
         <source>Toolbar Bookmarks</source>
         <translation>Panel nástrojů záložek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="150"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="152"/>
         <source>Menu</source>
         <translation>Menu</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="194"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="196"/>
         <source>Saving Bookmarks</source>
         <translation>Ukládání záložek</translation>
     </message>
@@ -1945,37 +1945,37 @@
         <translation type="obsolete">Importovat záložky</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="350"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="352"/>
         <source>Export Bookmarks</source>
         <translation>Export záložek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="374"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="376"/>
         <source>Exporting Bookmarks</source>
         <translation>Exportování záložek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="509"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="511"/>
         <source>Remove Bookmark</source>
         <translation>Odebrat záložku</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="549"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="551"/>
         <source>Insert Bookmark</source>
         <translation>Vložit záložku</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="588"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="590"/>
         <source>Name Change</source>
         <translation>Změnit název</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="591"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="593"/>
         <source>Address Change</source>
         <translation>Změnit adresu</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="194"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="196"/>
         <source>Error saving bookmarks to &lt;b&gt;{0}&lt;/b&gt;.</source>
         <translation>Chyba při ukládání záložek do &lt;b&gt;{0}&lt;/b&gt;.</translation>
     </message>
@@ -1996,12 +1996,12 @@
         <translation type="obsolete">Importováno {0}</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="374"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="376"/>
         <source>Error exporting bookmarks to &lt;b&gt;{0}&lt;/b&gt;.</source>
         <translation>Chyba při exportu záložek &lt;b&gt;{0}&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="389"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="391"/>
         <source>Converted {0}</source>
         <translation>Konvertováno {0}</translation>
     </message>
@@ -2011,14 +2011,14 @@
         <translation type="obsolete">XBEL záložky (*.xbel);;XBEL záložky (*.xml)</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="132"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="134"/>
         <source>Error when loading bookmarks on line {0}, column {1}:
 {2}</source>
         <translation>Chyba při načítání záložek na řádce {0}, sloupci {1}:
 {2}</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="350"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksManager.py" line="352"/>
         <source>XBEL bookmarks (*.xbel);;XBEL bookmarks (*.xml);;HTML Bookmarks (*.html)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2026,27 +2026,27 @@
 <context>
     <name>BookmarksMenu</name>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="95"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="97"/>
         <source>Open all in Tabs</source>
         <translation>Otevřít vše v tabech</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="137"/>
-        <source>&amp;Open</source>
-        <translation>&amp;Otevřít</translation>
-    </message>
-    <message>
         <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="139"/>
+        <source>&amp;Open</source>
+        <translation>&amp;Otevřít</translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="141"/>
         <source>Open in New &amp;Tab<byte value="x9"/>Ctrl+LMB</source>
         <translation>Otevřít nový &amp;Tab<byte value="x9"/></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="144"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="146"/>
         <source>&amp;Remove</source>
         <translation>Odeb&amp;rat</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="148"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="150"/>
         <source>&amp;Properties...</source>
         <translation type="unfinished">&amp;Natavení...</translation>
     </message>
@@ -2054,17 +2054,17 @@
 <context>
     <name>BookmarksMenuBarMenu</name>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="270"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="272"/>
         <source>Default Home Page</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="273"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="275"/>
         <source>Speed Dial</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="277"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="279"/>
         <source>Open all in Tabs</source>
         <translation type="unfinished">Otevřít vše v tabech</translation>
     </message>
@@ -2072,12 +2072,12 @@
 <context>
     <name>BookmarksModel</name>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksModel.py" line="44"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksModel.py" line="46"/>
         <source>Title</source>
         <translation>Titulek</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksModel.py" line="45"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksModel.py" line="47"/>
         <source>Address</source>
         <translation>Adresa</translation>
     </message>
@@ -2085,167 +2085,167 @@
 <context>
     <name>BookmarksProjectHelper</name>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="33"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="35"/>
         <source>List bookmarks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="33"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="35"/>
         <source>List bookmarks...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="37"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="39"/>
         <source>List bookmarks of the project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="40"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="42"/>
         <source>&lt;b&gt;List bookmarks&lt;/b&gt;&lt;p&gt;This lists the bookmarks of the project.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="47"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="49"/>
         <source>Define bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="47"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="49"/>
         <source>Define bookmark...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="51"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="53"/>
         <source>Define a bookmark for the project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="54"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="56"/>
         <source>&lt;b&gt;Define bookmark&lt;/b&gt;&lt;p&gt;This defines a bookmark for the project.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="61"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="63"/>
         <source>Delete bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="61"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="63"/>
         <source>Delete bookmark...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="65"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="67"/>
         <source>Delete a bookmark of the project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="68"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="70"/>
         <source>&lt;b&gt;Delete bookmark&lt;/b&gt;&lt;p&gt;This deletes a bookmark of the project.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="75"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="77"/>
         <source>Rename bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="75"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="77"/>
         <source>Rename bookmark...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="79"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="81"/>
         <source>Rename a bookmark of the project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="82"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="84"/>
         <source>&lt;b&gt;Rename bookmark&lt;/b&gt;&lt;p&gt;This renames a bookmark of the project.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="89"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="91"/>
         <source>Move bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="89"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="91"/>
         <source>Move bookmark...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="93"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="95"/>
         <source>Move a bookmark of the project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="96"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="98"/>
         <source>&lt;b&gt;Move bookmark&lt;/b&gt;&lt;p&gt;This moves a bookmark of the project to another changeset.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="103"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="105"/>
         <source>Show incoming bookmarks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="107"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="109"/>
         <source>Show a list of incoming bookmarks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="110"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="112"/>
         <source>&lt;b&gt;Show incoming bookmarks&lt;/b&gt;&lt;p&gt;This shows a list of new bookmarks available at the remote repository.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="118"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="120"/>
         <source>Pull bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="122"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="124"/>
         <source>Pull a bookmark from a remote repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="125"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="127"/>
         <source>&lt;b&gt;Pull bookmark&lt;/b&gt;&lt;p&gt;This pulls a bookmark from a remote repository into the local repository.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="133"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="135"/>
         <source>Show outgoing bookmarks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="137"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="139"/>
         <source>Show a list of outgoing bookmarks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="140"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="142"/>
         <source>&lt;b&gt;Show outgoing bookmarks&lt;/b&gt;&lt;p&gt;This shows a list of new bookmarks available at the local repository.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="148"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="150"/>
         <source>Push bookmark</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="152"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="154"/>
         <source>Push a bookmark to a remote repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="155"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="157"/>
         <source>&lt;b&gt;Push bookmark&lt;/b&gt;&lt;p&gt;This pushes a bookmark from the local repository to a remote repository.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="195"/>
+        <location filename="Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/ProjectHelper.py" line="197"/>
         <source>Bookmarks</source>
         <translation type="unfinished">Záložky</translation>
     </message>
@@ -2253,37 +2253,37 @@
 <context>
     <name>BookmarksToolBar</name>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="39"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="41"/>
         <source>Bookmarks</source>
         <translation>Záložky</translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="85"/>
-        <source>&amp;Open</source>
-        <translation>&amp;Otevřít</translation>
-    </message>
-    <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="92"/>
-        <source>&amp;Remove</source>
-        <translation>Odeb&amp;rat</translation>
-    </message>
-    <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="100"/>
-        <source>Add &amp;Bookmark...</source>
-        <translation>Přidat &amp;záložku...</translation>
-    </message>
-    <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="101"/>
-        <source>Add &amp;Folder...</source>
-        <translation>Přidat s&amp;ložku...</translation>
-    </message>
-    <message>
         <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="87"/>
+        <source>&amp;Open</source>
+        <translation>&amp;Otevřít</translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="94"/>
+        <source>&amp;Remove</source>
+        <translation>Odeb&amp;rat</translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="102"/>
+        <source>Add &amp;Bookmark...</source>
+        <translation>Přidat &amp;záložku...</translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="103"/>
+        <source>Add &amp;Folder...</source>
+        <translation>Přidat s&amp;ložku...</translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="89"/>
         <source>Open in New &amp;Tab<byte value="x9"/>Ctrl+LMB</source>
         <translation>Otevřít nový &amp;Tab<byte value="x9"/><byte value="x9"/></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="96"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="98"/>
         <source>&amp;Properties...</source>
         <translation type="unfinished">&amp;Natavení...</translation>
     </message>
@@ -2291,32 +2291,32 @@
 <context>
     <name>BreakPointModel</name>
     <message>
-        <location filename="Debugger/BreakPointModel.py" line="29"/>
+        <location filename="Debugger/BreakPointModel.py" line="31"/>
         <source>Filename</source>
         <translation>Jméno souboru</translation>
     </message>
     <message>
-        <location filename="Debugger/BreakPointModel.py" line="30"/>
-        <source>Line</source>
-        <translation>Řádek</translation>
-    </message>
-    <message>
-        <location filename="Debugger/BreakPointModel.py" line="31"/>
-        <source>Condition</source>
-        <translation>Podmínka</translation>
-    </message>
-    <message>
         <location filename="Debugger/BreakPointModel.py" line="32"/>
-        <source>Temporary</source>
-        <translation>Dočasné</translation>
+        <source>Line</source>
+        <translation>Řádek</translation>
     </message>
     <message>
         <location filename="Debugger/BreakPointModel.py" line="33"/>
-        <source>Enabled</source>
-        <translation>Zapnuto</translation>
+        <source>Condition</source>
+        <translation>Podmínka</translation>
     </message>
     <message>
         <location filename="Debugger/BreakPointModel.py" line="34"/>
+        <source>Temporary</source>
+        <translation>Dočasné</translation>
+    </message>
+    <message>
+        <location filename="Debugger/BreakPointModel.py" line="35"/>
+        <source>Enabled</source>
+        <translation>Zapnuto</translation>
+    </message>
+    <message>
+        <location filename="Debugger/BreakPointModel.py" line="36"/>
         <source>Ignore Count</source>
         <translation>Ignorovat počet</translation>
     </message>
@@ -2324,72 +2324,72 @@
 <context>
     <name>BreakPointViewer</name>
     <message>
-        <location filename="Debugger/BreakPointViewer.py" line="45"/>
+        <location filename="Debugger/BreakPointViewer.py" line="47"/>
         <source>Breakpoints</source>
         <translation>Breakpointy</translation>
     </message>
     <message>
-        <location filename="Debugger/BreakPointViewer.py" line="172"/>
+        <location filename="Debugger/BreakPointViewer.py" line="174"/>
         <source>Add</source>
         <translation>Přidat</translation>
     </message>
     <message>
-        <location filename="Debugger/BreakPointViewer.py" line="143"/>
-        <source>Edit...</source>
-        <translation>Editovat...</translation>
-    </message>
-    <message>
         <location filename="Debugger/BreakPointViewer.py" line="145"/>
+        <source>Edit...</source>
+        <translation>Editovat...</translation>
+    </message>
+    <message>
+        <location filename="Debugger/BreakPointViewer.py" line="147"/>
         <source>Enable</source>
         <translation>Zapnout</translation>
     </message>
     <message>
+        <location filename="Debugger/BreakPointViewer.py" line="178"/>
+        <source>Enable all</source>
+        <translation>Zapnout vše</translation>
+    </message>
+    <message>
+        <location filename="Debugger/BreakPointViewer.py" line="150"/>
+        <source>Disable</source>
+        <translation>Vypnout</translation>
+    </message>
+    <message>
+        <location filename="Debugger/BreakPointViewer.py" line="182"/>
+        <source>Disable all</source>
+        <translation>Vypnout vše</translation>
+    </message>
+    <message>
+        <location filename="Debugger/BreakPointViewer.py" line="153"/>
+        <source>Delete</source>
+        <translation>Smazat</translation>
+    </message>
+    <message>
+        <location filename="Debugger/BreakPointViewer.py" line="186"/>
+        <source>Delete all</source>
+        <translation>Smazat vše</translation>
+    </message>
+    <message>
+        <location filename="Debugger/BreakPointViewer.py" line="156"/>
+        <source>Goto</source>
+        <translation>Jít na</translation>
+    </message>
+    <message>
         <location filename="Debugger/BreakPointViewer.py" line="176"/>
-        <source>Enable all</source>
-        <translation>Zapnout vše</translation>
-    </message>
-    <message>
-        <location filename="Debugger/BreakPointViewer.py" line="148"/>
-        <source>Disable</source>
-        <translation>Vypnout</translation>
+        <source>Enable selected</source>
+        <translation>Zapnout vybrané</translation>
     </message>
     <message>
         <location filename="Debugger/BreakPointViewer.py" line="180"/>
-        <source>Disable all</source>
-        <translation>Vypnout vše</translation>
-    </message>
-    <message>
-        <location filename="Debugger/BreakPointViewer.py" line="151"/>
-        <source>Delete</source>
-        <translation>Smazat</translation>
+        <source>Disable selected</source>
+        <translation>Vypnout vybrané</translation>
     </message>
     <message>
         <location filename="Debugger/BreakPointViewer.py" line="184"/>
-        <source>Delete all</source>
-        <translation>Smazat vše</translation>
-    </message>
-    <message>
-        <location filename="Debugger/BreakPointViewer.py" line="154"/>
-        <source>Goto</source>
-        <translation>Jít na</translation>
-    </message>
-    <message>
-        <location filename="Debugger/BreakPointViewer.py" line="174"/>
-        <source>Enable selected</source>
-        <translation>Zapnout vybrané</translation>
-    </message>
-    <message>
-        <location filename="Debugger/BreakPointViewer.py" line="178"/>
-        <source>Disable selected</source>
-        <translation>Vypnout vybrané</translation>
-    </message>
-    <message>
-        <location filename="Debugger/BreakPointViewer.py" line="182"/>
         <source>Delete selected</source>
         <translation>Smazat vybrané</translation>
     </message>
     <message>
-        <location filename="Debugger/BreakPointViewer.py" line="186"/>
+        <location filename="Debugger/BreakPointViewer.py" line="188"/>
         <source>Configure...</source>
         <translation>Konfigurovat...</translation>
     </message>
@@ -2397,82 +2397,82 @@
 <context>
     <name>Browser</name>
     <message>
-        <location filename="UI/Browser.py" line="69"/>
+        <location filename="UI/Browser.py" line="71"/>
         <source>File-Browser</source>
         <translation>Prohlížeč souborů</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="89"/>
+        <location filename="UI/Browser.py" line="91"/>
         <source>&lt;b&gt;The Browser Window&lt;/b&gt;&lt;p&gt;This allows you to easily navigate the hierachy of directories and files on your system, identify the Python programs and open them up in a Source Viewer window. The window displays several separate hierachies.&lt;/p&gt;&lt;p&gt;The first hierachy is only shown if you have opened a program for debugging and it&apos;s root is the directory containing that program. Usually all of the separate files that make up a Python application are held in the same directory, so this hierachy gives you easy access to most of what you will need.&lt;/p&gt;&lt;p&gt;The next hierachy is used to easily navigate the directories that are specified in the Python &lt;tt&gt;sys.path&lt;/tt&gt; variable.&lt;/p&gt;&lt;p&gt;The remaining hierachies allow you navigate your system as a whole. On a UNIX system there will be a hierachy with &lt;tt&gt;/&lt;/tt&gt; at its root and another with the user home directory. On a Windows system there will be a hierachy for each drive on the system.&lt;/p&gt;&lt;p&gt;Python programs (i.e. those with a &lt;tt&gt;.py&lt;/tt&gt; file name suffix) are identified in the hierachies with a Python icon. The right mouse button will popup a menu which lets you open the file in a Source Viewer window, open the file for debugging or use it for a unittest run.&lt;/p&gt;&lt;p&gt;The context menu of a class, function or method allows you to open the file defining this class, function or method and will ensure, that the correct source line is visible.&lt;/p&gt;&lt;p&gt;Qt-Designer files (i.e. those with a &lt;tt&gt;.ui&lt;/tt&gt; file name suffix) are shown with a Designer icon. The context menu of these files allows you to start Qt-Designer with that file.&lt;/p&gt;&lt;p&gt;Qt-Linguist files (i.e. those with a &lt;tt&gt;.ts&lt;/tt&gt; file name suffix) are shown with a Linguist icon. The context menu of these files allows you to start Qt-Linguist with that file.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Prohlížeč&lt;/b&gt;&lt;p&gt;Prohlížeč umožňuje jednoduše procházet strukturu adresářů a souborů ve vašem systému, rozpoznat Python programy a otevřít je do okna Zobrazení zdrojového kódu. Prohlížeč zobrazuje několik samostatných hierarchií.&lt;/p&gt;&lt;p&gt;První hierarchie zobrazuje pouze otevřenou aplikaci pro debugování a její kořen je adresář obsahující tuto aplikaci. Všechny Python soubory, které tvoří aplikaci, jsou obvykle ve stejném adresáři, takže tato hierarchie umožňuje rychlý přístup ke všemu, co je třeba.&lt;/p&gt;&lt;p&gt;Další hierarchie se používá k rychlé navigaci v adresářích, které jsou uvedeny v Python proměnné &lt;tt&gt;sys.path&lt;/tt&gt;.&lt;/p&gt;&lt;p&gt;Zbývající hierarchie umožňují procházet operační systém jako celek. Na UNIX systémech bude hierarchie s kořenem &lt;tt&gt;/&lt;/tt&gt; a další s user home adresářem. Ve Windows zde bude hierarchie pro každý disk v systému.&lt;/p&gt;&lt;p&gt;Python programy (mají extenzi &lt;tt&gt;.py&lt;/tt&gt;) jsou v hierarchii zobrazeny s Python ikonou. Pravé tlačítko myši otevře popup menu, které umožňuje otevřít soubor do okna Zobrazení zdrojového kódu, otevřít soubor pro debugging nebo jej použít pro spuštění unittestu.&lt;/p&gt;&lt;p&gt;Kontextové menu s třídami, funkcemi a metodami umožňuje otevřít soubor na pozici vybrané třídy, funkci nebo metody a zajišťuje zobrazení kódu na požadovaném řádku.&lt;/p&gt;&lt;p&gt;Qt-Designer soubory (mají extenzi &lt;tt&gt;.ui&lt;/tt&gt;) jsou zobrazeny s ikonou Designeru. Kontextové menu umožňuje otevřít tyto soubory přímo do Qt-Designeru.&lt;/p&gt;&lt;p&gt;Qt-Linguist soubory (mají extenzi &lt;tt&gt;.ts&lt;/tt&gt;) jsou zobrazeny s Linguist ikonou. Kontextové menu umožňuje otevřít tyto soubory přímo do Qt-Linguistu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="207"/>
+        <location filename="UI/Browser.py" line="209"/>
         <source>Open</source>
         <translation>Otevřít</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="185"/>
+        <location filename="UI/Browser.py" line="187"/>
         <source>Run unittest...</source>
         <translation>Spustit unittest...</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="263"/>
+        <location filename="UI/Browser.py" line="265"/>
         <source>New toplevel directory...</source>
         <translation>Nový adresář toplevel...</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="219"/>
+        <location filename="UI/Browser.py" line="221"/>
         <source>Add as toplevel directory</source>
         <translation>Přidat jako toplevel adresář</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="222"/>
+        <location filename="UI/Browser.py" line="224"/>
         <source>Remove from toplevel</source>
         <translation>Odebrat z toplevelu</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="230"/>
+        <location filename="UI/Browser.py" line="232"/>
         <source>Find in this directory</source>
         <translation>Hledat v tomto adresáři</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="466"/>
+        <location filename="UI/Browser.py" line="468"/>
         <source>New toplevel directory</source>
         <translation>Nový toplevel adresář</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="233"/>
+        <location filename="UI/Browser.py" line="235"/>
         <source>Find&amp;&amp;Replace in this directory</source>
         <translation>Najít &amp;&amp; nahradit v tomto adresáři</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="268"/>
+        <location filename="UI/Browser.py" line="270"/>
         <source>Configure...</source>
         <translation>Konfigurovat...</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="195"/>
+        <location filename="UI/Browser.py" line="197"/>
         <source>Open in Icon Editor</source>
         <translation>Otevřit v editoru ikon</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="236"/>
+        <location filename="UI/Browser.py" line="238"/>
         <source>Copy Path to Clipboard</source>
         <translation>Kopírovat cestu do schránky</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="226"/>
+        <location filename="UI/Browser.py" line="228"/>
         <source>Refresh directory</source>
         <translation>Obnovit složku</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="245"/>
+        <location filename="UI/Browser.py" line="247"/>
         <source>Goto</source>
         <translation type="unfinished">Jít na</translation>
     </message>
     <message>
-        <location filename="UI/Browser.py" line="347"/>
+        <location filename="UI/Browser.py" line="349"/>
         <source>Line {0}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2480,17 +2480,17 @@
 <context>
     <name>BrowserModel</name>
     <message>
-        <location filename="UI/BrowserModel.py" line="44"/>
+        <location filename="UI/BrowserModel.py" line="53"/>
         <source>Name</source>
         <translation>Jméno</translation>
     </message>
     <message>
-        <location filename="UI/BrowserModel.py" line="602"/>
+        <location filename="UI/BrowserModel.py" line="606"/>
         <source>Attributes</source>
         <translation>Atributy</translation>
     </message>
     <message>
-        <location filename="UI/BrowserModel.py" line="561"/>
+        <location filename="UI/BrowserModel.py" line="565"/>
         <source>Globals</source>
         <translation>Globální</translation>
     </message>
@@ -2500,17 +2500,73 @@
         <translation type="obsolete">Atributy (globální)</translation>
     </message>
     <message>
-        <location filename="UI/BrowserModel.py" line="556"/>
+        <location filename="UI/BrowserModel.py" line="560"/>
         <source>Coding: {0}</source>
         <translation>Kódování: {0}</translation>
     </message>
     <message>
-        <location filename="UI/BrowserModel.py" line="612"/>
+        <location filename="UI/BrowserModel.py" line="616"/>
         <source>Class Attributes</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>CallStackViewer</name>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="49"/>
+        <source>Show source</source>
+        <translation type="unfinished">Zobrazit zdroj</translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="51"/>
+        <source>Clear</source>
+        <translation type="unfinished">Vyčistit</translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="53"/>
+        <source>Save</source>
+        <translation type="unfinished">Uložit</translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="60"/>
+        <source>File: {0}
+Line: {1}
+{2}{3}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="62"/>
+        <source>File: {0}
+Line: {1}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="170"/>
+        <source>Save Call Stack Info</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="156"/>
+        <source>Text Files (*.txt);;All Files (*)</source>
+        <translation type="unfinished">Textové soubory (*.txt);;Všechny soubory (*)</translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="170"/>
+        <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
+        <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="188"/>
+        <source>Error saving Call Stack Info</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Debugger/CallStackViewer.py" line="188"/>
+        <source>&lt;p&gt;The call stack info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CallTraceViewer</name>
     <message>
         <location filename="Debugger/CallTraceViewer.ui" line="14"/>
@@ -2543,37 +2599,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/CallTraceViewer.py" line="48"/>
+        <location filename="Debugger/CallTraceViewer.py" line="51"/>
         <source>From</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/CallTraceViewer.py" line="48"/>
+        <location filename="Debugger/CallTraceViewer.py" line="51"/>
         <source>To</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/CallTraceViewer.py" line="130"/>
+        <location filename="Debugger/CallTraceViewer.py" line="133"/>
         <source>Save Call Trace Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/CallTraceViewer.py" line="116"/>
+        <location filename="Debugger/CallTraceViewer.py" line="119"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation type="unfinished">Textové soubory (*.txt);;Všechny soubory (*)</translation>
     </message>
     <message>
-        <location filename="Debugger/CallTraceViewer.py" line="130"/>
+        <location filename="Debugger/CallTraceViewer.py" line="133"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Debugger/CallTraceViewer.py" line="153"/>
+        <location filename="Debugger/CallTraceViewer.py" line="156"/>
         <source>Error saving Call Trace Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/CallTraceViewer.py" line="153"/>
+        <location filename="Debugger/CallTraceViewer.py" line="156"/>
         <source>&lt;p&gt;The call trace info could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2631,50 +2687,50 @@
         <translation>Zobrazuje stav serveru</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="296"/>
+        <location filename="Cooperation/ChatWidget.py" line="298"/>
         <source>Start Server</source>
         <translation>Spustit server</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="150"/>
+        <location filename="Cooperation/ChatWidget.py" line="152"/>
         <source>! Unknown command: {0}
 </source>
         <translation>!Neznámý příkaz: {0}
 </translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="171"/>
+        <location filename="Cooperation/ChatWidget.py" line="173"/>
         <source>* {0} has joined.
 </source>
         <translation>* {0} připojeno.
 </translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="204"/>
+        <location filename="Cooperation/ChatWidget.py" line="206"/>
         <source>* {0} has left.
 </source>
         <translation>* {0} odešlo.
 </translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="304"/>
+        <location filename="Cooperation/ChatWidget.py" line="306"/>
         <source>Stop Server</source>
         <translation>Zastavit server</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="309"/>
+        <location filename="Cooperation/ChatWidget.py" line="311"/>
         <source>! Server Error: {0}
 </source>
         <translation>!Chyba serveru: {0}
 </translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="321"/>
+        <location filename="Cooperation/ChatWidget.py" line="323"/>
         <source>Disconnect</source>
         <translation>Odpojeno</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="325"/>
+        <location filename="Cooperation/ChatWidget.py" line="327"/>
         <source>Connect</source>
         <translation>Připojeno</translation>
     </message>
@@ -2709,27 +2765,27 @@
         <translation>Stisknutím zrušit sdílený editor</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="494"/>
+        <location filename="Cooperation/ChatWidget.py" line="496"/>
         <source>Clear</source>
         <translation>Vyčistit</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="499"/>
+        <location filename="Cooperation/ChatWidget.py" line="501"/>
         <source>Save</source>
         <translation>Uložit</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="480"/>
+        <location filename="Cooperation/ChatWidget.py" line="482"/>
         <source>Copy</source>
         <translation>Kopírovat</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="553"/>
+        <location filename="Cooperation/ChatWidget.py" line="555"/>
         <source>Save Chat</source>
         <translation>Uložit pokec</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="539"/>
+        <location filename="Cooperation/ChatWidget.py" line="541"/>
         <source>Text Files (*.txt);;All Files (*)</source>
         <translation>Textové soubory (*.txt);;Všechny soubory (*)</translation>
     </message>
@@ -2739,12 +2795,12 @@
         <translation type="obsolete">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="567"/>
+        <location filename="Cooperation/ChatWidget.py" line="569"/>
         <source>Error saving Chat</source>
         <translation>Chyba při ukládání pokecu</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="567"/>
+        <location filename="Cooperation/ChatWidget.py" line="569"/>
         <source>&lt;p&gt;The chat contents could not be written to &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Obsah pokecu se nepodařilo zapsat do &lt;b&gt;{0}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
@@ -2784,77 +2840,77 @@
         <translation type="obsolete">Vyjmout</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="485"/>
+        <location filename="Cooperation/ChatWidget.py" line="487"/>
         <source>Cut all</source>
         <translation>Vyjmout vše</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="489"/>
+        <location filename="Cooperation/ChatWidget.py" line="491"/>
         <source>Copy all</source>
         <translation>Kopírovat vše</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="604"/>
+        <location filename="Cooperation/ChatWidget.py" line="606"/>
         <source>Kick User</source>
         <translation>Vykopnout uživatele</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="608"/>
+        <location filename="Cooperation/ChatWidget.py" line="610"/>
         <source>Ban User</source>
         <translation>Zakázat uživatele</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="612"/>
+        <location filename="Cooperation/ChatWidget.py" line="614"/>
         <source>Ban and Kick User</source>
         <translation>Zakázat a vykopnout uživatele</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="640"/>
+        <location filename="Cooperation/ChatWidget.py" line="642"/>
         <source>* {0} has been kicked.
 </source>
         <translation>* {0} bylo vykopnuto.
 </translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="655"/>
+        <location filename="Cooperation/ChatWidget.py" line="657"/>
         <source>* {0} has been banned.
 </source>
         <translation>* {0} bylo zakázáno.
 </translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="670"/>
+        <location filename="Cooperation/ChatWidget.py" line="672"/>
         <source>* {0} has been banned and kicked.
 </source>
         <translation>* {0} bylo zakázáno a vykopnuto.</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="553"/>
+        <location filename="Cooperation/ChatWidget.py" line="555"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="183"/>
+        <location filename="Cooperation/ChatWidget.py" line="185"/>
         <source>New User</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="183"/>
+        <location filename="Cooperation/ChatWidget.py" line="185"/>
         <source>{0} has joined.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="211"/>
+        <location filename="Cooperation/ChatWidget.py" line="213"/>
         <source>User Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="211"/>
+        <location filename="Cooperation/ChatWidget.py" line="213"/>
         <source>{0} has left.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Cooperation/ChatWidget.py" line="232"/>
+        <location filename="Cooperation/ChatWidget.py" line="234"/>
         <source>Message from &lt;{0}&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2867,43 +2923,43 @@
 <context>
     <name>ChromeImporter</name>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="38"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="40"/>
         <source>Google Chrome stores its bookmarks in the &lt;b&gt;Bookmarks&lt;/b&gt; text file. This file is usually located in</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="55"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="57"/>
         <source>Please choose the file to begin importing bookmarks.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="55"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="57"/>
         <source>Chromium stores its bookmarks in the &lt;b&gt;Bookmarks&lt;/b&gt; text file. This file is usually located in</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="101"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="103"/>
         <source>File &apos;{0}&apos; does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="118"/>
+        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="120"/>
         <source>File &apos;{0}&apos; cannot be read.
 Reason: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="128"/>
-        <source>Google Chrome Import</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="130"/>
-        <source>Chromium Import</source>
+        <source>Google Chrome Import</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="132"/>
+        <source>Chromium Import</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/Bookmarks/BookmarksImporters/ChromeImporter.py" line="134"/>
         <source>Imported {0}</source>
         <translation type="unfinished">Importováno {0}</translation>
     </message>
@@ -2916,57 +2972,57 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="94"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="96"/>
         <source>Load</source>
         <translation type="unfinished">Načíst</translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="88"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="90"/>
         <source>Object blocked by ClickToFlash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="92"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="94"/>
         <source>Show information about object</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="95"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="97"/>
         <source>Delete object</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="98"/>
-        <source>Add &apos;{0}&apos; to Whitelist</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="100"/>
+        <source>Add &apos;{0}&apos; to Whitelist</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="102"/>
         <source>Remove &apos;{0}&apos; from Whitelist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="106"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="108"/>
         <source>Configure Whitelist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="252"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="254"/>
         <source>Flash Object</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="255"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="257"/>
         <source>&lt;b&gt;Attribute Name&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="255"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="257"/>
         <source>&lt;b&gt;Value&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="270"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="272"/>
         <source>No information available.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2974,7 +3030,7 @@
 <context>
     <name>ClickToFlashWhitelistDialog</name>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlashWhitelistDialog.py" line="52"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlashWhitelistDialog.py" line="54"/>
         <source>ClickToFlash Whitelist</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3014,7 +3070,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlashWhitelistDialog.py" line="52"/>
+        <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlashWhitelistDialog.py" line="54"/>
         <source>Enter host name to add to whitelist:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3102,47 +3158,47 @@
         <translation>Zobrazuje průběh procesu měření metriky kódu</translation>
     </message>
     <message>
-        <location filename="DataViews/CodeMetricsDialog.py" line="185"/>
+        <location filename="DataViews/CodeMetricsDialog.py" line="187"/>
         <source>files</source>
         <translation>soubory</translation>
     </message>
     <message>
-        <location filename="DataViews/CodeMetricsDialog.py" line="186"/>
-        <source>lines</source>
-        <translation>řádky</translation>
-    </message>
-    <message>
-        <location filename="DataViews/CodeMetricsDialog.py" line="187"/>
-        <source>bytes</source>
-        <translation>bajty</translation>
-    </message>
-    <message>
         <location filename="DataViews/CodeMetricsDialog.py" line="188"/>
-        <source>comments</source>
-        <translation>komentáře</translation>
+        <source>lines</source>
+        <translation>řádky</translation>
     </message>
     <message>
         <location filename="DataViews/CodeMetricsDialog.py" line="189"/>
-        <source>empty lines</source>
-        <translation>prázdné řádky</translation>
+        <source>bytes</source>
+        <translation>bajty</translation>
+    </message>
+    <message>
+        <location filename="DataViews/CodeMetricsDialog.py" line="190"/>