Mon, 28 Mar 2016 11:59:42 +0200
Merged with default branch.
--- a/APIs/Python3/eric6.api Sun Mar 20 20:13:29 2016 +0100 +++ b/APIs/Python3/eric6.api Mon Mar 28 11:59:42 2016 +0200 @@ -7572,12 +7572,12 @@ eric6.QScintilla.Editor.Editor.viewportEvent?4(evt) eric6.QScintilla.Editor.Editor.wheelEvent?4(evt) eric6.QScintilla.Editor.Editor.writeFile?4(fn, backup=True) -eric6.QScintilla.Editor.Editor?1(dbs, fn=None, vm=None, filetype="", editor=None, tv=None) +eric6.QScintilla.Editor.Editor?1(dbs, fn="", vm=None, filetype="", editor=None, tv=None) eric6.QScintilla.Editor.EditorAutoCompletionListID?7 eric6.QScintilla.Editor.TemplateCompletionListID?7 eric6.QScintilla.EditorAssembly.EditorAssembly.getEditor?4() eric6.QScintilla.EditorAssembly.EditorAssembly.shutdownTimer?4() -eric6.QScintilla.EditorAssembly.EditorAssembly?1(dbs, fn=None, vm=None, filetype="", editor=None, tv=None) +eric6.QScintilla.EditorAssembly.EditorAssembly?1(dbs, fn="", vm=None, filetype="", editor=None, tv=None) eric6.QScintilla.EditorMarkerMap.EditorMarkerMap._paintIt?5(painter) eric6.QScintilla.EditorMarkerMap.EditorMarkerMap.initColors?4() eric6.QScintilla.EditorMarkerMap.EditorMarkerMap?1(parent=None)
--- a/Documentation/Source/eric6.QScintilla.Editor.html Sun Mar 20 20:13:29 2016 +0100 +++ b/Documentation/Source/eric6.QScintilla.Editor.html Mon Mar 28 11:59:42 2016 +0200 @@ -1203,7 +1203,7 @@ </table> <a NAME="Editor.__init__" ID="Editor.__init__"></a> <h4>Editor (Constructor)</h4> -<b>Editor</b>(<i>dbs, fn=None, vm=None, filetype="", editor=None, tv=None</i>) +<b>Editor</b>(<i>dbs, fn="", vm=None, filetype="", editor=None, tv=None</i>) <p> Constructor </p><dl>
--- a/Documentation/Source/eric6.QScintilla.EditorAssembly.html Sun Mar 20 20:13:29 2016 +0100 +++ b/Documentation/Source/eric6.QScintilla.EditorAssembly.html Mon Mar 28 11:59:42 2016 +0200 @@ -90,7 +90,7 @@ </table> <a NAME="EditorAssembly.__init__" ID="EditorAssembly.__init__"></a> <h4>EditorAssembly (Constructor)</h4> -<b>EditorAssembly</b>(<i>dbs, fn=None, vm=None, filetype="", editor=None, tv=None</i>) +<b>EditorAssembly</b>(<i>dbs, fn="", vm=None, filetype="", editor=None, tv=None</i>) <p> Constructor </p><dl>
--- a/Documentation/Source/eric6.ViewManager.ViewManager.html Sun Mar 20 20:13:29 2016 +0100 +++ b/Documentation/Source/eric6.ViewManager.ViewManager.html Mon Mar 28 11:59:42 2016 +0200 @@ -2186,7 +2186,7 @@ <dt>Returns:</dt> <dd> reference to the new editor object (Editor.Editor) and the new - edito assembly object (EditorAssembly.EditorAssembly) + editor assembly object (EditorAssembly.EditorAssembly) </dd> </dl><a NAME="ViewManager.closeAllWindows" ID="ViewManager.closeAllWindows"></a> <h4>ViewManager.closeAllWindows</h4>
--- a/Helpviewer/AdBlock/AdBlockIcon.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Helpviewer/AdBlock/AdBlockIcon.py Mon Mar 28 11:59:42 2016 +0200 @@ -122,7 +122,7 @@ @return reference to the menu action (QAction) """ if not self.__menuAction: - self.__menuAction = QAction(self.tr("AdBlock")) + self.__menuAction = QAction(self.tr("AdBlock"), self) self.__menuAction.setMenu(QMenu()) self.__menuAction.menu().aboutToShow.connect(self.__createMenu) @@ -163,6 +163,9 @@ @return flag indicating an exception (boolean) """ browser = self.__mw.currentBrowser() + if browser is None: + return False + urlHost = browser.page().url().host() import Helpviewer.HelpWindow
--- a/Helpviewer/AdBlock/AdBlockTreeWidget.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Helpviewer/AdBlock/AdBlockTreeWidget.py Mon Mar 28 11:59:42 2016 +0200 @@ -116,28 +116,17 @@ return if not filter: - filter = QInputDialog.getText( + filter, ok = QInputDialog.getText( self, self.tr("Add Custom Rule"), self.tr("Write your rule here:"), QLineEdit.Normal) - if filter == "": + if not ok or filter == "": return from .AdBlockRule import AdBlockRule rule = AdBlockRule(filter, self.__subscription) - offset = self.__subscription.addRule(rule) - - item = QTreeWidgetItem() - item.setText(0, filter) - item.setData(0, Qt.UserRole, offset) - item.setFlags(item.flags() | Qt.ItemIsEditable) - - self.__itemChangingBlock = True - self.__topItem.addChild(item) - self.__itemChangingBlock = False - - self.__adjustItemFeatures(item, rule) + self.__subscription.addRule(rule) def removeRule(self): """
--- a/Helpviewer/CookieJar/CookieExceptionsModel.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Helpviewer/CookieJar/CookieExceptionsModel.py Mon Mar 28 11:59:42 2016 +0200 @@ -221,7 +221,7 @@ else: otherRule = '.' + host if otherRule in addList: - addList.removeOne(otherRule) + addList.remove(otherRule) if otherRule in removeList1: removeList1.remove(otherRule) if otherRule in removeList2:
--- a/Helpviewer/CookieJar/CookieModel.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Helpviewer/CookieJar/CookieModel.py Mon Mar 28 11:59:42 2016 +0200 @@ -136,11 +136,9 @@ return False lastRow = row + count - 1 - self.beginRemoveRows(parent, row, lastRow) lst = self.__cookieJar.cookies() del lst[row:lastRow + 1] self.__cookieJar.setCookies(lst) - self.endRemoveRows() return True
--- a/Helpviewer/CookieJar/CookiesExceptionsDialog.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Helpviewer/CookieJar/CookiesExceptionsDialog.py Mon Mar 28 11:59:42 2016 +0200 @@ -96,6 +96,7 @@ """ from .CookieJar import CookieJar self.__exceptionsModel.addRule(self.domainEdit.text(), CookieJar.Block) + self.domainEdit.clear() @pyqtSlot() def on_allowForSessionButton_clicked(self): @@ -105,6 +106,7 @@ from .CookieJar import CookieJar self.__exceptionsModel.addRule(self.domainEdit.text(), CookieJar.AllowForSession) + self.domainEdit.clear() @pyqtSlot() def on_allowButton_clicked(self): @@ -113,3 +115,4 @@ """ from .CookieJar import CookieJar self.__exceptionsModel.addRule(self.domainEdit.text(), CookieJar.Allow) + self.domainEdit.clear()
--- a/Helpviewer/HelpDocsInstaller.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Helpviewer/HelpDocsInstaller.py Mon Mar 28 11:59:42 2016 +0200 @@ -76,14 +76,15 @@ "qtconcurrent", "qtcore", "qtdbus", "qtdesigner", "qtdoc", "qtenginio", "qtenginiooverview", "qtenginoqml", "qtgraphicaleffects", "qtgui", "qthelp", "qtimageformats", - "qtlinguist", "qtlocation", "qtmaxextras", "qtmultimedia", - "qtmultimediawidgets", "qtnetwork", "qtnfc", "qtopengl", - "qtplatformheaders", "qtpositioning", "qtprintsupport", "qtqml", - "qtquick", "qtquickcontrols", "qtquickdialogs", "qtquickextras", - "qtquicklayouts", "qtscript", "qtscripttools", "qtsensors", - "qtserialport", "qtsql", "qtsvg", "qttestlib", "qtuitools", - "qtwebchannel", "qtwebengine", "qtwebenginewidgets", "qtwebkit", - "qtwebkitexamples", "qtwebsockets", "qtwidgets", "qtwinextras", + "qtlabscontrols", "qtlinguist", "qtlocation", "qtmaxextras", + "qtmultimedia", "qtmultimediawidgets", "qtnetwork", "qtnfc", + "qtopengl", "qtplatformheaders", "qtpositioning", "qtprintsupport", + "qtqml", "qtquick", "qtquickcontrols", "qtquickdialogs", + "qtquickextras", "qtquicklayouts", "qtscript", "qtscripttools", + "qtsensors", "qtserialbus", "qtserialport", "qtsql", "qtsvg", + "qttestlib", "qtuitools", "qtwebchannel", "qtwebengine", + "qtwebenginewidgets", "qtwebkit", "qtwebkitexamples", + "qtwebsockets", "qtwebview", "qtwidgets", "qtwinextras", "qtx11extras", "qtxml", "qtxmlpatterns"] for qtDocs, version in [(qt4Docs, 4), (qt5Docs, 5)]: for doc in qtDocs: @@ -127,7 +128,8 @@ QDir.separator() + "qch") elif version == 5: docsPath = QLibraryInfo.location(QLibraryInfo.DocumentationPath) - if not os.path.isdir(docsPath): + if not os.path.isdir(docsPath) or \ + len(QDir(docsPath).entryList(["*.qch"])) == 0: # Qt installer is a bit buggy; it's missing a symbolic link docsPathList = QDir.fromNativeSeparators(docsPath).split("/") docsPath = os.sep.join(
--- a/Network/IRC/IrcNetworkWidget.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Network/IRC/IrcNetworkWidget.py Mon Mar 28 11:59:42 2016 +0200 @@ -241,6 +241,7 @@ return network.getChannels() @pyqtSlot(str) + @pyqtSlot() def on_nickCombo_currentIndexChanged(self, nick=""): """ Private slot to use another nick name.
--- a/Preferences/ConfigurationPages/NetworkPage.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Preferences/ConfigurationPages/NetworkPage.py Mon Mar 28 11:59:42 2016 +0200 @@ -68,6 +68,9 @@ self.downloadDirPicker.setText(Preferences.getUI("DownloadPath")) self.requestFilenameCheckBox.setChecked( Preferences.getUI("RequestDownloadFilename")) + try: + except ImportError: + self.cleanupGroup.hide() # HTTP proxy self.httpProxyHostEdit.setText(
--- a/Preferences/__init__.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Preferences/__init__.py Mon Mar 28 11:59:42 2016 +0200 @@ -919,9 +919,9 @@ "FlashCookiesDataPath": flashDataPathForOS(), } if QWebSettings: - helpDefaults["HelpViewerType"] = 1, # eric browser + helpDefaults["HelpViewerType"] = 1 # eric browser else: - helpDefaults["HelpViewerType"] = 2, # Qt Assistant + helpDefaults["HelpViewerType"] = 2 # Qt Assistant @classmethod def initWebSettingsDefaults(cls): @@ -2586,10 +2586,11 @@ return pwConvert(prefClass.settings.value( "Help/" + key, prefClass.helpDefaults[key]), encode=False) elif key == "HelpViewerType": - # special treatment to adjust for missing QtWebKit + # special treatment to adjust for missing QtWebKit if eric web browser + # was selected value = int(prefClass.settings.value( "Help/" + key, prefClass.helpDefaults[key])) - if QWebSettings is None: + if value == 1 and QWebSettings is None: value = prefClass.helpDefaults[key] return value elif key in ["DiskCacheSize", "AcceptCookies",
--- a/QScintilla/Editor.py Sun Mar 20 20:13:29 2016 +0100 +++ b/QScintilla/Editor.py Mon Mar 28 11:59:42 2016 +0200 @@ -136,7 +136,7 @@ RequestSyncToken = "REQUEST_SYNC" SyncToken = "SYNC" - def __init__(self, dbs, fn=None, vm=None, + def __init__(self, dbs, fn="", vm=None, filetype="", editor=None, tv=None): """ Constructor @@ -330,7 +330,7 @@ self.isResourcesFile = False if editor is None: - if self.fileName is not None: + if self.fileName: if (QFileInfo(self.fileName).size() // 1024) > \ Preferences.getEditor("WarnFilesize"): res = E5MessageBox.yesNo( @@ -1676,7 +1676,7 @@ @param m modification status """ - if not m and self.fileName is not None: + if not m and bool(self.fileName): self.lastModified = QFileInfo(self.fileName).lastModified() self.modificationStatusChanged.emit(m, self) self.undoAvailable.emit(self.isUndoAvailable()) @@ -1850,7 +1850,7 @@ self.filetype = "Ruby" return True - if self.fileName is not None and \ + if bool(self.fileName) and \ os.path.splitext(self.fileName)[1] in \ self.dbs.getExtensions('Ruby'): self.filetype = "Ruby" @@ -1868,7 +1868,7 @@ return True if self.filetype == "": - if self.fileName is not None and \ + if self.fileName and \ os.path.splitext(self.fileName)[1] == ".js": self.filetype = "JavaScript" return True @@ -2968,13 +2968,13 @@ """ # save to project, if a project is loaded if self.project.isOpen(): - if self.fileName is not None and \ + if self.fileName and \ self.project.startswithProjectPath(self.fileName): path = os.path.dirname(self.fileName) else: path = self.project.getProjectPath() - if not path and self.fileName is not None: + if not path and self.fileName: path = os.path.dirname(self.fileName) if not path: path = Preferences.getMultiProject("Workspace") or \ @@ -3054,7 +3054,7 @@ return False # do nothing if text wasn't changed newName = None - if saveas or self.fileName is None: + if saveas or self.fileName == "": saveas = True fn = self.__getSaveFileName(path) @@ -5354,7 +5354,7 @@ @return flag indicating this editor should be saved (boolean) """ - return self.fileName is not None and \ + return bool (self.fileName) and \ not self.autosaveManuallyDisabled and \ not self.isReadOnly() @@ -5383,7 +5383,7 @@ @type str """ if fn != self.fileName and ( - self.fileName is not None or fn != "(Unnamed)"): + bool(self.fileName) or fn != "(Unnamed)"): return self.clearSyntaxError() @@ -5405,7 +5405,7 @@ """ # Check if it's the requested file, otherwise ignore signal if fn != self.fileName and ( - self.fileName is not None or fn != "(Unnamed)"): + bool(self.fileName) or fn != "(Unnamed)"): return self.clearSyntaxError() @@ -6469,7 +6469,7 @@ @param evt the event, that was generated (QEvent) """ if evt.type() == QEvent.WindowStateChange and \ - self.fileName is not None: + bool(self.fileName): if self.windowState() == Qt.WindowStates(Qt.WindowMinimized): cap = os.path.basename(self.fileName) else: @@ -6583,12 +6583,14 @@ @param bForce True to force change, False to only update and emit signal if there was an attribute change. """ - if self.fileName is None: + if self.fileName == "": return + readOnly = not QFileInfo(self.fileName).isWritable() or \ self.isReadOnly() if not bForce and (readOnly == self.isReadOnly()): return + cap = self.fileName if readOnly: cap = self.tr("{0} (ro)".format(cap)) @@ -7280,7 +7282,7 @@ and if it is inside a remotely initiated shared edit session (boolean, boolean, boolean, boolean) """ - return self.fileName is not None and \ + return bool(self.fileName) and \ self.project.isOpen() and \ self.project.isProjectFile(self.fileName), \ self.__isShared, self.__inSharedEdit, self.__inRemoteSharedEdit
--- a/QScintilla/EditorAssembly.py Sun Mar 20 20:13:29 2016 +0100 +++ b/QScintilla/EditorAssembly.py Mon Mar 28 11:59:42 2016 +0200 @@ -21,7 +21,7 @@ Class implementing the editor assembly widget containing the navigation combos and the editor widget. """ - def __init__(self, dbs, fn=None, vm=None, filetype="", editor=None, + def __init__(self, dbs, fn="", vm=None, filetype="", editor=None, tv=None): """ Constructor
--- a/Tasks/TaskViewer.py Sun Mar 20 20:13:29 2016 +0100 +++ b/Tasks/TaskViewer.py Mon Mar 28 11:59:42 2016 +0200 @@ -137,10 +137,10 @@ self.__backMenu.addSeparator() self.backPasteItem = self.__backMenu.addAction( self.tr("&Paste"), self.__pasteTask) - self.backPasteMainItem = self.__menu.addAction( + self.backPasteMainItem = self.__backMenu.addAction( self.tr("Paste as &Main Task"), self.__pasteMainTask) self.__backMenu.addSeparator() - self.__backMenu.addAction( + self.backDeleteCompletedItem = self.__backMenu.addAction( self.tr("Delete Completed &Tasks"), self.__deleteCompleted) self.__backMenu.addSeparator() self.__backMenuFilteredAct = self.__backMenu.addAction( @@ -273,6 +273,8 @@ else: self.backPasteItem.setEnabled(False) self.backPasteMainItem.setEnabled(False) + self.backDeleteCompletedItem.setEnabled( + bool(self.tasks)) self.__backMenu.popup(coord) else: self.projectTasksMenuItem.setEnabled(self.projectOpen)
--- a/ViewManager/ViewManager.py Sun Mar 20 20:13:29 2016 +0100 +++ b/ViewManager/ViewManager.py Mon Mar 28 11:59:42 2016 +0200 @@ -11,7 +11,7 @@ import os -from PyQt5.QtCore import pyqtSignal, QSignalMapper, QTimer, \ +from PyQt5.QtCore import pyqtSignal, pyqtSlot, QSignalMapper, QTimer, \ QFileInfo, QRegExp, QObject, Qt, QCoreApplication from PyQt5.QtGui import QColor, QKeySequence, QPalette, QPixmap from PyQt5.QtWidgets import QLineEdit, QToolBar, QWidgetAction, QDialog, \ @@ -4530,7 +4530,7 @@ @param filetype type of the source file (string) @param fn filename of this view @return reference to the new editor object (Editor.Editor) and the new - edito assembly object (EditorAssembly.EditorAssembly) + editor assembly object (EditorAssembly.EditorAssembly) """ from QScintilla.EditorAssembly import EditorAssembly assembly = EditorAssembly(self.dbs, fn, self, filetype=filetype, @@ -4939,7 +4939,7 @@ Public slot to generate a new empty editor. """ from QScintilla.EditorAssembly import EditorAssembly - assembly = EditorAssembly(self.dbs, None, self, + assembly = EditorAssembly(self.dbs, "", self, tv=e5App().getObject("TaskViewer")) editor = assembly.getEditor() self.editors.append(editor) @@ -6563,6 +6563,7 @@ if editor: self.editorRenamedEd.emit(editor) +## @pyqtSlot(str, int, int) def __cursorChanged(self, fn, line, pos): """ Private slot to handle the cursorChanged signal.
--- a/WebBrowser/AdBlock/AdBlockTreeWidget.py Sun Mar 20 20:13:29 2016 +0100 +++ b/WebBrowser/AdBlock/AdBlockTreeWidget.py Mon Mar 28 11:59:42 2016 +0200 @@ -116,12 +116,12 @@ return if not filter: - filter = QInputDialog.getText( + filter, ok = QInputDialog.getText( self, self.tr("Add Custom Rule"), self.tr("Write your rule here:"), QLineEdit.Normal) - if filter == "": + if not ok or filter == "": return from .AdBlockRule import AdBlockRule
--- a/install.py Sun Mar 20 20:13:29 2016 +0100 +++ b/install.py Mon Mar 28 11:59:42 2016 +0200 @@ -1179,8 +1179,8 @@ import sip sipVersion = sip.SIP_VERSION_STR print("sip Version:", sipVersion.strip()) - # always assume, that snapshots are new enough - if "snapshot" not in sipVersion: + # always assume, that snapshots or dev versions are new enough + if "snapshot" not in sipVersion and "dev" not in sipVersion: while sipVersion.count('.') < 2: sipVersion += '.0' (maj, min, pat) = sipVersion.split('.') @@ -1210,8 +1210,8 @@ from PyQt5.QtCore import PYQT_VERSION_STR pyqtVersion = PYQT_VERSION_STR print("PyQt Version:", pyqtVersion.strip()) - # always assume, that snapshots are new enough - if "snapshot" not in pyqtVersion: + # always assume, that snapshots or dev versions are new enough + if "snapshot" not in pyqtVersion and "dev" not in pyqtVersion: while pyqtVersion.count('.') < 2: pyqtVersion += '.0' (maj, min, pat) = pyqtVersion.split('.') @@ -1240,8 +1240,8 @@ from PyQt5.Qsci import QSCINTILLA_VERSION_STR scintillaVersion = QSCINTILLA_VERSION_STR print("QScintilla Version:", QSCINTILLA_VERSION_STR.strip()) - # always assume, that snapshots are new enough - if "snapshot" not in scintillaVersion: + # always assume, that snapshots or dev versions are new enough + if "snapshot" not in scintillaVersion and "dev" not in scintillaVersion: while scintillaVersion.count('.') < 2: scintillaVersion += '.0' (maj, min, pat) = scintillaVersion.split('.')