Tue, 28 May 2013 20:52:12 +0200
Merge with default branch.
--- 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:
--- 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>&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&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>&Thanks To</string> + <widget class="QWidget" name="authors"> + <attribute name="title"> + <string>A&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>&License Agreement</string> + <widget class="QWidget" name="thanks"> + <attribute name="title"> + <string>&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>&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><font color="#FF0000"><b>Note:</b> This setting is activated at the next startup of the application.</font></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>&About</source> <translation>O &aplikaci</translation> </message> <message> - <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="72"/> + <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="73"/> <source>A&uthors</source> <translation>A&utoři</translation> </message> <message> - <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="89"/> + <location filename="Plugins/AboutPlugin/AboutDialog.ui" line="90"/> <source>&Thanks To</source> <translation>&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>&License Agreement</source> <translation>&Licenční ujednání</translation> </message> <message> - <location filename="Plugins/AboutPlugin/AboutDialog.py" line="22"/> + <location filename="Plugins/AboutPlugin/AboutDialog.py" line="24"/> <source><p>{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.</p><p>For more information see <a href="{1}">{1}</a>.</p><p>Please send bug reports to <a href="mailto:{2}">{2}</a>.</p><p>To request a new feature please send an email to <a href="mailto:{3}">{3}</a>.</p><p>{0} uses third party software which is copyrighted by it's respective copyright holder. For details see the copyright notice of the individual package.</p></source> <translation><p>{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.</p><p>Více informací naleznete na <a href="{1}">{1}</a>.</p><p>Hlášení o chybách nebo požadavky na nové vlastnosti zasílejte, prosím, na <a href="mailto:{2}">{2}</a>.</p><p>Požadavky na nové vlastnosti posílejte na email <a href="mailto:{3}">{3}</a>.</p><p>{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.</p></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 &Qt</source> <translation>O &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><b>About Qt</b><p>Display some information about the Qt toolkit.</p></source> <translation><b>O Qt</b><p>Zobrazit informace o Qt toolkitu.</p></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>&About {0}</source> <translation>O &aplikaci {0}</translation> </message> <message> - <location filename="Plugins/PluginAbout.py" line="81"/> + <location filename="Plugins/PluginAbout.py" line="83"/> <source><b>About {0}</b><p>Display some information about this software.</p></source> <translation><b>O aplikaci {0}</b><p>Zobrazí informace o tomto software.</p></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><p>Subscribe to this AdBlock subscription?</p><p>{0}</p></source> <translation><p>Přihlásit k odběru tento AdBlock?</p><p>{0}</p></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><p>Do you really want to remove subscription <b>{0}</b> and all subscriptions requiring it?</p><ul><li>{1}</li></ul></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="210"/> + <location filename="Helpviewer/AdBlock/AdBlockDialog.py" line="212"/> <source><p>Do you really want to remove subscription <b>{0}</b>?</p></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 '{0}' for reading.</source> <translation>Nelze otevřít adblock soubor '{0}' pro čtení.</translation> </message> @@ -350,22 +350,22 @@ <translation type="obsolete">Adblock soubor '{0}' nezačíná s [Adblock.</translation> </message> <message> - <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="366"/> + <location filename="Helpviewer/AdBlock/AdBlockSubscription.py" line="368"/> <source><p>Subscription rules could not be downloaded.</p><p>Error: {0}</p></source> <translation><p>Pravidla pro předplatné nelze stáhnout.</p><p>Chyba: {0}</p></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 '{0}' for writing.</source> <translation>Nelze otevřít adblock soubor '{0}' 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 '{0}' 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><p>AdBlock subscription <b>{0}</b> has a wrong checksum.<br/>Found: {1}<br/>Calculated: {2}<br/>Use it anyway?</p></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>&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>&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><<Application>></source> - <translation type="unfinished"><<Aplikace>></translation> - </message> - <message> <location filename="Graphics/ApplicationDiagramBuilder.py" line="187"/> + <source><<Application>></source> + <translation type="unfinished"><<Aplikace>></translation> + </message> + <message> + <location filename="Graphics/ApplicationDiagramBuilder.py" line="189"/> <source><<Others>></source> <translation type="unfinished"><<Ostatní>></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><p>The diagram belongs to the project <b>{0}</b>. Shall this project be opened?</p></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&ložku</translation> </message> <message> - <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="138"/> + <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="140"/> <source>&Open</source> <translation>&Otevřít</translation> </message> <message> - <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="139"/> - <source>Open in New &Tab</source> - <translation>Otevřít v novém &tabu</translation> - </message> - <message> <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="141"/> + <source>Open in New &Tab</source> + <translation>Otevřít v novém &tabu</translation> + </message> + <message> + <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="143"/> <source>Edit &Name</source> <translation>Editovat &název</translation> </message> <message> - <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="144"/> - <source>Edit &Address</source> - <translation>Editovat &adresu</translation> - </message> - <message> <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="146"/> + <source>Edit &Address</source> + <translation>Editovat &adresu</translation> + </message> + <message> + <location filename="Helpviewer/Bookmarks/BookmarksDialog.py" line="148"/> <source>&Delete</source> <translation>&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>&Properties...</source> <translation type="unfinished">&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><b>Importing from {0}</b></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 <b>{0}</b>.</source> <translation>Chyba při ukládání záložek do <b>{0}</b>.</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 <b>{0}</b>.</source> <translation>Chyba při exportu záložek <b>{0}</b>.</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>&Open</source> - <translation>&Otevřít</translation> - </message> - <message> <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="139"/> + <source>&Open</source> + <translation>&Otevřít</translation> + </message> + <message> + <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="141"/> <source>Open in New &Tab<byte value="x9"/>Ctrl+LMB</source> <translation>Otevřít nový &Tab<byte value="x9"/></translation> </message> <message> - <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="144"/> + <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="146"/> <source>&Remove</source> <translation>Odeb&rat</translation> </message> <message> - <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="148"/> + <location filename="Helpviewer/Bookmarks/BookmarksMenu.py" line="150"/> <source>&Properties...</source> <translation type="unfinished">&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><b>List bookmarks</b><p>This lists the bookmarks of the project.</p></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><b>Define bookmark</b><p>This defines a bookmark for the project.</p></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><b>Delete bookmark</b><p>This deletes a bookmark of the project.</p></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><b>Rename bookmark</b><p>This renames a bookmark of the project.</p></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><b>Move bookmark</b><p>This moves a bookmark of the project to another changeset.</p></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><b>Show incoming bookmarks</b><p>This shows a list of new bookmarks available at the remote repository.</p></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><b>Pull bookmark</b><p>This pulls a bookmark from a remote repository into the local repository.</p></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><b>Show outgoing bookmarks</b><p>This shows a list of new bookmarks available at the local repository.</p></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><b>Push bookmark</b><p>This pushes a bookmark from the local repository to a remote repository.</p></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>&Open</source> - <translation>&Otevřít</translation> - </message> - <message> - <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="92"/> - <source>&Remove</source> - <translation>Odeb&rat</translation> - </message> - <message> - <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="100"/> - <source>Add &Bookmark...</source> - <translation>Přidat &záložku...</translation> - </message> - <message> - <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="101"/> - <source>Add &Folder...</source> - <translation>Přidat s&ložku...</translation> - </message> - <message> <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="87"/> + <source>&Open</source> + <translation>&Otevřít</translation> + </message> + <message> + <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="94"/> + <source>&Remove</source> + <translation>Odeb&rat</translation> + </message> + <message> + <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="102"/> + <source>Add &Bookmark...</source> + <translation>Přidat &záložku...</translation> + </message> + <message> + <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="103"/> + <source>Add &Folder...</source> + <translation>Přidat s&ložku...</translation> + </message> + <message> + <location filename="Helpviewer/Bookmarks/BookmarksToolBar.py" line="89"/> <source>Open in New &Tab<byte value="x9"/>Ctrl+LMB</source> <translation>Otevřít nový &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>&Properties...</source> <translation type="unfinished">&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><b>The Browser Window</b><p>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.</p><p>The first hierachy is only shown if you have opened a program for debugging and it'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.</p><p>The next hierachy is used to easily navigate the directories that are specified in the Python <tt>sys.path</tt> variable.</p><p>The remaining hierachies allow you navigate your system as a whole. On a UNIX system there will be a hierachy with <tt>/</tt> 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.</p><p>Python programs (i.e. those with a <tt>.py</tt> 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.</p><p>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.</p><p>Qt-Designer files (i.e. those with a <tt>.ui</tt> file name suffix) are shown with a Designer icon. The context menu of these files allows you to start Qt-Designer with that file.</p><p>Qt-Linguist files (i.e. those with a <tt>.ts</tt> file name suffix) are shown with a Linguist icon. The context menu of these files allows you to start Qt-Linguist with that file.</p></source> <translation><b>Prohlížeč</b><p>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í.</p><p>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.</p><p>Další hierarchie se používá k rychlé navigaci v adresářích, které jsou uvedeny v Python proměnné <tt>sys.path</tt>.</p><p>Zbývající hierarchie umožňují procházet operační systém jako celek. Na UNIX systémech bude hierarchie s kořenem <tt>/</tt> a další s user home adresářem. Ve Windows zde bude hierarchie pro každý disk v systému.</p><p>Python programy (mají extenzi <tt>.py</tt>) 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.</p><p>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.</p><p>Qt-Designer soubory (mají extenzi <tt>.ui</tt>) jsou zobrazeny s ikonou Designeru. Kontextové menu umožňuje otevřít tyto soubory přímo do Qt-Designeru.</p><p>Qt-Linguist soubory (mají extenzi <tt>.ts</tt>) jsou zobrazeny s Linguist ikonou. Kontextové menu umožňuje otevřít tyto soubory přímo do Qt-Linguistu.</p></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&&Replace in this directory</source> <translation>Najít && 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><p>The file <b>{0}</b> already exists. Overwrite it?</p></source> + <translation type="unfinished"><p>Soubor <b>{0}</b> již existuje.</p><p>Má se přepsat?</p></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><p>The call stack info could not be written to <b>{0}</b></p><p>Reason: {1}</p></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><p>The file <b>{0}</b> already exists. Overwrite it?</p></source> <translation type="unfinished"><p>Soubor <b>{0}</b> již existuje.</p><p>Má se přepsat?</p></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><p>The call trace info could not be written to <b>{0}</b></p><p>Reason: {1}</p></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"><p>Soubor <b>{0}</b> již existuje.</p></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><p>The chat contents could not be written to <b>{0}</b></p><p>Reason: {1}</p></source> <translation><p>Obsah pokecu se nepodařilo zapsat do <b>{0}</b></p><p>Důvod: {1}</p></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><p>The file <b>{0}</b> already exists. Overwrite it?</p></source> <translation type="unfinished"><p>Soubor <b>{0}</b> již existuje.</p><p>Má se přepsat?</p></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 <{0}></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 <b>Bookmarks</b> 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 <b>Bookmarks</b> 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 '{0}' 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 '{0}' 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 '{0}' to Whitelist</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="100"/> + <source>Add '{0}' to Whitelist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/WebPlugins/ClickToFlash/ClickToFlash.py" line="102"/> <source>Remove '{0}' 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><b>Attribute Name</b></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><b>Value</b></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"/>