Sat, 01 Dec 2018 11:44:34 +0100
Merged with default branch to prepare a new release.
--- a/APIs/Python3/eric6.api Thu Nov 01 11:48:02 2018 +0100 +++ b/APIs/Python3/eric6.api Sat Dec 01 11:44:34 2018 +0100 @@ -464,10 +464,10 @@ eric6.Debugger.DebugServer.DebugServer.setCallTraceEnabled?4(on) eric6.Debugger.DebugServer.DebugServer.setDebugging?4(on) eric6.Debugger.DebugServer.DebugServer.shutdownServer?4() -eric6.Debugger.DebugServer.DebugServer.signalClientBanner?4(version, platform, debugClient) +eric6.Debugger.DebugServer.DebugServer.signalClientBanner?4(version, platform, debugClient, venvName) eric6.Debugger.DebugServer.DebugServer.signalClientBreakConditionError?4(filename, lineno) eric6.Debugger.DebugServer.DebugServer.signalClientCallTrace?4(isCall, fromFile, fromLine, fromFunction, toFile, toLine, toFunction) -eric6.Debugger.DebugServer.DebugServer.signalClientCapabilities?4(capabilities, clientType) +eric6.Debugger.DebugServer.DebugServer.signalClientCapabilities?4(capabilities, clientType, venvName) eric6.Debugger.DebugServer.DebugServer.signalClientClearBreak?4(filename, lineno) eric6.Debugger.DebugServer.DebugServer.signalClientClearWatch?4(condition) eric6.Debugger.DebugServer.DebugServer.signalClientCompletionList?4(completionList, text) @@ -496,7 +496,7 @@ eric6.Debugger.DebugServer.DebugServer.utTestFailedExpected?7 eric6.Debugger.DebugServer.DebugServer.utTestSkipped?7 eric6.Debugger.DebugServer.DebugServer.utTestSucceededUnexpected?7 -eric6.Debugger.DebugServer.DebugServer?1(preventPassiveDebugging=False) +eric6.Debugger.DebugServer.DebugServer?1(originalPathString, preventPassiveDebugging=False) eric6.Debugger.DebugServer.DebuggerInterfaces?7 eric6.Debugger.DebugUI.DebugUI.appendStdout?7 eric6.Debugger.DebugUI.DebugUI.clearHistories?4() @@ -583,8 +583,8 @@ eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointIgnore?4(cond, count) eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.setCallTraceEnabled?4(on) eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.shutdown?4() -eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemote?4(port, runInConsole, venvName) -eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemoteForProject?4(port, runInConsole, venvName) +eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemote?4(port, runInConsole, venvName, originalPathString) +eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemoteForProject?4(port, runInConsole, venvName, originalPathString) eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone?1(debugServer, passive) eric6.Debugger.DebuggerInterfaceNone.createDebuggerInterfaceNone?4(debugServer, passive) eric6.Debugger.DebuggerInterfaceNone.getRegistryData?4() @@ -625,8 +625,8 @@ eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointIgnore?4(cond, count) eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.setCallTraceEnabled?4(on) eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.shutdown?4() -eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemote?4(port, runInConsole, venvName) -eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemoteForProject?4(port, runInConsole, venvName) +eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemote?4(port, runInConsole, venvName, originalPathString) +eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemoteForProject?4(port, runInConsole, venvName, originalPathString) eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython?1(debugServer, passive, pythonVariant) eric6.Debugger.DebuggerInterfacePython.createDebuggerInterfacePython2?4(debugServer, passive) eric6.Debugger.DebuggerInterfacePython.createDebuggerInterfacePython3?4(debugServer, passive) @@ -1590,6 +1590,7 @@ eric6.E5XML.Config.pluginRepositoryFileFormatVersion?7 eric6.E5XML.Config.projectFileFormatVersion?7 eric6.E5XML.Config.projectFileFormatVersionAlt?7 +eric6.E5XML.Config.projectFileFormatVersionIdl?7 eric6.E5XML.Config.projectFileFormatVersionMake?7 eric6.E5XML.Config.projectFileFormatVersionProto?7 eric6.E5XML.Config.sessionFileFormatVersion?7 @@ -3947,7 +3948,7 @@ eric6.PluginManager.PluginManager.PluginManager.unloadPlugin?4(name) eric6.PluginManager.PluginManager.PluginManager?1(parent=None, disabledPlugins=None, doLoadPlugins=True, develPlugin=None) eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryDialog.getDownloadedPlugins?4() -eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryDialog?1(parent=None) +eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryDialog?1(pluginManager, parent=None) eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryDownloadCleanup?4(quiet=False) eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget.AuthorRole?7 eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget.DescrRole?7 @@ -3965,7 +3966,7 @@ eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget.on_repositoryList_customContextMenuRequested?4(pos) eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget.on_repositoryList_itemSelectionChanged?4() eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget.on_repositoryUrlEditButton_toggled?4(checked) -eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget?1(parent=None, external=False) +eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWidget?1(pluginManager, parent=None) eric6.PluginManager.PluginRepositoryDialog.PluginRepositoryWindow?1(parent=None) eric6.PluginManager.PluginUninstallDialog.PluginUninstallDialog?1(pluginManager, parent=None) eric6.PluginManager.PluginUninstallDialog.PluginUninstallWidget.accepted?7 @@ -5047,6 +5048,7 @@ eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_clearButton_clicked?4() eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_origEdit_textChanged?4() eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_origLanguageComboBox_currentIndexChanged?4(index) +eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_preferencesButton_clicked?4() eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_pronounceOrigButton_clicked?4() eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_pronounceTransButton_clicked?4() eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.TranslatorWidget.on_swapButton_clicked?4() @@ -7919,6 +7921,7 @@ eric6.Project.Project.Project.handlePreferencesChanged?4() eric6.Project.Project.Project.hasDefaultIdlCompilerParameters?4() eric6.Project.Project.Project.hasDefaultMakeParameters?4() +eric6.Project.Project.Project.hasDefaultUicCompilerParameters?4() eric6.Project.Project.Project.hasEntry?4(fn) eric6.Project.Project.Project.hasProjectType?4(type_, progLanguage="") eric6.Project.Project.Project.initActions?4() @@ -7992,7 +7995,7 @@ eric6.Project.Project.Project.saveProjectAs?4() eric6.Project.Project.Project.setData?4(category, key, data) eric6.Project.Project.Project.setDbgInfo?4(venvName, argv, wd, env, excReporting, excList, excIgnoreList, autoClearShell, tracePython=None, autoContinue=None) -eric6.Project.Project.Project.setDirty?4(b) +eric6.Project.Project.Project.setDirty?4(dirty) eric6.Project.Project.Project.setStatusMonitorAutoUpdate?4(auto) eric6.Project.Project.Project.setStatusMonitorInterval?4(interval) eric6.Project.Project.Project.setTranslationPattern?4(pattern) @@ -8123,6 +8126,7 @@ eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser._openItem?5() eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.appendStderr?7 eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.compileChangedForms?4() +eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.getUiCompiler?4() eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.handlePreferencesChanged?4() eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.menusAboutToBeCreated?7 eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.showMenu?7 @@ -8214,6 +8218,8 @@ eric6.Project.TranslationPropertiesDialog.TranslationPropertiesDialog.on_transPatternPicker_textChanged?4(txt) eric6.Project.TranslationPropertiesDialog.TranslationPropertiesDialog.storeData?4() eric6.Project.TranslationPropertiesDialog.TranslationPropertiesDialog?1(project, new, parent) +eric6.Project.UicCompilerOptionsDialog.UicCompilerOptionsDialog.getData?4() +eric6.Project.UicCompilerOptionsDialog.UicCompilerOptionsDialog?1(compilerOptions, compiler, parent=None) eric6.Project.UicLoadUi.className?4(formFile, projectPath) eric6.Project.UicLoadUi.objectName?4(formFile, projectPath) eric6.Project.UicLoadUi.signatures?4(formFile, projectPath) @@ -9184,6 +9190,8 @@ eric6.QScintilla.Shell.Shell.clearHistory?4() eric6.QScintilla.Shell.Shell.closeShell?4() eric6.QScintilla.Shell.Shell.contextMenuEvent?4(ev) +eric6.QScintilla.Shell.Shell.doClearRestart?4() +eric6.QScintilla.Shell.Shell.doRestart?4() eric6.QScintilla.Shell.Shell.dragEnterEvent?4(event) eric6.QScintilla.Shell.Shell.dragLeaveEvent?4(event) eric6.QScintilla.Shell.Shell.dragMoveEvent?4(event) @@ -9210,17 +9218,18 @@ eric6.QScintilla.Shell.Shell.queueText?7 eric6.QScintilla.Shell.Shell.reloadHistory?4() eric6.QScintilla.Shell.Shell.saveHistory?4(clientType) -eric6.QScintilla.Shell.Shell.searchNext?4(txt, caseSensitive, wholeWord) -eric6.QScintilla.Shell.Shell.searchPrev?4(txt, caseSensitive, wholeWord) +eric6.QScintilla.Shell.Shell.searchNext?4(txt, caseSensitive, wholeWord, regexp) +eric6.QScintilla.Shell.Shell.searchPrev?4(txt, caseSensitive, wholeWord, regexp) eric6.QScintilla.Shell.Shell.searchStringFound?7 eric6.QScintilla.Shell.Shell.selectHistory?4() eric6.QScintilla.Shell.Shell.setDebuggerUI?4(ui) eric6.QScintilla.Shell.Shell.showHistory?4() +eric6.QScintilla.Shell.Shell.virtualEnvironmentChanged?7 eric6.QScintilla.Shell.Shell.wheelEvent?4(evt) -eric6.QScintilla.Shell.Shell?1(dbs, vm, windowedVariant, parent=None) +eric6.QScintilla.Shell.Shell?1(dbs, vm, project, windowedVariant, parent=None) eric6.QScintilla.Shell.ShellAssembly.shell?4() eric6.QScintilla.Shell.ShellAssembly.showFind?4(txt="") -eric6.QScintilla.Shell.ShellAssembly?1(dbs, vm, horizontal=True, parent=None) +eric6.QScintilla.Shell.ShellAssembly?1(dbs, vm, project, horizontal=True, parent=None) eric6.QScintilla.Shell.ShellHistoryStyle.Disabled?7 eric6.QScintilla.Shell.ShellHistoryStyle.LinuxStyle?7 eric6.QScintilla.Shell.ShellHistoryStyle.WindowsStyle?7 @@ -9237,7 +9246,7 @@ eric6.QScintilla.ShellWindow.ShellWindow.getAPIsManager?4() eric6.QScintilla.ShellWindow.ShellWindow.quit?4() eric6.QScintilla.ShellWindow.ShellWindow.showFind?4(txt="") -eric6.QScintilla.ShellWindow.ShellWindow?1(parent=None, name=None) +eric6.QScintilla.ShellWindow.ShellWindow?1(originalPathString, parent=None, name=None) eric6.QScintilla.SortOptionsDialog.SortOptionsDialog.getData?4() eric6.QScintilla.SortOptionsDialog.SortOptionsDialog?1(parent=None) eric6.QScintilla.SpellChecker.SpellChecker._getDict?5(lang, pwl="", pel="") @@ -9825,8 +9834,8 @@ eric6.UI.LogView.LogViewerEdit.appendToStdout?4(txt) eric6.UI.LogView.LogViewerEdit.keyPressEvent?4(evt) eric6.UI.LogView.LogViewerEdit.preferencesChanged?4() -eric6.UI.LogView.LogViewerEdit.searchNext?4(txt, caseSensitive, wholeWord) -eric6.UI.LogView.LogViewerEdit.searchPrev?4(txt, caseSensitive, wholeWord) +eric6.UI.LogView.LogViewerEdit.searchNext?4(txt, caseSensitive, wholeWord, regexp) +eric6.UI.LogView.LogViewerEdit.searchPrev?4(txt, caseSensitive, wholeWord, regexp) eric6.UI.LogView.LogViewerEdit.searchStringFound?7 eric6.UI.LogView.LogViewerEdit?1(parent=None) eric6.UI.NotificationWidget.NotificationWidget.mouseMoveEvent?4(evt) @@ -9903,7 +9912,7 @@ eric6.UI.SearchWidget.SearchWidget.searchPrevious?7 eric6.UI.SearchWidget.SearchWidget.searchStringFound?4(found) eric6.UI.SearchWidget.SearchWidget.showFind?4(txt="") -eric6.UI.SearchWidget.SearchWidget?1(mainWindow, parent=None, spacer=True, showLine=False) +eric6.UI.SearchWidget.SearchWidget?1(mainWindow, parent=None, spacer=True, showLine=False, hideRegExp=False) eric6.UI.SplashScreen.NoneSplashScreen.clearMessage?4() eric6.UI.SplashScreen.NoneSplashScreen.finish?4(widget) eric6.UI.SplashScreen.NoneSplashScreen.showMessage?4(msg) @@ -9963,6 +9972,7 @@ eric6.UI.UserInterface.UserInterface.getMenu?4(name) eric6.UI.UserInterface.UserInterface.getMenuAction?4(menuName, actionName) eric6.UI.UserInterface.UserInterface.getMenuBarAction?4(menuName) +eric6.UI.UserInterface.UserInterface.getOriginalPathString?4() eric6.UI.UserInterface.UserInterface.getToolBarIconSize?4() eric6.UI.UserInterface.UserInterface.getToolbar?4(name) eric6.UI.UserInterface.UserInterface.getViewProfile?4() @@ -9996,7 +10006,7 @@ eric6.UI.UserInterface.UserInterface.showReplaceFilesDialog?4(txt="", searchDir="", openFiles=False) eric6.UI.UserInterface.UserInterface.unregisterToolbar?4(name) eric6.UI.UserInterface.UserInterface.versionIsNewer?4(required, snapshot=None) -eric6.UI.UserInterface.UserInterface?1(app, locale, splash, plugin, disabledPlugins, noOpenAtStartup, noCrashOpenAtStartup, disableCrashSession, restartArguments) +eric6.UI.UserInterface.UserInterface?1(app, locale, splash, plugin, disabledPlugins, noOpenAtStartup, noCrashOpenAtStartup, disableCrashSession, restartArguments, originalPathString) eric6.Utilities.AutoSaver.AutoSaver.AUTOSAVE_IN?7 eric6.Utilities.AutoSaver.AutoSaver.MAXWAIT?7 eric6.Utilities.AutoSaver.AutoSaver.changeOccurred?4() @@ -10649,11 +10659,12 @@ eric6.ViewManager.ViewManager.ViewManager?1() eric6.ViewManager.factory?4(parent, ui, dbs, pluginManager) eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.getData?4() +eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.on_anacondaCheckBox_clicked?4(checked) eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.on_globalCheckBox_toggled?4(checked) eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.on_nameEdit_textChanged?4(txt) eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.on_pythonExecPicker_textChanged?4(txt) eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.on_targetDirectoryPicker_textChanged?4(txt) -eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog?1(manager, venvName="", venvDirectory="", venvInterpreter="", venvVariant=3, isGlobal=False, parent=None) +eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog?1(manager, venvName="", venvDirectory="", venvInterpreter="", venvVariant=3, isGlobal=False, isConda=False, execPath="", parent=None) eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.getData?4() eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged?4(txt) eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_pyvenvButton_toggled?4(checked) @@ -10667,23 +10678,27 @@ eric6.VirtualEnv.VirtualenvInterpreterSelectionDialog.VirtualenvInterpreterSelectionDialog.on_pythonExecPicker_textChanged?4(txt) eric6.VirtualEnv.VirtualenvInterpreterSelectionDialog.VirtualenvInterpreterSelectionDialog?1(venvName, venvDirectory, parent=None) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.DefaultKey?7 -eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.addVirtualEnv?4(venvName, venvDirectory, venvInterpreter="", venvVariant=3, isGlobal=False) +eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.addVirtualEnv?4(venvName, venvDirectory, venvInterpreter="", venvVariant=3, isGlobal=False, isConda=False, execPath="") eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.createVirtualEnv?4() eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.deleteVirtualEnvs?4(venvNames) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getDefaultEnvironment?4() eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getEnvironmentEntries?4() eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvDirectory?4(venvName) +eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvExecPath?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvInterpreter?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvNames?4() eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvNamesForVariant?4(variant) +eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.isCondaEnvironment?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.isGlobalEnvironment?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.isUnique?4(venvName) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.removeVirtualEnvs?4(venvNames) -eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.renameVirtualEnv?4(oldVenvName, venvName, venvDirectory, venvInterpreter, venvVariant, isGlobal) -eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.setVirtualEnv?4(venvName, venvDirectory, venvInterpreter, venvVariant, isGlobal) +eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.renameVirtualEnv?4(oldVenvName, venvName, venvDirectory, venvInterpreter, venvVariant, isGlobal, isConda, execPath) +eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.setVirtualEnv?4(venvName, venvDirectory, venvInterpreter, venvVariant, isGlobal, isConda, execPath) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.showVirtualenvManagerDialog?4(modal=False) eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.shutdown?4() eric6.VirtualEnv.VirtualenvManager.VirtualenvManager?1(parent=None) +eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.ExecPathRole?7 +eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.IsCondaRole?7 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.IsGlobalRole?7 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.PythonVariantRole?7 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.on_addButton_clicked?4() @@ -12588,12 +12603,21 @@ eric6.cleanupSource.main?4(argv) eric6.compileUiFiles.compileUiFiles?4() eric6.compileUiFiles.main?4(argv) +eric6.create_windows_links.PythonMarkers?7 +eric6.create_windows_links.createWindowsShortcut?4(linkPath, targetPath, iconPath) +eric6.create_windows_links.getWinregEntry?4(name, path) +eric6.create_windows_links.includePythonVariant?7 +eric6.create_windows_links.main?4(argv) +eric6.create_windows_links.windowsDesktopEntries?4() +eric6.create_windows_links.windowsDesktopNames?4() +eric6.create_windows_links.windowsProgramsEntry?4() eric6.eric6.args?7 eric6.eric6.excepthook?4(excType, excValue, tracebackobj) eric6.eric6.handleSingleApplication?4(ddindex) eric6.eric6.inMainLoop?7 eric6.eric6.main?4() eric6.eric6.mainWindow?7 +eric6.eric6.originalPathString?7 eric6.eric6.restartArgs?7 eric6.eric6.restartArgsList?7 eric6.eric6.splash?7 @@ -12634,6 +12658,7 @@ eric6.eric6_re.main?4() eric6.eric6_shell.createMainWidget?4(argv) eric6.eric6_shell.main?4() +eric6.eric6_shell.originalPathString?7 eric6.eric6_snap.createMainWidget?4(argv) eric6.eric6_snap.main?4() eric6.eric6_sqlbrowser.createMainWidget?4(argv)
--- a/APIs/Python3/eric6.bas Thu Nov 01 11:48:02 2018 +0100 +++ b/APIs/Python3/eric6.bas Sat Dec 01 11:44:34 2018 +0100 @@ -943,6 +943,7 @@ UMLGraphicsView E5GraphicsView UMLItem QGraphicsRectItem UMLSceneSizeDialog QDialog Ui_UMLSceneSizeDialog +UicCompilerOptionsDialog QDialog Ui_UicCompilerOptionsDialog Uid int UniqueNamespace peg.Namespace UnittestDialog QWidget Ui_UnittestDialog
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DTDs/Project-6.3.dtd Sat Dec 01 11:44:34 2018 +0100 @@ -0,0 +1,185 @@ +<!-- This is the DTD for eric's project file version 6.3 --> + +<!-- This is a copy of the Basic DTD --> +<!ELEMENT int (#PCDATA)> +<!ELEMENT long (#PCDATA)> +<!ELEMENT float (#PCDATA)> +<!ELEMENT complex (#PCDATA)> +<!ELEMENT bool (#PCDATA)> +<!ELEMENT string (#PCDATA)> +<!ELEMENT bytes (#PCDATA)> +<!ELEMENT bytearray (#PCDATA)> +<!ELEMENT none EMPTY> + +<!ELEMENT pickle (#PCDATA)> +<!ATTLIST pickle + method CDATA #REQUIRED + encoding CDATA #REQUIRED> + +<!ELEMENT key (int | long | float | complex | string | bytes)> +<!ELEMENT value (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)> + +<!ELEMENT dict (key, value)*> + +<!ELEMENT tuple (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)*> + +<!ELEMENT list (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)*> + +<!ELEMENT set (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)*> + +<!ELEMENT frozenset (int | long | float | complex | bool | string | bytes | + bytearray | none | dict | tuple | list | set | frozenset | pickle)*> +<!-- End of the Basic DTD --> + +<!ELEMENT ProgLanguage (#PCDATA)> +<!ATTLIST ProgLanguage + mixed CDATA #REQUIRED> + +<!ELEMENT ProjectType (#PCDATA)> + +<!ELEMENT Description (#PCDATA)> + +<!ELEMENT Version (#PCDATA)> + +<!ELEMENT Author (#PCDATA)> + +<!ELEMENT Email (#PCDATA)> + +<!ELEMENT TranslationPattern (#PCDATA)> + +<!ELEMENT TranslationsBinPath (#PCDATA)> + +<!ELEMENT Source (#PCDATA)> + +<!ELEMENT Sources (Source*)> + +<!ELEMENT Form (#PCDATA)> + +<!ELEMENT Forms (Form*)> + +<!ELEMENT Translation (#PCDATA)> + +<!ELEMENT Translations (Translation*)> + +<!ELEMENT TranslationException (#PCDATA)> + +<!ELEMENT TranslationExceptions (TranslationException*)> + +<!ELEMENT Resource (#PCDATA)> + +<!ELEMENT Resources (Resource*)> + +<!ELEMENT Interface (#PCDATA)> + +<!ELEMENT Interfaces (Interface*)> + +<!ELEMENT Protocol (#PCDATA)> + +<!ELEMENT Protocols (Protocol*)> + +<!ELEMENT Other (#PCDATA)> + +<!ELEMENT Others (Other*)> + +<!ELEMENT MainScript (#PCDATA)> + +<!ELEMENT VcsType (#PCDATA)> +<!ELEMENT VcsOptions (dict)> +<!ELEMENT VcsOtherData (dict)> + +<!ELEMENT Vcs (VcsType?, + VcsOptions?, + VcsOtherData?)> + +<!ELEMENT FiletypeAssociation EMPTY> +<!ATTLIST FiletypeAssociation + pattern CDATA #REQUIRED + type CDATA #REQUIRED> + +<!ELEMENT FiletypeAssociations (FiletypeAssociation*)> + +<!ELEMENT LexerAssociation EMPTY> +<!ATTLIST LexerAssociation + pattern CDATA #REQUIRED + lexer CDATA #REQUIRED> + +<!ELEMENT LexerAssociations (LexerAssociation*)> + +<!ELEMENT MakeParameters (dict)> + +<!ELEMENT Make (MakeParameters?)> + +<!ELEMENT IdlCompiler (IdlCompilerParameters?)> + +<!ELEMENT UicCompiler (UicCompilerParameters?)> + +<!ELEMENT ProjectTypeSpecificData (dict)> + +<!ELEMENT ProjectTypeSpecific (ProjectTypeSpecific?)> + +<!ELEMENT DocumentationParams (dict)> + +<!ELEMENT Documentation (DocumentationParams?)> + +<!ELEMENT PackagersParams (dict)> + +<!ELEMENT Packagers (PackagersParams?)> + +<!ELEMENT CheckersParams (dict)> + +<!ELEMENT Checkers (CheckersParams?)> + +<!ELEMENT OtherToolsParams (dict)> + +<!ELEMENT OtherTools (OtherToolsParams?)> + +<!ELEMENT Language (#PCDATA)> + +<!ELEMENT ProjectWordList (#PCDATA)> + +<!ELEMENT ProjectExcludeList (#PCDATA)> + +<!ELEMENT Hash (#PCDATA)> + +<!ELEMENT Eol EMPTY> +<!ATTLIST Eol + index CDATA #REQUIRED> + +<!ELEMENT Project (Language, + ProjectWordList?, + ProjectExcludeList?, + Hash, + ProgLanguage, + ProjectType, + Description?, + Version?, + Author?, + Email?, + TranslationPattern?, + TranslationsBinPath?, + Eol?, + Sources, + Forms, + Translations, + TranslationExceptions?, + Resources, + Interfaces, + Others, + MainScript?, + Vcs, + FiletypeAssociations, + LexerAssociations?, + Make?, + IdlCompiler?, + UicCompiler?, + ProjectTypeSpecific?, + Documentation?, + Packagers?, + Checkers?, + OtherTools?)> +<!ATTLIST Project + version CDATA #REQUIRED>
--- a/DebugClients/Python/DebugClientBase.py Thu Nov 01 11:48:02 2018 +0100 +++ b/DebugClients/Python/DebugClientBase.py Sat Dec 01 11:44:34 2018 +0100 @@ -1063,10 +1063,11 @@ @param disablePolling flag indicating to enter an event loop with polling disabled (boolean) """ - self.eventExit = None + self.eventExit = False self.pollingDisabled = disablePolling + selectErrors = 0 - while self.eventExit is None: + while not self.eventExit: wrdy = [] if self.writestream.nWriteErrors > self.writestream.maxtries: @@ -1081,9 +1082,17 @@ try: rrdy, wrdy, xrdy = select.select([self.readstream], wrdy, []) except (select.error, KeyboardInterrupt, socket.error): - # just carry on - continue - + selectErrors += 1 + if selectErrors <= 10: # arbitrarily selected + # just carry on + continue + else: + # give up for too many errors + break + + # reset the select error counter + selectErrors = 0 + if self.readstream in rrdy: error = self.readReady(self.readstream) if error: @@ -1095,7 +1104,7 @@ if self.errorstream in wrdy: self.writeReady(self.errorstream) - self.eventExit = None + self.eventExit = False self.pollingDisabled = False def eventPoll(self):
--- a/Debugger/DebugServer.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Debugger/DebugServer.py Sat Dec 01 11:44:34 2018 +0100 @@ -81,8 +81,9 @@ signaled a syntax error in a watch expression @signal clientRawInput(prompt, echo) emitted after a raw input request was received - @signal clientBanner(banner) emitted after the client banner was received - @signal clientCapabilities(int capabilities, string cltype) emitted after + @signal clientBanner(version, platform, dbgclient, venvname) emitted after + the client banner data was received + @signal clientCapabilities(capabilities, cltype, venvname) emitted after the clients capabilities were received @signal clientCompletionList(completionList, text) emitted after the client the commandline completion list and the reworked searchstring was @@ -137,8 +138,8 @@ clientBreakConditionError = pyqtSignal(str, int) clientWatchConditionError = pyqtSignal(str) clientRawInput = pyqtSignal(str, bool) - clientBanner = pyqtSignal(str, str, str) - clientCapabilities = pyqtSignal(int, str) + clientBanner = pyqtSignal(str, str, str, str) + clientCapabilities = pyqtSignal(int, str, str) clientCompletionList = pyqtSignal(list, str) clientInterpreterChanged = pyqtSignal(str) utPrepared = pyqtSignal(int, str, str) @@ -154,15 +155,20 @@ callTraceInfo = pyqtSignal(bool, str, str, str, str, str, str) appendStdout = pyqtSignal(str) - def __init__(self, preventPassiveDebugging=False): + def __init__(self, originalPathString, preventPassiveDebugging=False): """ Constructor + @param originalPathString original PATH environment variable + @type str @param preventPassiveDebugging flag overriding the PassiveDbgEnabled - setting (boolean) + setting + @type bool """ super(DebugServer, self).__init__() + self.__originalPathString = originalPathString + self.__debuggerInterfaces = {} # the interface name is the key, a function to get the # registration data is the value @@ -498,15 +504,18 @@ if not project.isDebugPropertiesLoaded(): self.clientProcess, isNetworked, clientInterpreter = \ self.debuggerInterface.startRemote( - self.serverPort(), runInConsole, venvName) + self.serverPort(), runInConsole, venvName, + self.__originalPathString) else: self.clientProcess, isNetworked, clientInterpreter = \ self.debuggerInterface.startRemoteForProject( - self.serverPort(), runInConsole, venvName) + self.serverPort(), runInConsole, venvName, + self.__originalPathString) else: self.clientProcess, isNetworked, clientInterpreter = \ self.debuggerInterface.startRemote( - self.serverPort(), runInConsole, venvName) + self.serverPort(), runInConsole, venvName, + self.__originalPathString) if self.clientProcess: self.clientProcess.readyReadStandardError.connect( @@ -1541,26 +1550,35 @@ """ self.clientRawInput.emit(prompt, echo) - def signalClientBanner(self, version, platform, debugClient): + def signalClientBanner(self, version, platform, debugClient, venvName): """ Public method to process the client banner info. - @param version interpreter version info (string) - @param platform hostname of the client (string) - @param debugClient additional debugger type info (string) + @param version interpreter version info + @type str + @param platform hostname of the client + @type str + @param debugClient additional debugger type info + @type str + @param venvName name of the virtual environment + @type str """ - self.clientBanner.emit(version, platform, debugClient) - - def signalClientCapabilities(self, capabilities, clientType): + self.clientBanner.emit(version, platform, debugClient, venvName) + + def signalClientCapabilities(self, capabilities, clientType, venvName): """ Public method to process the client capabilities info. - @param capabilities bitmaks with the client capabilities (integer) - @param clientType type of the debug client (string) + @param capabilities bitmaks with the client capabilities + @type int + @param clientType type of the debug client + @type str + @param venvName name of the virtual environment + @type str """ try: self.__debuggerInterfaceRegistry[clientType][0] = capabilities - self.clientCapabilities.emit(capabilities, clientType) + self.clientCapabilities.emit(capabilities, clientType, venvName) except KeyError: # ignore silently pass
--- a/Debugger/DebuggerInterfaceNone.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Debugger/DebuggerInterfaceNone.py Sat Dec 01 11:44:34 2018 +0100 @@ -38,7 +38,7 @@ # set default values for capabilities of clients self.clientCapabilities = ClientDefaultCapabilities - def startRemote(self, port, runInConsole, venvName): + def startRemote(self, port, runInConsole, venvName, originalPathString): """ Public method to start a remote Python interpreter. @@ -49,13 +49,16 @@ @type bool @param venvName name of the virtual environment to be used @type str + @param originalPathString original PATH environment variable + @type str @return client process object, a flag to indicate a network connection and the name of the interpreter in case of a local execution @rtype tuple of (QProcess, bool, str) """ return None, True, "" - def startRemoteForProject(self, port, runInConsole, venvName): + def startRemoteForProject(self, port, runInConsole, venvName, + originalPathString): """ Public method to start a remote Python interpreter for a project. @@ -66,6 +69,8 @@ @type bool @param venvName name of the virtual environment to be used @type str + @param originalPathString original PATH environment variable + @type str @return client process object, a flag to indicate a network connection and the name of the interpreter in case of a local execution @rtype tuple of (QProcess, bool, str)
--- a/Debugger/DebuggerInterfacePython.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Debugger/DebuggerInterfacePython.py Sat Dec 01 11:44:34 2018 +0100 @@ -11,6 +11,7 @@ import sys import os +import logging from PyQt5.QtCore import QObject, QTextCodec, QProcess, QProcessEnvironment, \ QTimer @@ -55,6 +56,7 @@ self.passive = passive self.process = None self.__variant = pythonVariant + self.__startedVenv = "" self.qsock = None self.queue = [] @@ -123,16 +125,14 @@ for key, value in list(environment.items()): env.insert(key, value) proc.setProcessEnvironment(env) - args = [] - for arg in arguments: - args.append(arg) + args = arguments[:] proc.start(program, args) if not proc.waitForStarted(10000): proc = None return proc - def startRemote(self, port, runInConsole, venvName): + def startRemote(self, port, runInConsole, venvName, originalPathString): """ Public method to start a remote Python interpreter. @@ -143,17 +143,22 @@ @type bool @param venvName name of the virtual environment to be used @type str + @param originalPathString original PATH environment variable + @type str @return client process object, a flag to indicate a network connection and the name of the interpreter in case of a local execution @rtype tuple of (QProcess, bool, str) """ + global origPathEnv + if not venvName: if self.__variant == "Python2": venvName = Preferences.getDebugger("Python2VirtualEnv") else: venvName = Preferences.getDebugger("Python3VirtualEnv") - interpreter = e5App().getObject("VirtualEnvManager")\ - .getVirtualenvInterpreter(venvName) + venvManager = e5App().getObject("VirtualEnvManager") + interpreter = venvManager.getVirtualenvInterpreter(venvName) + execPath = venvManager.getVirtualenvExecPath(venvName) if interpreter == "" and \ int(self.__variant[-1]) == sys.version_info[0]: # use the interpreter used to run eric for identical variants @@ -233,6 +238,8 @@ clientEnv = {} else: clientEnv = os.environ.copy() + if originalPathString: + clientEnv["PATH"] = originalPathString envlist = Utilities.parseEnvironmentString( Preferences.getDebugger("DebugEnvironment")) for el in envlist: @@ -243,6 +250,12 @@ clientEnv[str(key)] = str(value) except ValueError: pass + if execPath: + if "PATH" in clientEnv: + clientEnv["PATH"] = os.pathsep.join( + [execPath, clientEnv["PATH"]]) + else: + clientEnv["PATH"] = execPath ipaddr = self.debugServer.getHostAddress(True) if runInConsole or Preferences.getDebugger("ConsoleDbgEnabled"): @@ -267,14 +280,19 @@ [debugClient, noencoding, str(port), redirect, ipaddr], clientEnv) if process is None: + self.__startedVenv = "" E5MessageBox.critical( None, self.tr("Start Debugger"), self.tr( """<p>The debugger backend could not be started.</p>""")) + else: + self.__startedVenv = venvName + return process, self.__isNetworked, interpreter - def startRemoteForProject(self, port, runInConsole, venvName): + def startRemoteForProject(self, port, runInConsole, venvName, + originalPathString): """ Public method to start a remote Python interpreter for a project. @@ -285,25 +303,35 @@ @type bool @param venvName name of the virtual environment to be used @type str + @param originalPathString original PATH environment variable + @type str @return client process object, a flag to indicate a network connection and the name of the interpreter in case of a local execution @rtype tuple of (QProcess, bool, str) """ + global origPathEnv + project = e5App().getObject("Project") if not project.isDebugPropertiesLoaded(): return None, self.__isNetworked, "" # start debugger with project specific settings + debugClient = project.getDebugProperty("DEBUGCLIENT") if not venvName: venvName = project.getDebugProperty("VIRTUALENV") - debugClient = project.getDebugProperty("DEBUGCLIENT") + if not venvName: + if project.getProjectLanguage() == "Python2": + venvName = Preferences.getDebugger("Python2VirtualEnv") + elif project.getProjectLanguage() == "Python3": + venvName = Preferences.getDebugger("Python3VirtualEnv") redirect = str(project.getDebugProperty("REDIRECT")) noencoding = \ project.getDebugProperty("NOENCODING") and '--no-encoding' or '' - interpreter = e5App().getObject("VirtualEnvManager")\ - .getVirtualenvInterpreter(venvName) + venvManager = e5App().getObject("VirtualEnvManager") + interpreter = venvManager.getVirtualenvInterpreter(venvName) + execPath = venvManager.getVirtualenvExecPath(venvName) if interpreter == "" and \ project.getProjectLanguage().startswith("Python") and \ sys.version_info[0] == int(project.getProjectLanguage()[-1]): @@ -355,6 +383,8 @@ clientEnv = {} else: clientEnv = os.environ.copy() + if originalPathString: + clientEnv["PATH"] = originalPathString envlist = Utilities.parseEnvironmentString( project.getDebugProperty("ENVIRONMENTSTRING")) for el in envlist: @@ -365,6 +395,12 @@ clientEnv[str(key)] = str(value) except ValueError: pass + if execPath: + if "PATH" in clientEnv: + clientEnv["PATH"] = os.pathsep.join( + [execPath, clientEnv["PATH"]]) + else: + clientEnv["PATH"] = execPath ipaddr = self.debugServer.getHostAddress(True) if runInConsole or project.getDebugProperty("CONSOLEDEBUGGER"): @@ -390,11 +426,15 @@ [debugClient, noencoding, str(port), redirect, ipaddr], clientEnv) if process is None: + self.__startedVenv = "" E5MessageBox.critical( None, self.tr("Start Debugger"), self.tr( """<p>The debugger backend could not be started.</p>""")) + else: + self.__startedVenv = venvName + return process, self.__isNetworked, interpreter def getClientCapabilities(self): @@ -910,6 +950,7 @@ else: line = bytes(qs).decode() + logging.debug("<Debug-Server> %s", line) ## print("Server: ", line) ##debug self.__handleJsonCommand(line) @@ -996,13 +1037,18 @@ elif method == "ResponseCapabilities": self.clientCapabilities = params["capabilities"] self.debugServer.signalClientCapabilities( - params["capabilities"], params["clientType"]) + params["capabilities"], + params["clientType"], + self.__startedVenv, + ) elif method == "ResponseBanner": self.debugServer.signalClientBanner( params["version"], params["platform"], - params["dbgclient"]) + params["dbgclient"], + self.__startedVenv, + ) elif method == "ResponseOK": self.debugServer.signalClientStatement(False)
--- a/Documentation/Help/source.qhp Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Help/source.qhp Sat Dec 01 11:44:34 2018 +0100 @@ -997,6 +997,7 @@ <section title="eric6.Project.QuickFindFileDialog" ref="eric6.Project.QuickFindFileDialog.html" /> <section title="eric6.Project.SpellingPropertiesDialog" ref="eric6.Project.SpellingPropertiesDialog.html" /> <section title="eric6.Project.TranslationPropertiesDialog" ref="eric6.Project.TranslationPropertiesDialog.html" /> + <section title="eric6.Project.UicCompilerOptionsDialog" ref="eric6.Project.UicCompilerOptionsDialog.html" /> <section title="eric6.Project.UicLoadUi" ref="eric6.Project.UicLoadUi.html" /> <section title="eric6.Project.UserPropertiesDialog" ref="eric6.Project.UserPropertiesDialog.html" /> </section> @@ -1477,6 +1478,7 @@ </section> <section title="eric6.cleanupSource" ref="eric6.cleanupSource.html" /> <section title="eric6.compileUiFiles" ref="eric6.compileUiFiles.html" /> + <section title="eric6.create_windows_links" ref="eric6.create_windows_links.html" /> <section title="eric6.eric6" ref="eric6.eric6.html" /> <section title="eric6.eric6_api" ref="eric6.eric6_api.html" /> <section title="eric6.eric6_browser" ref="eric6.eric6_browser.html" /> @@ -3513,6 +3515,7 @@ <keyword name="CreateDialogCodeDialog.__mapType" id="CreateDialogCodeDialog.__mapType" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__mapType" /> <keyword name="CreateDialogCodeDialog.__objectName" id="CreateDialogCodeDialog.__objectName" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__objectName" /> <keyword name="CreateDialogCodeDialog.__objectNameExternal" id="CreateDialogCodeDialog.__objectNameExternal" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__objectNameExternal" /> + <keyword name="CreateDialogCodeDialog.__runUicLoadUi" id="CreateDialogCodeDialog.__runUicLoadUi" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__runUicLoadUi" /> <keyword name="CreateDialogCodeDialog.__signatures" id="CreateDialogCodeDialog.__signatures" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__signatures" /> <keyword name="CreateDialogCodeDialog.__updateSlotsModel" id="CreateDialogCodeDialog.__updateSlotsModel" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__updateSlotsModel" /> <keyword name="CreateDialogCodeDialog.__updateSlotsModelExternal" id="CreateDialogCodeDialog.__updateSlotsModelExternal" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__updateSlotsModelExternal" /> @@ -12728,6 +12731,7 @@ <keyword name="Project.handlePreferencesChanged" id="Project.handlePreferencesChanged" ref="eric6.Project.Project.html#Project.handlePreferencesChanged" /> <keyword name="Project.hasDefaultIdlCompilerParameters" id="Project.hasDefaultIdlCompilerParameters" ref="eric6.Project.Project.html#Project.hasDefaultIdlCompilerParameters" /> <keyword name="Project.hasDefaultMakeParameters" id="Project.hasDefaultMakeParameters" ref="eric6.Project.Project.html#Project.hasDefaultMakeParameters" /> + <keyword name="Project.hasDefaultUicCompilerParameters" id="Project.hasDefaultUicCompilerParameters" ref="eric6.Project.Project.html#Project.hasDefaultUicCompilerParameters" /> <keyword name="Project.hasEntry" id="Project.hasEntry" ref="eric6.Project.Project.html#Project.hasEntry" /> <keyword name="Project.hasProjectType" id="Project.hasProjectType" ref="eric6.Project.Project.html#Project.hasProjectType" /> <keyword name="Project.initActions" id="Project.initActions" ref="eric6.Project.Project.html#Project.initActions" /> @@ -12924,7 +12928,9 @@ <keyword name="ProjectFormsBrowser.__compileSelectedForms" id="ProjectFormsBrowser.__compileSelectedForms" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__compileSelectedForms" /> <keyword name="ProjectFormsBrowser.__compileUI" id="ProjectFormsBrowser.__compileUI" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__compileUI" /> <keyword name="ProjectFormsBrowser.__compileUIDone" id="ProjectFormsBrowser.__compileUIDone" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__compileUIDone" /> + <keyword name="ProjectFormsBrowser.__configureUicCompiler" id="ProjectFormsBrowser.__configureUicCompiler" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__configureUicCompiler" /> <keyword name="ProjectFormsBrowser.__deleteFile" id="ProjectFormsBrowser.__deleteFile" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__deleteFile" /> + <keyword name="ProjectFormsBrowser.__determineUiCompiler" id="ProjectFormsBrowser.__determineUiCompiler" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__determineUiCompiler" /> <keyword name="ProjectFormsBrowser.__generateDialogCode" id="ProjectFormsBrowser.__generateDialogCode" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__generateDialogCode" /> <keyword name="ProjectFormsBrowser.__newForm" id="ProjectFormsBrowser.__newForm" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__newForm" /> <keyword name="ProjectFormsBrowser.__newUiForm" id="ProjectFormsBrowser.__newUiForm" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__newUiForm" /> @@ -12932,6 +12938,7 @@ <keyword name="ProjectFormsBrowser.__openFileInEditor" id="ProjectFormsBrowser.__openFileInEditor" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__openFileInEditor" /> <keyword name="ProjectFormsBrowser.__readStderr" id="ProjectFormsBrowser.__readStderr" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__readStderr" /> <keyword name="ProjectFormsBrowser.__readStdout" id="ProjectFormsBrowser.__readStdout" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__readStdout" /> + <keyword name="ProjectFormsBrowser.__resetUiCompiler" id="ProjectFormsBrowser.__resetUiCompiler" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__resetUiCompiler" /> <keyword name="ProjectFormsBrowser.__showContextMenu" id="ProjectFormsBrowser.__showContextMenu" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__showContextMenu" /> <keyword name="ProjectFormsBrowser.__showContextMenuBack" id="ProjectFormsBrowser.__showContextMenuBack" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__showContextMenuBack" /> <keyword name="ProjectFormsBrowser.__showContextMenuDir" id="ProjectFormsBrowser.__showContextMenuDir" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.__showContextMenuDir" /> @@ -12942,6 +12949,7 @@ <keyword name="ProjectFormsBrowser._initHookMethods" id="ProjectFormsBrowser._initHookMethods" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser._initHookMethods" /> <keyword name="ProjectFormsBrowser._openItem" id="ProjectFormsBrowser._openItem" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser._openItem" /> <keyword name="ProjectFormsBrowser.compileChangedForms" id="ProjectFormsBrowser.compileChangedForms" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.compileChangedForms" /> + <keyword name="ProjectFormsBrowser.getUiCompiler" id="ProjectFormsBrowser.getUiCompiler" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.getUiCompiler" /> <keyword name="ProjectFormsBrowser.handlePreferencesChanged" id="ProjectFormsBrowser.handlePreferencesChanged" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.handlePreferencesChanged" /> <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsGit.ProjectHelper.html" /> <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html" /> @@ -14059,6 +14067,7 @@ <keyword name="SearchWidget.__findNextPrev" id="SearchWidget.__findNextPrev" ref="eric6.Helpviewer.SearchWidget.html#SearchWidget.__findNextPrev" /> <keyword name="SearchWidget.__findNextPrev" id="SearchWidget.__findNextPrev" ref="eric6.WebBrowser.SearchWidget.html#SearchWidget.__findNextPrev" /> <keyword name="SearchWidget.__findNextPrevCallback" id="SearchWidget.__findNextPrevCallback" ref="eric6.WebBrowser.SearchWidget.html#SearchWidget.__findNextPrevCallback" /> + <keyword name="SearchWidget.__resetSearch" id="SearchWidget.__resetSearch" ref="eric6.WebBrowser.SearchWidget.html#SearchWidget.__resetSearch" /> <keyword name="SearchWidget.__searchTextEdited" id="SearchWidget.__searchTextEdited" ref="eric6.Helpviewer.SearchWidget.html#SearchWidget.__searchTextEdited" /> <keyword name="SearchWidget.__searchTextEdited" id="SearchWidget.__searchTextEdited" ref="eric6.WebBrowser.SearchWidget.html#SearchWidget.__searchTextEdited" /> <keyword name="SearchWidget.__setFindtextComboBackground" id="SearchWidget.__setFindtextComboBackground" ref="eric6.Helpviewer.SearchWidget.html#SearchWidget.__setFindtextComboBackground" /> @@ -14278,9 +14287,9 @@ <keyword name="Shell.__isCursorOnLastLine" id="Shell.__isCursorOnLastLine" ref="eric6.QScintilla.Shell.html#Shell.__isCursorOnLastLine" /> <keyword name="Shell.__isHistoryIndexValid" id="Shell.__isHistoryIndexValid" ref="eric6.QScintilla.Shell.html#Shell.__isHistoryIndexValid" /> <keyword name="Shell.__middleMouseButton" id="Shell.__middleMouseButton" ref="eric6.QScintilla.Shell.html#Shell.__middleMouseButton" /> + <keyword name="Shell.__projectClosed" id="Shell.__projectClosed" ref="eric6.QScintilla.Shell.html#Shell.__projectClosed" /> + <keyword name="Shell.__projectOpened" id="Shell.__projectOpened" ref="eric6.QScintilla.Shell.html#Shell.__projectOpened" /> <keyword name="Shell.__raw_input" id="Shell.__raw_input" ref="eric6.QScintilla.Shell.html#Shell.__raw_input" /> - <keyword name="Shell.__reset" id="Shell.__reset" ref="eric6.QScintilla.Shell.html#Shell.__reset" /> - <keyword name="Shell.__resetAndClear" id="Shell.__resetAndClear" ref="eric6.QScintilla.Shell.html#Shell.__resetAndClear" /> <keyword name="Shell.__resetIncrementalHistorySearch" id="Shell.__resetIncrementalHistorySearch" ref="eric6.QScintilla.Shell.html#Shell.__resetIncrementalHistorySearch" /> <keyword name="Shell.__resizeLinenoMargin" id="Shell.__resizeLinenoMargin" ref="eric6.QScintilla.Shell.html#Shell.__resizeLinenoMargin" /> <keyword name="Shell.__rsearchHistory" id="Shell.__rsearchHistory" ref="eric6.QScintilla.Shell.html#Shell.__rsearchHistory" /> @@ -14294,7 +14303,8 @@ <keyword name="Shell.__setMonospaced" id="Shell.__setMonospaced" ref="eric6.QScintilla.Shell.html#Shell.__setMonospaced" /> <keyword name="Shell.__setTextDisplay" id="Shell.__setTextDisplay" ref="eric6.QScintilla.Shell.html#Shell.__setTextDisplay" /> <keyword name="Shell.__showCompletions" id="Shell.__showCompletions" ref="eric6.QScintilla.Shell.html#Shell.__showCompletions" /> - <keyword name="Shell.__showLanguageMenu" id="Shell.__showLanguageMenu" ref="eric6.QScintilla.Shell.html#Shell.__showLanguageMenu" /> + <keyword name="Shell.__showStartMenu" id="Shell.__showStartMenu" ref="eric6.QScintilla.Shell.html#Shell.__showStartMenu" /> + <keyword name="Shell.__showVenvName" id="Shell.__showVenvName" ref="eric6.QScintilla.Shell.html#Shell.__showVenvName" /> <keyword name="Shell.__startDebugClient" id="Shell.__startDebugClient" ref="eric6.QScintilla.Shell.html#Shell.__startDebugClient" /> <keyword name="Shell.__useHistory" id="Shell.__useHistory" ref="eric6.QScintilla.Shell.html#Shell.__useHistory" /> <keyword name="Shell.__write" id="Shell.__write" ref="eric6.QScintilla.Shell.html#Shell.__write" /> @@ -14308,6 +14318,8 @@ <keyword name="Shell.clearHistory" id="Shell.clearHistory" ref="eric6.QScintilla.Shell.html#Shell.clearHistory" /> <keyword name="Shell.closeShell" id="Shell.closeShell" ref="eric6.QScintilla.Shell.html#Shell.closeShell" /> <keyword name="Shell.contextMenuEvent" id="Shell.contextMenuEvent" ref="eric6.QScintilla.Shell.html#Shell.contextMenuEvent" /> + <keyword name="Shell.doClearRestart" id="Shell.doClearRestart" ref="eric6.QScintilla.Shell.html#Shell.doClearRestart" /> + <keyword name="Shell.doRestart" id="Shell.doRestart" ref="eric6.QScintilla.Shell.html#Shell.doRestart" /> <keyword name="Shell.dragEnterEvent" id="Shell.dragEnterEvent" ref="eric6.QScintilla.Shell.html#Shell.dragEnterEvent" /> <keyword name="Shell.dragLeaveEvent" id="Shell.dragLeaveEvent" ref="eric6.QScintilla.Shell.html#Shell.dragLeaveEvent" /> <keyword name="Shell.dragMoveEvent" id="Shell.dragMoveEvent" ref="eric6.QScintilla.Shell.html#Shell.dragMoveEvent" /> @@ -14375,15 +14387,14 @@ <keyword name="ShellWindow.__createStatusBar" id="ShellWindow.__createStatusBar" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__createStatusBar" /> <keyword name="ShellWindow.__createToolBars" id="ShellWindow.__createToolBars" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__createToolBars" /> <keyword name="ShellWindow.__createViewActions" id="ShellWindow.__createViewActions" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__createViewActions" /> - <keyword name="ShellWindow.__doClearRestart" id="ShellWindow.__doClearRestart" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__doClearRestart" /> - <keyword name="ShellWindow.__doRestart" id="ShellWindow.__doRestart" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__doRestart" /> <keyword name="ShellWindow.__historyStyleChanged" id="ShellWindow.__historyStyleChanged" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__historyStyleChanged" /> <keyword name="ShellWindow.__newWindow" id="ShellWindow.__newWindow" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__newWindow" /> <keyword name="ShellWindow.__readSettings" id="ShellWindow.__readSettings" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__readSettings" /> <keyword name="ShellWindow.__readShortcut" id="ShellWindow.__readShortcut" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__readShortcut" /> <keyword name="ShellWindow.__showFind" id="ShellWindow.__showFind" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__showFind" /> - <keyword name="ShellWindow.__showLanguageMenu" id="ShellWindow.__showLanguageMenu" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__showLanguageMenu" /> + <keyword name="ShellWindow.__showStartMenu" id="ShellWindow.__showStartMenu" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__showStartMenu" /> <keyword name="ShellWindow.__startShell" id="ShellWindow.__startShell" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__startShell" /> + <keyword name="ShellWindow.__virtualEnvironmentChanged" id="ShellWindow.__virtualEnvironmentChanged" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__virtualEnvironmentChanged" /> <keyword name="ShellWindow.__whatsThis" id="ShellWindow.__whatsThis" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__whatsThis" /> <keyword name="ShellWindow.__writeSettings" id="ShellWindow.__writeSettings" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__writeSettings" /> <keyword name="ShellWindow.__zoom" id="ShellWindow.__zoom" ref="eric6.QScintilla.ShellWindow.html#ShellWindow.__zoom" /> @@ -16435,6 +16446,7 @@ <keyword name="TranslatorWidget.on_clearButton_clicked" id="TranslatorWidget.on_clearButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_clearButton_clicked" /> <keyword name="TranslatorWidget.on_origEdit_textChanged" id="TranslatorWidget.on_origEdit_textChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_origEdit_textChanged" /> <keyword name="TranslatorWidget.on_origLanguageComboBox_currentIndexChanged" id="TranslatorWidget.on_origLanguageComboBox_currentIndexChanged" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_origLanguageComboBox_currentIndexChanged" /> + <keyword name="TranslatorWidget.on_preferencesButton_clicked" id="TranslatorWidget.on_preferencesButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_preferencesButton_clicked" /> <keyword name="TranslatorWidget.on_pronounceOrigButton_clicked" id="TranslatorWidget.on_pronounceOrigButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_pronounceOrigButton_clicked" /> <keyword name="TranslatorWidget.on_pronounceTransButton_clicked" id="TranslatorWidget.on_pronounceTransButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_pronounceTransButton_clicked" /> <keyword name="TranslatorWidget.on_swapButton_clicked" id="TranslatorWidget.on_swapButton_clicked" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html#TranslatorWidget.on_swapButton_clicked" /> @@ -16598,6 +16610,10 @@ <keyword name="UMLSceneSizeDialog (Module)" id="UMLSceneSizeDialog (Module)" ref="eric6.Graphics.UMLSceneSizeDialog.html" /> <keyword name="UMLSceneSizeDialog.getData" id="UMLSceneSizeDialog.getData" ref="eric6.Graphics.UMLSceneSizeDialog.html#UMLSceneSizeDialog.getData" /> <keyword name="UiExtensionPlugins (Package)" id="UiExtensionPlugins (Package)" ref="index-eric6.Plugins.UiExtensionPlugins.html" /> + <keyword name="UicCompilerOptionsDialog" id="UicCompilerOptionsDialog" ref="eric6.Project.UicCompilerOptionsDialog.html#UicCompilerOptionsDialog" /> + <keyword name="UicCompilerOptionsDialog (Constructor)" id="UicCompilerOptionsDialog (Constructor)" ref="eric6.Project.UicCompilerOptionsDialog.html#UicCompilerOptionsDialog.__init__" /> + <keyword name="UicCompilerOptionsDialog (Module)" id="UicCompilerOptionsDialog (Module)" ref="eric6.Project.UicCompilerOptionsDialog.html" /> + <keyword name="UicCompilerOptionsDialog.getData" id="UicCompilerOptionsDialog.getData" ref="eric6.Project.UicCompilerOptionsDialog.html#UicCompilerOptionsDialog.getData" /> <keyword name="UicLoadUi (Module)" id="UicLoadUi (Module)" ref="eric6.Project.UicLoadUi.html" /> <keyword name="Uid" id="Uid" ref="eric6.Utilities.binplistlib.html#Uid" /> <keyword name="Uid.__repr__" id="Uid.__repr__" ref="eric6.Utilities.binplistlib.html#Uid.__repr__" /> @@ -16973,6 +16989,7 @@ <keyword name="UserInterface.getMenu" id="UserInterface.getMenu" ref="eric6.UI.UserInterface.html#UserInterface.getMenu" /> <keyword name="UserInterface.getMenuAction" id="UserInterface.getMenuAction" ref="eric6.UI.UserInterface.html#UserInterface.getMenuAction" /> <keyword name="UserInterface.getMenuBarAction" id="UserInterface.getMenuBarAction" ref="eric6.UI.UserInterface.html#UserInterface.getMenuBarAction" /> + <keyword name="UserInterface.getOriginalPathString" id="UserInterface.getOriginalPathString" ref="eric6.UI.UserInterface.html#UserInterface.getOriginalPathString" /> <keyword name="UserInterface.getToolBarIconSize" id="UserInterface.getToolBarIconSize" ref="eric6.UI.UserInterface.html#UserInterface.getToolBarIconSize" /> <keyword name="UserInterface.getToolbar" id="UserInterface.getToolbar" ref="eric6.UI.UserInterface.html#UserInterface.getToolbar" /> <keyword name="UserInterface.getViewProfile" id="UserInterface.getViewProfile" ref="eric6.UI.UserInterface.html#UserInterface.getViewProfile" /> @@ -17516,6 +17533,7 @@ <keyword name="VirtualenvAddEditDialog (Module)" id="VirtualenvAddEditDialog (Module)" ref="eric6.VirtualEnv.VirtualenvAddEditDialog.html" /> <keyword name="VirtualenvAddEditDialog.__updateOk" id="VirtualenvAddEditDialog.__updateOk" ref="eric6.VirtualEnv.VirtualenvAddEditDialog.html#VirtualenvAddEditDialog.__updateOk" /> <keyword name="VirtualenvAddEditDialog.getData" id="VirtualenvAddEditDialog.getData" ref="eric6.VirtualEnv.VirtualenvAddEditDialog.html#VirtualenvAddEditDialog.getData" /> + <keyword name="VirtualenvAddEditDialog.on_anacondaCheckBox_clicked" id="VirtualenvAddEditDialog.on_anacondaCheckBox_clicked" ref="eric6.VirtualEnv.VirtualenvAddEditDialog.html#VirtualenvAddEditDialog.on_anacondaCheckBox_clicked" /> <keyword name="VirtualenvAddEditDialog.on_globalCheckBox_toggled" id="VirtualenvAddEditDialog.on_globalCheckBox_toggled" ref="eric6.VirtualEnv.VirtualenvAddEditDialog.html#VirtualenvAddEditDialog.on_globalCheckBox_toggled" /> <keyword name="VirtualenvAddEditDialog.on_nameEdit_textChanged" id="VirtualenvAddEditDialog.on_nameEdit_textChanged" ref="eric6.VirtualEnv.VirtualenvAddEditDialog.html#VirtualenvAddEditDialog.on_nameEdit_textChanged" /> <keyword name="VirtualenvAddEditDialog.on_pythonExecPicker_textChanged" id="VirtualenvAddEditDialog.on_pythonExecPicker_textChanged" ref="eric6.VirtualEnv.VirtualenvAddEditDialog.html#VirtualenvAddEditDialog.on_pythonExecPicker_textChanged" /> @@ -17565,9 +17583,11 @@ <keyword name="VirtualenvManager.getDefaultEnvironment" id="VirtualenvManager.getDefaultEnvironment" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getDefaultEnvironment" /> <keyword name="VirtualenvManager.getEnvironmentEntries" id="VirtualenvManager.getEnvironmentEntries" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getEnvironmentEntries" /> <keyword name="VirtualenvManager.getVirtualenvDirectory" id="VirtualenvManager.getVirtualenvDirectory" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvDirectory" /> + <keyword name="VirtualenvManager.getVirtualenvExecPath" id="VirtualenvManager.getVirtualenvExecPath" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvExecPath" /> <keyword name="VirtualenvManager.getVirtualenvInterpreter" id="VirtualenvManager.getVirtualenvInterpreter" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvInterpreter" /> <keyword name="VirtualenvManager.getVirtualenvNames" id="VirtualenvManager.getVirtualenvNames" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvNames" /> <keyword name="VirtualenvManager.getVirtualenvNamesForVariant" id="VirtualenvManager.getVirtualenvNamesForVariant" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.getVirtualenvNamesForVariant" /> + <keyword name="VirtualenvManager.isCondaEnvironment" id="VirtualenvManager.isCondaEnvironment" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.isCondaEnvironment" /> <keyword name="VirtualenvManager.isGlobalEnvironment" id="VirtualenvManager.isGlobalEnvironment" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.isGlobalEnvironment" /> <keyword name="VirtualenvManager.isUnique" id="VirtualenvManager.isUnique" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.isUnique" /> <keyword name="VirtualenvManager.removeVirtualEnvs" id="VirtualenvManager.removeVirtualEnvs" ref="eric6.VirtualEnv.VirtualenvManager.html#VirtualenvManager.removeVirtualEnvs" /> @@ -18724,7 +18744,9 @@ <keyword name="createPyWrapper" id="createPyWrapper" ref="eric6.install.html#createPyWrapper" /> <keyword name="createTranslatorPage" id="createTranslatorPage" ref="eric6.Plugins.PluginTranslator.html#createTranslatorPage" /> <keyword name="createWindowsLinks" id="createWindowsLinks" ref="eric6.install.html#createWindowsLinks" /> + <keyword name="createWindowsShortcut" id="createWindowsShortcut" ref="eric6.create_windows_links.html#createWindowsShortcut" /> <keyword name="createWindowsShortcut" id="createWindowsShortcut" ref="eric6.install.html#createWindowsShortcut" /> + <keyword name="create_windows_links (Module)" id="create_windows_links (Module)" ref="eric6.create_windows_links.html" /> <keyword name="critical" id="critical" ref="eric6.E5Gui.E5MessageBox.html#critical" /> <keyword name="crypto (Package)" id="crypto (Package)" ref="index-eric6.Utilities.crypto.html" /> <keyword name="cursors (Package)" id="cursors (Package)" ref="index-eric6.IconEditor.cursors.html" /> @@ -18988,6 +19010,7 @@ <keyword name="getWebBrowser" id="getWebBrowser" ref="eric6.Preferences.__init__.html#getWebBrowser" /> <keyword name="getWebEngineVersions" id="getWebEngineVersions" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#getWebEngineVersions" /> <keyword name="getWindowsExecutablePath" id="getWindowsExecutablePath" ref="eric6.Utilities.__init__.html#getWindowsExecutablePath" /> + <keyword name="getWinregEntry" id="getWinregEntry" ref="eric6.create_windows_links.html#getWinregEntry" /> <keyword name="getWinregEntry" id="getWinregEntry" ref="eric6.install.html#getWinregEntry" /> <keyword name="getWinregEntry" id="getWinregEntry" ref="eric6.uninstall.html#getWinregEntry" /> <keyword name="get_checks" id="get_checks" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#get_checks" /> @@ -19091,6 +19114,7 @@ <keyword name="main" id="main" ref="eric6.Plugins.WizardPlugins.QRegularExpressionWizard.QRegularExpressionWizardServer.html#main" /> <keyword name="main" id="main" ref="eric6.cleanupSource.html#main" /> <keyword name="main" id="main" ref="eric6.compileUiFiles.html#main" /> + <keyword name="main" id="main" ref="eric6.create_windows_links.html#main" /> <keyword name="main" id="main" ref="eric6.eric6.html#main" /> <keyword name="main" id="main" ref="eric6.eric6_api.html#main" /> <keyword name="main" id="main" ref="eric6.eric6_browser.html#main" /> @@ -19406,9 +19430,12 @@ <keyword name="win32_GetUserName" id="win32_GetUserName" ref="eric6.Utilities.__init__.html#win32_GetUserName" /> <keyword name="win32_Kill" id="win32_Kill" ref="eric6.Utilities.__init__.html#win32_Kill" /> <keyword name="win32_getRealName" id="win32_getRealName" ref="eric6.Utilities.__init__.html#win32_getRealName" /> + <keyword name="windowsDesktopEntries" id="windowsDesktopEntries" ref="eric6.create_windows_links.html#windowsDesktopEntries" /> <keyword name="windowsDesktopEntries" id="windowsDesktopEntries" ref="eric6.install.html#windowsDesktopEntries" /> + <keyword name="windowsDesktopNames" id="windowsDesktopNames" ref="eric6.create_windows_links.html#windowsDesktopNames" /> <keyword name="windowsDesktopNames" id="windowsDesktopNames" ref="eric6.install.html#windowsDesktopNames" /> <keyword name="windowsDesktopNames" id="windowsDesktopNames" ref="eric6.uninstall.html#windowsDesktopNames" /> + <keyword name="windowsProgramsEntry" id="windowsProgramsEntry" ref="eric6.create_windows_links.html#windowsProgramsEntry" /> <keyword name="windowsProgramsEntry" id="windowsProgramsEntry" ref="eric6.install.html#windowsProgramsEntry" /> <keyword name="windowsProgramsEntry" id="windowsProgramsEntry" ref="eric6.uninstall.html#windowsProgramsEntry" /> <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#worker" /> @@ -20208,6 +20235,7 @@ <file>eric6.Project.QuickFindFileDialog.html</file> <file>eric6.Project.SpellingPropertiesDialog.html</file> <file>eric6.Project.TranslationPropertiesDialog.html</file> + <file>eric6.Project.UicCompilerOptionsDialog.html</file> <file>eric6.Project.UicLoadUi.html</file> <file>eric6.Project.UserPropertiesDialog.html</file> <file>eric6.PyUnit.UnittestDialog.html</file> @@ -20573,6 +20601,7 @@ <file>eric6.WebBrowser.ZoomManager.ZoomValuesModel.html</file> <file>eric6.cleanupSource.html</file> <file>eric6.compileUiFiles.html</file> + <file>eric6.create_windows_links.html</file> <file>eric6.eric6.html</file> <file>eric6.eric6_api.html</file> <file>eric6.eric6_browser.html</file>
--- a/Documentation/Source/eric6.Debugger.DebugServer.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.Debugger.DebugServer.html Sat Dec 01 11:44:34 2018 +0100 @@ -54,14 +54,15 @@ emitted after the client reported the call trace data (isCall, fromFile, fromLine, fromFunction, toFile, toLine, toFunction) -</dd><dt>clientBanner(banner)</dt> +</dd><dt>clientBanner(version, platform, dbgclient, venvname)</dt> <dd> -emitted after the client banner was received +emitted after + the client banner data was received </dd><dt>clientBreakConditionError(fn, lineno)</dt> <dd> emitted after the client has signaled a syntax error in a breakpoint condition -</dd><dt>clientCapabilities(int capabilities, string cltype)</dt> +</dd><dt>clientCapabilities(capabilities, cltype, venvname)</dt> <dd> emitted after the clients capabilities were received @@ -524,14 +525,17 @@ </table> <a NAME="DebugServer.__init__" ID="DebugServer.__init__"></a> <h4>DebugServer (Constructor)</h4> -<b>DebugServer</b>(<i>preventPassiveDebugging=False</i>) +<b>DebugServer</b>(<i>originalPathString, preventPassiveDebugging=False</i>) <p> Constructor </p><dl> -<dt><i>preventPassiveDebugging</i></dt> +<dt><i>originalPathString</i> (str)</dt> +<dd> +original PATH environment variable +</dd><dt><i>preventPassiveDebugging</i> (bool)</dt> <dd> flag overriding the PassiveDbgEnabled - setting (boolean) + setting </dd> </dl><a NAME="DebugServer.__addBreakPoints" ID="DebugServer.__addBreakPoints"></a> <h4>DebugServer.__addBreakPoints</h4> @@ -1611,19 +1615,22 @@ the debug client. (Needed on Win OS) </p><a NAME="DebugServer.signalClientBanner" ID="DebugServer.signalClientBanner"></a> <h4>DebugServer.signalClientBanner</h4> -<b>signalClientBanner</b>(<i>version, platform, debugClient</i>) +<b>signalClientBanner</b>(<i>version, platform, debugClient, venvName</i>) <p> Public method to process the client banner info. </p><dl> -<dt><i>version</i></dt> +<dt><i>version</i> (str)</dt> <dd> -interpreter version info (string) -</dd><dt><i>platform</i></dt> +interpreter version info +</dd><dt><i>platform</i> (str)</dt> <dd> -hostname of the client (string) -</dd><dt><i>debugClient</i></dt> +hostname of the client +</dd><dt><i>debugClient</i> (str)</dt> <dd> -additional debugger type info (string) +additional debugger type info +</dd><dt><i>venvName</i> (str)</dt> +<dd> +name of the virtual environment </dd> </dl><a NAME="DebugServer.signalClientBreakConditionError" ID="DebugServer.signalClientBreakConditionError"></a> <h4>DebugServer.signalClientBreakConditionError</h4> @@ -1668,16 +1675,19 @@ </dd> </dl><a NAME="DebugServer.signalClientCapabilities" ID="DebugServer.signalClientCapabilities"></a> <h4>DebugServer.signalClientCapabilities</h4> -<b>signalClientCapabilities</b>(<i>capabilities, clientType</i>) +<b>signalClientCapabilities</b>(<i>capabilities, clientType, venvName</i>) <p> Public method to process the client capabilities info. </p><dl> -<dt><i>capabilities</i></dt> +<dt><i>capabilities</i> (int)</dt> +<dd> +bitmaks with the client capabilities +</dd><dt><i>clientType</i> (str)</dt> <dd> -bitmaks with the client capabilities (integer) -</dd><dt><i>clientType</i></dt> +type of the debug client +</dd><dt><i>venvName</i> (str)</dt> <dd> -type of the debug client (string) +name of the virtual environment </dd> </dl><a NAME="DebugServer.signalClientClearBreak" ID="DebugServer.signalClientClearBreak"></a> <h4>DebugServer.signalClientClearBreak</h4>
--- a/Documentation/Source/eric6.Debugger.DebuggerInterfaceNone.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.Debugger.DebuggerInterfaceNone.html Sat Dec 01 11:44:34 2018 +0100 @@ -675,7 +675,7 @@ the debug client. (Needed on Win OS) </p><a NAME="DebuggerInterfaceNone.startRemote" ID="DebuggerInterfaceNone.startRemote"></a> <h4>DebuggerInterfaceNone.startRemote</h4> -<b>startRemote</b>(<i>port, runInConsole, venvName</i>) +<b>startRemote</b>(<i>port, runInConsole, venvName, originalPathString</i>) <p> Public method to start a remote Python interpreter. </p><dl> @@ -689,6 +689,9 @@ </dd><dt><i>venvName</i> (str)</dt> <dd> name of the virtual environment to be used +</dd><dt><i>originalPathString</i> (str)</dt> +<dd> +original PATH environment variable </dd> </dl><dl> <dt>Returns:</dt> @@ -703,7 +706,7 @@ </dd> </dl><a NAME="DebuggerInterfaceNone.startRemoteForProject" ID="DebuggerInterfaceNone.startRemoteForProject"></a> <h4>DebuggerInterfaceNone.startRemoteForProject</h4> -<b>startRemoteForProject</b>(<i>port, runInConsole, venvName</i>) +<b>startRemoteForProject</b>(<i>port, runInConsole, venvName, originalPathString</i>) <p> Public method to start a remote Python interpreter for a project. </p><dl> @@ -717,6 +720,9 @@ </dd><dt><i>venvName</i> (str)</dt> <dd> name of the virtual environment to be used +</dd><dt><i>originalPathString</i> (str)</dt> +<dd> +original PATH environment variable </dd> </dl><dl> <dt>Returns:</dt>
--- a/Documentation/Source/eric6.Debugger.DebuggerInterfacePython.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.Debugger.DebuggerInterfacePython.html Sat Dec 01 11:44:34 2018 +0100 @@ -797,7 +797,7 @@ the debug client. (Needed on Win OS) </p><a NAME="DebuggerInterfacePython.startRemote" ID="DebuggerInterfacePython.startRemote"></a> <h4>DebuggerInterfacePython.startRemote</h4> -<b>startRemote</b>(<i>port, runInConsole, venvName</i>) +<b>startRemote</b>(<i>port, runInConsole, venvName, originalPathString</i>) <p> Public method to start a remote Python interpreter. </p><dl> @@ -811,6 +811,9 @@ </dd><dt><i>venvName</i> (str)</dt> <dd> name of the virtual environment to be used +</dd><dt><i>originalPathString</i> (str)</dt> +<dd> +original PATH environment variable </dd> </dl><dl> <dt>Returns:</dt> @@ -825,7 +828,7 @@ </dd> </dl><a NAME="DebuggerInterfacePython.startRemoteForProject" ID="DebuggerInterfacePython.startRemoteForProject"></a> <h4>DebuggerInterfacePython.startRemoteForProject</h4> -<b>startRemoteForProject</b>(<i>port, runInConsole, venvName</i>) +<b>startRemoteForProject</b>(<i>port, runInConsole, venvName, originalPathString</i>) <p> Public method to start a remote Python interpreter for a project. </p><dl> @@ -839,6 +842,9 @@ </dd><dt><i>venvName</i> (str)</dt> <dd> name of the virtual environment to be used +</dd><dt><i>originalPathString</i> (str)</dt> +<dd> +original PATH environment variable </dd> </dl><dl> <dt>Returns:</dt>
--- a/Documentation/Source/eric6.E5XML.Config.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.E5XML.Config.html Sat Dec 01 11:44:34 2018 +0100 @@ -25,7 +25,7 @@ </p> <h3>Global Attributes</h3> <table> -<tr><td>debuggerPropertiesFileFormatVersion</td></tr><tr><td>dictionariesListFileFormatVersion</td></tr><tr><td>highlightingStylesFileFormatVersion</td></tr><tr><td>multiProjectFileFormatVersion</td></tr><tr><td>pluginRepositoryFileFormatVersion</td></tr><tr><td>projectFileFormatVersion</td></tr><tr><td>projectFileFormatVersionAlt</td></tr><tr><td>projectFileFormatVersionMake</td></tr><tr><td>projectFileFormatVersionProto</td></tr><tr><td>sessionFileFormatVersion</td></tr><tr><td>shortcutsFileFormatVersion</td></tr><tr><td>tasksFileFormatVersion</td></tr><tr><td>templatesFileFormatVersion</td></tr><tr><td>userProjectFileFormatVersion</td></tr> +<tr><td>debuggerPropertiesFileFormatVersion</td></tr><tr><td>dictionariesListFileFormatVersion</td></tr><tr><td>highlightingStylesFileFormatVersion</td></tr><tr><td>multiProjectFileFormatVersion</td></tr><tr><td>pluginRepositoryFileFormatVersion</td></tr><tr><td>projectFileFormatVersion</td></tr><tr><td>projectFileFormatVersionAlt</td></tr><tr><td>projectFileFormatVersionIdl</td></tr><tr><td>projectFileFormatVersionMake</td></tr><tr><td>projectFileFormatVersionProto</td></tr><tr><td>sessionFileFormatVersion</td></tr><tr><td>shortcutsFileFormatVersion</td></tr><tr><td>tasksFileFormatVersion</td></tr><tr><td>templatesFileFormatVersion</td></tr><tr><td>userProjectFileFormatVersion</td></tr> </table> <h3>Classes</h3> <table>
--- a/Documentation/Source/eric6.PluginManager.PluginRepositoryDialog.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.PluginManager.PluginRepositoryDialog.html Sat Dec 01 11:44:34 2018 +0100 @@ -82,13 +82,16 @@ </table> <a NAME="PluginRepositoryDialog.__init__" ID="PluginRepositoryDialog.__init__"></a> <h4>PluginRepositoryDialog (Constructor)</h4> -<b>PluginRepositoryDialog</b>(<i>parent=None</i>) +<b>PluginRepositoryDialog</b>(<i>pluginManager, parent=None</i>) <p> Constructor </p><dl> -<dt><i>parent</i></dt> +<dt><i>pluginManager</i> (PluginManager)</dt> <dd> -reference to the parent widget (QWidget) +reference to the plugin manager object +</dd><dt><i>parent</i> (QWidget)</dt> +<dd> +reference to the parent widget </dd> </dl><a NAME="PluginRepositoryDialog.__closeAndInstall" ID="PluginRepositoryDialog.__closeAndInstall"></a> <h4>PluginRepositoryDialog.__closeAndInstall</h4> @@ -239,17 +242,16 @@ </table> <a NAME="PluginRepositoryWidget.__init__" ID="PluginRepositoryWidget.__init__"></a> <h4>PluginRepositoryWidget (Constructor)</h4> -<b>PluginRepositoryWidget</b>(<i>parent=None, external=False</i>) +<b>PluginRepositoryWidget</b>(<i>pluginManager, parent=None</i>) <p> Constructor </p><dl> -<dt><i>parent</i></dt> +<dt><i>pluginManager</i> (PluginManager)</dt> <dd> -parent of this dialog (QWidget) -</dd><dt><i>external</i></dt> +reference to the plugin manager object +</dd><dt><i>parent</i> (QWidget)</dt> <dd> -flag indicating an instatiation as a main - window (boolean) +parent of this dialog </dd> </dl><a NAME="PluginRepositoryWidget.__cleanupDownloads" ID="PluginRepositoryWidget.__cleanupDownloads"></a> <h4>PluginRepositoryWidget.__cleanupDownloads</h4>
--- a/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.Plugins.UiExtensionPlugins.Translator.TranslatorWidget.html Sat Dec 01 11:44:34 2018 +0100 @@ -108,6 +108,9 @@ <td><a href="#TranslatorWidget.on_origLanguageComboBox_currentIndexChanged">on_origLanguageComboBox_currentIndexChanged</a></td> <td>Private slot to handle the selection of the original language.</td> </tr><tr> +<td><a href="#TranslatorWidget.on_preferencesButton_clicked">on_preferencesButton_clicked</a></td> +<td>Private slot to open the Translator configuration page.</td> +</tr><tr> <td><a href="#TranslatorWidget.on_pronounceOrigButton_clicked">on_pronounceOrigButton_clicked</a></td> <td>Private slot to pronounce the original text.</td> </tr><tr> @@ -278,7 +281,12 @@ <dd> current index (integer) </dd> -</dl><a NAME="TranslatorWidget.on_pronounceOrigButton_clicked" ID="TranslatorWidget.on_pronounceOrigButton_clicked"></a> +</dl><a NAME="TranslatorWidget.on_preferencesButton_clicked" ID="TranslatorWidget.on_preferencesButton_clicked"></a> +<h4>TranslatorWidget.on_preferencesButton_clicked</h4> +<b>on_preferencesButton_clicked</b>(<i></i>) +<p> + Private slot to open the Translator configuration page. +</p><a NAME="TranslatorWidget.on_pronounceOrigButton_clicked" ID="TranslatorWidget.on_pronounceOrigButton_clicked"></a> <h4>TranslatorWidget.on_pronounceOrigButton_clicked</h4> <b>on_pronounceOrigButton_clicked</b>(<i></i>) <p>
--- a/Documentation/Source/eric6.Project.CreateDialogCodeDialog.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.Project.CreateDialogCodeDialog.html Sat Dec 01 11:44:34 2018 +0100 @@ -81,6 +81,9 @@ <td><a href="#CreateDialogCodeDialog.__objectNameExternal">__objectNameExternal</a></td> <td>Private method to get the object name of a form via an external interpreter.</td> </tr><tr> +<td><a href="#CreateDialogCodeDialog.__runUicLoadUi">__runUicLoadUi</a></td> +<td>Private method to run the UicLoadUi.py script with the given command and return the output.</td> +</tr><tr> <td><a href="#CreateDialogCodeDialog.__signatures">__signatures</a></td> <td>Private slot to get the signatures.</td> </tr><tr> @@ -214,6 +217,27 @@ <dd> str </dd> +</dl><a NAME="CreateDialogCodeDialog.__runUicLoadUi" ID="CreateDialogCodeDialog.__runUicLoadUi"></a> +<h4>CreateDialogCodeDialog.__runUicLoadUi</h4> +<b>__runUicLoadUi</b>(<i>command</i>) +<p> + Private method to run the UicLoadUi.py script with the given command + and return the output. +</p><dl> +<dt><i>command</i> (str)</dt> +<dd> +uic command to be run +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +tuple of process output and error flag +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +tuple of (str, bool) +</dd> </dl><a NAME="CreateDialogCodeDialog.__signatures" ID="CreateDialogCodeDialog.__signatures"></a> <h4>CreateDialogCodeDialog.__signatures</h4> <b>__signatures</b>(<i></i>)
--- a/Documentation/Source/eric6.Project.Project.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.Project.Project.html Sat Dec 01 11:44:34 2018 +0100 @@ -64,7 +64,7 @@ <dd> emitted after a directory has been removed from the project -</dd><dt>dirty(int)</dt> +</dd><dt>dirty(bool)</dt> <dd> emitted when the dirty state changes </dd><dt>lexerAssociationsChanged()</dt> @@ -614,6 +614,9 @@ <td><a href="#Project.hasDefaultMakeParameters">hasDefaultMakeParameters</a></td> <td>Public method to test, if the project contains the default make parameters.</td> </tr><tr> +<td><a href="#Project.hasDefaultUicCompilerParameters">hasDefaultUicCompilerParameters</a></td> +<td>Public method to test, if the project contains the default uic compiler parameters.</td> +</tr><tr> <td><a href="#Project.hasEntry">hasEntry</a></td> <td>Public method to check the project for a file.</td> </tr><tr> @@ -2171,6 +2174,22 @@ <dd> bool </dd> +</dl><a NAME="Project.hasDefaultUicCompilerParameters" ID="Project.hasDefaultUicCompilerParameters"></a> +<h4>Project.hasDefaultUicCompilerParameters</h4> +<b>hasDefaultUicCompilerParameters</b>(<i></i>) +<p> + Public method to test, if the project contains the default uic compiler + parameters. +</p><dl> +<dt>Returns:</dt> +<dd> +flag indicating default parameter set +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> </dl><a NAME="Project.hasEntry" ID="Project.hasEntry"></a> <h4>Project.hasEntry</h4> <b>hasEntry</b>(<i>fn</i>) @@ -2778,15 +2797,15 @@ </dd> </dl><a NAME="Project.setDirty" ID="Project.setDirty"></a> <h4>Project.setDirty</h4> -<b>setDirty</b>(<i>b</i>) +<b>setDirty</b>(<i>dirty</i>) <p> Public method to set the dirty state. </p><p> - It emits the signal dirty(int). + It emits the signal dirty(bool). </p><dl> -<dt><i>b</i></dt> +<dt><i>dirty</i> (bool)</dt> <dd> -dirty state (boolean) +dirty state </dd> </dl><a NAME="Project.setStatusMonitorAutoUpdate" ID="Project.setStatusMonitorAutoUpdate"></a> <h4>Project.setStatusMonitorAutoUpdate</h4>
--- a/Documentation/Source/eric6.Project.ProjectFormsBrowser.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.Project.ProjectFormsBrowser.html Sat Dec 01 11:44:34 2018 +0100 @@ -105,9 +105,15 @@ <td><a href="#ProjectFormsBrowser.__compileUIDone">__compileUIDone</a></td> <td>Private slot to handle the finished signal of the pyuic/rbuic process.</td> </tr><tr> +<td><a href="#ProjectFormsBrowser.__configureUicCompiler">__configureUicCompiler</a></td> +<td>Private slot to configure some non-common uic compiler options.</td> +</tr><tr> <td><a href="#ProjectFormsBrowser.__deleteFile">__deleteFile</a></td> <td>Private method to delete a form file from the project.</td> </tr><tr> +<td><a href="#ProjectFormsBrowser.__determineUiCompiler">__determineUiCompiler</a></td> +<td>Private method to determine the UI compiler for the project.</td> +</tr><tr> <td><a href="#ProjectFormsBrowser.__generateDialogCode">__generateDialogCode</a></td> <td>Private method to generate dialog code for the form (Qt4 only).</td> </tr><tr> @@ -129,6 +135,9 @@ <td><a href="#ProjectFormsBrowser.__readStdout">__readStdout</a></td> <td>Private slot to handle the readyReadStandardOutput signal of the pyuic4/pyuic5/pyside-uic/pyside2-uic/rbuic4 process.</td> </tr><tr> +<td><a href="#ProjectFormsBrowser.__resetUiCompiler">__resetUiCompiler</a></td> +<td>Private slot to reset the determined UI compiler executable.</td> +</tr><tr> <td><a href="#ProjectFormsBrowser.__showContextMenu">__showContextMenu</a></td> <td>Private slot called by the menu aboutToShow signal.</td> </tr><tr> @@ -159,6 +168,9 @@ <td><a href="#ProjectFormsBrowser.compileChangedForms">compileChangedForms</a></td> <td>Public method to compile all changed forms to source files.</td> </tr><tr> +<td><a href="#ProjectFormsBrowser.getUiCompiler">getUiCompiler</a></td> +<td>Public method to get the UI compiler executable of the project.</td> +</tr><tr> <td><a href="#ProjectFormsBrowser.handlePreferencesChanged">handlePreferencesChanged</a></td> <td>Public slot used to handle the preferencesChanged signal.</td> </tr> @@ -249,11 +261,21 @@ <dd> exit status of the process (QProcess.ExitStatus) </dd> -</dl><a NAME="ProjectFormsBrowser.__deleteFile" ID="ProjectFormsBrowser.__deleteFile"></a> +</dl><a NAME="ProjectFormsBrowser.__configureUicCompiler" ID="ProjectFormsBrowser.__configureUicCompiler"></a> +<h4>ProjectFormsBrowser.__configureUicCompiler</h4> +<b>__configureUicCompiler</b>(<i></i>) +<p> + Private slot to configure some non-common uic compiler options. +</p><a NAME="ProjectFormsBrowser.__deleteFile" ID="ProjectFormsBrowser.__deleteFile"></a> <h4>ProjectFormsBrowser.__deleteFile</h4> <b>__deleteFile</b>(<i></i>) <p> Private method to delete a form file from the project. +</p><a NAME="ProjectFormsBrowser.__determineUiCompiler" ID="ProjectFormsBrowser.__determineUiCompiler"></a> +<h4>ProjectFormsBrowser.__determineUiCompiler</h4> +<b>__determineUiCompiler</b>(<i></i>) +<p> + Private method to determine the UI compiler for the project. </p><a NAME="ProjectFormsBrowser.__generateDialogCode" ID="ProjectFormsBrowser.__generateDialogCode"></a> <h4>ProjectFormsBrowser.__generateDialogCode</h4> <b>__generateDialogCode</b>(<i></i>) @@ -297,6 +319,11 @@ <p> Private slot to handle the readyReadStandardOutput signal of the pyuic4/pyuic5/pyside-uic/pyside2-uic/rbuic4 process. +</p><a NAME="ProjectFormsBrowser.__resetUiCompiler" ID="ProjectFormsBrowser.__resetUiCompiler"></a> +<h4>ProjectFormsBrowser.__resetUiCompiler</h4> +<b>__resetUiCompiler</b>(<i></i>) +<p> + Private slot to reset the determined UI compiler executable. </p><a NAME="ProjectFormsBrowser.__showContextMenu" ID="ProjectFormsBrowser.__showContextMenu"></a> <h4>ProjectFormsBrowser.__showContextMenu</h4> <b>__showContextMenu</b>(<i></i>) @@ -366,7 +393,22 @@ <b>compileChangedForms</b>(<i></i>) <p> Public method to compile all changed forms to source files. -</p><a NAME="ProjectFormsBrowser.handlePreferencesChanged" ID="ProjectFormsBrowser.handlePreferencesChanged"></a> +</p><a NAME="ProjectFormsBrowser.getUiCompiler" ID="ProjectFormsBrowser.getUiCompiler"></a> +<h4>ProjectFormsBrowser.getUiCompiler</h4> +<b>getUiCompiler</b>(<i></i>) +<p> + Public method to get the UI compiler executable of the project. +</p><dl> +<dt>Returns:</dt> +<dd> +UI compiler executable +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl><a NAME="ProjectFormsBrowser.handlePreferencesChanged" ID="ProjectFormsBrowser.handlePreferencesChanged"></a> <h4>ProjectFormsBrowser.handlePreferencesChanged</h4> <b>handlePreferencesChanged</b>(<i></i>) <p>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Documentation/Source/eric6.Project.UicCompilerOptionsDialog.html Sat Dec 01 11:44:34 2018 +0100 @@ -0,0 +1,105 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.Project.UicCompilerOptionsDialog</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body><a NAME="top" ID="top"></a> +<h1>eric6.Project.UicCompilerOptionsDialog</h1> +<p> +Module implementing a dialog to enter some non-common uic compiler options. +</p> +<h3>Global Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> +<table> +<tr> +<td><a href="#UicCompilerOptionsDialog">UicCompilerOptionsDialog</a></td> +<td>Class implementing a dialog to enter some non-common uic compiler options.</td> +</tr> +</table> +<h3>Functions</h3> +<table> +<tr><td>None</td></tr> +</table> +<hr /><hr /> +<a NAME="UicCompilerOptionsDialog" ID="UicCompilerOptionsDialog"></a> +<h2>UicCompilerOptionsDialog</h2> +<p> + Class implementing a dialog to enter some non-common uic compiler options. +</p> +<h3>Derived from</h3> +QDialog, Ui_UicCompilerOptionsDialog +<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="#UicCompilerOptionsDialog.__init__">UicCompilerOptionsDialog</a></td> +<td>Constructor</td> +</tr><tr> +<td><a href="#UicCompilerOptionsDialog.getData">getData</a></td> +<td>Public method to get the entered data.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="UicCompilerOptionsDialog.__init__" ID="UicCompilerOptionsDialog.__init__"></a> +<h4>UicCompilerOptionsDialog (Constructor)</h4> +<b>UicCompilerOptionsDialog</b>(<i>compilerOptions, compiler, parent=None</i>) +<p> + Constructor +</p><dl> +<dt><i>compilerOptions</i> (dict)</dt> +<dd> +dictionary containing the uic compiler options +</dd><dt><i>compiler</i> (str)</dt> +<dd> +name of the uic compiler executable +</dd><dt><i>parent</i> (QWidget)</dt> +<dd> +reference to the parent widget +</dd> +</dl><a NAME="UicCompilerOptionsDialog.getData" ID="UicCompilerOptionsDialog.getData"></a> +<h4>UicCompilerOptionsDialog.getData</h4> +<b>getData</b>(<i></i>) +<p> + Public method to get the entered data. +</p><dl> +<dt>Returns:</dt> +<dd> +tuple containing the package and the rc-file suffix +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +tuple of (str, str) +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/Documentation/Source/eric6.QScintilla.Shell.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.QScintilla.Shell.html Sat Dec 01 11:44:34 2018 +0100 @@ -65,6 +65,10 @@ <dd> emitted to indicate the search result +</dd><dt>virtualEnvironmentChanged(str)</dt> +<dd> +emitted to signal the new virtual + environment of the shell </dd> </dl> <h3>Derived from</h3> @@ -239,15 +243,15 @@ <td><a href="#Shell.__middleMouseButton">__middleMouseButton</a></td> <td>Private method to handle the middle mouse button press.</td> </tr><tr> +<td><a href="#Shell.__projectClosed">__projectClosed</a></td> +<td>Private slot to restart the default shell when the project is closed.</td> +</tr><tr> +<td><a href="#Shell.__projectOpened">__projectOpened</a></td> +<td>Private slot to start the shell for the opened project.</td> +</tr><tr> <td><a href="#Shell.__raw_input">__raw_input</a></td> <td>Private method to handle raw input.</td> </tr><tr> -<td><a href="#Shell.__reset">__reset</a></td> -<td>Private slot to handle the 'reset' context menu entry.</td> -</tr><tr> -<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.__resetIncrementalHistorySearch">__resetIncrementalHistorySearch</a></td> <td>Private method to reset the incremental history search.</td> </tr><tr> @@ -287,8 +291,11 @@ <td><a href="#Shell.__showCompletions">__showCompletions</a></td> <td>Private method to display the possible completions.</td> </tr><tr> -<td><a href="#Shell.__showLanguageMenu">__showLanguageMenu</a></td> -<td>Private slot to prepare the language submenu.</td> +<td><a href="#Shell.__showStartMenu">__showStartMenu</a></td> +<td>Private slot to prepare the start submenu.</td> +</tr><tr> +<td><a href="#Shell.__showVenvName">__showVenvName</a></td> +<td>Private method to show the name of the active virtual environment.</td> </tr><tr> <td><a href="#Shell.__startDebugClient">__startDebugClient</a></td> <td>Private slot to start a debug client according to the action triggered.</td> @@ -303,7 +310,7 @@ <td>Private method to write a banner with info from the debug client.</td> </tr><tr> <td><a href="#Shell.__writePrompt">__writePrompt</a></td> -<td>Private method to write the prompt.</td> +<td>Private method to write the prompt using a write queue.</td> </tr><tr> <td><a href="#Shell.__writeQueued">__writeQueued</a></td> <td>Private method to display some text using a write queue.</td> @@ -329,6 +336,12 @@ <td><a href="#Shell.contextMenuEvent">contextMenuEvent</a></td> <td>Protected method to show our own context menu.</td> </tr><tr> +<td><a href="#Shell.doClearRestart">doClearRestart</a></td> +<td>Public slot to handle the 'restart and clear' context menu entry.</td> +</tr><tr> +<td><a href="#Shell.doRestart">doRestart</a></td> +<td>Public slot to handle the 'restart' context menu entry.</td> +</tr><tr> <td><a href="#Shell.dragEnterEvent">dragEnterEvent</a></td> <td>Protected method to handle the drag enter event.</td> </tr><tr> @@ -426,23 +439,25 @@ </table> <a NAME="Shell.__init__" ID="Shell.__init__"></a> <h4>Shell (Constructor)</h4> -<b>Shell</b>(<i>dbs, vm, windowedVariant, parent=None</i>) +<b>Shell</b>(<i>dbs, vm, project, windowedVariant, parent=None</i>) <p> Constructor </p><dl> -<dt><i>dbs</i></dt> +<dt><i>dbs</i> (DebugServer)</dt> <dd> reference to the debug server object -</dd><dt><i>vm</i></dt> +</dd><dt><i>vm</i> (ViewManager)</dt> <dd> reference to the viewmanager object -</dd><dt><i>windowedVariant</i></dt> +</dd><dt><i>project</i> (Project)</dt> +<dd> +reference to the project object +</dd><dt><i>windowedVariant</i> (bool)</dt> <dd> flag indicating the shell window variant - (boolean) -</dd><dt><i>parent</i></dt> +</dd><dt><i>parent</i> (QWidget)</dt> <dd> -parent widget (QWidget) +parent widget </dd> </dl><a NAME="Shell.__QScintillaAutoCompletionCommand" ID="Shell.__QScintillaAutoCompletionCommand"></a> <h4>Shell.__QScintillaAutoCompletionCommand</h4> @@ -676,16 +691,19 @@ Private method to clear the line containing the cursor. </p><a NAME="Shell.__clientCapabilities" ID="Shell.__clientCapabilities"></a> <h4>Shell.__clientCapabilities</h4> -<b>__clientCapabilities</b>(<i>cap, clType</i>) +<b>__clientCapabilities</b>(<i>cap, clType, venvName</i>) <p> Private slot to handle the reporting of the clients capabilities. </p><dl> -<dt><i>cap</i></dt> +<dt><i>cap</i> (int)</dt> +<dd> +client capabilities +</dd><dt><i>clType</i> (str)</dt> <dd> -client capabilities (integer) -</dd><dt><i>clType</i></dt> +type of the debug client +</dd><dt><i>venvName</i> (str)</dt> <dd> -type of the debug client (string) +name of the virtual environment </dd> </dl><a NAME="Shell.__clientError" ID="Shell.__clientError"></a> <h4>Shell.__clientError</h4> @@ -921,6 +939,16 @@ <b>__middleMouseButton</b>(<i></i>) <p> Private method to handle the middle mouse button press. +</p><a NAME="Shell.__projectClosed" ID="Shell.__projectClosed"></a> +<h4>Shell.__projectClosed</h4> +<b>__projectClosed</b>(<i></i>) +<p> + Private slot to restart the default shell when the project is closed. +</p><a NAME="Shell.__projectOpened" ID="Shell.__projectOpened"></a> +<h4>Shell.__projectOpened</h4> +<b>__projectOpened</b>(<i></i>) +<p> + Private slot to start the shell for the opened project. </p><a NAME="Shell.__raw_input" ID="Shell.__raw_input"></a> <h4>Shell.__raw_input</h4> <b>__raw_input</b>(<i>s, echo</i>) @@ -934,17 +962,7 @@ <dd> Flag indicating echoing of the input (boolean) </dd> -</dl><a NAME="Shell.__reset" ID="Shell.__reset"></a> -<h4>Shell.__reset</h4> -<b>__reset</b>(<i></i>) -<p> - Private slot to handle the 'reset' context menu entry. -</p><a NAME="Shell.__resetAndClear" ID="Shell.__resetAndClear"></a> -<h4>Shell.__resetAndClear</h4> -<b>__resetAndClear</b>(<i></i>) -<p> - Private slot to handle the 'reset and clear' context menu entry. -</p><a NAME="Shell.__resetIncrementalHistorySearch" ID="Shell.__resetIncrementalHistorySearch"></a> +</dl><a NAME="Shell.__resetIncrementalHistorySearch" ID="Shell.__resetIncrementalHistorySearch"></a> <h4>Shell.__resetIncrementalHistorySearch</h4> <b>__resetIncrementalHistorySearch</b>(<i></i>) <p> @@ -1075,11 +1093,16 @@ <dd> text that is about to be completed (string) </dd> -</dl><a NAME="Shell.__showLanguageMenu" ID="Shell.__showLanguageMenu"></a> -<h4>Shell.__showLanguageMenu</h4> -<b>__showLanguageMenu</b>(<i></i>) +</dl><a NAME="Shell.__showStartMenu" ID="Shell.__showStartMenu"></a> +<h4>Shell.__showStartMenu</h4> +<b>__showStartMenu</b>(<i></i>) <p> - Private slot to prepare the language submenu. + Private slot to prepare the start submenu. +</p><a NAME="Shell.__showVenvName" ID="Shell.__showVenvName"></a> +<h4>Shell.__showVenvName</h4> +<b>__showVenvName</b>(<i></i>) +<p> + Private method to show the name of the active virtual environment. </p><a NAME="Shell.__startDebugClient" ID="Shell.__startDebugClient"></a> <h4>Shell.__startDebugClient</h4> <b>__startDebugClient</b>(<i>action</i>) @@ -1108,25 +1131,28 @@ </dd> </dl><a NAME="Shell.__writeBanner" ID="Shell.__writeBanner"></a> <h4>Shell.__writeBanner</h4> -<b>__writeBanner</b>(<i>version, platform, dbgclient</i>) +<b>__writeBanner</b>(<i>version, platform, dbgclient, venvName</i>) <p> Private method to write a banner with info from the debug client. </p><dl> -<dt><i>version</i></dt> +<dt><i>version</i> (str)</dt> <dd> -interpreter version string (string) -</dd><dt><i>platform</i></dt> +interpreter version string +</dd><dt><i>platform</i> (str)</dt> <dd> -platform of the remote interpreter (string) -</dd><dt><i>dbgclient</i></dt> +platform of the remote interpreter +</dd><dt><i>dbgclient</i> (str)</dt> <dd> -debug client variant used (string) +debug client variant used +</dd><dt><i>venvName</i> (str)</dt> +<dd> +name of the virtual environment </dd> </dl><a NAME="Shell.__writePrompt" ID="Shell.__writePrompt"></a> <h4>Shell.__writePrompt</h4> <b>__writePrompt</b>(<i></i>) <p> - Private method to write the prompt. + Private method to write the prompt using a write queue. </p><a NAME="Shell.__writeQueued" ID="Shell.__writeQueued"></a> <h4>Shell.__writeQueued</h4> <b>__writeQueued</b>(<i>s</i>) @@ -1187,7 +1213,17 @@ <dd> context menu event (QContextMenuEvent) </dd> -</dl><a NAME="Shell.dragEnterEvent" ID="Shell.dragEnterEvent"></a> +</dl><a NAME="Shell.doClearRestart" ID="Shell.doClearRestart"></a> +<h4>Shell.doClearRestart</h4> +<b>doClearRestart</b>(<i></i>) +<p> + Public slot to handle the 'restart and clear' context menu entry. +</p><a NAME="Shell.doRestart" ID="Shell.doRestart"></a> +<h4>Shell.doRestart</h4> +<b>doRestart</b>(<i></i>) +<p> + Public slot to handle the 'restart' context menu entry. +</p><a NAME="Shell.dragEnterEvent" ID="Shell.dragEnterEvent"></a> <h4>Shell.dragEnterEvent</h4> <b>dragEnterEvent</b>(<i>event</i>) <p> @@ -1455,39 +1491,45 @@ </dd> </dl><a NAME="Shell.searchNext" ID="Shell.searchNext"></a> <h4>Shell.searchNext</h4> -<b>searchNext</b>(<i>txt, caseSensitive, wholeWord</i>) +<b>searchNext</b>(<i>txt, caseSensitive, wholeWord, regexp</i>) <p> Public method to search the next occurrence of the given text. </p><dl> -<dt><i>txt</i></dt> +<dt><i>txt</i> (str)</dt> <dd> -text to search for (string) -</dd><dt><i>caseSensitive</i></dt> +text to search for +</dd><dt><i>caseSensitive</i> (bool)</dt> <dd> flag indicating to perform a case sensitive - search (boolean) -</dd><dt><i>wholeWord</i></dt> + search +</dd><dt><i>wholeWord</i> (bool)</dt> <dd> flag indicating to search for whole words - only (boolean) + only +</dd><dt><i>regexp</i> (bool)</dt> +<dd> +flag indicating a regular expression search </dd> </dl><a NAME="Shell.searchPrev" ID="Shell.searchPrev"></a> <h4>Shell.searchPrev</h4> -<b>searchPrev</b>(<i>txt, caseSensitive, wholeWord</i>) +<b>searchPrev</b>(<i>txt, caseSensitive, wholeWord, regexp</i>) <p> Public method to search the previous occurrence of the given text. </p><dl> -<dt><i>txt</i></dt> +<dt><i>txt</i> (str)</dt> <dd> -text to search for (string) -</dd><dt><i>caseSensitive</i></dt> +text to search for +</dd><dt><i>caseSensitive</i> (bool)</dt> <dd> flag indicating to perform a case sensitive - search (boolean) -</dd><dt><i>wholeWord</i></dt> + search +</dd><dt><i>wholeWord</i> (bool)</dt> <dd> flag indicating to search for whole words - only (boolean) + only +</dd><dt><i>regexp</i> (bool)</dt> +<dd> +flag indicating a regular expression search </dd> </dl><a NAME="Shell.selectHistory" ID="Shell.selectHistory"></a> <h4>Shell.selectHistory</h4> @@ -1556,22 +1598,25 @@ </table> <a NAME="ShellAssembly.__init__" ID="ShellAssembly.__init__"></a> <h4>ShellAssembly (Constructor)</h4> -<b>ShellAssembly</b>(<i>dbs, vm, horizontal=True, parent=None</i>) +<b>ShellAssembly</b>(<i>dbs, vm, project, horizontal=True, parent=None</i>) <p> Constructor </p><dl> -<dt><i>dbs</i></dt> +<dt><i>dbs</i> (DebugServer)</dt> <dd> reference to the debug server object -</dd><dt><i>vm</i></dt> +</dd><dt><i>vm</i> (ViewManager)</dt> <dd> reference to the viewmanager object -</dd><dt><i>horizontal</i></dt> +</dd><dt><i>project</i> (Project)</dt> +<dd> +reference to the project object +</dd><dt><i>horizontal</i> (bool)</dt> <dd> -flag indicating a horizontal layout (boolean) -</dd><dt><i>parent</i></dt> +flag indicating a horizontal layout +</dd><dt><i>parent</i> (QWidget)</dt> <dd> -parent widget (QWidget) +parent widget </dd> </dl><a NAME="ShellAssembly.shell" ID="ShellAssembly.shell"></a> <h4>ShellAssembly.shell</h4>
--- a/Documentation/Source/eric6.QScintilla.ShellWindow.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.QScintilla.ShellWindow.html Sat Dec 01 11:44:34 2018 +0100 @@ -96,12 +96,6 @@ <td><a href="#ShellWindow.__createViewActions">__createViewActions</a></td> <td>Private method defining the user interface actions for the view commands.</td> </tr><tr> -<td><a href="#ShellWindow.__doClearRestart">__doClearRestart</a></td> -<td>Private slot to handle the 'restart and clear' menu entry.</td> -</tr><tr> -<td><a href="#ShellWindow.__doRestart">__doRestart</a></td> -<td>Private slot to handle the 'restart' menu entry.</td> -</tr><tr> <td><a href="#ShellWindow.__historyStyleChanged">__historyStyleChanged</a></td> <td>Private slot to handle a change of the shell history style.</td> </tr><tr> @@ -117,12 +111,15 @@ <td><a href="#ShellWindow.__showFind">__showFind</a></td> <td>Private method to display the search widget.</td> </tr><tr> -<td><a href="#ShellWindow.__showLanguageMenu">__showLanguageMenu</a></td> +<td><a href="#ShellWindow.__showStartMenu">__showStartMenu</a></td> <td>Private slot to prepare the language menu.</td> </tr><tr> <td><a href="#ShellWindow.__startShell">__startShell</a></td> <td>Private slot to start a shell according to the action triggered.</td> </tr><tr> +<td><a href="#ShellWindow.__virtualEnvironmentChanged">__virtualEnvironmentChanged</a></td> +<td>Private slot handling a change of the shell's virtual environment.</td> +</tr><tr> <td><a href="#ShellWindow.__whatsThis">__whatsThis</a></td> <td>Private slot called in to enter Whats This mode.</td> </tr><tr> @@ -169,11 +166,14 @@ </table> <a NAME="ShellWindow.__init__" ID="ShellWindow.__init__"></a> <h4>ShellWindow (Constructor)</h4> -<b>ShellWindow</b>(<i>parent=None, name=None</i>) +<b>ShellWindow</b>(<i>originalPathString, parent=None, name=None</i>) <p> Constructor </p><dl> -<dt><i>parent</i> (QWidget)</dt> +<dt><i>originalPathString</i> (str)</dt> +<dd> +original PATH environment variable +</dd><dt><i>parent</i> (QWidget)</dt> <dd> reference to the parent widget </dd><dt><i>name</i> (str)</dt> @@ -245,16 +245,6 @@ <p> Private method defining the user interface actions for the view commands. -</p><a NAME="ShellWindow.__doClearRestart" ID="ShellWindow.__doClearRestart"></a> -<h4>ShellWindow.__doClearRestart</h4> -<b>__doClearRestart</b>(<i></i>) -<p> - Private slot to handle the 'restart and clear' menu entry. -</p><a NAME="ShellWindow.__doRestart" ID="ShellWindow.__doRestart"></a> -<h4>ShellWindow.__doRestart</h4> -<b>__doRestart</b>(<i></i>) -<p> - Private slot to handle the 'restart' menu entry. </p><a NAME="ShellWindow.__historyStyleChanged" ID="ShellWindow.__historyStyleChanged"></a> <h4>ShellWindow.__historyStyleChanged</h4> <b>__historyStyleChanged</b>(<i>historyStyle</i>) @@ -293,9 +283,9 @@ <b>__showFind</b>(<i></i>) <p> Private method to display the search widget. -</p><a NAME="ShellWindow.__showLanguageMenu" ID="ShellWindow.__showLanguageMenu"></a> -<h4>ShellWindow.__showLanguageMenu</h4> -<b>__showLanguageMenu</b>(<i></i>) +</p><a NAME="ShellWindow.__showStartMenu" ID="ShellWindow.__showStartMenu"></a> +<h4>ShellWindow.__showStartMenu</h4> +<b>__showStartMenu</b>(<i></i>) <p> Private slot to prepare the language menu. </p><a NAME="ShellWindow.__startShell" ID="ShellWindow.__startShell"></a> @@ -308,6 +298,16 @@ <dd> menu action that was triggered (QAction) </dd> +</dl><a NAME="ShellWindow.__virtualEnvironmentChanged" ID="ShellWindow.__virtualEnvironmentChanged"></a> +<h4>ShellWindow.__virtualEnvironmentChanged</h4> +<b>__virtualEnvironmentChanged</b>(<i>venvName</i>) +<p> + Private slot handling a change of the shell's virtual environment. +</p><dl> +<dt><i>venvName</i> (str)</dt> +<dd> +name of the virtual environment of the shell +</dd> </dl><a NAME="ShellWindow.__whatsThis" ID="ShellWindow.__whatsThis"></a> <h4>ShellWindow.__whatsThis</h4> <b>__whatsThis</b>(<i></i>)
--- a/Documentation/Source/eric6.UI.LogView.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.UI.LogView.html Sat Dec 01 11:44:34 2018 +0100 @@ -307,35 +307,45 @@ Public slot to handle a change of the preferences. </p><a NAME="LogViewerEdit.searchNext" ID="LogViewerEdit.searchNext"></a> <h4>LogViewerEdit.searchNext</h4> -<b>searchNext</b>(<i>txt, caseSensitive, wholeWord</i>) +<b>searchNext</b>(<i>txt, caseSensitive, wholeWord, regexp</i>) <p> Public method to search the next occurrence of the given text. </p><dl> -<dt><i>txt</i></dt> +<dt><i>txt</i> (str)</dt> <dd> -text to search for (string) -</dd><dt><i>caseSensitive</i></dt> +text to search for +</dd><dt><i>caseSensitive</i> (bool)</dt> <dd> -flag indicating case sensitivity (boolean) -</dd><dt><i>wholeWord</i></dt> +flag indicating to perform a case sensitive + search +</dd><dt><i>wholeWord</i> (bool)</dt> <dd> -flag indicating a search for the whole word (boolean) +flag indicating to search for whole words + only +</dd><dt><i>regexp</i> (bool)</dt> +<dd> +flag indicating a regular expression search </dd> </dl><a NAME="LogViewerEdit.searchPrev" ID="LogViewerEdit.searchPrev"></a> <h4>LogViewerEdit.searchPrev</h4> -<b>searchPrev</b>(<i>txt, caseSensitive, wholeWord</i>) +<b>searchPrev</b>(<i>txt, caseSensitive, wholeWord, regexp</i>) <p> Public method to search the previous occurrence of the given text. </p><dl> -<dt><i>txt</i></dt> +<dt><i>txt</i> (str)</dt> <dd> -text to search for (string) -</dd><dt><i>caseSensitive</i></dt> +text to search for +</dd><dt><i>caseSensitive</i> (bool)</dt> <dd> -flag indicating case sensitivity (boolean) -</dd><dt><i>wholeWord</i></dt> +flag indicating to perform a case sensitive + search +</dd><dt><i>wholeWord</i> (bool)</dt> <dd> -flag indicating a search for the whole word (boolean) +flag indicating to search for whole words + only +</dd><dt><i>regexp</i> (bool)</dt> +<dd> +flag indicating a regular expression search </dd> </dl> <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.UI.SearchWidget.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.UI.SearchWidget.html Sat Dec 01 11:44:34 2018 +0100 @@ -45,14 +45,14 @@ Class implementing the search box for the shell, terminal and log viewer. </p><h3>Signals</h3> <dl> -<dt>searchNext(text, caseSensitive, wholeWord)</dt> -<dd> -emitted when the user - pressed the next button (string, boolean, boolean) -</dd><dt>searchPrevious(text, caseSensitive, wholeWord)</dt> +<dt>searchNext(text, caseSensitive, wholeWord, regexp)</dt> <dd> emitted when the - user pressed the previous button (string, boolean, boolean) + user pressed the next button (string, boolean, boolean) +</dd><dt>searchPrevious(text, caseSensitive, wholeWord, regexp)</dt> +<dd> +emitted when + the user pressed the previous button (string, boolean, boolean) </dd> </dl> <h3>Derived from</h3> @@ -105,23 +105,26 @@ </table> <a NAME="SearchWidget.__init__" ID="SearchWidget.__init__"></a> <h4>SearchWidget (Constructor)</h4> -<b>SearchWidget</b>(<i>mainWindow, parent=None, spacer=True, showLine=False</i>) +<b>SearchWidget</b>(<i>mainWindow, parent=None, spacer=True, showLine=False, hideRegExp=False</i>) <p> Constructor </p><dl> -<dt><i>mainWindow</i></dt> +<dt><i>mainWindow</i> (QWidget)</dt> <dd> -reference to the main window (QWidget) -</dd><dt><i>parent</i></dt> +reference to the main window +</dd><dt><i>parent</i> (QWidget)</dt> <dd> -reference to the parent widget (QWidget) -</dd><dt><i>spacer</i></dt> +reference to the parent widget +</dd><dt><i>spacer</i> (bool)</dt> <dd> flag indicating to add a vertical spacer to the - main layout (boolean) -</dd><dt><i>showLine</i></dt> + main layout +</dd><dt><i>showLine</i> (bool)</dt> <dd> -flag indicating to show all widget in one row (boolean) +flag indicating to show all widget in one row +</dd><dt><i>hideRegExp</i> (bool)</dt> +<dd> +flag indicating to hide the Regexp checkbox </dd> </dl><a NAME="SearchWidget.__findByReturnPressed" ID="SearchWidget.__findByReturnPressed"></a> <h4>SearchWidget.__findByReturnPressed</h4>
--- a/Documentation/Source/eric6.UI.UserInterface.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.UI.UserInterface.html Sat Dec 01 11:44:34 2018 +0100 @@ -238,7 +238,7 @@ <td>Private slot to start the Qt-Assistant executable.</td> </tr><tr> <td><a href="#UserInterface.__assistant4">__assistant4</a></td> -<td>Private slot to start the Qt-Assistant 4 executable.</td> +<td>Private slot to start the Qt-Assistant 4/5 executable.</td> </tr><tr> <td><a href="#UserInterface.__checkActions">__checkActions</a></td> <td>Private slot to check some actions for their enable/disable status.</td> @@ -301,7 +301,7 @@ <td>Private slot to start the Qt-Designer executable.</td> </tr><tr> <td><a href="#UserInterface.__designer4">__designer4</a></td> -<td>Private slot to start the Qt-Designer 4 executable.</td> +<td>Private slot to start the Qt-Designer 4/5 executable.</td> </tr><tr> <td><a href="#UserInterface.__editPixmap">__editPixmap</a></td> <td>Private slot to show a pixmap in a dialog.</td> @@ -379,7 +379,7 @@ <td>Private slot to start the Qt-Linguist executable.</td> </tr><tr> <td><a href="#UserInterface.__linguist4">__linguist4</a></td> -<td>Private slot to start the Qt-Linguist 4 executable.</td> +<td>Private slot to start the Qt-Linguist 4/5 executable.</td> </tr><tr> <td><a href="#UserInterface.__loadSessionFromFile">__loadSessionFromFile</a></td> <td>Private slot to load a session from disk.</td> @@ -750,6 +750,9 @@ <td><a href="#UserInterface.getMenuBarAction">getMenuBarAction</a></td> <td>Public method to get a reference to an action of the main menu.</td> </tr><tr> +<td><a href="#UserInterface.getOriginalPathString">getOriginalPathString</a></td> +<td>Public method to get the original PATH environment variable (i.e.</td> +</tr><tr> <td><a href="#UserInterface.getToolBarIconSize">getToolBarIconSize</a></td> <td>Public method to get the toolbar icon size.</td> </tr><tr> @@ -835,7 +838,7 @@ </table> <a NAME="UserInterface.__init__" ID="UserInterface.__init__"></a> <h4>UserInterface (Constructor)</h4> -<b>UserInterface</b>(<i>app, locale, splash, plugin, disabledPlugins, noOpenAtStartup, noCrashOpenAtStartup, disableCrashSession, restartArguments</i>) +<b>UserInterface</b>(<i>app, locale, splash, plugin, disabledPlugins, noOpenAtStartup, noCrashOpenAtStartup, disableCrashSession, restartArguments, originalPathString</i>) <p> Constructor </p><dl> @@ -872,6 +875,9 @@ <dd> list of command line parameters to be used for a restart +</dd><dt><i>originalPathString</i> (str)</dt> +<dd> +original PATH environment variable </dd> </dl><a NAME="UserInterface.__TBMenuTriggered" ID="UserInterface.__TBMenuTriggered"></a> <h4>UserInterface.__TBMenuTriggered</h4> @@ -995,18 +1001,18 @@ <p> Private slot to start the Qt-Assistant executable. </p><dl> -<dt><i>home</i></dt> +<dt><i>home</i> (str)</dt> <dd> -full pathname of a file to display (string) -</dd><dt><i>version</i></dt> +full pathname of a file to display +</dd><dt><i>version</i> (int)</dt> <dd> -indication for the requested version (Qt 4) (integer) +indication for the requested version (4 = Qt 4/5) </dd> </dl><a NAME="UserInterface.__assistant4" ID="UserInterface.__assistant4"></a> <h4>UserInterface.__assistant4</h4> <b>__assistant4</b>(<i></i>) <p> - Private slot to start the Qt-Assistant 4 executable. + Private slot to start the Qt-Assistant 4/5 executable. </p><a NAME="UserInterface.__checkActions" ID="UserInterface.__checkActions"></a> <h4>UserInterface.__checkActions</h4> <b>__checkActions</b>(<i>editor</i>) @@ -1153,18 +1159,18 @@ <p> Private slot to start the Qt-Designer executable. </p><dl> -<dt><i>fn</i></dt> +<dt><i>fn</i> (str)</dt> <dd> filename of the form to be opened -</dd><dt><i>version</i></dt> +</dd><dt><i>version</i> (int)</dt> <dd> -indication for the requested version (Qt 4) (integer) +indication for the requested version (4 = Qt 4/5) </dd> </dl><a NAME="UserInterface.__designer4" ID="UserInterface.__designer4"></a> <h4>UserInterface.__designer4</h4> <b>__designer4</b>(<i></i>) <p> - Private slot to start the Qt-Designer 4 executable. + Private slot to start the Qt-Designer 4/5 executable. </p><a NAME="UserInterface.__editPixmap" ID="UserInterface.__editPixmap"></a> <h4>UserInterface.__editPixmap</h4> <b>__editPixmap</b>(<i>fn=""</i>) @@ -1329,18 +1335,18 @@ <p> Private slot to start the Qt-Linguist executable. </p><dl> -<dt><i>fn</i></dt> +<dt><i>fn</i> (str)</dt> <dd> filename of the translation file to be opened -</dd><dt><i>version</i></dt> +</dd><dt><i>version</i> (int)</dt> <dd> -indication for the requested version (Qt 4) (integer) +indication for the requested version (4 = Qt 4/5) </dd> </dl><a NAME="UserInterface.__linguist4" ID="UserInterface.__linguist4"></a> <h4>UserInterface.__linguist4</h4> <b>__linguist4</b>(<i>fn=None</i>) <p> - Private slot to start the Qt-Linguist 4 executable. + Private slot to start the Qt-Linguist 4/5 executable. </p><dl> <dt><i>fn</i></dt> <dd> @@ -2376,6 +2382,22 @@ <dd> reference to the menu bar action (QAction) </dd> +</dl><a NAME="UserInterface.getOriginalPathString" ID="UserInterface.getOriginalPathString"></a> +<h4>UserInterface.getOriginalPathString</h4> +<b>getOriginalPathString</b>(<i></i>) +<p> + Public method to get the original PATH environment variable + (i.e. before modifications by eric6 and PyQt5). +</p><dl> +<dt>Returns:</dt> +<dd> +original PATH environment variable +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> </dl><a NAME="UserInterface.getToolBarIconSize" ID="UserInterface.getToolBarIconSize"></a> <h4>UserInterface.getToolBarIconSize</h4> <b>getToolBarIconSize</b>(<i></i>)
--- a/Documentation/Source/eric6.VirtualEnv.VirtualenvAddEditDialog.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.VirtualEnv.VirtualenvAddEditDialog.html Sat Dec 01 11:44:34 2018 +0100 @@ -66,6 +66,9 @@ <td><a href="#VirtualenvAddEditDialog.getData">getData</a></td> <td>Public method to retrieve the entered data.</td> </tr><tr> +<td><a href="#VirtualenvAddEditDialog.on_anacondaCheckBox_clicked">on_anacondaCheckBox_clicked</a></td> +<td>Private slot handling a user click on this check box.</td> +</tr><tr> <td><a href="#VirtualenvAddEditDialog.on_globalCheckBox_toggled">on_globalCheckBox_toggled</a></td> <td>Private slot handling a change of the global check box state.</td> </tr><tr> @@ -85,7 +88,7 @@ </table> <a NAME="VirtualenvAddEditDialog.__init__" ID="VirtualenvAddEditDialog.__init__"></a> <h4>VirtualenvAddEditDialog (Constructor)</h4> -<b>VirtualenvAddEditDialog</b>(<i>manager, venvName="", venvDirectory="", venvInterpreter="", venvVariant=3, isGlobal=False, parent=None</i>) +<b>VirtualenvAddEditDialog</b>(<i>manager, venvName="", venvDirectory="", venvInterpreter="", venvVariant=3, isGlobal=False, isConda=False, execPath="", parent=None</i>) <p> Constructor </p><dl> @@ -107,6 +110,13 @@ </dd><dt><i>isGlobal</i> (bool)</dt> <dd> flag indicating a global environment +</dd><dt><i>isConda</i> (bool)</dt> +<dd> +flag indicating an Anaconda virtual environment +</dd><dt><i>execPath</i> (str)</dt> +<dd> +search path string to be prepended to the PATH + environment variable </dd><dt><i>parent</i> (QWidget)</dt> <dd> reference to the parent widget @@ -125,13 +135,25 @@ <dt>Returns:</dt> <dd> tuple containing the logical name, the directory, the - interpreter of the virtual environment, the Python variant - and a flag indicating a global environment + interpreter of the virtual environment, the Python variant, + a flag indicating a global environment, a flag indicating an + Anaconda environment and a string to be prepended to the PATH + environment variable </dd> </dl><dl> <dt>Return Type:</dt> <dd> -tuple of (str, str, str, int, bool) +tuple of (str, str, str, int, bool,bool, str) +</dd> +</dl><a NAME="VirtualenvAddEditDialog.on_anacondaCheckBox_clicked" ID="VirtualenvAddEditDialog.on_anacondaCheckBox_clicked"></a> +<h4>VirtualenvAddEditDialog.on_anacondaCheckBox_clicked</h4> +<b>on_anacondaCheckBox_clicked</b>(<i>checked</i>) +<p> + Private slot handling a user click on this check box. +</p><dl> +<dt><i>checked</i> (bool)</dt> +<dd> +state of the check box </dd> </dl><a NAME="VirtualenvAddEditDialog.on_globalCheckBox_toggled" ID="VirtualenvAddEditDialog.on_globalCheckBox_toggled"></a> <h4>VirtualenvAddEditDialog.on_globalCheckBox_toggled</h4>
--- a/Documentation/Source/eric6.VirtualEnv.VirtualenvManager.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.VirtualEnv.VirtualenvManager.html Sat Dec 01 11:44:34 2018 +0100 @@ -87,6 +87,9 @@ <td><a href="#VirtualenvManager.getVirtualenvDirectory">getVirtualenvDirectory</a></td> <td>Public method to get the directory of a virtual environment.</td> </tr><tr> +<td><a href="#VirtualenvManager.getVirtualenvExecPath">getVirtualenvExecPath</a></td> +<td>Public method to get the search path prefix of a virtual environment.</td> +</tr><tr> <td><a href="#VirtualenvManager.getVirtualenvInterpreter">getVirtualenvInterpreter</a></td> <td>Public method to get the interpreter for a virtual environment.</td> </tr><tr> @@ -96,6 +99,9 @@ <td><a href="#VirtualenvManager.getVirtualenvNamesForVariant">getVirtualenvNamesForVariant</a></td> <td>Public method to get a list of virtual environments for a given Python variant.</td> </tr><tr> +<td><a href="#VirtualenvManager.isCondaEnvironment">isCondaEnvironment</a></td> +<td>Public method to test, if a given environment is an Anaconda environment.</td> +</tr><tr> <td><a href="#VirtualenvManager.isGlobalEnvironment">isGlobalEnvironment</a></td> <td>Public method to test, if a given environment is a global one.</td> </tr><tr> @@ -165,7 +171,7 @@ Private slot to save the virtual environments. </p><a NAME="VirtualenvManager.addVirtualEnv" ID="VirtualenvManager.addVirtualEnv"></a> <h4>VirtualenvManager.addVirtualEnv</h4> -<b>addVirtualEnv</b>(<i>venvName, venvDirectory, venvInterpreter="", venvVariant=3, isGlobal=False</i>) +<b>addVirtualEnv</b>(<i>venvName, venvDirectory, venvInterpreter="", venvVariant=3, isGlobal=False, isConda=False, execPath=""</i>) <p> Public method to add a virtual environment. </p><dl> @@ -184,6 +190,13 @@ </dd><dt><i>isGlobal</i> (bool)</dt> <dd> flag indicating a global environment +</dd><dt><i>isConda</i> (bool)</dt> +<dd> +flag indicating an Anaconda virtual environment +</dd><dt><i>execPath</i> (str)</dt> +<dd> +search path string to be prepended to the PATH + environment variable </dd> </dl><a NAME="VirtualenvManager.createVirtualEnv" ID="VirtualenvManager.createVirtualEnv"></a> <h4>VirtualenvManager.createVirtualEnv</h4> @@ -257,6 +270,26 @@ <dd> str </dd> +</dl><a NAME="VirtualenvManager.getVirtualenvExecPath" ID="VirtualenvManager.getVirtualenvExecPath"></a> +<h4>VirtualenvManager.getVirtualenvExecPath</h4> +<b>getVirtualenvExecPath</b>(<i>venvName</i>) +<p> + Public method to get the search path prefix of a virtual environment. +</p><dl> +<dt><i>venvName</i> (str)</dt> +<dd> +logical name for the virtual environment +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +search path prefix +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> </dl><a NAME="VirtualenvManager.getVirtualenvInterpreter" ID="VirtualenvManager.getVirtualenvInterpreter"></a> <h4>VirtualenvManager.getVirtualenvInterpreter</h4> <b>getVirtualenvInterpreter</b>(<i>venvName</i>) @@ -313,6 +346,27 @@ <dd> list of str </dd> +</dl><a NAME="VirtualenvManager.isCondaEnvironment" ID="VirtualenvManager.isCondaEnvironment"></a> +<h4>VirtualenvManager.isCondaEnvironment</h4> +<b>isCondaEnvironment</b>(<i>venvName</i>) +<p> + Public method to test, if a given environment is an Anaconda + environment. +</p><dl> +<dt><i>venvName</i> (str)</dt> +<dd> +logical name of the virtual environment +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +flag indicating an Anaconda environment +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> </dl><a NAME="VirtualenvManager.isGlobalEnvironment" ID="VirtualenvManager.isGlobalEnvironment"></a> <h4>VirtualenvManager.isGlobalEnvironment</h4> <b>isGlobalEnvironment</b>(<i>venvName</i>) @@ -365,7 +419,7 @@ </dd> </dl><a NAME="VirtualenvManager.renameVirtualEnv" ID="VirtualenvManager.renameVirtualEnv"></a> <h4>VirtualenvManager.renameVirtualEnv</h4> -<b>renameVirtualEnv</b>(<i>oldVenvName, venvName, venvDirectory, venvInterpreter, venvVariant, isGlobal</i>) +<b>renameVirtualEnv</b>(<i>oldVenvName, venvName, venvDirectory, venvInterpreter, venvVariant, isGlobal, isConda, execPath</i>) <p> Public method to substitute a virtual environment entry with a new name. @@ -388,10 +442,17 @@ </dd><dt><i>isGlobal</i> (bool)</dt> <dd> flag indicating a global environment +</dd><dt><i>isConda</i> (bool)</dt> +<dd> +flag indicating an Anaconda virtual environment +</dd><dt><i>execPath</i> (str)</dt> +<dd> +search path string to be prepended to the PATH + environment variable </dd> </dl><a NAME="VirtualenvManager.setVirtualEnv" ID="VirtualenvManager.setVirtualEnv"></a> <h4>VirtualenvManager.setVirtualEnv</h4> -<b>setVirtualEnv</b>(<i>venvName, venvDirectory, venvInterpreter, venvVariant, isGlobal</i>) +<b>setVirtualEnv</b>(<i>venvName, venvDirectory, venvInterpreter, venvVariant, isGlobal, isConda, execPath</i>) <p> Public method to change a virtual environment. </p><dl> @@ -410,6 +471,13 @@ </dd><dt><i>isGlobal</i> (bool)</dt> <dd> flag indicating a global environment +</dd><dt><i>isConda</i> (bool)</dt> +<dd> +flag indicating an Anaconda virtual environment +</dd><dt><i>execPath</i> (str)</dt> +<dd> +search path string to be prepended to the PATH + environment variable </dd> </dl><a NAME="VirtualenvManager.showVirtualenvManagerDialog" ID="VirtualenvManager.showVirtualenvManagerDialog"></a> <h4>VirtualenvManager.showVirtualenvManagerDialog</h4>
--- a/Documentation/Source/eric6.VirtualEnv.VirtualenvManagerDialog.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.VirtualEnv.VirtualenvManagerDialog.html Sat Dec 01 11:44:34 2018 +0100 @@ -50,7 +50,7 @@ QDialog, Ui_VirtualenvManagerDialog <h3>Class Attributes</h3> <table> -<tr><td>IsGlobalRole</td></tr><tr><td>PythonVariantRole</td></tr> +<tr><td>ExecPathRole</td></tr><tr><td>IsCondaRole</td></tr><tr><td>IsGlobalRole</td></tr><tr><td>PythonVariantRole</td></tr> </table> <h3>Class Methods</h3> <table>
--- a/Documentation/Source/eric6.WebBrowser.SearchWidget.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.WebBrowser.SearchWidget.html Sat Dec 01 11:44:34 2018 +0100 @@ -69,6 +69,9 @@ <td><a href="#SearchWidget.__findNextPrevCallback">__findNextPrevCallback</a></td> <td>Private method to process the result of the last search.</td> </tr><tr> +<td><a href="#SearchWidget.__resetSearch">__resetSearch</a></td> +<td>Private method to reset the last search.</td> +</tr><tr> <td><a href="#SearchWidget.__searchTextEdited">__searchTextEdited</a></td> <td>Private slot to perform an incremental search.</td> </tr><tr> @@ -138,7 +141,12 @@ <dd> flag indicating if the last search succeeded </dd> -</dl><a NAME="SearchWidget.__searchTextEdited" ID="SearchWidget.__searchTextEdited"></a> +</dl><a NAME="SearchWidget.__resetSearch" ID="SearchWidget.__resetSearch"></a> +<h4>SearchWidget.__resetSearch</h4> +<b>__resetSearch</b>(<i></i>) +<p> + Private method to reset the last search. +</p><a NAME="SearchWidget.__searchTextEdited" ID="SearchWidget.__searchTextEdited"></a> <h4>SearchWidget.__searchTextEdited</h4> <b>__searchTextEdited</b>(<i>txt</i>) <p>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Documentation/Source/eric6.create_windows_links.html Sat Dec 01 11:44:34 2018 +0100 @@ -0,0 +1,170 @@ +<!DOCTYPE html> +<html><head> +<title>eric6.create_windows_links</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body><a NAME="top" ID="top"></a> +<h1>eric6.create_windows_links</h1> +<p> +Installation script for the eric6 IDE and all eric6 related tools. +</p> +<h3>Global Attributes</h3> +<table> +<tr><td>PythonMarkers</td></tr><tr><td>includePythonVariant</td></tr> +</table> +<h3>Classes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Functions</h3> +<table> +<tr> +<td><a href="#createWindowsShortcut">createWindowsShortcut</a></td> +<td>Create Windows shortcut.</td> +</tr><tr> +<td><a href="#getWinregEntry">getWinregEntry</a></td> +<td>Function to get an entry from the Windows Registry.</td> +</tr><tr> +<td><a href="#main">main</a></td> +<td>Create Desktop and Start Menu links.</td> +</tr><tr> +<td><a href="#windowsDesktopEntries">windowsDesktopEntries</a></td> +<td>Function to generate data for the Windows Desktop links.</td> +</tr><tr> +<td><a href="#windowsDesktopNames">windowsDesktopNames</a></td> +<td>Function to generate the link names for the Windows Desktop.</td> +</tr><tr> +<td><a href="#windowsProgramsEntry">windowsProgramsEntry</a></td> +<td>Function to generate the name of the Start Menu top entry.</td> +</tr> +</table> +<hr /><hr /> +<a NAME="createWindowsShortcut" ID="createWindowsShortcut"></a> +<h2>createWindowsShortcut</h2> +<b>createWindowsShortcut</b>(<i>linkPath, targetPath, iconPath</i>) +<p> + Create Windows shortcut. +</p><dl> +<dt><i>linkPath</i> (str)</dt> +<dd> +path of the shortcut file +</dd><dt><i>targetPath</i> (str)</dt> +<dd> +path the shortcut shall point to +</dd><dt><i>iconPath</i> (str)</dt> +<dd> +path of the icon file +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="getWinregEntry" ID="getWinregEntry"></a> +<h2>getWinregEntry</h2> +<b>getWinregEntry</b>(<i>name, path</i>) +<p> + Function to get an entry from the Windows Registry. +</p><dl> +<dt><i>name</i> (str)</dt> +<dd> +variable name +</dd><dt><i>path</i> (str)</dt> +<dd> +registry path of the variable +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +value of requested registry variable +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +any +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="main" ID="main"></a> +<h2>main</h2> +<b>main</b>(<i>argv</i>) +<p> + Create Desktop and Start Menu links. +</p><dl> +<dt><i>argv</i> (list of str)</dt> +<dd> +list of command line arguments +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="windowsDesktopEntries" ID="windowsDesktopEntries"></a> +<h2>windowsDesktopEntries</h2> +<b>windowsDesktopEntries</b>(<i></i>) +<p> + Function to generate data for the Windows Desktop links. +</p><dl> +<dt>Returns:</dt> +<dd> +list of tuples containing the desktop link name, + the link target and the icon target +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +list of tuples of (str, str, str) +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="windowsDesktopNames" ID="windowsDesktopNames"></a> +<h2>windowsDesktopNames</h2> +<b>windowsDesktopNames</b>(<i></i>) +<p> + Function to generate the link names for the Windows Desktop. +</p><dl> +<dt>Returns:</dt> +<dd> +list of desktop link names +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +list of str +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="windowsProgramsEntry" ID="windowsProgramsEntry"></a> +<h2>windowsProgramsEntry</h2> +<b>windowsProgramsEntry</b>(<i></i>) +<p> + Function to generate the name of the Start Menu top entry. +</p><dl> +<dt>Returns:</dt> +<dd> +name of the Start Menu top entry +</dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/Documentation/Source/eric6.eric6.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.eric6.html Sat Dec 01 11:44:34 2018 +0100 @@ -28,7 +28,7 @@ </p> <h3>Global Attributes</h3> <table> -<tr><td>args</td></tr><tr><td>inMainLoop</td></tr><tr><td>mainWindow</td></tr><tr><td>restartArgs</td></tr><tr><td>restartArgsList</td></tr><tr><td>splash</td></tr> +<tr><td>args</td></tr><tr><td>inMainLoop</td></tr><tr><td>mainWindow</td></tr><tr><td>originalPathString</td></tr><tr><td>restartArgs</td></tr><tr><td>restartArgsList</td></tr><tr><td>splash</td></tr> </table> <h3>Classes</h3> <table>
--- a/Documentation/Source/eric6.eric6_shell.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.eric6_shell.html Sat Dec 01 11:44:34 2018 +0100 @@ -28,7 +28,7 @@ </p> <h3>Global Attributes</h3> <table> -<tr><td>None</td></tr> +<tr><td>originalPathString</td></tr> </table> <h3>Classes</h3> <table>
--- a/Documentation/Source/eric6.install.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/eric6.install.html Sat Dec 01 11:44:34 2018 +0100 @@ -477,9 +477,9 @@ <p> The main function of the script. </p><dl> -<dt><i>argv</i></dt> +<dt><i>argv</i> (list of str)</dt> <dd> -the list of command line arguments. +list of command line arguments </dd> </dl> <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/index-eric6.Project.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/index-eric6.Project.html Sat Dec 01 11:44:34 2018 +0100 @@ -125,6 +125,9 @@ <td><a href="eric6.Project.TranslationPropertiesDialog.html">TranslationPropertiesDialog</a></td> <td>Module implementing the Translations Properties dialog.</td> </tr><tr> +<td><a href="eric6.Project.UicCompilerOptionsDialog.html">UicCompilerOptionsDialog</a></td> +<td>Module implementing a dialog to enter some non-common uic compiler options.</td> +</tr><tr> <td><a href="eric6.Project.UicLoadUi.html">UicLoadUi</a></td> <td>Module to get sys.path of an external interpreter.</td> </tr><tr>
--- a/Documentation/Source/index-eric6.html Thu Nov 01 11:48:02 2018 +0100 +++ b/Documentation/Source/index-eric6.html Sat Dec 01 11:44:34 2018 +0100 @@ -146,6 +146,9 @@ <td><a href="eric6.compileUiFiles.html">compileUiFiles</a></td> <td>Script for eric6 to compile all .ui files to Python source.</td> </tr><tr> +<td><a href="eric6.create_windows_links.html">create_windows_links</a></td> +<td>Installation script for the eric6 IDE and all eric6 related tools.</td> +</tr><tr> <td><a href="eric6.eric6.html">eric6</a></td> <td>Eric6 Python IDE.</td> </tr><tr>
--- a/E5XML/Config.py Thu Nov 01 11:48:02 2018 +0100 +++ b/E5XML/Config.py Sat Dec 01 11:44:34 2018 +0100 @@ -11,7 +11,8 @@ multiProjectFileFormatVersion = "5.1" # version numbers of the project file -projectFileFormatVersion = "6.2" +projectFileFormatVersion = "6.3" +projectFileFormatVersionIdl = "6.2" projectFileFormatVersionMake = "6.1" projectFileFormatVersionProto = "6.0" projectFileFormatVersionAlt = "5.1"
--- a/E5XML/ProjectReader.py Thu Nov 01 11:48:02 2018 +0100 +++ b/E5XML/ProjectReader.py Sat Dec 01 11:44:34 2018 +0100 @@ -19,7 +19,7 @@ """ Class for reading an XML project file. """ - supportedVersions = ["4.6", "5.0", "5.1", "6.0", "6.1", "6.2"] + supportedVersions = ["4.6", "5.0", "5.1", "6.0", "6.1", "6.2", "6.3"] def __init__(self, device, project): """ @@ -118,6 +118,9 @@ elif self.name() == "IdlCompiler": self.__readBasicDataField( "IdlCompiler", "IdlCompilerParameters", "IDLPARAMS") + elif self.name() == "UicCompiler": + self.__readBasicDataField( + "UicCompiler", "UicCompilerParameters", "UICPARAMS") elif self.name() == "ProjectTypeSpecific": self.__readBasicDataField( "ProjectTypeSpecific", "ProjectTypeSpecificData",
--- a/E5XML/ProjectWriter.py Thu Nov 01 11:48:02 2018 +0100 +++ b/E5XML/ProjectWriter.py Sat Dec 01 11:44:34 2018 +0100 @@ -14,8 +14,9 @@ from E5Gui.E5Application import e5App from .XMLStreamWriterBase import XMLStreamWriterBase -from .Config import projectFileFormatVersion, projectFileFormatVersionMake, \ - projectFileFormatVersionProto, projectFileFormatVersionAlt +from .Config import projectFileFormatVersion, projectFileFormatVersionIdl, \ + projectFileFormatVersionMake, projectFileFormatVersionProto, \ + projectFileFormatVersionAlt import Preferences import Utilities @@ -43,9 +44,12 @@ """ XMLStreamWriterBase.writeXML(self) - if not e5App().getObject("Project").hasDefaultIdlCompilerParameters(): + project = e5App().getObject("Project") + if not project.hasDefaultUicCompilerParameters(): fileFormatVersion = projectFileFormatVersion - elif not e5App().getObject("Project").hasDefaultMakeParameters(): + elif not project.hasDefaultIdlCompilerParameters(): + fileFormatVersion = projectFileFormatVersionIdl + elif not project.hasDefaultMakeParameters(): fileFormatVersion = projectFileFormatVersionMake elif self.pdata["PROTOCOLS"]: fileFormatVersion = projectFileFormatVersionProto @@ -231,6 +235,12 @@ self.writeBasics("IdlCompilerParameters", self.pdata["IDLPARAMS"]) self.writeEndElement() + # do the 'uic' parameters + if not e5App().getObject("Project").hasDefaultUicCompilerParameters(): + self.writeStartElement("UicCompiler") + self.writeBasics("UicCompilerParameters", self.pdata["UICPARAMS"]) + self.writeEndElement() + # do the extra project data stuff if len(self.pdata["PROJECTTYPESPECIFICDATA"]): self.writeStartElement("ProjectTypeSpecific")
--- a/Globals/__init__.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Globals/__init__.py Sat Dec 01 11:44:34 2018 +0100 @@ -278,12 +278,21 @@ path = modDir if not path: - # step 2.2: check for the pyqt5-tools wheel (Windows only) import distutils.sysconfig + # step 2.2.1: check for the pyqt5-tools wheel (new variant) + # (Windows only) pyqt5ToolsPath = os.path.join( - distutils.sysconfig.get_python_lib(True), "pyqt5-tools") + distutils.sysconfig.get_python_lib(True), "pyqt5_tools") if os.path.exists(os.path.join(pyqt5ToolsPath, "designer.exe")): path = pyqt5ToolsPath + if not path: + # step 2.2.2: check for the pyqt5-tools wheel (old variant) + # (Windows only) + pyqt5ToolsPath = os.path.join( + distutils.sysconfig.get_python_lib(True), "pyqt5-tools") + if os.path.exists(os.path.join(pyqt5ToolsPath, + "designer.exe")): + path = pyqt5ToolsPath if not path: # step 3: get the path from Qt
--- a/Network/IRC/IrcNetworkWidget.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Network/IRC/IrcNetworkWidget.py Sat Dec 01 11:44:34 2018 +0100 @@ -172,8 +172,11 @@ networkName = self.networkCombo.currentText() identityName = self.__manager.getNetwork(networkName)\ .getIdentityName() - awayMessage = self.__manager.getIdentity(identityName)\ - .getAwayMessage() + identity = self.__manager.getIdentity(identityName) + if identity: + awayMessage = identity.getAwayMessage() + else: + awayMessage = "" self.handleAwayCommand(awayMessage) @pyqtSlot(str)
--- a/Network/IRC/IrcWidget.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Network/IRC/IrcWidget.py Sat Dec 01 11:44:34 2018 +0100 @@ -182,54 +182,66 @@ self.__identityName = network.getIdentityName() identity = self.__ircNetworkManager.getIdentity( self.__identityName) - self.__userName = identity.getIdent() - self.__quitMessage = identity.getQuitMessage() - if self.__server: - useSSL = self.__server.useSSL() - if useSSL and not SSL_AVAILABLE: - E5MessageBox.critical( - self, - self.tr("SSL Connection"), - self.tr( - """An encrypted connection to the IRC""" - """ network was requested but SSL is not""" - """ available. Please change the server""" - """ configuration.""")) - return - - if useSSL: - # create SSL socket - self.__socket = QSslSocket(self) - self.__socket.encrypted.connect(self.__hostConnected) - self.__socket.sslErrors.connect(self.__sslErrors) - else: - # create TCP socket - self.__socket = QTcpSocket(self) - self.__socket.connected.connect(self.__hostConnected) - self.__socket.hostFound.connect(self.__hostFound) - self.__socket.disconnected.connect(self.__hostDisconnected) - self.__socket.readyRead.connect(self.__readyRead) - self.__socket.error.connect(self.__tcpError) - - self.__connectionState = IrcWidget.ServerConnecting - if useSSL: - self.networkWidget.addServerMessage( - self.tr("Info"), - self.tr("Looking for server {0} (port {1})" - " using an SSL encrypted connection" - "...").format(self.__server.getName(), - self.__server.getPort())) - self.__socket.connectToHostEncrypted( - self.__server.getName(), self.__server.getPort()) - else: - self.networkWidget.addServerMessage( - self.tr("Info"), - self.tr( - "Looking for server {0} (port {1})...").format( + if identity: + self.__userName = identity.getIdent() + self.__quitMessage = identity.getQuitMessage() + if self.__server: + useSSL = self.__server.useSSL() + if useSSL and not SSL_AVAILABLE: + E5MessageBox.critical( + self, + self.tr("SSL Connection"), + self.tr( + """An encrypted connection to the IRC""" + """ network was requested but SSL is not""" + """ available. Please change the server""" + """ configuration.""")) + return + + if useSSL: + # create SSL socket + self.__socket = QSslSocket(self) + self.__socket.encrypted.connect( + self.__hostConnected) + self.__socket.sslErrors.connect( + self.__sslErrors) + else: + # create TCP socket + self.__socket = QTcpSocket(self) + self.__socket.connected.connect( + self.__hostConnected) + self.__socket.hostFound.connect( + self.__hostFound) + self.__socket.disconnected.connect( + self.__hostDisconnected) + self.__socket.readyRead.connect( + self.__readyRead) + self.__socket.error.connect( + self.__tcpError) + + self.__connectionState = IrcWidget.ServerConnecting + if useSSL: + self.networkWidget.addServerMessage( + self.tr("Info"), + self.tr("Looking for server {0} (port {1})" + " using an SSL encrypted connection" + "...").format(self.__server.getName(), + self.__server.getPort())) + self.__socket.connectToHostEncrypted( self.__server.getName(), - self.__server.getPort())) - self.__socket.connectToHost(self.__server.getName(), - self.__server.getPort()) + self.__server.getPort() + ) + else: + self.networkWidget.addServerMessage( + self.tr("Info"), + self.tr( + "Looking for server {0} (port {1})...") + .format( + self.__server.getName(), + self.__server.getPort())) + self.__socket.connectToHost( + self.__server.getName(), + self.__server.getPort()) else: if silent: ok = True @@ -306,7 +318,8 @@ channel.setName(name) channel.setUserName(self.__nickName) identity = self.__ircNetworkManager.getIdentity(self.__identityName) - channel.setPartMessage(identity.getPartMessage()) + if identity: + channel.setPartMessage(identity.getPartMessage()) channel.setUserPrivilegePrefix(self.__userPrefix) channel.initAutoWho() @@ -370,7 +383,8 @@ channel.setName(self.__nickName) channel.setUserName(self.__nickName) identity = self.__ircNetworkManager.getIdentity(self.__identityName) - channel.setPartMessage(identity.getPartMessage()) + if identity: + channel.setPartMessage(identity.getPartMessage()) channel.setUserPrivilegePrefix(self.__userPrefix) channel.setPrivate(True, name) channel.addUsers([name, self.__nickName]) @@ -525,24 +539,26 @@ serverPassword = self.__server.getPassword() if serverPassword: self.__send("PASS " + serverPassword) + + identity = self.__ircNetworkManager.getIdentity( + self.__identityName) nick = self.networkWidget.getNickname() - if not nick: + if not nick and identity: self.__nickIndex = 0 try: - nick = self.__ircNetworkManager.getIdentity( - self.__identityName).getNickNames()[self.__nickIndex] + nick = identity.getNickNames()[self.__nickIndex] except IndexError: nick = "" if not nick: nick = self.__userName self.__nickName = nick self.networkWidget.setNickName(nick) - realName = self.__ircNetworkManager.getIdentity( - self.__identityName).getRealName() - if not realName: - realName = "eric IDE chat" - self.__send("NICK " + nick) - self.__send("USER " + self.__userName + " 0 * :" + realName) + if identity: + realName = identity.getRealName() + if not realName: + realName = "eric IDE chat" + self.__send("NICK " + nick) + self.__send("USER " + self.__userName + " 0 * :" + realName) def __hostDisconnected(self): """ @@ -834,10 +850,11 @@ Private method to register to services. """ identity = self.__ircNetworkManager.getIdentity(self.__identityName) - service = identity.getServiceName() - password = identity.getPassword() - if service and password: - self.__send("PRIVMSG " + service + " :identify " + password) + if identity: + service = identity.getServiceName() + password = identity.getPassword() + if service and password: + self.__send("PRIVMSG " + service + " :identify " + password) def __autoJoinChannels(self): """ @@ -1025,9 +1042,16 @@ """ self.__nickIndex += 1 try: - nick = self.__ircNetworkManager.getIdentity(self.__identityName)\ - .getNickNames()[self.__nickIndex] - self.__nickName = nick + identity = self.__ircNetworkManager.getIdentity( + self.__identityName) + if identity: + nick = identity.getNickNames()[self.__nickIndex] + self.__nickName = nick + else: + self.__connectNetwork("", False, True) + self.__nickName = "" + self.__nickIndex = -1 + return except IndexError: self.networkWidget.addServerMessage( self.tr("Critical"), @@ -1093,6 +1117,6 @@ if isAway and self.__identityName: identity = self.__ircNetworkManager.getIdentity( self.__identityName) - if identity.rememberAwayPosition(): + if identity and identity.rememberAwayPosition(): for channel in self.__channelList: channel.setMarkerLine()
--- a/PluginManager/PluginRepositoryDialog.py Thu Nov 01 11:48:02 2018 +0100 +++ b/PluginManager/PluginRepositoryDialog.py Sat Dec 01 11:44:34 2018 +0100 @@ -36,6 +36,7 @@ except ImportError: SSL_AVAILABLE = False +import Globals import Utilities import Preferences @@ -63,17 +64,27 @@ PluginStatusLocalUpdate = 2 PluginStatusRemoteUpdate = 3 - def __init__(self, parent=None, external=False): + def __init__(self, pluginManager, parent=None): """ Constructor - @param parent parent of this dialog (QWidget) - @param external flag indicating an instatiation as a main - window (boolean) + @param pluginManager reference to the plugin manager object + @type PluginManager + @param parent parent of this dialog + @type QWidget """ super(PluginRepositoryWidget, self).__init__(parent) self.setupUi(self) + if pluginManager is None: + # started as external plug-in repository dialog + from .PluginManager import PluginManager + self.__pluginManager = PluginManager() + self.__external = True + else: + self.__pluginManager = pluginManager + self.__external = False + self.__updateButton = self.buttonBox.addButton( self.tr("Update"), QDialogButtonBox.ActionRole) self.__downloadButton = self.buttonBox.addButton( @@ -113,8 +124,6 @@ self.pluginRepositoryFile = \ os.path.join(Utilities.getConfigDir(), "PluginRepository") - self.__external = external - # attributes for the network objects self.__networkManager = QNetworkAccessManager(self) self.__networkManager.proxyAuthenticationRequired.connect( @@ -645,7 +654,18 @@ # with the same pattern) archivesPattern = archive.rsplit('-', 1)[0] + "-*.zip" if len(glob.glob(archivesPattern)) == 0: - return PluginRepositoryWidget.PluginStatusNew + # Check against installed/loaded plug-ins + pluginName = filename.rsplit('-', 1)[0] + pluginDetails = self.__pluginManager.getPluginDetails(pluginName) + if pluginDetails is None: + return PluginRepositoryWidget.PluginStatusNew + pluginVersionTuple = Globals.versionToTuple( + pluginDetails["version"])[:3] + versionTuple = Globals.versionToTuple(version)[:3] + if pluginVersionTuple < versionTuple: + return PluginRepositoryWidget.PluginStatusRemoteUpdate + else: + return PluginRepositoryWidget.PluginStatusUpToDate # check, if the archive exists if not os.path.exists(archive): @@ -663,21 +683,16 @@ zipFile.close() if aversion == version: - if not self.__external: - # Check against installed/loaded plug-ins - pluginManager = e5App().getObject("PluginManager") - pluginName = filename.rsplit('-', 1)[0] - pluginDetails = pluginManager.getPluginDetails(pluginName) - if pluginDetails is None: - return PluginRepositoryWidget.PluginStatusLocalUpdate - if version.count(".") >= 3: - # cope for extended version numbers by ignoring - # the extension - version = ".".join(version.split(".", 3)[:3]) - if pluginDetails["version"] < version: - return PluginRepositoryWidget.PluginStatusLocalUpdate - - return PluginRepositoryWidget.PluginStatusUpToDate + # Check against installed/loaded plug-ins + pluginName = filename.rsplit('-', 1)[0] + pluginDetails = self.__pluginManager.getPluginDetails(pluginName) + if pluginDetails is None: + return PluginRepositoryWidget.PluginStatusLocalUpdate + if Globals.versionToTuple(pluginDetails["version"])[:3] < \ + Globals.versionToTuple(version)[:3]: + return PluginRepositoryWidget.PluginStatusLocalUpdate + else: + return PluginRepositoryWidget.PluginStatusUpToDate else: return PluginRepositoryWidget.PluginStatusRemoteUpdate @@ -781,11 +796,14 @@ """ Class for the dialog variant. """ - def __init__(self, parent=None): + def __init__(self, pluginManager, parent=None): """ Constructor - @param parent reference to the parent widget (QWidget) + @param pluginManager reference to the plugin manager object + @type PluginManager + @param parent reference to the parent widget + @type QWidget """ super(PluginRepositoryDialog, self).__init__(parent) self.setSizeGripEnabled(True) @@ -794,7 +812,7 @@ self.__layout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.__layout) - self.cw = PluginRepositoryWidget(self) + self.cw = PluginRepositoryWidget(pluginManager, self) size = self.cw.size() self.__layout.addWidget(self.cw) self.resize(size) @@ -830,7 +848,7 @@ @param parent reference to the parent widget (QWidget) """ super(PluginRepositoryWindow, self).__init__(parent) - self.cw = PluginRepositoryWidget(self, external=True) + self.cw = PluginRepositoryWidget(None, self) size = self.cw.size() self.setCentralWidget(self.cw) self.resize(size)
--- a/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py Sat Dec 01 11:44:34 2018 +0100 @@ -18,6 +18,7 @@ MULTIMEDIA_AVAILABLE = False from E5Gui import E5MessageBox +from E5Gui.E5Application import e5App from .Ui_TranslatorWidget import Ui_TranslatorWidget @@ -67,6 +68,7 @@ self.translateButton.setIcon( self.__translator.getAppIcon("translate.png")) self.clearButton.setIcon(UI.PixmapCache.getIcon("editDelete.png")) + self.preferencesButton.setIcon(UI.PixmapCache.getIcon("configure.png")) self.translateButton.setEnabled(False) self.clearButton.setEnabled(False) @@ -89,29 +91,30 @@ Private slot to update the language combo boxes. """ self.__ensureTranslationEngineReady() - - supportedCodes = self.__translationEngine.supportedLanguages() - enabledCodes = self.__plugin.getPreferences("EnabledLanguages") - - # 1. save current selections - origLanguage = self.origLanguageComboBox.itemData( - self.origLanguageComboBox.currentIndex()) - - # 2. reload the original language combo box - self.origLanguageComboBox.blockSignals(True) - self.origLanguageComboBox.clear() - for code in enabledCodes: - if code in supportedCodes: - language = self.__languages.getLanguage(code) - if language: - icon = self.__languages.getLanguageIcon(code) - self.origLanguageComboBox.addItem(icon, language, code) - self.origLanguageComboBox.model().sort(0) - origIndex = self.origLanguageComboBox.findData(origLanguage) - if origIndex == -1: - origIndex = 0 - self.origLanguageComboBox.blockSignals(False) - self.origLanguageComboBox.setCurrentIndex(origIndex) + if self.__translationEngine is not None: + supportedCodes = self.__translationEngine.supportedLanguages() + enabledCodes = self.__plugin.getPreferences("EnabledLanguages") + + # 1. save current selections + origLanguage = self.origLanguageComboBox.itemData( + self.origLanguageComboBox.currentIndex()) + + # 2. reload the original language combo box + self.origLanguageComboBox.blockSignals(True) + self.origLanguageComboBox.clear() + for code in enabledCodes: + if code in supportedCodes: + language = self.__languages.getLanguage(code) + if language: + icon = self.__languages.getLanguageIcon(code) + self.origLanguageComboBox.addItem( + icon, language, code) + self.origLanguageComboBox.model().sort(0) + origIndex = self.origLanguageComboBox.findData(origLanguage) + if origIndex == -1: + origIndex = 0 + self.origLanguageComboBox.blockSignals(False) + self.origLanguageComboBox.setCurrentIndex(origIndex) def __updateEngines(self): """ @@ -324,12 +327,12 @@ @type int """ self.__ensureTranslationEngineReady() - - self.__updateTranslateButton() - self.__updatePronounceButtons() - - self.__plugin.setPreferences( - "SelectedEngine", self.engineComboBox.itemData(index)) + if self.__translationEngine is not None: + self.__updateTranslateButton() + self.__updatePronounceButtons() + + self.__plugin.setPreferences( + "SelectedEngine", self.engineComboBox.itemData(index)) def __updatePronounceButtons(self): """ @@ -376,12 +379,14 @@ self.__translatorRequest = TranslatorRequest(self) self.__ensureTranslationEngineReady() - - result, ok = self.__translationEngine.getTranslation( - self.__translatorRequest, text, originalLanguage, - translationLanguage) - - return result, ok + if self.__translationEngine is None: + return "", False + else: + result, ok = self.__translationEngine.getTranslation( + self.__translatorRequest, text, originalLanguage, + translationLanguage) + + return result, ok def __pronounce(self, text, language): """ @@ -406,30 +411,30 @@ return self.__ensureTranslationEngineReady() - - if not self.__translationEngine.hasTTS(): - E5MessageBox.critical( - self, - self.tr("Translation Error"), - self.tr("The selected translation service does not support" - " the Text-to-Speech function.")) - return - - data, ok = self.__translationEngine.getTextToSpeechData( - self.__translatorRequest, text, language) - if ok: - self.__mediaFile = QTemporaryFile(self) - self.__mediaFile.open() - self.__mediaFile.setAutoRemove(False) - self.__mediaFile.write(data) + if self.__translationEngine is not None: + if not self.__translationEngine.hasTTS(): + E5MessageBox.critical( + self, + self.tr("Translation Error"), + self.tr("The selected translation service does not" + " support the Text-to-Speech function.")) + return - self.__mediaPlayer.setMedia(QMediaContent(), self.__mediaFile) - self.__mediaPlayer.play() - else: - E5MessageBox.critical( - self, - self.tr("Translation Error"), - data) + data, ok = self.__translationEngine.getTextToSpeechData( + self.__translatorRequest, text, language) + if ok: + self.__mediaFile = QTemporaryFile(self) + self.__mediaFile.open() + self.__mediaFile.setAutoRemove(False) + self.__mediaFile.write(data) + + self.__mediaPlayer.setMedia(QMediaContent(), self.__mediaFile) + self.__mediaPlayer.play() + else: + E5MessageBox.critical( + self, + self.tr("Translation Error"), + data) def __mediaPlayerStateChanged(self, state): """ @@ -441,3 +446,10 @@ self.__mediaFile.close() self.__mediaFile.remove() self.__mediaFile = None + + @pyqtSlot() + def on_preferencesButton_clicked(self): + """ + Private slot to open the Translator configuration page. + """ + e5App().getObject("UserInterface").showPreferences("translatorPage")
--- a/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui Thu Nov 01 11:48:02 2018 +0100 +++ b/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui Sat Dec 01 11:44:34 2018 +0100 @@ -48,6 +48,13 @@ </property> </spacer> </item> + <item> + <widget class="QToolButton" name="preferencesButton"> + <property name="toolTip"> + <string>Press to open the Translator configuration page</string> + </property> + </widget> + </item> </layout> </item> <item>
--- a/Preferences/ConfigurationPages/ProjectPage.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Preferences/ConfigurationPages/ProjectPage.py Sat Dec 01 11:44:34 2018 +0100 @@ -60,6 +60,8 @@ Preferences.getProject("TasksProjectAutoSave")) self.rescanTasksCheckBox.setChecked( Preferences.getProject("TasksProjectRescanOnOpen")) + self.restartShellCheckBox.setChecked( + Preferences.getProject("RestartShellForProject")) def save(self): """ @@ -113,6 +115,9 @@ Preferences.setProject( "TasksProjectRescanOnOpen", self.rescanTasksCheckBox.isChecked()) + Preferences.setProject( + "RestartShellForProject", + self.restartShellCheckBox.isChecked()) def create(dlg):
--- a/Preferences/ConfigurationPages/ProjectPage.ui Thu Nov 01 11:48:02 2018 +0100 +++ b/Preferences/ConfigurationPages/ProjectPage.ui Sat Dec 01 11:44:34 2018 +0100 @@ -7,10 +7,10 @@ <x>0</x> <y>0</y> <width>604</width> - <height>732</height> + <height>905</height> </rect> </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> + <layout class="QVBoxLayout" name="verticalLayout_3"> <item> <widget class="QLabel" name="headerLabel"> <property name="text"> @@ -216,6 +216,25 @@ </widget> </item> <item> + <widget class="QGroupBox" name="groupBox_9"> + <property name="title"> + <string>Shell</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QCheckBox" name="restartShellCheckBox"> + <property name="toolTip"> + <string>Select to restart the shell with the interpreter of the project (if configured)</string> + </property> + <property name="text"> + <string>Restart Shell for project upon opening</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> <widget class="QGroupBox" name="groupBox_7"> <property name="title"> <string>Recent Projects</string> @@ -318,6 +337,7 @@ <tabstop>projectAutoCompileResourcesCheckBox</tabstop> <tabstop>projectAutoMakeCheckBox</tabstop> <tabstop>pythonVariantCheckBox</tabstop> + <tabstop>restartShellCheckBox</tabstop> <tabstop>projectRecentSpinBox</tabstop> <tabstop>autosaveTasksCheckBox</tabstop> <tabstop>rescanTasksCheckBox</tabstop>
--- a/Preferences/ConfigurationPages/ShellPage.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Preferences/ConfigurationPages/ShellPage.py Sat Dec 01 11:44:34 2018 +0100 @@ -55,6 +55,8 @@ Preferences.getShell("CallTipsEnabled")) self.shellSyntaxHighlightingCheckBox.setChecked( Preferences.getShell("SyntaxHighlightingEnabled")) + self.rememberCheckBox.setChecked( + Preferences.getShell("StartWithMostRecentlyUsedEnvironment")) self.shellHistorySpinBox.setValue( Preferences.getShell("MaxHistoryEntries")) index = self.shellHistoryStyleComboBox.findData( @@ -94,6 +96,9 @@ "SyntaxHighlightingEnabled", self.shellSyntaxHighlightingCheckBox.isChecked()) Preferences.setShell( + "StartWithMostRecentlyUsedEnvironment", + self.rememberCheckBox.isChecked()) + Preferences.setShell( "MaxHistoryEntries", self.shellHistorySpinBox.value()) Preferences.setShell(
--- a/Preferences/ConfigurationPages/ShellPage.ui Thu Nov 01 11:48:02 2018 +0100 +++ b/Preferences/ConfigurationPages/ShellPage.ui Sat Dec 01 11:44:34 2018 +0100 @@ -83,6 +83,16 @@ </property> </widget> </item> + <item row="2" column="1"> + <widget class="QCheckBox" name="rememberCheckBox"> + <property name="toolTip"> + <string>Select to start with the most recently used virtual environment</string> + </property> + <property name="text"> + <string>Start with most recently used virtual environment</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -285,6 +295,7 @@ <tabstop>shellSyntaxHighlightingCheckBox</tabstop> <tabstop>shellWordWrapCheckBox</tabstop> <tabstop>shellCTEnabledCheckBox</tabstop> + <tabstop>rememberCheckBox</tabstop> <tabstop>shellHistorySpinBox</tabstop> <tabstop>shellHistoryStyleComboBox</tabstop> <tabstop>shellHistoryWrapCheckBox</tabstop>
--- a/Preferences/__init__.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Preferences/__init__.py Sat Dec 01 11:44:34 2018 +0100 @@ -779,6 +779,7 @@ "TasksProjectRescanOnOpen": True, "DebugClientsHistory": [], "DebuggerInterpreterHistory": [], + "RestartShellForProject": True, } # defaults for the multi project settings @@ -1341,6 +1342,8 @@ "UseMonospacedFont": False, "MonospacedFont": "Courier,10,-1,5,50,0,0,0,0,0", "MarginsFont": "Sans Serif,10,-1,5,50,0,0,0,0,0", + "LastVirtualEnvironment": "", + "StartWithMostRecentlyUsedEnvironment": True, } # defaults for Qt related stuff @@ -2520,6 +2523,9 @@ elif key in ["HistoryStyle"]: return ShellHistoryStyle(int(prefClass.settings.value( "Shell/" + key, prefClass.shellDefaults[key].value))) + elif key in ["LastVirtualEnvironment"]: + return prefClass.settings.value( + "Shell/" + key, prefClass.shellDefaults[key]) else: return toBool(prefClass.settings.value( "Shell/" + key, prefClass.shellDefaults[key]))
--- a/Project/CreateDialogCodeDialog.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Project/CreateDialogCodeDialog.py Sat Dec 01 11:44:34 2018 +0100 @@ -18,7 +18,7 @@ import xml.etree.ElementTree from PyQt5.QtCore import QMetaObject, QByteArray, QRegExp, Qt, pyqtSlot, \ - QMetaMethod, QSortFilterProxyModel, QProcess + QMetaMethod, QSortFilterProxyModel, QProcess, QProcessEnvironment from PyQt5.QtGui import QStandardItemModel, QBrush, QStandardItem from PyQt5.QtWidgets import QWidget, QDialog, QDialogButtonBox, QAction from PyQt5 import uic @@ -146,7 +146,75 @@ @return flag indicating an initialzation error (boolean) """ return self.__initError + + def __runUicLoadUi(self, command): + """ + Private method to run the UicLoadUi.py script with the given command + and return the output. + @param command uic command to be run + @type str + @return tuple of process output and error flag + @rtype tuple of (str, bool) + """ + venvName = self.project.getDebugProperty("VIRTUALENV") + venvManager = e5App().getObject("VirtualEnvManager") + interpreter = venvManager.getVirtualenvInterpreter(venvName) + execPath = venvManager.getVirtualenvExecPath(venvName) + + env = QProcessEnvironment.systemEnvironment() + if execPath: + if env.contains("PATH"): + env.insert( + "PATH", os.pathsep.join([execPath, env.value("PATH")]) + ) + else: + env.insert("PATH", execPath) + + loadUi = os.path.join(os.path.dirname(__file__), "UicLoadUi.py") + args = [ + loadUi, + command, + self.formFile, + self.project.getProjectPath(), + ] + + uicText = "" + ok = False + + proc = QProcess() + proc.setWorkingDirectory(self.project.getProjectPath()) + proc.setProcessEnvironment(env) + proc.start(interpreter, args) + started = proc.waitForStarted(5000) + finished = proc.waitForFinished(30000) + if started and finished: + output = proc.readAllStandardOutput() + outText = str(output, "utf-8", "replace") + if proc.exitCode() == 0: + ok = True + uicText = outText.strip() + else: + E5MessageBox.critical( + self, + self.tr("uic error"), + self.tr( + """<p>There was an error loading the form <b>{0}</b>""" + """.</p><p>{1}</p>""").format( + self.formFile, outText) + ) + else: + E5MessageBox.critical( + self, + self.tr("uic error"), + self.tr( + """<p>The project specific Python interpreter <b>{0}</b>""" + """ could not be started or did not finish within 30""" + """ seconds.</p>""").format(interpreter) + ) + + return uicText, ok + def __objectNameExternal(self): """ Private method to get the object name of a form via an external @@ -155,33 +223,11 @@ @return object name @rtype str """ - interpreter = self.project.getDebugProperty("INTERPRETER") objectName = "" - loadUi = os.path.join(os.path.dirname(__file__), "UicLoadUi.py") - args = [ - loadUi, - "object_name", - self.formFile, - self.project.getProjectPath(), - ] - - proc = QProcess() - proc.start(interpreter, args) - finished = proc.waitForFinished(30000) - if finished: - text = proc.readAllStandardOutput() - if proc.exitCode() == 0: - objectName = str(text, "utf-8", "replace").strip() - else: - errorText = str(text, "utf-8", "replace") - E5MessageBox.critical( - self, - self.tr("uic error"), - self.tr( - """<p>There was an error loading the form <b>{0}</b>""" - """.</p><p>{1}</p>""").format( - self.formFile, errorText)) + output, ok = self.__runUicLoadUi("object_name") + if ok and output: + objectName = output return objectName @@ -192,7 +238,7 @@ @return object name @rtype str """ - if self.project.getDebugProperty("INTERPRETER"): + if self.project.getDebugProperty("VIRTUALENV"): return self.__objectNameExternal() else: try: @@ -217,33 +263,11 @@ @return class name @rtype str """ - interpreter = self.project.getDebugProperty("INTERPRETER") className = "" - loadUi = os.path.join(os.path.dirname(__file__), "UicLoadUi.py") - args = [ - loadUi, - "class_name", - self.formFile, - self.project.getProjectPath(), - ] - - proc = QProcess() - proc.start(interpreter, args) - finished = proc.waitForFinished(30000) - if finished: - text = proc.readAllStandardOutput() - if proc.exitCode() == 0: - className = str(text, "utf-8", "replace").strip() - else: - errorText = str(text, "utf-8", "replace") - E5MessageBox.critical( - self, - self.tr("uic error"), - self.tr( - """<p>There was an error loading the form <b>{0}</b>""" - """.</p><p>{1}</p>""").format( - self.formFile, errorText)) + output, ok = self.__runUicLoadUi("class_name") + if ok and output: + className = output return className @@ -254,8 +278,8 @@ @return class name @rtype str """ - if self.project.getDebugProperty("INTERPRETER"): - return self.__objectNameExternal() + if self.project.getDebugProperty("VIRTUALENV"): + return self.__classNameExternal() else: try: dlg = uic.loadUi( @@ -327,36 +351,9 @@ Private slot to update the slots tree display getting the data via an external interpreter. """ - interpreter = self.project.getDebugProperty("INTERPRETER") - objectsList = [] - - loadUi = os.path.join(os.path.dirname(__file__), "UicLoadUi.py") - args = [ - loadUi, - "signatures", - self.formFile, - self.project.getProjectPath(), - ] - - proc = QProcess() - proc.start(interpreter, args) - finished = proc.waitForFinished(30000) - if not finished: - return - - text = proc.readAllStandardOutput() - if proc.exitCode() != 0: - errorText = str(text, "utf-8", "replace") - E5MessageBox.critical( - self, - self.tr("uic error"), - self.tr( - """<p>There was an error loading the form <b>{0}</b>""" - """.</p><p>{1}</p>""").format( - self.formFile, errorText)) - else: - objectsListStr = str(text, "utf-8", "replace").strip() - objectsList = json.loads(objectsListStr) + output, ok = self.__runUicLoadUi("signatures") + if ok and output: + objectsList = json.loads(output.strip()) signatureList = self.__signatures() @@ -406,7 +403,7 @@ """ self.filterEdit.clear() - if self.project.getDebugProperty("INTERPRETER"): + if self.project.getDebugProperty("VIRTUALENV"): self.__updateSlotsModelExternal() else: try:
--- a/Project/Project.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Project/Project.py Sat Dec 01 11:44:34 2018 +0100 @@ -47,7 +47,7 @@ """ Class implementing the project management functionality. - @signal dirty(int) emitted when the dirty state changes + @signal dirty(bool) emitted when the dirty state changes @signal projectLanguageAdded(str) emitted after a new language was added @signal projectLanguageAddedByCode(str) emitted after a new language was added. The language code is sent by this signal. @@ -108,7 +108,7 @@ @signal appendStderr(str) emitted after something was received from a QProcess on stderr """ - dirty = pyqtSignal(int) + dirty = pyqtSignal(bool) projectLanguageAdded = pyqtSignal(str) projectLanguageAddedByCode = pyqtSignal(str) projectLanguageRemoved = pyqtSignal(str) @@ -496,6 +496,10 @@ "DefinedNames": [], "UndefinedNames": [], }, + "UICPARAMS": { + "Package": "", + "RcSuffix": "", + }, "EOL": -1, } @@ -712,17 +716,18 @@ self.__model.preferencesChanged() - def setDirty(self, b): + def setDirty(self, dirty): """ Public method to set the dirty state. - It emits the signal dirty(int). - - @param b dirty state (boolean) - """ - self.__dirty = b - self.saveAct.setEnabled(b) - self.dirty.emit(bool(b)) + It emits the signal dirty(bool). + + @param dirty dirty state + @type bool + """ + self.__dirty = dirty + self.saveAct.setEnabled(dirty) + self.dirty.emit(dirty) if self.__dirty: self.projectChanged.emit() @@ -2953,6 +2958,11 @@ self.menuMakeAct.setEnabled( self.pdata["MAKEPARAMS"]["MakeEnabled"]) + # open a project debugger properties file being quiet + # about errors + if Preferences.getProject("AutoLoadDbgProperties"): + self.__readDebugProperties(True) + self.__model.projectOpened() self.projectOpenedHooks.emit() self.projectOpened.emit() @@ -2986,11 +2996,6 @@ elif Preferences.getProject("AutoLoadSession"): self.__readSession(quiet=True) - # open a project debugger properties file being quiet - # about errors - if Preferences.getProject("AutoLoadDbgProperties"): - self.__readDebugProperties(True) - # start the VCS monitor thread if self.vcs is not None: self.vcs.startStatusMonitor(self) @@ -5681,3 +5686,20 @@ "DefinedNames": [], "UndefinedNames": [], } + + ######################################################################### + ## Below are methods implementing the some 'UIC' support functions + ######################################################################### + + def hasDefaultUicCompilerParameters(self): + """ + Public method to test, if the project contains the default uic compiler + parameters. + + @return flag indicating default parameter set + @rtype bool + """ + return self.pdata["UICPARAMS"] == { + "Package": "", + "RcSuffix": "", + }
--- a/Project/ProjectFormsBrowser.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Project/ProjectFormsBrowser.py Sat Dec 01 11:44:34 2018 +0100 @@ -112,6 +112,10 @@ ] self.compileProc = None + self.__uicompiler = "" + + self.project.projectClosed.connect(self.__resetUiCompiler) + self.project.projectPropertiesChanged.connect(self.__resetUiCompiler) def _createPopupMenus(self): """ @@ -137,6 +141,10 @@ self.__generateDialogCode) self.menu.addSeparator() self.menu.addAction( + self.tr('Configure uic Compiler'), + self.__configureUicCompiler) + self.menu.addSeparator() + self.menu.addAction( self.tr('Open in Qt-Designer'), self.__openFile) self.menu.addAction( self.tr('Open in Editor'), self.__openFileInEditor) @@ -209,6 +217,10 @@ self.backMenu.addAction( self.tr('Compile all forms'), self.__compileAllForms) self.backMenu.addSeparator() + self.backMenu.addAction( + self.tr('Configure uic Compiler'), + self.__configureUicCompiler) + self.backMenu.addSeparator() self.backMenu.addAction(self.tr('New form...'), self.__newForm) else: if self.hooks["newForm"] is not None: @@ -232,10 +244,14 @@ self.multiMenu = QMenu(self) if self.project.getProjectType() in \ ["Qt4", "PyQt5", "E6Plugin", "PySide", "PySide2"]: - act = self.multiMenu.addAction( + self.multiMenu.addAction( self.tr('Compile forms'), self.__compileSelectedForms) self.multiMenu.addSeparator() self.multiMenu.addAction( + self.tr('Configure uic Compiler'), + self.__configureUicCompiler) + self.multiMenu.addSeparator() + self.multiMenu.addAction( self.tr('Open in Qt-Designer'), self.__openFile) self.multiMenu.addAction( self.tr('Open in Editor'), self.__openFileInEditor) @@ -277,6 +293,10 @@ self.dirMenu.addAction( self.tr('Compile all forms'), self.__compileAllForms) self.dirMenu.addSeparator() + self.dirMenu.addAction( + self.tr('Configure uic Compiler'), + self.__configureUicCompiler) + self.dirMenu.addSeparator() else: if self.hooks["compileAllForms"] is not None: self.dirMenu.addAction( @@ -322,6 +342,10 @@ self.dirMultiMenu.addAction( self.tr('Compile all forms'), self.__compileAllForms) self.dirMultiMenu.addSeparator() + self.dirMultiMenu.addAction( + self.tr('Configure uic Compiler'), + self.__configureUicCompiler) + self.dirMultiMenu.addSeparator() else: if self.hooks["compileAllForms"] is not None: self.dirMultiMenu.addAction( @@ -634,6 +658,58 @@ ## Methods to handle the various compile commands ########################################################################### + def __resetUiCompiler(self): + """ + Private slot to reset the determined UI compiler executable. + """ + self.__uicompiler = "" + + def __determineUiCompiler(self): + """ + Private method to determine the UI compiler for the project. + """ + self.__resetUiCompiler() + + if self.project.getProjectLanguage() in \ + ["Python", "Python2", "Python3"]: + if self.project.getProjectType() in ["Qt4", ]: + self.__uicompiler = Utilities.generatePyQtToolPath( + 'pyuic4', ["py3uic4", "py2uic4"]) + elif self.project.getProjectType() in ["PyQt5"]: + self.__uicompiler = Utilities.generatePyQtToolPath( + 'pyuic5', ["py3uic5", "py2uic5"]) + elif self.project.getProjectType() in ["E6Plugin"]: + if PYQT_VERSION < 0x050000: + self.__uicompiler = Utilities.generatePyQtToolPath( + 'pyuic4', ["py3uic4", "py2uic4"]) + else: + self.__uicompiler = Utilities.generatePyQtToolPath( + 'pyuic5', ["py3uic5", "py2uic5"]) + elif self.project.getProjectType() == "PySide": + self.__uicompiler = \ + Utilities.generatePySideToolPath('pyside-uic', "1") + elif self.project.getProjectType() == "PySide2": + self.__uicompiler = \ + Utilities.generatePySideToolPath('pyside2-uic', "2") + elif self.project.getProjectLanguage() == "Ruby": + if self.project.getProjectType() == "Qt4": + self.__uicompiler = 'rbuic4' + if Utilities.isWindowsPlatform(): + self.__uicompiler = \ + Utilities.getWindowsExecutablePath(self.__uicompiler) + + def getUiCompiler(self): + """ + Public method to get the UI compiler executable of the project. + + @return UI compiler executable + @rtype str + """ + if not self.__uicompiler: + self.__determineUiCompiler() + + return self.__uicompiler + def __readStdout(self): """ Private slot to handle the readyReadStandardOutput signal of the @@ -659,7 +735,7 @@ self.compileProc.setReadChannel(QProcess.StandardError) while self.compileProc and self.compileProc.canReadLine(): - s = self.uicompiler + ': ' + s = self.__uicompiler + ': ' error = str(self.compileProc.readLine(), ioEncoding, 'replace') s += error @@ -742,38 +818,8 @@ args = [] self.buf = "" - if self.project.getProjectLanguage() in \ - ["Python", "Python2", "Python3"]: - if self.project.getProjectType() in ["Qt4", ]: - self.uicompiler = Utilities.generatePyQtToolPath( - 'pyuic4', ["py3uic4", "py2uic4"]) - elif self.project.getProjectType() in ["PyQt5"]: - self.uicompiler = Utilities.generatePyQtToolPath( - 'pyuic5', ["py3uic5", "py2uic5"]) - elif self.project.getProjectType() in ["E6Plugin"]: - if PYQT_VERSION < 0x050000: - self.uicompiler = Utilities.generatePyQtToolPath( - 'pyuic4', ["py3uic4", "py2uic4"]) - else: - self.uicompiler = Utilities.generatePyQtToolPath( - 'pyuic5', ["py3uic5", "py2uic5"]) - elif self.project.getProjectType() == "PySide": - self.uicompiler = \ - Utilities.generatePySideToolPath('pyside-uic', "1") - elif self.project.getProjectType() == "PySide2": - self.uicompiler = \ - Utilities.generatePySideToolPath('pyside2-uic', "2") - else: - return None - elif self.project.getProjectLanguage() == "Ruby": - if self.project.getProjectType() == "Qt4": - self.uicompiler = 'rbuic4' - if Utilities.isWindowsPlatform(): - self.uicompiler = \ - Utilities.getWindowsExecutablePath(self.uicompiler) - else: - return None - else: + uicompiler = self.getUiCompiler() + if not uicompiler: return None ofn, ext = os.path.splitext(fn) @@ -787,8 +833,24 @@ indentWidth = Preferences.getQt("PyuicIndent") if indentWidth != self.PyuicIndentDefault: args.append("--indent={0}".format(indentWidth)) - if Preferences.getQt("PyuicFromImports"): - args.append("--from-imports") + + if self.project.getProjectType() in ["PySide", "PySide2"]: + # PySide and PySide2 + if Preferences.getQt("PyuicFromImports"): + args.append("--from-imports") + else: + # PyQt4 and PyQt5 + if 'uic5' in uicompiler and \ + PYQT_VERSION >= 0x050600 and \ + self.project.pdata["UICPARAMS"]["Package"]: + # only supported for PyQt5 >= 5.6 (April 2016) + args.append("--import-from={0}".format( + self.project.pdata["UICPARAMS"]["Package"])) + elif Preferences.getQt("PyuicFromImports"): + args.append("--from-imports") + if self.project.pdata["UICPARAMS"]["RcSuffix"]: + args.append("--resource-suffix={0}".format( + self.project.pdata["UICPARAMS"]["RcSuffix"])) elif self.project.getProjectLanguage() == "Ruby": self.compiledFile = ofn + '.rb' args.append('-x') @@ -799,7 +861,7 @@ self.compileProc.readyReadStandardError.connect(self.__readStderr) self.noDialog = noDialog - self.compileProc.start(self.uicompiler, args) + self.compileProc.start(uicompiler, args) procStarted = self.compileProc.waitForStarted(5000) if procStarted: self.compileRunning = True @@ -815,7 +877,7 @@ self.tr( 'Could not start {0}.<br>' 'Ensure that it is in the search path.' - ).format(self.uicompiler)) + ).format(uicompiler)) return None def __generateDialogCode(self): @@ -996,6 +1058,33 @@ Public slot used to handle the preferencesChanged signal. """ ProjectBaseBrowser.handlePreferencesChanged(self) + + self.__resetUiCompiler() + + def __configureUicCompiler(self): + """ + Private slot to configure some non-common uic compiler options. + """ + from .UicCompilerOptionsDialog import UicCompilerOptionsDialog + + params = self.project.pdata["UICPARAMS"] + + if self.project.getProjectType() in ["Qt4", "PyQt5", "E6Plugin"]: + dlg = UicCompilerOptionsDialog(params, self.getUiCompiler()) + if dlg.exec_() == QDialog.Accepted: + package, suffix = dlg.getData() + if package != params["Package"]: + params["Package"] = package + self.project.setDirty(True) + if suffix != params["RcSuffix"]: + params["RcSuffix"] = suffix + self.project.setDirty(True) + elif self.project.getProjectType() in ["PySide", "PySide2"]: + E5MessageBox.information( + self, + self.tr("Configure uic Compiler"), + self.tr("""No project specific uic compiler flags are""" + """ supported for PySide or PySide2.""")) ########################################################################### ## Support for hooks below
--- a/Project/ProjectTranslationsBrowser.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Project/ProjectTranslationsBrowser.py Sat Dec 01 11:44:34 2018 +0100 @@ -1155,13 +1155,7 @@ "The release of the translation files (*.qm) has failed.")) for index in range(len(self.__lreleaseProcesses)): - if proc == self.__lreleaseProcesses[index][0]: - try: - self.__tmpProjects.remove( - self.__lreleaseProcesses[index][1]) - os.remove(self.__lreleaseProcesses[index][1]) - except EnvironmentError: - pass + if proc == self.__lreleaseProcesses[index]: del self.__lreleaseProcesses[index] break if not self.__lreleaseProcesses: @@ -1193,16 +1187,6 @@ self.hooks["releaseSelected"](li) return - # generate a minimal temporary projectfile suitable for lrelease - self.__tmpProjects = [] - if self.project.getProjectLanguage() in \ - ["Python", "Python2", "Python3"]: - ok = self.__writeTempProjectFile(langs, [".py"]) - else: - ok = False - if not ok: - return - if self.project.getProjectType() in \ ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", "PySide", "PySideC", "PySide2", "PySideC2"]: @@ -1214,42 +1198,53 @@ if Utilities.isWindowsPlatform(): lrelease = lrelease + '.exe' + if langs: + langs = [self.project.getRelativePath(lang.fileName()) + for lang in langs if lang.fileName().endswith('.ts')] + else: + try: + pattern = self.project.pdata["TRANSLATIONPATTERN"]\ + .replace("%language%", "*") + langs = [lang for lang in self.project.pdata["TRANSLATIONS"] + if fnmatch.fnmatch(lang, pattern)] + except IndexError: + langs = [] + if not langs: + E5MessageBox.warning( + self, + self.tr("Write temporary project file"), + self.tr("""No translation files (*.ts) selected.""")) + return + self.__lreleaseProcesses = [] - for tempProjectFile in self.__tmpProjects[:]: - proc = QProcess() - args = [] - - args.append('-verbose') - path, filename = os.path.split(tempProjectFile) + args = [] + args.append('-verbose') + for langFile in langs: + path, filename = os.path.split(langFile) args.append(filename) - proc.setWorkingDirectory(os.path.join(self.project.ppath, path)) - proc.finished.connect( - lambda c, s: self.__releaseTSFileDone(c, s, proc)) - proc.readyReadStandardOutput.connect( - lambda: self.__readStdoutLrelease(proc)) - proc.readyReadStandardError.connect( - lambda: self.__readStderrLrelease(proc)) - - proc.start(lrelease, args) - procStarted = proc.waitForStarted() - if procStarted: - self.lreleaseProcRunning = True - self.__lreleaseProcesses.append((proc, tempProjectFile)) - else: - E5MessageBox.critical( - self, - self.tr('Process Generation Error'), - self.tr( - '<p>Could not start lrelease.<br>' - 'Ensure that it is available as <b>{0}</b>.</p>' - ).format(lrelease)) - - # cleanup - try: - self.__tmpProjects.remove(tempProjectFile) - os.remove(tempProjectFile) - except EnvironmentError: - pass + + proc = QProcess() + proc.setWorkingDirectory(os.path.join(self.project.ppath, path)) + proc.finished.connect( + lambda c, s: self.__releaseTSFileDone(c, s, proc)) + proc.readyReadStandardOutput.connect( + lambda: self.__readStdoutLrelease(proc)) + proc.readyReadStandardError.connect( + lambda: self.__readStderrLrelease(proc)) + + proc.start(lrelease, args) + procStarted = proc.waitForStarted() + if procStarted: + self.lreleaseProcRunning = True + self.__lreleaseProcesses.append(proc) + else: + E5MessageBox.critical( + self, + self.tr('Process Generation Error'), + self.tr( + '<p>Could not start lrelease.<br>' + 'Ensure that it is available as <b>{0}</b>.</p>' + ).format(lrelease)) def __releaseSelected(self): """
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Project/UicCompilerOptionsDialog.py Sat Dec 01 11:44:34 2018 +0100 @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2018 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to enter some non-common uic compiler options. +""" + +from __future__ import unicode_literals + +from PyQt5.QtCore import PYQT_VERSION +from PyQt5.QtWidgets import QDialog + +from .Ui_UicCompilerOptionsDialog import Ui_UicCompilerOptionsDialog + + +class UicCompilerOptionsDialog(QDialog, Ui_UicCompilerOptionsDialog): + """ + Class implementing a dialog to enter some non-common uic compiler options. + """ + def __init__(self, compilerOptions, compiler, parent=None): + """ + Constructor + + @param compilerOptions dictionary containing the uic compiler options + @type dict + @param compiler name of the uic compiler executable + @type str + @param parent reference to the parent widget + @type QWidget + """ + super(UicCompilerOptionsDialog, self).__init__(parent) + self.setupUi(self) + + self.packageEdit.setText(compilerOptions["Package"]) + self.suffixEdit.setText(compilerOptions["RcSuffix"]) + + if 'uic5' not in compiler or PYQT_VERSION < 0x050600: + # only supported for PyQt5 >= 5.6 (April 2016) + self.packageGroup.setEnabled(False) + + msh = self.minimumSizeHint() + self.resize(max(self.width(), msh.width()), msh.height()) + + def getData(self): + """ + Public method to get the entered data. + + @return tuple containing the package and the rc-file suffix + @rtype tuple of (str, str) + """ + return ( + self.packageEdit.text().strip(), + self.suffixEdit.text().strip(), + )
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Project/UicCompilerOptionsDialog.ui Sat Dec 01 11:44:34 2018 +0100 @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UicCompilerOptionsDialog</class> + <widget class="QDialog" name="UicCompilerOptionsDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>500</width> + <height>246</height> + </rect> + </property> + <property name="windowTitle"> + <string>uic Compiler Options</string> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QGroupBox" name="packageGroup"> + <property name="title"> + <string>'import' Package</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="E5ClearableLineEdit" name="packageEdit"> + <property name="toolTip"> + <string>Enter the package name</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string><b>Note</b>: This generates statements like 'from PACKAGE import ...'.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="suffixGroup"> + <property name="title"> + <string>Resources Suffix</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="E5ClearableLineEdit" name="suffixEdit"> + <property name="toolTip"> + <string>Enter the suffix of compiled resource files (default: _rc)</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string><b>Note</b>: Leave the suffix empty to use the default of '_rc'.</string> + </property> + <property name="wordWrap"> + <bool>true</bool> + </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> + <customwidgets> + <customwidget> + <class>E5ClearableLineEdit</class> + <extends>QLineEdit</extends> + <header>E5Gui/E5LineEdit.h</header> + </customwidget> + </customwidgets> + <tabstops> + <tabstop>packageEdit</tabstop> + <tabstop>suffixEdit</tabstop> + </tabstops> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>UicCompilerOptionsDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>UicCompilerOptionsDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- a/QScintilla/Editor.py Thu Nov 01 11:48:02 2018 +0100 +++ b/QScintilla/Editor.py Sat Dec 01 11:44:34 2018 +0100 @@ -6006,14 +6006,12 @@ """ conflictMarkerLines = [] - for searchRe in Editor.VcsConflictMarkerLineRegExpList: - ok = self.findFirstTarget(searchRe, True, False, False, 0, 0) - while ok: - spos = self.getFoundTarget()[0] - line = self.lineIndexFromPosition(spos)[0] - conflictMarkerLines.append(line) - - ok = self.findNextTarget() + regExp = re.compile("|".join(Editor.VcsConflictMarkerLineRegExpList), + re.MULTILINE) + matches = [m for m in regExp.finditer(self.text())] + for match in matches: + line, _ = self.lineIndexFromPosition(match.start()) + conflictMarkerLines.append(line) return conflictMarkerLines
--- a/QScintilla/SearchReplaceWidget.py Thu Nov 01 11:48:02 2018 +0100 +++ b/QScintilla/SearchReplaceWidget.py Sat Dec 01 11:44:34 2018 +0100 @@ -56,7 +56,7 @@ self.replaceHistory = vm.getSRHistory('replace') self.ui = Ui_ReplaceWidget() whatsThis = self.tr( - r"""<b>Find and Replace</b> + """<b>Find and Replace</b> <p>This dialog is used to find some text and replace it with another text. By checking the various checkboxes, the search can be made more specific. The search string might be a regular expression. In a regular expression, @@ -67,7 +67,7 @@ from .Ui_SearchWidget import Ui_SearchWidget self.ui = Ui_SearchWidget() whatsThis = self.tr( - r"""<b>Find</b> + """<b>Find</b> <p>This dialog is used to find some text. By checking the various checkboxes, the search can be made more specific. The search string might be a regular expression. In a regular expression, special characters interpreted are:</p> @@ -78,22 +78,22 @@ self.ui.wrapCheckBox.setChecked(True) whatsThis += self.tr( - r"""<table border="0"> + """<table border="0"> <tr><td><code>.</code></td><td>Matches any character</td></tr> -<tr><td><code>\(</code></td><td>This marks the start of a region for tagging a +<tr><td><code>(</code></td><td>This marks the start of a region for tagging a match.</td></tr> -<tr><td><code>\)</code></td><td>This marks the end of a tagged region. +<tr><td><code>)</code></td><td>This marks the end of a tagged region. </td></tr> <tr><td><code>\\n</code></td> <td>Where <code>n</code> is 1 through 9 refers to the first through ninth tagged region when replacing. For example, if the search string was -<code>Fred\([1-9]\)XXX</code> and the replace string was <code>Sam\1YYY</code>, -when applied to <code>Fred2XXX</code> this would generate <code>Sam2YYY</code>. -</td></tr> -<tr><td><code>\<</code></td> +<code>Fred([1-9])XXX</code> and the replace string was +<code>Sam\\1YYY</code>, when applied to <code>Fred2XXX</code> this would +generate <code>Sam2YYY</code>.</td></tr> +<tr><td><code>\\<</code></td> <td>This matches the start of a word using Scintilla's definitions of words. </td></tr> -<tr><td><code>\></code></td> +<tr><td><code>\\></code></td> <td>This matches the end of a word using Scintilla's definition of words. </td></tr> <tr><td><code>\\x</code></td> @@ -548,7 +548,8 @@ self.ui.wordCheckBox.isChecked(), self.ui.wrapCheckBox.isChecked(), not backwards, - line, index) + line, index, + posix=self.ui.regexpCheckBox.isChecked()) if ok and self.ui.selectionCheckBox.isChecked(): lineFrom, indexFrom, lineTo, indexTo = aw.getSelection() @@ -599,7 +600,8 @@ self.ui.wordCheckBox.isChecked(), self.ui.wrapCheckBox.isChecked(), not backwards, - line, index) + line, index, + posix=self.ui.regexpCheckBox.isChecked()) if ok: lineFrom, indexFrom, lineTo, indexTo = \ aw.getSelection() @@ -625,7 +627,8 @@ self.ui.wordCheckBox.isChecked(), self.ui.wrapCheckBox.isChecked(), not backwards, - line, index) + line, index, + posix=self.ui.regexpCheckBox.isChecked()) if ok: lineFrom, indexFrom, lineTo, indexTo = \ aw.getSelection() @@ -842,7 +845,8 @@ self.ui.regexpCheckBox.isChecked(), self.ui.caseCheckBox.isChecked(), self.ui.wordCheckBox.isChecked(), - False, True, line, index) + False, True, line, index, + posix=self.ui.regexpCheckBox.isChecked()) if ok and self.ui.selectionCheckBox.isChecked(): lineFrom, indexFrom, lineTo, indexTo = aw.getSelection() @@ -881,7 +885,8 @@ self.ui.regexpCheckBox.isChecked(), self.ui.caseCheckBox.isChecked(), self.ui.wordCheckBox.isChecked(), - False, True, line, index) + False, True, line, index, + posix=self.ui.regexpCheckBox.isChecked()) if ok: lineFrom, indexFrom, lineTo, indexTo = \ aw.getSelection()
--- a/QScintilla/Shell.py Thu Nov 01 11:48:02 2018 +0100 +++ b/QScintilla/Shell.py Sat Dec 01 11:44:34 2018 +0100 @@ -41,18 +41,24 @@ """ Class implementing the containing widget for the shell. """ - def __init__(self, dbs, vm, horizontal=True, parent=None): + def __init__(self, dbs, vm, project, horizontal=True, parent=None): """ Constructor @param dbs reference to the debug server object + @type DebugServer @param vm reference to the viewmanager object - @param horizontal flag indicating a horizontal layout (boolean) - @param parent parent widget (QWidget) + @type ViewManager + @param project reference to the project object + @type Project + @param horizontal flag indicating a horizontal layout + @type bool + @param parent parent widget + @type QWidget """ super(ShellAssembly, self).__init__(parent) - self.__shell = Shell(dbs, vm, False, self) + self.__shell = Shell(dbs, vm, project, False, self) from UI.SearchWidget import SearchWidget self.__searchWidget = SearchWidget(self.__shell, self, horizontal) @@ -111,20 +117,28 @@ @signal historyStyleChanged(ShellHistoryStyle) emitted to indicate a change of the history style @signal queueText(str) emitted to queue some text for processing + @signal virtualEnvironmentChanged(str) emitted to signal the new virtual + environment of the shell """ searchStringFound = pyqtSignal(bool) historyStyleChanged = pyqtSignal(ShellHistoryStyle) queueText = pyqtSignal(str) + virtualEnvironmentChanged = pyqtSignal(str) - def __init__(self, dbs, vm, windowedVariant, parent=None): + def __init__(self, dbs, vm, project, windowedVariant, parent=None): """ Constructor @param dbs reference to the debug server object + @type DebugServer @param vm reference to the viewmanager object + @type ViewManager + @param project reference to the project object + @type Project @param windowedVariant flag indicating the shell window variant - (boolean) - @param parent parent widget (QWidget) + @type bool + @param parent parent widget + @type QWidget """ super(Shell, self).__init__(parent) self.setUtf8(True) @@ -133,6 +147,7 @@ self.__mainWindow = parent self.__lastSearch = () self.__windowed = windowedVariant + self.__currentVenv = "" self.linesepRegExp = r"\r\n|\n|\r" @@ -153,14 +168,18 @@ """ cursor keys on the Shell page of the configuration""" """ dialog. Pressing these keys after some text has been""" """ entered will start an incremental search.</p>""" - """<p>The shell has some special commands. 'reset' kills the""" - """ shell and starts a new one. 'clear' clears the display""" - """ of the shell window. 'start' is used to switch the shell""" - """ language and must be followed by a supported language.""" - """ Supported languages are listed by the 'languages'""" - """ command. 'quit' is used to exit the application.These""" - """ commands (except 'languages') are available through the""" - """ window menus as well.</p>""" + """<p>The shell has some special commands. 'restart' kills""" + """ the shell and starts a new one. 'clear' clears the""" + """ display of the shell window. 'start' is used to start a""" + """ shell for a virtual environment and should be followed""" + """ by a virtual environment name. start' without a virtual""" + """ environment name starts the default shell. Available""" + """ virtual environments may be listed with the 'envs' or""" + """ 'environments' commands. The active virtual environment""" + """ can be questioned by the 'which' command. 'quit' or""" + """ 'exit' is used to exit the application. These commands""" + """ (except environments', 'envs' and 'which') are available""" + """ through the window menus as well.</p>""" """<p>Pressing the Tab key after some text has been entered""" """ will show a list of possible completions. The relevant""" """ entry may be selected from this list. If only one entry""" @@ -180,13 +199,17 @@ """ cursor keys on the Shell page of the configuration""" """ dialog. Pressing these keys after some text has been""" """ entered will start an incremental search.</p>""" - """<p>The shell has some special commands. 'reset' kills the""" - """ shell and starts a new one. 'clear' clears the display""" - """ of the shell window. 'start' is used to switch the shell""" - """ language and must be followed by a supported language.""" - """ Supported languages are listed by the 'languages'""" - """ command. These commands (except 'languages') are""" - """ available through the context menu as well.</p>""" + """<p>The shell has some special commands. 'restart' kills""" + """ the shell and starts a new one. 'clear' clears the""" + """ display of the shell window. 'start' is used to start a""" + """ shell for a virtual environment and should be followed""" + """ by a virtual environment name. start' without a virtual""" + """ environment name starts the default shell. Available""" + """ virtual environments may be listed with the 'envs' or""" + """ 'environments' commands. The active virtual environment""" + """ can be questioned by the 'which' command. These commands""" + """ (except environments' and 'envs') are available through""" + """ the context menu as well.</p>""" """<p>Pressing the Tab key after some text has been entered""" """ will show a list of possible completions. The relevant""" """ entry may be selected from this list. If only one entry""" @@ -266,7 +289,7 @@ if not self.__windowed: # Create a little language context menu self.lmenu = QMenu(self.tr('Start')) - self.lmenu.aboutToShow.connect(self.__showLanguageMenu) + self.lmenu.aboutToShow.connect(self.__showStartMenu) self.lmenu.triggered.connect(self.__startDebugClient) # Create the history context menu @@ -286,11 +309,12 @@ self.menu.addAction(self.tr('Find'), self.__find) self.menu.addSeparator() self.menu.addAction(self.tr('Clear'), self.clear) - self.menu.addAction(self.tr('Reset'), self.__reset) + self.menu.addAction(self.tr('Restart'), self.doRestart) self.menu.addAction( - self.tr('Reset and Clear'), self.__resetAndClear) + self.tr('Restart and Clear'), self.doClearRestart) self.menu.addSeparator() self.menu.addMenu(self.lmenu) + self.menu.addAction(self.tr('Active Name'), self.__showVenvName) self.menu.addSeparator() self.menu.addAction(self.tr("Configure..."), self.__configure) @@ -351,17 +375,24 @@ self.__blockTextProcessing = False self.queueText.connect(self.__concatenateText, Qt.QueuedConnection) + self.__project = project + if self.__project: + self.__project.projectOpened.connect(self.__projectOpened) + self.__project.projectClosed.connect(self.__projectClosed) + self.grabGesture(Qt.PinchGesture) - def __showLanguageMenu(self): + def __showStartMenu(self): """ - Private slot to prepare the language submenu. + Private slot to prepare the start submenu. """ self.lmenu.clear() - clientLanguages = self.dbs.getSupportedLanguages(shellOnly=True) - for language in sorted(clientLanguages): - act = self.lmenu.addAction(language) - act.setData(language) + venvManager = e5App().getObject("VirtualEnvManager") + for venvName in sorted(venvManager.getVirtualenvNames()): + self.lmenu.addAction(venvName) + if self.__project.isOpen(): + self.lmenu.addSeparator() + self.lmenu.addAction(self.tr("Project")) def __resizeLinenoMargin(self): """ @@ -579,14 +610,19 @@ self.inCommandExecution = False self.interruptCommandExecution = False - def __clientCapabilities(self, cap, clType): + def __clientCapabilities(self, cap, clType, venvName): """ Private slot to handle the reporting of the clients capabilities. - @param cap client capabilities (integer) - @param clType type of the debug client (string) + @param cap client capabilities + @type int + @param clType type of the debug client + @type str + @param venvName name of the virtual environment + @type str """ self.clientCapabilities = cap + self.__currentVenv = venvName if clType != self.clientType: self.clientType = clType self.__bindLexer(self.clientType) @@ -603,6 +639,9 @@ self.loadHistory(self.clientType) self.__history = self.__historyLists[self.clientType] self.__setHistoryIndex() + + self.virtualEnvironmentChanged.emit(venvName) + Preferences.setShell("LastVirtualEnvironment", venvName) def __setHistoryIndex(self, index=None): """ @@ -767,19 +806,25 @@ else: self.dbs.remoteBanner() - def __writeBanner(self, version, platform, dbgclient): + def __writeBanner(self, version, platform, dbgclient, venvName): """ Private method to write a banner with info from the debug client. - @param version interpreter version string (string) - @param platform platform of the remote interpreter (string) - @param dbgclient debug client variant used (string) + @param version interpreter version string + @type str + @param platform platform of the remote interpreter + @type str + @param dbgclient debug client variant used + @type str + @param venvName name of the virtual environment + @type str """ super(Shell, self).clear() if self.passive and not self.dbs.isConnected(): self.__write(self.tr('Passive Debug Mode')) self.__write(self.tr('\nNot connected')) else: + self.__currentVenv = venvName version = version.replace("#", self.tr("No.")) if platform != "" and dbgclient != "": self.__write( @@ -787,19 +832,21 @@ .format(version, platform, dbgclient)) else: self.__write(version) + if venvName: + self.__write("\n[{0}]".format(venvName)) + + self.virtualEnvironmentChanged.emit(venvName) + Preferences.setShell("LastVirtualEnvironment", venvName) self.__write('\n') self.__write(sys.ps1) def __writePrompt(self): """ - Private method to write the prompt. + Private method to write the prompt using a write queue. """ - self.__write(self.inContinue and sys.ps2 or sys.ps1) - # little trick to get the cursor position registered within QScintilla - self.SendScintilla(QsciScintilla.SCI_CHARLEFT) - self.SendScintilla(QsciScintilla.SCI_CHARRIGHT) - + self.queueText.emit(self.inContinue and sys.ps2 or sys.ps1) + def __clientStatement(self, more): """ Private method to handle the response from the debugger client. @@ -810,7 +857,7 @@ self.inContinue = more self.__writePrompt() self.inCommandExecution = False - + def __clientException(self, exceptionType, exceptionMessage, stackTrace): """ Private method to handle an exception of the client. @@ -934,6 +981,10 @@ self.__queuedText = '' self.__blockTextProcessing = False + + # little trick to get the cursor position registered within QScintilla + self.SendScintilla(QsciScintilla.SCI_CHARLEFT) + self.SendScintilla(QsciScintilla.SCI_CHARRIGHT) def __write(self, s): """ @@ -1710,36 +1761,24 @@ else: self.__setHistoryIndex(historyIndex) - if cmd.startswith('start '): + if cmd == 'start' or cmd.startswith('start '): if not self.passive: cmdList = cmd.split(None, 1) if len(cmdList) < 2: - self.dbs.startClient(False) # same as reset + self.dbs.startClient(False) # start default backend else: - clientLanguages = self.dbs.getSupportedLanguages( - shellOnly=True) - language = cmdList[1] - if language not in clientLanguages: - language = cmdList[1].capitalize() - if language not in clientLanguages: - language = "" - if language: - self.dbs.startClient(False, language) + venvName = cmdList[1] + if venvName == self.tr("Project"): + if self.__project.isOpen(): + self.dbs.startClient(False, forProject=True) + else: + self.dbs.startClient( + False, venvName=self.__currentVenv) + # same as reset else: - # language not supported or typo - self.__write( - self.tr( - 'Shell language "{0}" not supported.\n') - .format(cmdList[1])) - self.__clientStatement(False) - return - cmd = '' - elif cmd == 'languages': - s = '{0}\n'.format(', '.join(sorted( - self.dbs.getSupportedLanguages(shellOnly=True)))) - self.__write(s) - self.__clientStatement(False) - return + self.dbs.startClient(False, venvName=venvName) + self.__getBanner() + return elif cmd == 'clear': # Display the banner. self.__getBanner() @@ -1747,13 +1786,29 @@ return else: cmd = '' - elif cmd == 'reset': - self.dbs.startClient(False) + elif cmd in ['reset', 'restart']: + self.dbs.startClient(False, venvName=self.__currentVenv) if self.passive: return else: cmd = '' - elif cmd in ["quit", "quit()"] and self.__windowed: + elif cmd in ['envs', 'environments']: + venvs = e5App().getObject("VirtualEnvManager")\ + .getVirtualenvNames() + s = self.tr('Available Virtual Environments:\n{0}\n').format( + '\n'.join("- {0}".format(venv) for venv in sorted(venvs)) + ) + self.__write(s) + self.__clientStatement(False) + return + elif cmd == 'which': + s = self.tr("Current Virtual Environment: '{0}'\n").format( + self.__currentVenv) + self.__write(s) + self.__clientStatement(False) + return + elif cmd in ["quit", "quit()", "exit", "exit()"] and \ + self.__windowed: # call main window quit() self.vm.quit() return @@ -1775,6 +1830,15 @@ self.dbs.remoteRawInput(cmd) + def __showVenvName(self): + """ + Private method to show the name of the active virtual environment. + """ + s = "\n" + self.tr("Current Virtual Environment: '{0}'\n").format( + self.__currentVenv) + self.__write(s) + self.__clientStatement(False) + def __useHistory(self): """ Private method to display a command from the history. @@ -1883,18 +1947,18 @@ # Display the banner. self.__getBanner() - def __resetAndClear(self): + def doClearRestart(self): """ - Private slot to handle the 'reset and clear' context menu entry. + Public slot to handle the 'restart and clear' context menu entry. """ - self.__reset() + self.doRestart() self.clear() - def __reset(self): + def doRestart(self): """ - Private slot to handle the 'reset' context menu entry. + Public slot to handle the 'restart' context menu entry. """ - self.dbs.startClient(False) + self.dbs.startClient(False, venvName=self.__currentVenv) def __startDebugClient(self, action): """ @@ -1903,8 +1967,11 @@ @param action context menu action that was triggered (QAction) """ - language = action.data() - self.dbs.startClient(False, language) + venvName = action.text() + if venvName == self.tr("Project"): + self.dbs.startClient(False, forProject=True) + else: + self.dbs.startClient(False, venvName=venvName) self.__getBanner() def handlePreferencesChanged(self): @@ -2143,19 +2210,25 @@ if self.__lastSearch: self.searchNext(*self.__lastSearch) - def searchNext(self, txt, caseSensitive, wholeWord): + def searchNext(self, txt, caseSensitive, wholeWord, regexp): """ Public method to search the next occurrence of the given text. - @param txt text to search for (string) + @param txt text to search for + @type str @param caseSensitive flag indicating to perform a case sensitive - search (boolean) + search + @type bool @param wholeWord flag indicating to search for whole words - only (boolean) + only + @type bool + @param regexp flag indicating a regular expression search + @type bool """ - self.__lastSearch = (txt, caseSensitive, wholeWord) + self.__lastSearch = (txt, caseSensitive, wholeWord, regexp) ok = self.findFirst( - txt, False, caseSensitive, wholeWord, True, forward=True) + txt, regexp, caseSensitive, wholeWord, True, forward=True, + posix=regexp) self.searchStringFound.emit(ok) def __searchPrev(self): @@ -2165,24 +2238,29 @@ if self.__lastSearch: self.searchPrev(*self.__lastSearch) - def searchPrev(self, txt, caseSensitive, wholeWord): + def searchPrev(self, txt, caseSensitive, wholeWord, regexp): """ Public method to search the previous occurrence of the given text. - @param txt text to search for (string) + @param txt text to search for + @type str @param caseSensitive flag indicating to perform a case sensitive - search (boolean) + search + @type bool @param wholeWord flag indicating to search for whole words - only (boolean) + only + @type bool + @param regexp flag indicating a regular expression search + @type bool """ - self.__lastSearch = (txt, caseSensitive, wholeWord) + self.__lastSearch = (txt, caseSensitive, wholeWord, regexp) if self.hasSelectedText(): line, index = self.getSelection()[:2] else: line, index = -1, -1 ok = self.findFirst( - txt, False, caseSensitive, wholeWord, True, - forward=False, line=line, index=index) + txt, regexp, caseSensitive, wholeWord, True, + forward=False, line=line, index=index, posix=regexp) self.searchStringFound.emit(ok) def historyStyle(self): @@ -2202,3 +2280,23 @@ @rtype bool """ return self.__historyStyle != ShellHistoryStyle.Disabled + + ################################################################# + ## Project Support + ################################################################# + + def __projectOpened(self): + """ + Private slot to start the shell for the opened project. + """ + if Preferences.getProject("RestartShellForProject"): + self.dbs.startClient(False, forProject=True) + self.__getBanner() + + def __projectClosed(self): + """ + Private slot to restart the default shell when the project is closed. + """ + if Preferences.getProject("RestartShellForProject"): + self.dbs.startClient(False) + self.__getBanner()
--- a/QScintilla/ShellWindow.py Thu Nov 01 11:48:02 2018 +0100 +++ b/QScintilla/ShellWindow.py Sat Dec 01 11:44:34 2018 +0100 @@ -45,10 +45,12 @@ """ Class implementing a stand alone shell window. """ - def __init__(self, parent=None, name=None): + def __init__(self, originalPathString, parent=None, name=None): """ Constructor + @param originalPathString original PATH environment variable + @type str @param parent reference to the parent widget @type QWidget @param name object name of the window @@ -58,6 +60,7 @@ if name is not None: self.setObjectName(name) self.setWindowIcon(UI.PixmapCache.getIcon("shell.png")) + self.setWindowTitle(self.tr("eric6 Shell")) self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet")) @@ -66,8 +69,9 @@ self.__apisManager = APIsManager(parent=self) # initialize the debug server and shell widgets - self.__debugServer = DebugServer(preventPassiveDebugging=True) - self.__shell = Shell(self.__debugServer, self, True, self) + self.__debugServer = DebugServer(originalPathString, + preventPassiveDebugging=True) + self.__shell = Shell(self.__debugServer, self, None, True, self) self.__searchWidget = SearchWidget(self.__shell, self, showLine=True) centralWidget = QWidget() @@ -99,8 +103,14 @@ self.virtualenvManager = VirtualenvManager(self) e5App().registerObject("VirtualEnvManager", self.virtualenvManager) - # now start the debug client - self.__debugServer.startClient(False) + self.__shell.virtualEnvironmentChanged.connect( + self.__virtualEnvironmentChanged) + + # now start the debug client with the most recently used virtual + # environment + self.__debugServer.startClient( + False, venvName=Preferences.getShell("LastVirtualEnvironment") + ) # set the keyboard input interval interval = Preferences.getUI("KeyboardInputInterval") @@ -233,7 +243,7 @@ """<b>Restart</b>""" """<p>Restart the shell for the currently selected language.</p>""" )) - self.restartAct.triggered.connect(self.__doRestart) + self.restartAct.triggered.connect(self.__shell.doRestart) self.fileActions.append(self.restartAct) self.clearRestartAct = E5Action( @@ -248,7 +258,7 @@ """<p>Clear the shell window and restart the shell for the""" """ currently selected language.</p>""" )) - self.clearRestartAct.triggered.connect(self.__doClearRestart) + self.clearRestartAct.triggered.connect(self.__shell.doClearRestart) self.fileActions.append(self.clearRestartAct) def __createEditActions(self): @@ -1004,19 +1014,6 @@ """ e5App().closeAllWindows() - def __doRestart(self): - """ - Private slot to handle the 'restart' menu entry. - """ - self.__debugServer.startClient(False) - - def __doClearRestart(self): - """ - Private slot to handle the 'restart and clear' menu entry. - """ - self.__doRestart() - self.__shell.clear() - def __newWindow(self): """ Private slot to start a new instance of eric6. @@ -1026,6 +1023,18 @@ args = [eric6] QProcess.startDetached(program, args) + def __virtualEnvironmentChanged(self, venvName): + """ + Private slot handling a change of the shell's virtual environment. + + @param venvName name of the virtual environment of the shell + @type str + """ + if venvName: + self.setWindowTitle(self.tr("eric6 Shell [{0}]").format(venvName)) + else: + self.setWindowTitle(self.tr("eric6 Shell")) + ################################################################## ## Below are the action methods for the view menu ################################################################## @@ -1151,7 +1160,7 @@ self.__historyMenu.setEnabled(self.__shell.isHistoryEnabled()) self.__startMenu = self.menuBar().addMenu(self.tr("&Start")) - self.__startMenu.aboutToShow.connect(self.__showLanguageMenu) + self.__startMenu.aboutToShow.connect(self.__showStartMenu) self.__startMenu.triggered.connect(self.__startShell) self.menuBar().addSeparator() @@ -1163,16 +1172,13 @@ self.__helpMenu.addSeparator() self.__helpMenu.addAction(self.whatsThisAct) - def __showLanguageMenu(self): + def __showStartMenu(self): """ Private slot to prepare the language menu. """ self.__startMenu.clear() - clientLanguages = self.__debugServer.getSupportedLanguages( - shellOnly=True) - for language in sorted(clientLanguages): - act = self.__startMenu.addAction(language) - act.setData(language) + for venvName in sorted(self.virtualenvManager.getVirtualenvNames()): + self.__startMenu.addAction(venvName) def __startShell(self, action): """ @@ -1180,8 +1186,9 @@ @param action menu action that was triggered (QAction) """ - language = action.data() - self.__debugServer.startClient(False, language) + venvName = action.text() + self.__debugServer.startClient(False, venvName=venvName) + self.__debugServer.remoteBanner() ################################################################## ## Below are the toolbar handling methods
--- a/UI/LogView.py Thu Nov 01 11:48:02 2018 +0100 +++ b/UI/LogView.py Sat Dec 01 11:44:34 2018 +0100 @@ -9,13 +9,15 @@ from __future__ import unicode_literals -from PyQt5.QtCore import Qt, pyqtSignal +from PyQt5.QtCore import pyqtSignal, Qt, QRegExp from PyQt5.QtGui import QBrush, QTextCursor, QTextDocument from PyQt5.QtWidgets import QTextEdit, QApplication, QMenu, QWidget, \ QHBoxLayout, QSizePolicy from E5Gui.E5Application import e5App +from Globals import qVersionTuple + import UI.PixmapCache import Preferences import Utilities @@ -40,9 +42,10 @@ self.__logViewer = LogViewerEdit(self) from .SearchWidget import SearchWidget - self.__searchWidget = SearchWidget(self.__logViewer, self) - self.__searchWidget.setSizePolicy(QSizePolicy.Fixed, - QSizePolicy.Preferred) + self.__searchWidget = SearchWidget( + self.__logViewer, self, hideRegExp=qVersionTuple() < (5, 3, 0)) + self.__searchWidget.setSizePolicy( + QSizePolicy.Fixed, QSizePolicy.Preferred) self.__searchWidget.hide() self.__layout = QHBoxLayout(self) @@ -236,38 +239,66 @@ txt = self.textCursor().selectedText() self.__mainWindow.showFind(txt) - def searchNext(self, txt, caseSensitive, wholeWord): + def searchNext(self, txt, caseSensitive, wholeWord, regexp): """ Public method to search the next occurrence of the given text. - @param txt text to search for (string) - @param caseSensitive flag indicating case sensitivity (boolean) - @param wholeWord flag indicating a search for the whole word (boolean) + @param txt text to search for + @type str + @param caseSensitive flag indicating to perform a case sensitive + search + @type bool + @param wholeWord flag indicating to search for whole words + only + @type bool + @param regexp flag indicating a regular expression search + @type bool """ - self.__lastSearch = (txt, caseSensitive, wholeWord) + self.__lastSearch = (txt, caseSensitive, wholeWord, regexp) flags = QTextDocument.FindFlags() if caseSensitive: flags |= QTextDocument.FindCaseSensitively if wholeWord: flags |= QTextDocument.FindWholeWords - ok = self.find(txt, flags) + if regexp: + ok = self.find(QRegExp( + txt, + Qt.CaseSensitive if caseSensitive else Qt.CaseInsensitive), + flags + ) + else: + ok = self.find(txt, flags) self.searchStringFound.emit(ok) - def searchPrev(self, txt, caseSensitive, wholeWord): + def searchPrev(self, txt, caseSensitive, wholeWord, regexp): """ Public method to search the previous occurrence of the given text. - @param txt text to search for (string) - @param caseSensitive flag indicating case sensitivity (boolean) - @param wholeWord flag indicating a search for the whole word (boolean) + @param txt text to search for + @type str + @param caseSensitive flag indicating to perform a case sensitive + search + @type bool + @param wholeWord flag indicating to search for whole words + only + @type bool + @param regexp flag indicating a regular expression search + @type bool """ - self.__lastSearch = (txt, caseSensitive, wholeWord) + self.__lastSearch = (txt, caseSensitive, wholeWord, regexp) flags = QTextDocument.FindFlags(QTextDocument.FindBackward) if caseSensitive: flags |= QTextDocument.FindCaseSensitively if wholeWord: flags |= QTextDocument.FindWholeWords - ok = self.find(txt, flags) + if regexp: + ok = self.find(QRegExp( + txt, + Qt.CaseSensitive if caseSensitive else Qt.CaseInsensitive), + flags + ) + else: + ok = self.find(txt, flags) self.searchStringFound.emit(ok) def keyPressEvent(self, evt):
--- a/UI/SearchWidget.py Thu Nov 01 11:48:02 2018 +0100 +++ b/UI/SearchWidget.py Sat Dec 01 11:44:34 2018 +0100 @@ -19,23 +19,30 @@ """ Class implementing the search box for the shell, terminal and log viewer. - @signal searchNext(text, caseSensitive, wholeWord) emitted when the user - pressed the next button (string, boolean, boolean) - @signal searchPrevious(text, caseSensitive, wholeWord) emitted when the - user pressed the previous button (string, boolean, boolean) + @signal searchNext(text, caseSensitive, wholeWord, regexp) emitted when the + user pressed the next button (string, boolean, boolean) + @signal searchPrevious(text, caseSensitive, wholeWord, regexp) emitted when + the user pressed the previous button (string, boolean, boolean) """ - searchNext = pyqtSignal(str, bool, bool) - searchPrevious = pyqtSignal(str, bool, bool) + searchNext = pyqtSignal(str, bool, bool, bool) + searchPrevious = pyqtSignal(str, bool, bool, bool) - def __init__(self, mainWindow, parent=None, spacer=True, showLine=False): + def __init__(self, mainWindow, parent=None, spacer=True, showLine=False, + hideRegExp=False): """ Constructor - @param mainWindow reference to the main window (QWidget) - @param parent reference to the parent widget (QWidget) + @param mainWindow reference to the main window + @type QWidget + @param parent reference to the parent widget + @type QWidget @param spacer flag indicating to add a vertical spacer to the - main layout (boolean) - @param showLine flag indicating to show all widget in one row (boolean) + main layout + @type bool + @param showLine flag indicating to show all widget in one row + @type bool + @param hideRegExp flag indicating to hide the Regexp checkbox + @type bool """ super(SearchWidget, self).__init__(parent) @@ -46,6 +53,11 @@ from .Ui_SearchWidget import Ui_SearchWidget self.__ui = Ui_SearchWidget() self.__ui.setupUi(self) + + if hideRegExp: + self.__ui.regexpCheckBox.setChecked(False) + self.__ui.regexpCheckBox.hide() + if not showLine: if spacer: spacerItem = QSpacerItem( @@ -118,7 +130,9 @@ self.searchNext.emit( txt, self.__ui.caseCheckBox.isChecked(), - self.__ui.wordCheckBox.isChecked()) + self.__ui.wordCheckBox.isChecked(), + self.__ui.regexpCheckBox.isChecked(), + ) @pyqtSlot() def on_findPrevButton_clicked(self): @@ -143,7 +157,9 @@ self.searchPrevious.emit( txt, self.__ui.caseCheckBox.isChecked(), - self.__ui.wordCheckBox.isChecked()) + self.__ui.wordCheckBox.isChecked(), + self.__ui.regexpCheckBox.isChecked(), + ) @pyqtSlot(str) def on_findtextCombo_editTextChanged(self, txt):
--- a/UI/SearchWidget.ui Thu Nov 01 11:48:02 2018 +0100 +++ b/UI/SearchWidget.ui Sat Dec 01 11:44:34 2018 +0100 @@ -6,7 +6,7 @@ <rect> <x>0</x> <y>0</y> - <width>274</width> + <width>278</width> <height>142</height> </rect> </property> @@ -88,6 +88,13 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="regexpCheckBox"> + <property name="text"> + <string>Regexp</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -153,6 +160,7 @@ <tabstop>findtextCombo</tabstop> <tabstop>caseCheckBox</tabstop> <tabstop>wordCheckBox</tabstop> + <tabstop>regexpCheckBox</tabstop> <tabstop>findPrevButton</tabstop> <tabstop>findNextButton</tabstop> <tabstop>closeButton</tabstop>
--- a/UI/SearchWidgetLine.ui Thu Nov 01 11:48:02 2018 +0100 +++ b/UI/SearchWidgetLine.ui Sat Dec 01 11:44:34 2018 +0100 @@ -6,7 +6,7 @@ <rect> <x>0</x> <y>0</y> - <width>550</width> + <width>606</width> <height>52</height> </rect> </property> @@ -105,6 +105,13 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="regexpCheckBox"> + <property name="text"> + <string>Regexp</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -123,8 +130,9 @@ <tabstop>findtextCombo</tabstop> <tabstop>caseCheckBox</tabstop> <tabstop>wordCheckBox</tabstop> + <tabstop>regexpCheckBox</tabstop> + <tabstop>findPrevButton</tabstop> <tabstop>findNextButton</tabstop> - <tabstop>findPrevButton</tabstop> <tabstop>closeButton</tabstop> </tabstops> <resources/>
--- a/UI/UserInterface.py Thu Nov 01 11:48:02 2018 +0100 +++ b/UI/UserInterface.py Sat Dec 01 11:44:34 2018 +0100 @@ -166,7 +166,7 @@ def __init__(self, app, locale, splash, plugin, disabledPlugins, noOpenAtStartup, noCrashOpenAtStartup, disableCrashSession, - restartArguments): + restartArguments, originalPathString): """ Constructor @@ -194,6 +194,8 @@ @param restartArguments list of command line parameters to be used for a restart @type list of str + @param originalPathString original PATH environment variable + @type str """ super(UserInterface, self).__init__() @@ -209,6 +211,8 @@ self.__disableCrashSession = disableCrashSession self.__disabledPlugins = disabledPlugins[:] + self.__originalPathString = originalPathString + self.__layoutType = Preferences.getUI("LayoutType") self.passiveMode = Preferences.getDebugger("PassiveDbgEnabled") @@ -248,7 +252,7 @@ # Generate the debug server object from Debugger.DebugServer import DebugServer - debugServer = DebugServer() + debugServer = DebugServer(self.__originalPathString) # Create the background service object from Utilities.BackgroundService import BackgroundService @@ -697,9 +701,15 @@ splash.showMessage(self.tr("Reading Templates...")) self.templateViewer.readTemplates() - # now start the debug client + # now start the debug client with the most recently used virtual + # environment splash.showMessage(self.tr("Starting Debugger...")) - debugServer.startClient(False) + if Preferences.getShell("StartWithMostRecentlyUsedEnvironment"): + debugServer.startClient( + False, venvName=Preferences.getShell("LastVirtualEnvironment") + ) + else: + debugServer.startClient(False) # attributes for the network objects self.__networkManager = QNetworkAccessManager(self) @@ -889,7 +899,7 @@ logging.debug("Creating Shell...") from QScintilla.Shell import ShellAssembly self.shellAssembly = \ - ShellAssembly(debugServer, self.viewmanager, True) + ShellAssembly(debugServer, self.viewmanager, self.project, True) self.shell = self.shellAssembly.shell() self.hToolbox.insertItem(0, self.shellAssembly, UI.PixmapCache.getIcon("shell.png"), @@ -1030,7 +1040,7 @@ logging.debug("Creating Shell...") from QScintilla.Shell import ShellAssembly self.shellAssembly = \ - ShellAssembly(debugServer, self.viewmanager, True) + ShellAssembly(debugServer, self.viewmanager, self.project, True) self.shell = self.shellAssembly.shell() self.bottomSidebar.insertTab(0, self.shellAssembly, UI.PixmapCache.getIcon("shell.png"), @@ -4557,7 +4567,9 @@ Private slot to start the Qt-Designer executable. @param fn filename of the form to be opened - @param version indication for the requested version (Qt 4) (integer) + @type str + @param version indication for the requested version (4 = Qt 4/5) + @type int """ if fn is not None and version == 0: # determine version from file, if not specified @@ -4633,7 +4645,7 @@ def __designer4(self): """ - Private slot to start the Qt-Designer 4 executable. + Private slot to start the Qt-Designer 4/5 executable. """ self.__designer(version=4) @@ -4642,7 +4654,9 @@ Private slot to start the Qt-Linguist executable. @param fn filename of the translation file to be opened - @param version indication for the requested version (Qt 4) (integer) + @type str + @param version indication for the requested version (4 = Qt 4/5) + @type int """ if version < 4: E5MessageBox.information( @@ -4702,7 +4716,7 @@ @pyqtSlot(str) def __linguist4(self, fn=None): """ - Private slot to start the Qt-Linguist 4 executable. + Private slot to start the Qt-Linguist 4/5 executable. @param fn filename of the translation file to be opened """ @@ -4712,8 +4726,10 @@ """ Private slot to start the Qt-Assistant executable. - @param home full pathname of a file to display (string) - @param version indication for the requested version (Qt 4) (integer) + @param home full pathname of a file to display + @type str + @param version indication for the requested version (4 = Qt 4/5) + @type int """ if version < 4: E5MessageBox.information( @@ -4751,7 +4767,7 @@ def __assistant4(self): """ - Private slot to start the Qt-Assistant 4 executable. + Private slot to start the Qt-Assistant 4/5 executable. """ self.__assistant(version=4) @@ -5859,9 +5875,16 @@ self.masterPasswordChanged.emit(oldPassword, newPassword) Preferences.convertPasswords(oldPassword, newPassword) if self.helpWindow is None: - from Helpviewer.Passwords.PasswordManager import PasswordManager - pwManager = PasswordManager() - pwManager.masterPasswordChanged(oldPassword, newPassword) + if WEBENGINE_AVAILABLE: + from WebBrowser.Passwords.PasswordManager import \ + PasswordManager + pwManager = PasswordManager() + pwManager.masterPasswordChanged(oldPassword, newPassword) + elif WEBKIT_AVAILABLE: + from Helpviewer.Passwords.PasswordManager import \ + PasswordManager + pwManager = PasswordManager() + pwManager.masterPasswordChanged(oldPassword, newPassword) Utilities.crypto.changeRememberedMaster(newPassword) def __reloadAPIs(self): @@ -6439,7 +6462,7 @@ Public slot to show the plugins available for download. """ from PluginManager.PluginRepositoryDialog import PluginRepositoryDialog - dlg = PluginRepositoryDialog(self) + dlg = PluginRepositoryDialog(self.pluginManager, self) res = dlg.exec_() if res == (QDialog.Accepted + 1): self.__installPlugins(dlg.getDownloadedPlugins()) @@ -7039,6 +7062,16 @@ p = w.pos() return [p.x(), p.y(), s.width(), s.height(), not w.isHidden()] + def getOriginalPathString(self): + """ + Public method to get the original PATH environment variable + (i.e. before modifications by eric6 and PyQt5). + + @return original PATH environment variable + @rtype str + """ + return self.__originalPathString + ############################ ## some event handlers below ############################
--- a/Utilities/__init__.py Thu Nov 01 11:48:02 2018 +0100 +++ b/Utilities/__init__.py Sat Dec 01 11:44:34 2018 +0100 @@ -408,7 +408,7 @@ index = 0 while index < len(text): if text[index] == "\\": - qb = QByteArray.fromHex(text[index:index + 4]) + qb = QByteArray.fromHex(text[index:index + 4].encode()) buf += bytes(qb) index += 4 else:
--- a/VirtualEnv/VirtualenvAddEditDialog.py Thu Nov 01 11:48:02 2018 +0100 +++ b/VirtualEnv/VirtualenvAddEditDialog.py Sat Dec 01 11:44:34 2018 +0100 @@ -28,7 +28,7 @@ """ def __init__(self, manager, venvName="", venvDirectory="", venvInterpreter="", venvVariant=3, isGlobal=False, - parent=None): + isConda=False, execPath="", parent=None): """ Constructor @@ -44,6 +44,11 @@ @type int @param isGlobal flag indicating a global environment @type bool + @param isConda flag indicating an Anaconda virtual environment + @type bool + @param execPath search path string to be prepended to the PATH + environment variable + @type str @param parent reference to the parent widget @type QWidget """ @@ -65,11 +70,19 @@ self.pythonExecPicker.setDefaultDirectory( sys.executable.replace("w.exe", ".exe")) + self.execPathEdit.setToolTip(self.tr( + "Enter the executable search path to be prepended to the PATH" + " environment variable. Use '{0}' as the separator.").format( + os.pathsep) + ) + self.nameEdit.setText(venvName) self.targetDirectoryPicker.setText(venvDirectory) self.pythonExecPicker.setText(venvInterpreter) self.variantComboBox.setCurrentIndex(3 - venvVariant) self.globalCheckBox.setChecked(isGlobal) + self.anacondaCheckBox.setChecked(isConda) + self.execPathEdit.setText(execPath) self.__updateOk() @@ -150,14 +163,40 @@ """ self.__updateOk() + @pyqtSlot(bool) + def on_anacondaCheckBox_clicked(self, checked): + """ + Private slot handling a user click on this check box. + + @param checked state of the check box + @type bool + """ + if checked and not bool(self.execPathEdit.text()): + # prepopulate the execPathEdit widget + if Utilities.isWindowsPlatform(): + self.execPathEdit.setText(os.pathsep.join([ + self.targetDirectoryPicker.text(), + os.path.join(self.targetDirectoryPicker.text(), + "Scripts"), + os.path.join(self.targetDirectoryPicker.text(), + "Library", "bin"), + ])) + else: + self.execPathEdit.setText( + os.path.join(self.targetDirectoryPicker.text(), + "bin"), + ) + def getData(self): """ Public method to retrieve the entered data. @return tuple containing the logical name, the directory, the - interpreter of the virtual environment, the Python variant - and a flag indicating a global environment - @rtype tuple of (str, str, str, int, bool) + interpreter of the virtual environment, the Python variant, + a flag indicating a global environment, a flag indicating an + Anaconda environment and a string to be prepended to the PATH + environment variable + @rtype tuple of (str, str, str, int, bool,bool, str) """ return ( self.nameEdit.text(), @@ -165,4 +204,6 @@ self.pythonExecPicker.text(), 3 - self.variantComboBox.currentIndex(), self.globalCheckBox.isChecked(), + self.anacondaCheckBox.isChecked(), + self.execPathEdit.text(), )
--- a/VirtualEnv/VirtualenvAddEditDialog.ui Thu Nov 01 11:48:02 2018 +0100 +++ b/VirtualEnv/VirtualenvAddEditDialog.ui Sat Dec 01 11:44:34 2018 +0100 @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>700</width> - <height>186</height> + <height>220</height> </rect> </property> <property name="sizeGripEnabled"> @@ -22,7 +22,7 @@ </widget> </item> <item row="0" column="1"> - <widget class="QLineEdit" name="nameEdit"> + <widget class="E5ClearableLineEdit" name="nameEdit"> <property name="toolTip"> <string>Enter a unique name for the virtual environment</string> </property> @@ -74,7 +74,14 @@ </property> </widget> </item> - <item row="3" column="0" colspan="2"> + <item row="3" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Python Variant:</string> + </property> + </widget> + </item> + <item row="3" column="1"> <widget class="QComboBox" name="variantComboBox"> <property name="toolTip"> <string>Select the Python variant</string> @@ -92,16 +99,57 @@ </widget> </item> <item row="4" column="0" colspan="2"> - <widget class="QCheckBox" name="globalCheckBox"> - <property name="toolTip"> - <string>Select to denote a global environment (i.e. no virtual environment directory to be given)</string> - </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QCheckBox" name="globalCheckBox"> + <property name="toolTip"> + <string>Select to denote a global environment (i.e. no virtual environment directory to be given)</string> + </property> + <property name="whatsThis"> + <string><b>Global Environment</b> +<p>Setting this indicates, that the environment is defined globally, i.e. not user specific. Usually such environments cannot be deleted by a standard user. The respective button of the Virtual Environment Manager dialog will be disabled for these entries.</p></string> + </property> + <property name="text"> + <string>Global Environment</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="anacondaCheckBox"> + <property name="toolTip"> + <string>Select, if this is an Conda environment</string> + </property> + <property name="text"> + <string>Conda Environment</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="label_5"> <property name="text"> - <string>Global Environment</string> + <string>PATH Prefix:</string> </property> </widget> </item> - <item row="5" column="0" colspan="2"> + <item row="5" column="1"> + <widget class="E5ClearableLineEdit" name="execPathEdit"/> + </item> + <item row="6" column="0" colspan="2"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> @@ -120,6 +168,11 @@ <header>E5Gui/E5PathPicker.h</header> <container>1</container> </customwidget> + <customwidget> + <class>E5ClearableLineEdit</class> + <extends>QLineEdit</extends> + <header>E5Gui/E5LineEdit.h</header> + </customwidget> </customwidgets> <tabstops> <tabstop>nameEdit</tabstop>
--- a/VirtualEnv/VirtualenvManager.py Thu Nov 01 11:48:02 2018 +0100 +++ b/VirtualEnv/VirtualenvManager.py Sat Dec 01 11:44:34 2018 +0100 @@ -59,6 +59,9 @@ # interpreter: the path of the Python interpreter # variant: Python variant (2 or 3) # is_global: a flag indicating a global environment + # is_conda: a flag indicating an Anaconda environment + # exec_path: a string to be prefixed to the PATH environment + # setting # for venvName in environments: interpreter = environments[venvName]["interpreter"] @@ -66,6 +69,10 @@ environment = environments[venvName] if "is_global" not in environment: environment["is_global"] = environment["path"] == "" + if "is_conda" not in environment: + environment["is_conda"] = False + if "exec_path" not in environment: + environment["exec_path"] = "" self.__virtualEnvironments[venvName] = environment # check, if the interpreter used to run eric is in the environments @@ -83,6 +90,8 @@ "interpreter": defaultPy, "variant": sys.version_info[0], "is_global": True, + "is_conda": False, + "exec_path": "", } self.__saveSettings() @@ -150,7 +159,8 @@ dia.exec_() def addVirtualEnv(self, venvName, venvDirectory, venvInterpreter="", - venvVariant=3, isGlobal=False): + venvVariant=3, isGlobal=False, isConda=False, + execPath=""): """ Public method to add a virtual environment. @@ -164,6 +174,11 @@ @type int @param isGlobal flag indicating a global environment @type bool + @param isConda flag indicating an Anaconda virtual environment + @type bool + @param execPath search path string to be prepended to the PATH + environment variable + @type str """ if venvName in self.__virtualEnvironments: ok = E5MessageBox.yesNo( @@ -190,6 +205,8 @@ "interpreter": venvInterpreter, "variant": venvVariant, "is_global": isGlobal, + "is_conda": isConda, + "exec_path": execPath, } self.__saveSettings() @@ -198,7 +215,7 @@ self.__virtualenvManagerDialog.refresh() def setVirtualEnv(self, venvName, venvDirectory, venvInterpreter, - venvVariant, isGlobal): + venvVariant, isGlobal, isConda, execPath): """ Public method to change a virtual environment. @@ -212,6 +229,11 @@ @type int @param isGlobal flag indicating a global environment @type bool + @param isConda flag indicating an Anaconda virtual environment + @type bool + @param execPath search path string to be prepended to the PATH + environment variable + @type str """ if venvName not in self.__virtualEnvironments: E5MessageBox.yesNo( @@ -228,6 +250,8 @@ "interpreter": venvInterpreter, "variant": venvVariant, "is_global": isGlobal, + "is_conda": isConda, + "exec_path": execPath, } self.__saveSettings() @@ -236,7 +260,8 @@ self.__virtualenvManagerDialog.refresh() def renameVirtualEnv(self, oldVenvName, venvName, venvDirectory, - venvInterpreter, venvVariant, isGlobal): + venvInterpreter, venvVariant, isGlobal, isConda, + execPath): """ Public method to substitute a virtual environment entry with a new name. @@ -253,6 +278,11 @@ @type int @param isGlobal flag indicating a global environment @type bool + @param isConda flag indicating an Anaconda virtual environment + @type bool + @param execPath search path string to be prepended to the PATH + environment variable + @type str """ if oldVenvName not in self.__virtualEnvironments: E5MessageBox.yesNo( @@ -266,7 +296,7 @@ del self.__virtualEnvironments[oldVenvName] self.addVirtualEnv(venvName, venvDirectory, venvInterpreter, - venvVariant, isGlobal) + venvVariant, isGlobal, isConda, execPath) def deleteVirtualEnvs(self, venvNames): """ @@ -468,4 +498,36 @@ @return flag indicating a global environment @rtype bool """ - return self.__virtualEnvironments[venvName]["is_global"] + if venvName in self.__virtualEnvironments: + return self.__virtualEnvironments[venvName]["is_global"] + else: + return False + + def isCondaEnvironment(self, venvName): + """ + Public method to test, if a given environment is an Anaconda + environment. + + @param venvName logical name of the virtual environment + @type str + @return flag indicating an Anaconda environment + @rtype bool + """ + if venvName in self.__virtualEnvironments: + return self.__virtualEnvironments[venvName]["is_conda"] + else: + return False + + def getVirtualenvExecPath(self, venvName): + """ + Public method to get the search path prefix of a virtual environment. + + @param venvName logical name for the virtual environment + @type str + @return search path prefix + @rtype str + """ + if venvName in self.__virtualEnvironments: + return self.__virtualEnvironments[venvName]["exec_path"] + else: + return ""
--- a/VirtualEnv/VirtualenvManagerDialog.py Thu Nov 01 11:48:02 2018 +0100 +++ b/VirtualEnv/VirtualenvManagerDialog.py Sat Dec 01 11:44:34 2018 +0100 @@ -23,6 +23,8 @@ """ PythonVariantRole = Qt.UserRole IsGlobalRole = Qt.UserRole + 1 + IsCondaRole = Qt.UserRole + 2 + ExecPathRole = Qt.UserRole + 3 def __init__(self, manager, parent=None): """ @@ -90,11 +92,11 @@ dlg = VirtualenvAddEditDialog(self.__manager) if dlg.exec_() == QDialog.Accepted: (venvName, venvDirectory, venvInterpreter, venvVariant, - isGlobal) = dlg.getData() + isGlobal, isConda, execPath) = dlg.getData() self.__manager.addVirtualEnv(venvName, venvDirectory, venvInterpreter, venvVariant, - isGlobal) + isGlobal, isConda, execPath) @pyqtSlot() def on_newButton_clicked(self): @@ -116,19 +118,21 @@ self.__manager, selectedItem.text(0), selectedItem.text(1), selectedItem.text(2), selectedItem.data(0, VirtualenvManagerDialog.PythonVariantRole), - selectedItem.data(0, VirtualenvManagerDialog.IsGlobalRole) + selectedItem.data(0, VirtualenvManagerDialog.IsGlobalRole), + selectedItem.data(0, VirtualenvManagerDialog.IsCondaRole), + selectedItem.data(0, VirtualenvManagerDialog.ExecPathRole), ) if dlg.exec_() == QDialog.Accepted: (venvName, venvDirectory, venvInterpreter, venvVariant, - isGlobal) = dlg.getData() + isGlobal, isConda, execPath) = dlg.getData() if venvName != oldVenvName: self.__manager.renameVirtualEnv( oldVenvName, venvName, venvDirectory, venvInterpreter, - venvVariant, isGlobal) + venvVariant, isGlobal, isConda, execPath) else: self.__manager.setVirtualEnv( venvName, venvDirectory, venvInterpreter, venvVariant, - isGlobal) + isGlobal, isConda, execPath) @pyqtSlot() def on_removeButton_clicked(self): @@ -226,6 +230,24 @@ environments[venvName]["variant"]) itm.setData(0, VirtualenvManagerDialog.IsGlobalRole, environments[venvName]["is_global"]) + itm.setData(0, VirtualenvManagerDialog.IsCondaRole, + environments[venvName]["is_conda"]) + itm.setData(0, VirtualenvManagerDialog.ExecPathRole, + environments[venvName]["exec_path"]) + + # show global environments with bold font + if environments[venvName]["is_global"]: + font = itm.font(0) + font.setBold(True) + for column in range(itm.columnCount()): + itm.setFont(column, font) + + # show Anaconda environments with italic font + elif environments[venvName]["is_conda"]: + font = itm.font(0) + font.setItalic(True) + for column in range(itm.columnCount()): + itm.setFont(column, font) self.__resizeSections()
--- a/WebBrowser/Network/QtHelpSchemeHandler.py Thu Nov 01 11:48:02 2018 +0100 +++ b/WebBrowser/Network/QtHelpSchemeHandler.py Sat Dec 01 11:44:34 2018 +0100 @@ -12,8 +12,8 @@ import mimetypes import os -from PyQt5.QtCore import pyqtSignal, QByteArray, QIODevice, QBuffer, QTimer, \ - QMutex, QMutexLocker +from PyQt5.QtCore import pyqtSignal, QByteArray, QIODevice, QBuffer, QMutex, \ + QMutexLocker from PyQt5.QtWebEngineCore import QWebEngineUrlSchemeHandler, \ QWebEngineUrlRequestJob
--- a/WebBrowser/SearchWidget.py Thu Nov 01 11:48:02 2018 +0100 +++ b/WebBrowser/SearchWidget.py Sat Dec 01 11:44:34 2018 +0100 @@ -184,12 +184,19 @@ self.__setFindtextComboBackground(False) self.show() - + + def __resetSearch(self): + """ + Private method to reset the last search. + """ + self.__mainWindow.currentBrowser().findText("") + @pyqtSlot() def on_closeButton_clicked(self): """ Private slot to close the widget. """ + self.__resetSearch() self.close() def keyPressEvent(self, event): @@ -203,6 +210,7 @@ if cb: cb.setFocus(Qt.ActiveWindowFocusReason) event.accept() + self.__resetSearch() self.close() def __setFindtextComboBackground(self, error):
--- a/WebBrowser/WebBrowserView.py Thu Nov 01 11:48:02 2018 +0100 +++ b/WebBrowser/WebBrowserView.py Sat Dec 01 11:44:34 2018 +0100 @@ -1752,6 +1752,8 @@ """ Private method to handle the loadStarted signal. """ + # reset search + self.findText("") self.__isLoading = True self.__progress = 0
--- a/changelog Thu Nov 01 11:48:02 2018 +0100 +++ b/changelog Sat Dec 01 11:44:34 2018 +0100 @@ -1,5 +1,28 @@ Change Log ---------- +Version 18.12: +- bug fixes +- Editor + -- changed the 'Regexp' search option to use QScintilla's POSIX mode, where + ( and ) are used for tagging (instead of \( and \)) +- LogViewer + -- added the capability to search for a regular expression (Qt >= 5.3.0 + is required for this) +- Project Forms Browser + -- added support for the --resource-suffix= and --import-from= options of + pyuic (the PyQt forms compiler) +- Shell, ShellWindow + -- added the capability to search for a regular expression with QScintilla's + POSIX mode + -- changed the start menu to give a list of defined environments + -- added capability to start the shell for the environment defined by the + open project +- Translator + -- added a button to open the Translator configuration page +- VirtualEnv Manager + -- extended the environment definition by a flag indicating an Anaconda + environment and a string to be prepended to the PATH environment variable + Version 18.11: - bug fixes - IRC
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/create_windows_links.py Sat Dec 01 11:44:34 2018 +0100 @@ -0,0 +1,199 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright (c) 2018 Detlev Offenbach <detlev@die-offenbachs.de> +# +# This is the install script for eric6. + +""" +Installation script for the eric6 IDE and all eric6 related tools. +""" + +from __future__ import unicode_literals, print_function + +import os +import sys + +from eric6config import getConfig + +# Define file name markers for Python variants +PythonMarkers = { + 2: "_py2", + 3: "_py3", +} + +includePythonVariant = False + + +def main(argv): + """ + Create Desktop and Start Menu links. + + @param argv list of command line arguments + @type list of str + """ + global includePythonVariant + + if "-y" in argv: + includePythonVariant = True + + regPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer" + \ + "\\User Shell Folders" + + # 1. create desktop shortcuts + regName = "Desktop" + desktopFolder = os.path.normpath( + os.path.expandvars(getWinregEntry(regName, regPath))) + for linkName, targetPath, iconPath in windowsDesktopEntries(): + linkPath = os.path.join(desktopFolder, linkName) + createWindowsShortcut(linkPath, targetPath, iconPath) + + # 2. create start menu entry and shortcuts + regName = "Programs" + programsEntry = getWinregEntry(regName, regPath) + if programsEntry: + programsFolder = os.path.normpath(os.path.expandvars(programsEntry)) + eric6EntryPath = os.path.join(programsFolder, windowsProgramsEntry()) + if not os.path.exists(eric6EntryPath): + try: + os.makedirs(eric6EntryPath) + except EnvironmentError: + # maybe restrictions prohibited link creation + return + + for linkName, targetPath, iconPath in windowsDesktopEntries(): + linkPath = os.path.join(eric6EntryPath, linkName) + createWindowsShortcut(linkPath, targetPath, iconPath) + + +def getWinregEntry(name, path): + """ + Function to get an entry from the Windows Registry. + + @param name variable name + @type str + @param path registry path of the variable + @type str + @return value of requested registry variable + @rtype any + """ + try: + import _winreg as winreg + except ImportError: + try: + import winreg + except ImportError: + return None + + try: + registryKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, path, 0, + winreg.KEY_READ) + value, _ = winreg.QueryValueEx(registryKey, name) + winreg.CloseKey(registryKey) + return value + except WindowsError: + return None + + +def createWindowsShortcut(linkPath, targetPath, iconPath): + """ + Create Windows shortcut. + + @param linkPath path of the shortcut file + @type str + @param targetPath path the shortcut shall point to + @type str + @param iconPath path of the icon file + @type str + """ + from win32com.client import Dispatch + from pywintypes import com_error + + try: + shell = Dispatch('WScript.Shell') + shortcut = shell.CreateShortCut(linkPath) + shortcut.Targetpath = targetPath + shortcut.WorkingDirectory = os.path.dirname(targetPath) + shortcut.IconLocation = iconPath + shortcut.save() + except com_error: + # maybe restrictions prohibited link creation + pass + + +def windowsDesktopNames(): + """ + Function to generate the link names for the Windows Desktop. + + @return list of desktop link names + @rtype list of str + """ + return [e[0] for e in windowsDesktopEntries()] + + +def windowsDesktopEntries(): + """ + Function to generate data for the Windows Desktop links. + + @return list of tuples containing the desktop link name, + the link target and the icon target + @rtype list of tuples of (str, str, str) + """ + global includePythonVariant + + if includePythonVariant: + marker = PythonMarkers[sys.version_info.major] + else: + marker = "" + + majorVersion, minorVersion = sys.version_info[:2] + entriesTemplates = [ + ("eric6 (Python {0}.{1}).lnk", + os.path.join(getConfig("bindir"), "eric6" + marker + ".cmd"), + os.path.join(getConfig("ericPixDir"), "eric6.ico")), + ] + if sys.version_info.major == 2: + entriesTemplates.append(( + "eric6 Browser (Python {0}.{1}).lnk", + os.path.join(getConfig("bindir"), + "eric6_webbrowser" + marker + ".cmd"), + os.path.join(getConfig("ericPixDir"), "ericWeb48.ico") + )) + else: + entriesTemplates.append(( + "eric6 Browser (Python {0}.{1}).lnk", + os.path.join(getConfig("bindir"), + "eric6_browser" + marker + ".cmd"), + os.path.join(getConfig("ericPixDir"), "ericWeb48.ico") + )) + + return [ + (e[0].format(majorVersion, minorVersion), e[1], e[2]) + for e in entriesTemplates + ] + + +def windowsProgramsEntry(): + """ + Function to generate the name of the Start Menu top entry. + + @return name of the Start Menu top entry + @rtype str + """ + majorVersion, minorVersion = sys.version_info[:2] + return "eric6 (Python {0}.{1})".format(majorVersion, minorVersion) + + +if __name__ == "__main__": + try: + main(sys.argv) + except SystemExit: + raise + except Exception: + print("""An internal error occured. Please report all the output""" + """ of the program,\nincluding the following traceback, to""" + """ eric-bugs@eric-ide.python-projects.org.\n""") + raise + +# +# eflag: noqa = M801
--- a/eric6.e4p Thu Nov 01 11:48:02 2018 +0100 +++ b/eric6.e4p Sat Dec 01 11:44:34 2018 +0100 @@ -941,6 +941,7 @@ <Source>Project/QuickFindFileDialog.py</Source> <Source>Project/SpellingPropertiesDialog.py</Source> <Source>Project/TranslationPropertiesDialog.py</Source> + <Source>Project/UicCompilerOptionsDialog.py</Source> <Source>Project/UicLoadUi.py</Source> <Source>Project/UserPropertiesDialog.py</Source> <Source>Project/__init__.py</Source> @@ -1643,6 +1644,7 @@ <Source>__init__.py</Source> <Source>cleanupSource.py</Source> <Source>compileUiFiles.py</Source> + <Source>create_windows_links.py</Source> <Source>eric6.py</Source> <Source>eric6.pyw</Source> <Source>eric6_api.py</Source> @@ -2065,6 +2067,7 @@ <Form>Preferences/ToolGroupConfigurationDialog.ui</Form> <Form>Preferences/ViewProfileSidebarsDialog.ui</Form> <Form>Preferences/ViewProfileToolboxesDialog.ui</Form> + <Form>Project/UicCompilerOptionsDialog.ui</Form> <Form>Project/AddDirectoryDialog.ui</Form> <Form>Project/AddFileDialog.ui</Form> <Form>Project/AddFoundFilesDialog.ui</Form>
--- a/eric6.py Thu Nov 01 11:48:02 2018 +0100 +++ b/eric6.py Sat Dec 01 11:44:34 2018 +0100 @@ -14,6 +14,9 @@ from __future__ import unicode_literals import sys +import os + +originalPathString = os.getenv("PATH") # generate list of arguments to be remembered for a restart restartArgsList = ["--no-splash", "--plugin", "--debug", "--config", @@ -41,7 +44,6 @@ except AttributeError: pass -import os import traceback import time import logging @@ -396,7 +398,8 @@ splash.showMessage( QCoreApplication.translate("eric6", "Generating Main Window...")) mainWindow = UserInterface(app, loc, splash, pluginFile, disabledPlugins, - noopen, nocrash, disablecrash, restartArgs) + noopen, nocrash, disablecrash, restartArgs, + originalPathString) app.lastWindowClosed.connect(app.quit) mainWindow.show()
--- a/eric6_shell.py Thu Nov 01 11:48:02 2018 +0100 +++ b/eric6_shell.py Sat Dec 01 11:44:34 2018 +0100 @@ -13,6 +13,11 @@ from __future__ import unicode_literals +import sys +import os + +originalPathString = os.getenv("PATH") + import Toolbox.PyQt4ImportHook # __IGNORE_WARNING__ try: # Only for Py2 @@ -20,9 +25,6 @@ except (ImportError): pass -import sys -import os - for arg in sys.argv[:]: if arg.startswith("--config="): import Globals @@ -52,7 +54,7 @@ """ from QScintilla.ShellWindow import ShellWindow - return ShellWindow() + return ShellWindow(originalPathString) def main():
--- a/i18n/eric6_cs.ts Thu Nov 01 11:48:02 2018 +0100 +++ b/i18n/eric6_cs.ts Sat Dec 01 11:44:34 2018 +0100 @@ -5528,12 +5528,12 @@ <translation>&Filtr pro:</translation> </message> <message> - <location filename="../Project/CreateDialogCodeDialog.py" line="754"/> + <location filename="../Project/CreateDialogCodeDialog.py" line="752"/> <source>Code Generation</source> <translation>Generování kódu</translation> </message> <message> - <location filename="../Project/CreateDialogCodeDialog.py" line="542"/> + <location filename="../Project/CreateDialogCodeDialog.py" line="540"/> <source>uic error</source> <translation>uic chyba</translation> </message> @@ -5548,25 +5548,30 @@ <translation>Soubor <b>{0}</b> existuje ale neobsahuje žádné třídy.</translation> </message> <message> - <location filename="../Project/CreateDialogCodeDialog.py" line="542"/> + <location filename="../Project/CreateDialogCodeDialog.py" line="540"/> <source><p>There was an error loading the form <b>{0}</b>.</p><p>{1}</p></source> <translation><p>Byla nalezena chyba načtená z <b>{0}</b>.</p><p>{1}</p></translation> </message> <message> - <location filename="../Project/CreateDialogCodeDialog.py" line="620"/> + <location filename="../Project/CreateDialogCodeDialog.py" line="618"/> <source><p>Could not open the code template file "{0}".</p><p>Reason: {1}</p></source> <translation><p>Template soubor <b>{0}</b> nelze otevřít.</p><p>Důvod: {1}</p></translation> </message> <message> - <location filename="../Project/CreateDialogCodeDialog.py" line="656"/> + <location filename="../Project/CreateDialogCodeDialog.py" line="654"/> <source><p>Could not open the source file "{0}".</p><p>Reason: {1}</p></source> <translation><p>Nelze ovevřít source soubor "{0}".</p><p>Důvod: {1}</p></translation> </message> <message> - <location filename="../Project/CreateDialogCodeDialog.py" line="754"/> + <location filename="../Project/CreateDialogCodeDialog.py" line="752"/> <source><p>Could not write the source file "{0}".</p><p>Reason: {1}</p></source> <translation><p>Nelze zapsat do source souboru "{0}".</p><p>Důvod: {1}</p></translation> </message> + <message> + <location filename="../Project/CreateDialogCodeDialog.py" line="208"/> + <source><p>The project specific Python interpreter <b>{0}</b> could not be started or did not finish within 30 seconds.</p></source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Crypto</name> @@ -5594,24 +5599,24 @@ <context> <name>DebugServer</name> <message> - <location filename="../Debugger/DebugServer.py" line="180"/> + <location filename="../Debugger/DebugServer.py" line="186"/> <source>created</source> <comment>must be same as in EditWatchpointDialog</comment> <translation>vytvořeno</translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="182"/> + <location filename="../Debugger/DebugServer.py" line="188"/> <source>changed</source> <comment>must be same as in EditWatchpointDialog</comment> <translation>změněno</translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="781"/> + <location filename="../Debugger/DebugServer.py" line="790"/> <source>Connection from illegal host</source> <translation>Spojení z ilegálního hosta</translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="1502"/> + <location filename="../Debugger/DebugServer.py" line="1511"/> <source> Not connected </source> @@ -5620,39 +5625,39 @@ </translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="781"/> + <location filename="../Debugger/DebugServer.py" line="790"/> <source><p>A connection was attempted by the illegal host <b>{0}</b>. Accept this connection?</p></source> <translation><p>Pokus o spojení z ilegálního hosta <b>{0}</b>. Přijmout toto spojení?</p></translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="1686"/> + <location filename="../Debugger/DebugServer.py" line="1704"/> <source>Passive debug connection received </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="1700"/> + <location filename="../Debugger/DebugServer.py" line="1718"/> <source>Passive debug connection closed </source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="330"/> + <location filename="../Debugger/DebugServer.py" line="336"/> <source>Register Debugger Interface</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="330"/> + <location filename="../Debugger/DebugServer.py" line="336"/> <source><p>The debugger interface <b>{0}</b> has already been registered. Ignoring this request.</p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="1327"/> + <location filename="../Debugger/DebugServer.py" line="1336"/> <source>Start Debugger</source> <translation type="unfinished">Spustit debuger</translation> </message> <message> - <location filename="../Debugger/DebugServer.py" line="1327"/> + <location filename="../Debugger/DebugServer.py" line="1336"/> <source><p>The debugger type <b>{0}</b> is not supported or not configured.</p></source> <translation type="unfinished"></translation> </message> @@ -6887,27 +6892,27 @@ <context> <name>DebuggerInterfacePython</name> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="402"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="442"/> <source>Start Debugger</source> <translation type="unfinished">Spustit debuger</translation> </message> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="894"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="937"/> <source>Parent Process</source> <translation type="unfinished">Rodičovský proces</translation> </message> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="895"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="938"/> <source>Child process</source> <translation type="unfinished">Dětský proces</translation> </message> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="896"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="939"/> <source>Client forking</source> <translation type="unfinished">Větvení klienta</translation> </message> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="896"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="939"/> <source>Select the fork branch to follow.</source> <translation type="unfinished">Pokračovat ve fork větvi.</translation> </message> @@ -6917,22 +6922,22 @@ <translation type="obsolete"><p>Python2 interpreter není nakonfigurován.</p></translation> </message> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="402"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="442"/> <source><p>The debugger backend could not be started.</p></source> <translation type="unfinished"><p>Debugovací backend nelze spustit.</p></translation> </message> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="941"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="985"/> <source>Debug Protocol Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="941"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="985"/> <source><p>The response received from the debugger backend could not be decoded. Please report this issue with the received data to the eric bugs email address.</p><p>Error: {0}</p><p>Data:<br/>{0}</p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Debugger/DebuggerInterfacePython.py" line="319"/> + <location filename="../Debugger/DebuggerInterfacePython.py" line="349"/> <source><p>No suitable {0} environment configured.</p></source> <translation type="unfinished"></translation> </message> @@ -10892,137 +10897,137 @@ <translation>Hlášení syntaktické chyby není dostupné.</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6402"/> + <location filename="../QScintilla/Editor.py" line="6400"/> <source>Macro Name</source> <translation>Název makra</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6402"/> + <location filename="../QScintilla/Editor.py" line="6400"/> <source>Select a macro name:</source> <translation>Vyberte název makra:</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6430"/> + <location filename="../QScintilla/Editor.py" line="6428"/> <source>Load macro file</source> <translation>Načíst soubor makra</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6473"/> + <location filename="../QScintilla/Editor.py" line="6471"/> <source>Macro files (*.macro)</source> <translation>Macro soubory (*.macro)</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6453"/> + <location filename="../QScintilla/Editor.py" line="6451"/> <source>Error loading macro</source> <translation>Chyba při načítání makra</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6473"/> + <location filename="../QScintilla/Editor.py" line="6471"/> <source>Save macro file</source> <translation>Uložit soubor s makrem</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6490"/> + <location filename="../QScintilla/Editor.py" line="6488"/> <source>Save macro</source> <translation>Uložit makro</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6506"/> + <location filename="../QScintilla/Editor.py" line="6504"/> <source>Error saving macro</source> <translation>Chyba při ukládání makra</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6519"/> + <location filename="../QScintilla/Editor.py" line="6517"/> <source>Start Macro Recording</source> <translation>Spustit záznam makra</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6519"/> + <location filename="../QScintilla/Editor.py" line="6517"/> <source>Macro recording is already active. Start new?</source> <translation>Nahrávání makra již probíhá. Spustit nové?</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6545"/> + <location filename="../QScintilla/Editor.py" line="6543"/> <source>Macro Recording</source> <translation>Záznam makra</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6545"/> + <location filename="../QScintilla/Editor.py" line="6543"/> <source>Enter name of the macro:</source> <translation>Vložte název makra:</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6683"/> + <location filename="../QScintilla/Editor.py" line="6681"/> <source>File changed</source> <translation>Soubor změněn</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6987"/> + <location filename="../QScintilla/Editor.py" line="6985"/> <source>Drop Error</source> <translation>Zahodit chybu</translation> </message> <message> + <location filename="../QScintilla/Editor.py" line="7006"/> + <source>Resources</source> + <translation>Zdroje</translation> + </message> + <message> <location filename="../QScintilla/Editor.py" line="7008"/> - <source>Resources</source> - <translation>Zdroje</translation> + <source>Add file...</source> + <translation>Přidat soubor...</translation> </message> <message> <location filename="../QScintilla/Editor.py" line="7010"/> - <source>Add file...</source> - <translation>Přidat soubor...</translation> + <source>Add files...</source> + <translation>Přidat soubory...</translation> </message> <message> <location filename="../QScintilla/Editor.py" line="7012"/> - <source>Add files...</source> - <translation>Přidat soubory...</translation> - </message> - <message> - <location filename="../QScintilla/Editor.py" line="7014"/> <source>Add aliased file...</source> <translation>Přidat zástupce souboru...</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7017"/> + <location filename="../QScintilla/Editor.py" line="7015"/> <source>Add localized resource...</source> <translation>Přidat lokalizované resource...</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7021"/> + <location filename="../QScintilla/Editor.py" line="7019"/> <source>Add resource frame</source> <translation>Přidat resource frame</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7040"/> + <location filename="../QScintilla/Editor.py" line="7038"/> <source>Add file resource</source> <translation>Přidat soubor resource</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7056"/> + <location filename="../QScintilla/Editor.py" line="7054"/> <source>Add file resources</source> <translation>Přidat soubory resource</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7084"/> + <location filename="../QScintilla/Editor.py" line="7082"/> <source>Add aliased file resource</source> <translation>Přidat zástupce souboru resource</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7148"/> + <location filename="../QScintilla/Editor.py" line="7146"/> <source>Package Diagram</source> <translation>Diagram balíčku</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7148"/> + <location filename="../QScintilla/Editor.py" line="7146"/> <source>Include class attributes?</source> <translation>Včetně atributů třídy?</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7182"/> + <location filename="../QScintilla/Editor.py" line="7180"/> <source>Application Diagram</source> <translation>Diagram aplikace</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7182"/> + <location filename="../QScintilla/Editor.py" line="7180"/> <source>Include module names?</source> <translation>Včetně jmen modulů?</translation> </message> @@ -11042,12 +11047,12 @@ <translation>Nebyl zadán forám exportu. Zrušeno....</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7168"/> + <location filename="../QScintilla/Editor.py" line="7166"/> <source>Imports Diagram</source> <translation>Importovat diagram</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7168"/> + <location filename="../QScintilla/Editor.py" line="7166"/> <source>Include imports from external modules?</source> <translation>Zahrnout importy z externích modulů?</translation> </message> @@ -11122,7 +11127,7 @@ <translation>Použít Pygments lexer.</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7475"/> + <location filename="../QScintilla/Editor.py" line="7473"/> <source>Check spelling...</source> <translation>Zatrhnout kontrolu...</translation> </message> @@ -11132,12 +11137,12 @@ <translation>Zatrhnout výběr kontroly...</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7478"/> + <location filename="../QScintilla/Editor.py" line="7476"/> <source>Add to dictionary</source> <translation>Přidat do slovníku</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7480"/> + <location filename="../QScintilla/Editor.py" line="7478"/> <source>Ignore All</source> <translation>Ignorovat vše</translation> </message> @@ -11177,32 +11182,32 @@ <translation><p>Soubor <b>{0}</b> nemůže být přejmenován.<br />Důvod: {1}</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6444"/> + <location filename="../QScintilla/Editor.py" line="6442"/> <source><p>The macro file <b>{0}</b> could not be read.</p></source> <translation><p>Soubor s makrem <b>{0}</b> nelze načíst.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6453"/> + <location filename="../QScintilla/Editor.py" line="6451"/> <source><p>The macro file <b>{0}</b> is corrupt.</p></source> <translation><p>Soubor s makrem <b>{0}</b> je poškozen.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6506"/> + <location filename="../QScintilla/Editor.py" line="6504"/> <source><p>The macro file <b>{0}</b> could not be written.</p></source> <translation><p>So souboru s makrem <b>{0}</b> nelze zapisovat.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6847"/> + <location filename="../QScintilla/Editor.py" line="6845"/> <source>{0} (ro)</source> <translation>{0} (ro)</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6987"/> + <location filename="../QScintilla/Editor.py" line="6985"/> <source><p><b>{0}</b> is not a file.</p></source> <translation><p><b>{0}</b> není soubor.</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7084"/> + <location filename="../QScintilla/Editor.py" line="7082"/> <source>Alias for file <b>{0}</b>:</source> <translation>Zástupce pro soubor <b>{0}</b>:</translation> </message> @@ -11232,22 +11237,22 @@ <translation type="unfinished"><p>Soubor <b>{0}</b> již existuje.</p><p>Má se přepsat?</p></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6490"/> + <location filename="../QScintilla/Editor.py" line="6488"/> <source><p>The macro file <b>{0}</b> already exists. Overwrite it?</p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6292"/> + <location filename="../QScintilla/Editor.py" line="6290"/> <source>Warning: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6299"/> + <location filename="../QScintilla/Editor.py" line="6297"/> <source>Error: {0}</source> <translation type="unfinished">Chyby: {0}</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6679"/> + <location filename="../QScintilla/Editor.py" line="6677"/> <source><br><b>Warning:</b> You will lose your changes upon reopening it.</source> <translation type="unfinished"></translation> </message> @@ -11272,27 +11277,27 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7892"/> + <location filename="../QScintilla/Editor.py" line="7890"/> <source>Sort Lines</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7892"/> + <location filename="../QScintilla/Editor.py" line="7890"/> <source>The selection contains illegal data for a numerical sort.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6228"/> + <location filename="../QScintilla/Editor.py" line="6226"/> <source>Warning</source> <translation type="unfinished">Varování</translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6228"/> + <location filename="../QScintilla/Editor.py" line="6226"/> <source>No warning messages available.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6289"/> + <location filename="../QScintilla/Editor.py" line="6287"/> <source>Style: {0}</source> <translation type="unfinished"></translation> </message> @@ -11317,7 +11322,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="6673"/> + <location filename="../QScintilla/Editor.py" line="6671"/> <source><p>The file <b>{0}</b> has been changed while it was opened in eric6. Reread it?</p></source> <translation type="unfinished"><p>Soubor <b>{0}</b> byl změněn po té co již byl načten do eric5. Znovu načíst?</p> {0}?} {6.?}</translation> </message> @@ -11352,12 +11357,12 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7979"/> + <location filename="../QScintilla/Editor.py" line="7977"/> <source>Register Mouse Click Handler</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="7979"/> + <location filename="../QScintilla/Editor.py" line="7977"/> <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source> <translation type="unfinished"></translation> </message> @@ -11387,12 +11392,12 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="8100"/> + <location filename="../QScintilla/Editor.py" line="8098"/> <source>EditorConfig Properties</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../QScintilla/Editor.py" line="8100"/> + <location filename="../QScintilla/Editor.py" line="8098"/> <source><p>The EditorConfig properties for file <b>{0}</b> could not be loaded.</p></source> <translation type="unfinished"></translation> </message> @@ -42872,7 +42877,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="350"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="354"/> <source>Press to connect to the selected network</source> <translation type="unfinished"></translation> </message> @@ -42902,57 +42907,57 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="438"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="442"/> <source>Save Messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="421"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="425"/> <source>HTML Files (*.{0});;Text Files (*.txt);;All Files (*)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="438"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="442"/> <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="../Network/IRC/IrcNetworkWidget.py" line="457"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="461"/> <source>Error saving Messages</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="457"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="461"/> <source><p>The messages contents could not be written to <b>{0}</b></p><p>Reason: {1}</p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="471"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="475"/> <source>Copy</source> <translation type="unfinished">Kopírovat</translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="476"/> - <source>Cut all</source> - <translation type="unfinished">Vyjmout vše</translation> - </message> - <message> <location filename="../Network/IRC/IrcNetworkWidget.py" line="480"/> + <source>Cut all</source> + <translation type="unfinished">Vyjmout vše</translation> + </message> + <message> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="484"/> <source>Copy all</source> <translation type="unfinished">Kopírovat vše</translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="485"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="489"/> <source>Clear</source> <translation type="unfinished">Vyčistit</translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="490"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="494"/> <source>Save</source> <translation type="unfinished">Uložit</translation> </message> <message> - <location filename="../Network/IRC/IrcNetworkWidget.py" line="345"/> + <location filename="../Network/IRC/IrcNetworkWidget.py" line="349"/> <source>Press to disconnect from the network</source> <translation type="unfinished"></translation> </message> @@ -43402,253 +43407,253 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="243"/> + <location filename="../Network/IRC/IrcWidget.py" line="255"/> <source>Disconnect from Server</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="243"/> + <location filename="../Network/IRC/IrcWidget.py" line="255"/> <source><p>Do you really want to disconnect from <b>{0}</b>?</p><p>All channels will be closed.</p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="196"/> + <location filename="../Network/IRC/IrcWidget.py" line="197"/> <source>SSL Connection</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="196"/> + <location filename="../Network/IRC/IrcWidget.py" line="197"/> <source>An encrypted connection to the IRC network was requested but SSL is not available. Please change the server configuration.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="563"/> + <location filename="../Network/IRC/IrcWidget.py" line="579"/> <source>Info</source> <translation type="unfinished">Info</translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="222"/> + <location filename="../Network/IRC/IrcWidget.py" line="230"/> <source>Looking for server {0} (port {1}) using an SSL encrypted connection...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="231"/> + <location filename="../Network/IRC/IrcWidget.py" line="241"/> <source>Looking for server {0} (port {1})...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="252"/> + <location filename="../Network/IRC/IrcWidget.py" line="264"/> <source>Disconnecting from server {0}...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="519"/> + <location filename="../Network/IRC/IrcWidget.py" line="533"/> <source>Server found,connecting...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="528"/> + <location filename="../Network/IRC/IrcWidget.py" line="542"/> <source>Connected,logging in...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="563"/> + <location filename="../Network/IRC/IrcWidget.py" line="579"/> <source>Server disconnected.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="610"/> + <location filename="../Network/IRC/IrcWidget.py" line="626"/> <source>Message Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="610"/> + <location filename="../Network/IRC/IrcWidget.py" line="626"/> <source>Unknown message received from server:<br/>{0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="678"/> + <location filename="../Network/IRC/IrcWidget.py" line="694"/> <source>Notice</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="696"/> + <location filename="../Network/IRC/IrcWidget.py" line="712"/> <source>Mode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="703"/> - <source>You have left channel {0}.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="714"/> - <source>You are now known as {0}.</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../Network/IRC/IrcWidget.py" line="719"/> + <source>You have left channel {0}.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="730"/> + <source>You are now known as {0}.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="735"/> <source>User {0} is now known as {1}.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="729"/> + <location filename="../Network/IRC/IrcWidget.py" line="745"/> <source>Server Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="765"/> + <location filename="../Network/IRC/IrcWidget.py" line="781"/> <source>Error</source> <translation type="unfinished">Chyba</translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="780"/> - <source>Welcome</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="782"/> - <source>Support</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="784"/> - <source>User</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="786"/> - <source>MOTD</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="788"/> - <source>Away</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="790"/> - <source>Info ({0})</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="794"/> - <source>Message of the day</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../Network/IRC/IrcWidget.py" line="796"/> - <source>End of message of the day</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="799"/> - <source>Server {0} (Version {1}), User-Modes: {2}, Channel-Modes: {3}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="805"/> - <source>Current users on {0}: {1}, max. {2}</source> + <source>Welcome</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="798"/> + <source>Support</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="800"/> + <source>User</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="802"/> + <source>MOTD</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="804"/> + <source>Away</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="806"/> + <source>Info ({0})</source> <translation type="unfinished"></translation> </message> <message> <location filename="../Network/IRC/IrcWidget.py" line="810"/> + <source>Message of the day</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="812"/> + <source>End of message of the day</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="815"/> + <source>Server {0} (Version {1}), User-Modes: {2}, Channel-Modes: {3}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="821"/> + <source>Current users on {0}: {1}, max. {2}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="826"/> <source>Current users on the network: {0}, max. {1}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="814"/> + <location filename="../Network/IRC/IrcWidget.py" line="830"/> <source>You are no longer marked as being away.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="816"/> + <location filename="../Network/IRC/IrcWidget.py" line="832"/> <source>You have been marked as being away.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="935"/> + <location filename="../Network/IRC/IrcWidget.py" line="952"/> <source>SSL Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="877"/> + <location filename="../Network/IRC/IrcWidget.py" line="894"/> <source>Connection to server {0} (port {1}) lost while waiting for user response to an SSL error.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="908"/> + <location filename="../Network/IRC/IrcWidget.py" line="925"/> <source>Socket Error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="885"/> - <source>The host was not found. Please check the host name and port settings.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="891"/> - <source>The connection was refused by the peer. Please check the host name and port settings.</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../Network/IRC/IrcWidget.py" line="902"/> + <source>The host was not found. Please check the host name and port settings.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="908"/> + <source>The connection was refused by the peer. Please check the host name and port settings.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="919"/> <source>The following network error occurred:<br/>{0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="1034"/> + <location filename="../Network/IRC/IrcWidget.py" line="1051"/> <source>{0} ({1})</source> <comment>channel name, users count</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="1069"/> + <location filename="../Network/IRC/IrcWidget.py" line="1094"/> <source>Critical</source> <translation type="unfinished">Kritický</translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="1049"/> + <location filename="../Network/IRC/IrcWidget.py" line="1074"/> <source>No nickname acceptable to the server configured for <b>{0}</b>. Disconnecting...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="1069"/> + <location filename="../Network/IRC/IrcWidget.py" line="1094"/> <source>The given nickname is already in use.</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../Network/IRC/IrcWidget.py" line="1036"/> + <source>CTCP</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Network/IRC/IrcWidget.py" line="1013"/> + <source>Received Version request from {0}.</source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../Network/IRC/IrcWidget.py" line="1019"/> - <source>CTCP</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="996"/> - <source>Received Version request from {0}.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Network/IRC/IrcWidget.py" line="1002"/> <source>Received CTCP-PING request from {0}, sending answer.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="1010"/> + <location filename="../Network/IRC/IrcWidget.py" line="1027"/> <source>Received CTCP-CLIENTINFO request from {0}, sending answer.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="1019"/> + <location filename="../Network/IRC/IrcWidget.py" line="1036"/> <source>Received unknown CTCP-{0} request from {1}.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="689"/> + <location filename="../Network/IRC/IrcWidget.py" line="705"/> <source>You have set your personal modes to <b>[{0}]</b>.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="693"/> + <location filename="../Network/IRC/IrcWidget.py" line="709"/> <source>{0} has changed your personal modes to <b>[{1}]</b>.</source> <translation type="unfinished"></translation> </message> @@ -43663,47 +43668,47 @@ <translation type="unfinished">Síť</translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="897"/> + <location filename="../Network/IRC/IrcWidget.py" line="914"/> <source>The SSL handshake failed.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="908"/> + <location filename="../Network/IRC/IrcWidget.py" line="925"/> <source>A network error occurred.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="921"/> + <location filename="../Network/IRC/IrcWidget.py" line="938"/> <source>Could not connect to {0} (port {1}) using an SSL encrypted connection. Either the server does not support SSL (did you use the correct port?) or you rejected the certificate.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="935"/> + <location filename="../Network/IRC/IrcWidget.py" line="952"/> <source>The SSL certificate for the server {0} (port {1}) failed the authenticity check. SSL errors were accepted by you.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="257"/> + <location filename="../Network/IRC/IrcWidget.py" line="269"/> <source>Disconnecting from network {0}...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="262"/> + <location filename="../Network/IRC/IrcWidget.py" line="274"/> <source>Disconnecting from server.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="645"/> + <location filename="../Network/IRC/IrcWidget.py" line="661"/> <source>Received CTCP-PING response from {0} with latency of {1} ms.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="651"/> + <location filename="../Network/IRC/IrcWidget.py" line="667"/> <source>Received unknown CTCP-{0} response from {1}.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Network/IRC/IrcWidget.py" line="725"/> + <location filename="../Network/IRC/IrcWidget.py" line="741"/> <source>Received PONG from {0}</source> <translation type="unfinished"></translation> </message> @@ -45112,27 +45117,27 @@ <context> <name>LogViewerEdit</name> <message> - <location filename="../UI/LogView.py" line="118"/> + <location filename="../UI/LogView.py" line="121"/> <source>Clear</source> <translation type="unfinished">Vyčistit</translation> </message> <message> - <location filename="../UI/LogView.py" line="119"/> + <location filename="../UI/LogView.py" line="122"/> <source>Copy</source> <translation type="unfinished">Kopírovat</translation> </message> <message> - <location filename="../UI/LogView.py" line="121"/> + <location filename="../UI/LogView.py" line="124"/> <source>Find</source> <translation type="unfinished">Hledat</translation> </message> <message> - <location filename="../UI/LogView.py" line="123"/> + <location filename="../UI/LogView.py" line="126"/> <source>Select All</source> <translation type="unfinished">Vybrat vše</translation> </message> <message> - <location filename="../UI/LogView.py" line="125"/> + <location filename="../UI/LogView.py" line="128"/> <source>Configure...</source> <translation type="unfinished">Konfigurovat...</translation> </message> @@ -51563,17 +51568,17 @@ <context> <name>Preferences</name> <message> - <location filename="../Preferences/__init__.py" line="1708"/> + <location filename="../Preferences/__init__.py" line="1711"/> <source>Export Preferences</source> <translation>Předvolby exportu</translation> </message> <message> - <location filename="../Preferences/__init__.py" line="1736"/> + <location filename="../Preferences/__init__.py" line="1739"/> <source>Import Preferences</source> <translation>Předvolby importu</translation> </message> <message> - <location filename="../Preferences/__init__.py" line="1736"/> + <location filename="../Preferences/__init__.py" line="1739"/> <source>Properties File (*.ini);;All Files (*)</source> <translation type="unfinished"></translation> </message> @@ -52046,192 +52051,192 @@ <translation>Ostatní</translation> </message> <message> - <location filename="../Project/Project.py" line="789"/> + <location filename="../Project/Project.py" line="794"/> <source>Read project file</source> <translation>Načíst soubor projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="891"/> + <location filename="../Project/Project.py" line="896"/> <source>Save project file</source> <translation>Uložit soubor projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="927"/> + <location filename="../Project/Project.py" line="932"/> <source>Read user project properties</source> <translation>Načíst uživatelská nastavení projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="951"/> + <location filename="../Project/Project.py" line="956"/> <source>Save user project properties</source> <translation>Uložit uživatelská nastavení projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="1009"/> + <location filename="../Project/Project.py" line="1014"/> <source>Read project session</source> <translation>Načíst relaci projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="1231"/> + <location filename="../Project/Project.py" line="1237"/> <source>Please save the project first.</source> <translation>Prosím, nejdříve uložte projekt.</translation> </message> <message> - <location filename="../Project/Project.py" line="1045"/> + <location filename="../Project/Project.py" line="1050"/> <source>Save project session</source> <translation>Uložit relaci projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="1074"/> + <location filename="../Project/Project.py" line="1079"/> <source>Delete project session</source> <translation>Smazat relaci projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="1108"/> + <location filename="../Project/Project.py" line="1113"/> <source>Read tasks</source> <translation>Načíst úlohy</translation> </message> <message> - <location filename="../Project/Project.py" line="1128"/> + <location filename="../Project/Project.py" line="1133"/> <source>Save tasks</source> <translation>Uložit úlohy</translation> </message> <message> - <location filename="../Project/Project.py" line="1185"/> + <location filename="../Project/Project.py" line="1191"/> <source>Read debugger properties</source> <translation>Načíst nastavení debuggeru</translation> </message> <message> - <location filename="../Project/Project.py" line="1219"/> + <location filename="../Project/Project.py" line="1225"/> <source>Save debugger properties</source> <translation>Uložit nastavení debuggeru</translation> </message> <message> - <location filename="../Project/Project.py" line="1245"/> + <location filename="../Project/Project.py" line="1251"/> <source>Delete debugger properties</source> <translation>Smazat nastavení debuggeru</translation> </message> <message> - <location filename="../Project/Project.py" line="1370"/> + <location filename="../Project/Project.py" line="1376"/> <source>Add Language</source> <translation>Přidat jazyk</translation> </message> <message> - <location filename="../Project/Project.py" line="1493"/> + <location filename="../Project/Project.py" line="1499"/> <source>Delete translation</source> <translation>Smazat překlad</translation> </message> <message> - <location filename="../Project/Project.py" line="1658"/> + <location filename="../Project/Project.py" line="1664"/> <source>Add file</source> <translation>Přidat soubor</translation> </message> <message> - <location filename="../Project/Project.py" line="1788"/> + <location filename="../Project/Project.py" line="1794"/> <source>The target directory must not be empty.</source> <translation>Cílový adresář nesmí být prázdný.</translation> </message> <message> - <location filename="../Project/Project.py" line="1799"/> + <location filename="../Project/Project.py" line="1805"/> <source>Add directory</source> <translation>Přidat adresář</translation> </message> <message> - <location filename="../Project/Project.py" line="1799"/> + <location filename="../Project/Project.py" line="1805"/> <source>The source directory must not be empty.</source> <translation>Cílový adresář nesmí být prázdný.</translation> </message> <message> - <location filename="../Project/Project.py" line="1936"/> + <location filename="../Project/Project.py" line="1942"/> <source>Rename file</source> <translation>Přejmenovat soubor</translation> </message> <message> - <location filename="../Project/Project.py" line="1960"/> + <location filename="../Project/Project.py" line="1966"/> <source>Rename File</source> <translation>Přejmenovat soubor</translation> </message> <message> - <location filename="../Project/Project.py" line="2203"/> + <location filename="../Project/Project.py" line="2209"/> <source>Delete file</source> <translation>Smazat soubor</translation> </message> <message> - <location filename="../Project/Project.py" line="2233"/> + <location filename="../Project/Project.py" line="2239"/> <source>Delete directory</source> <translation>Smazat adresář</translation> </message> <message> - <location filename="../Project/Project.py" line="2320"/> + <location filename="../Project/Project.py" line="2326"/> <source>Create project directory</source> <translation>Vytvořit adresář projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="2911"/> + <location filename="../Project/Project.py" line="2917"/> <source>New Project</source> <translation>Nový projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="2435"/> + <location filename="../Project/Project.py" line="2441"/> <source>Add existing files to the project?</source> <translation>Přidat existující soubory do projektu?</translation> </message> <message> - <location filename="../Project/Project.py" line="2554"/> + <location filename="../Project/Project.py" line="2560"/> <source>Would you like to edit the VCS command options?</source> <translation>Chcete editovat parametry VCS příkazu?</translation> </message> <message> - <location filename="../Project/Project.py" line="3763"/> + <location filename="../Project/Project.py" line="3769"/> <source>New project</source> <translation>Nový projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="2502"/> + <location filename="../Project/Project.py" line="2508"/> <source>Shall the project file be added to the repository?</source> <translation>Má být projekt přidán do repozitáře?</translation> </message> <message> - <location filename="../Project/Project.py" line="2526"/> + <location filename="../Project/Project.py" line="2532"/> <source>Select version control system for the project</source> <translation>Výběr verzovacího systému projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3777"/> + <location filename="../Project/Project.py" line="3783"/> <source>Open project</source> <translation>Otevřít projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="3056"/> + <location filename="../Project/Project.py" line="3062"/> <source>Project Files (*.e4p)</source> <translation>Soubory projektu (*.e4p)</translation> </message> <message> - <location filename="../Project/Project.py" line="3814"/> + <location filename="../Project/Project.py" line="3820"/> <source>Save project as</source> <translation>Uložit projekt jako</translation> </message> <message> - <location filename="../Project/Project.py" line="3071"/> + <location filename="../Project/Project.py" line="3077"/> <source>Save File</source> <translation>Uložit soubor</translation> </message> <message> - <location filename="../Project/Project.py" line="3107"/> + <location filename="../Project/Project.py" line="3113"/> <source>Close Project</source> <translation>Zavřít projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="3107"/> + <location filename="../Project/Project.py" line="3113"/> <source>The current project has unsaved changes.</source> <translation>Aktuální projekt obsahuje neuložené změny.</translation> </message> <message> - <location filename="../Project/Project.py" line="3282"/> + <location filename="../Project/Project.py" line="3288"/> <source>Syntax errors detected</source> <translation>Zjištěny syntaktické chyby</translation> </message> <message numerus="yes"> - <location filename="../Project/Project.py" line="3282"/> + <location filename="../Project/Project.py" line="3288"/> <source>The project contains %n file(s) with syntax errors.</source> <translation> <numerusform>Projekt obsahuje %n soubor se syntaktickými chybami.</numerusform> @@ -52240,162 +52245,162 @@ </translation> </message> <message> - <location filename="../Project/Project.py" line="3763"/> + <location filename="../Project/Project.py" line="3769"/> <source>&New...</source> <translation>&Nový...</translation> </message> <message> - <location filename="../Project/Project.py" line="3768"/> + <location filename="../Project/Project.py" line="3774"/> <source>Generate a new project</source> <translation>Vygenerovat nový projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="3769"/> + <location filename="../Project/Project.py" line="3775"/> <source><b>New...</b><p>This opens a dialog for entering the info for a new project.</p></source> <translation><b>Nový...</b><p>Otevře se dialogové okno pro zadání informací o novém projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3777"/> - <source>&Open...</source> - <translation>&Otevřít...</translation> - </message> - <message> - <location filename="../Project/Project.py" line="3782"/> - <source>Open an existing project</source> - <translation>Otevřít existující projekt</translation> - </message> - <message> <location filename="../Project/Project.py" line="3783"/> + <source>&Open...</source> + <translation>&Otevřít...</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3788"/> + <source>Open an existing project</source> + <translation>Otevřít existující projekt</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3789"/> <source><b>Open...</b><p>This opens an existing project.</p></source> <translation><b>Otevřít....</b><p>Otevře existující projekt.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3790"/> + <location filename="../Project/Project.py" line="3796"/> <source>Close project</source> <translation>Zavřít projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="3790"/> + <location filename="../Project/Project.py" line="3796"/> <source>&Close</source> <translation>&Zavřít</translation> </message> <message> - <location filename="../Project/Project.py" line="3794"/> + <location filename="../Project/Project.py" line="3800"/> <source>Close the current project</source> <translation>Uzavře aktuální projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="3795"/> + <location filename="../Project/Project.py" line="3801"/> <source><b>Close</b><p>This closes the current project.</p></source> <translation><b>Zavřít</b><p>Aktuální projekt se uzavře.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3802"/> + <location filename="../Project/Project.py" line="3808"/> <source>Save project</source> <translation>Uložit projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="3994"/> + <location filename="../Project/Project.py" line="4000"/> <source>&Save</source> <translation>&Uložit</translation> </message> <message> - <location filename="../Project/Project.py" line="3806"/> + <location filename="../Project/Project.py" line="3812"/> <source>Save the current project</source> <translation>Uložit aktuální projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="3807"/> + <location filename="../Project/Project.py" line="3813"/> <source><b>Save</b><p>This saves the current project.</p></source> <translation><b>Uložit</b><p>Aktuální projekt se uloží.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3814"/> - <source>Save &as...</source> - <translation>Uložit j&ako...</translation> - </message> - <message> - <location filename="../Project/Project.py" line="3818"/> - <source>Save the current project to a new file</source> - <translation>Uloží aktuální projekt do nového souboru</translation> - </message> - <message> <location filename="../Project/Project.py" line="3820"/> + <source>Save &as...</source> + <translation>Uložit j&ako...</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3824"/> + <source>Save the current project to a new file</source> + <translation>Uloží aktuální projekt do nového souboru</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3826"/> <source><b>Save as</b><p>This saves the current project to a new file.</p></source> <translation><b>Uložit jako</b><p>Uloží aktuální projekt do nového souboru.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3829"/> + <location filename="../Project/Project.py" line="3835"/> <source>Add files to project</source> <translation>Přidat soubory do projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3829"/> + <location filename="../Project/Project.py" line="3835"/> <source>Add &files...</source> <translation>&Přidat soubory...</translation> </message> <message> - <location filename="../Project/Project.py" line="3834"/> + <location filename="../Project/Project.py" line="3840"/> <source>Add files to the current project</source> <translation>Přidat soubory do aktuálního projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3836"/> + <location filename="../Project/Project.py" line="3842"/> <source><b>Add files...</b><p>This opens a dialog for adding files to the current project. The place to add is determined by the file extension.</p></source> <translation><b>Přidat soubory...</b><p>Otevře dialog pri přidání souborů do aktuálního projektu. Místo pro přidání je definováno extenzí souborů.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3845"/> + <location filename="../Project/Project.py" line="3851"/> <source>Add directory to project</source> <translation>Přidat adresář do projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3845"/> + <location filename="../Project/Project.py" line="3851"/> <source>Add directory...</source> <translation>Přidat adresář...</translation> </message> <message> - <location filename="../Project/Project.py" line="3850"/> + <location filename="../Project/Project.py" line="3856"/> <source>Add a directory to the current project</source> <translation>Přidat adresář do aktuálního projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3852"/> + <location filename="../Project/Project.py" line="3858"/> <source><b>Add directory...</b><p>This opens a dialog for adding a directory to the current project.</p></source> <translation><b>Přidat adresář...</b><p>Otevře dialog pro přičtení adresáře do aktuálního projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3860"/> + <location filename="../Project/Project.py" line="3866"/> <source>Add translation to project</source> <translation>Přidat překlad do projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3860"/> + <location filename="../Project/Project.py" line="3866"/> <source>Add &translation...</source> <translation>Přida&t překlad...</translation> </message> <message> - <location filename="../Project/Project.py" line="3865"/> + <location filename="../Project/Project.py" line="3871"/> <source>Add a translation to the current project</source> <translation>Přidat překlad do aktuálního projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3867"/> + <location filename="../Project/Project.py" line="3873"/> <source><b>Add translation...</b><p>This opens a dialog for add a translation to the current project.</p></source> <translation><b>Přidat překlad</b><p>Otevře dialog pro přidání překladu do aktuálního projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3875"/> + <location filename="../Project/Project.py" line="3881"/> <source>Search new files</source> <translation>Hledat nové soubory</translation> </message> <message> - <location filename="../Project/Project.py" line="3875"/> + <location filename="../Project/Project.py" line="3881"/> <source>Searc&h new files...</source> <translation>&Hledat nové soubory...</translation> </message> <message> - <location filename="../Project/Project.py" line="3879"/> + <location filename="../Project/Project.py" line="3885"/> <source>Search new files in the project directory.</source> <translation>Hledat nové soubory v adresáři projektu.</translation> </message> @@ -52405,57 +52410,57 @@ <translation type="obsolete"><b>Hledat nové soubory...</b><p>Hledají se nové soubory (zdrojové, *.ui, *.idl) v adresáři projektu a v registrovaných podadresářích.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3905"/> + <location filename="../Project/Project.py" line="3911"/> <source>Project properties</source> <translation>Nastavení projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3905"/> - <source>&Properties...</source> - <translation>&Natavení...</translation> - </message> - <message> - <location filename="../Project/Project.py" line="3910"/> - <source>Show the project properties</source> - <translation>Zobrazit nastavení projektu</translation> - </message> - <message> <location filename="../Project/Project.py" line="3911"/> + <source>&Properties...</source> + <translation>&Natavení...</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3916"/> + <source>Show the project properties</source> + <translation>Zobrazit nastavení projektu</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3917"/> <source><b>Properties...</b><p>This shows a dialog to edit the project properties.</p></source> <translation><b>Nastavení...</b><p>Zobrazí dialog s editací nastavení projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3918"/> + <location filename="../Project/Project.py" line="3924"/> <source>User project properties</source> <translation>Uživatelská nastavení projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3918"/> + <location filename="../Project/Project.py" line="3924"/> <source>&User Properties...</source> <translation>Uživat&elská nastavení...</translation> </message> <message> - <location filename="../Project/Project.py" line="3923"/> + <location filename="../Project/Project.py" line="3929"/> <source>Show the user specific project properties</source> <translation>Zobrazit uživatelem definovaná nastavení projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="3925"/> + <location filename="../Project/Project.py" line="3931"/> <source><b>User Properties...</b><p>This shows a dialog to edit the user specific project properties.</p></source> <translation><b>Uživatelská nastavení...</b><p>Zobrazí dialog s editací uživatelských nastavení projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3933"/> + <location filename="../Project/Project.py" line="3939"/> <source>Filetype Associations</source> <translation>Asociace typů souborů</translation> </message> <message> - <location filename="../Project/Project.py" line="3933"/> + <location filename="../Project/Project.py" line="3939"/> <source>Filetype Associations...</source> <translation>Asociace typů souborů...</translation> </message> <message> - <location filename="../Project/Project.py" line="3937"/> + <location filename="../Project/Project.py" line="3943"/> <source>Show the project filetype associations</source> <translation>Zobrazit asociace typů souborů</translation> </message> @@ -52465,347 +52470,347 @@ <translation type="obsolete"><b>Asociace typů souborů...</b><p>Zobrazí se dialog s editací asociace typů souborů v projektu. Na základě vzorku souborového jména tyto asociace určují typ souboru (zdrojový kód, formulář, interface nebo jiné). Tyto asociace jsou použity při přidávání souborů do projektu a při vyhledávání.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3969"/> + <location filename="../Project/Project.py" line="3975"/> <source>Debugger Properties</source> <translation>Nastavení debugeru</translation> </message> <message> - <location filename="../Project/Project.py" line="3969"/> + <location filename="../Project/Project.py" line="3975"/> <source>Debugger &Properties...</source> <translation>Nastavení &debuggeru...</translation> </message> <message> - <location filename="../Project/Project.py" line="3973"/> + <location filename="../Project/Project.py" line="3979"/> <source>Show the debugger properties</source> <translation>Zobrazit nastavení debugeru</translation> </message> <message> - <location filename="../Project/Project.py" line="3974"/> + <location filename="../Project/Project.py" line="3980"/> <source><b>Debugger Properties...</b><p>This shows a dialog to edit project specific debugger settings.</p></source> <translation><b>Nastavení debugeru...</b><p>Zobrazí dialog s editací nastavení debugeru.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3982"/> + <location filename="../Project/Project.py" line="3988"/> <source>Load</source> <translation>Načíst</translation> </message> <message> - <location filename="../Project/Project.py" line="3982"/> + <location filename="../Project/Project.py" line="3988"/> <source>&Load</source> <translation>&Načíst</translation> </message> <message> - <location filename="../Project/Project.py" line="3986"/> + <location filename="../Project/Project.py" line="3992"/> <source>Load the debugger properties</source> <translation>Načíst nastavení debugeru</translation> </message> <message> - <location filename="../Project/Project.py" line="3987"/> + <location filename="../Project/Project.py" line="3993"/> <source><b>Load Debugger Properties</b><p>This loads the project specific debugger settings.</p></source> <translation><b>Načíst nastavení debugeru</b><p>Načtou se nastavení debugeru do projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3994"/> + <location filename="../Project/Project.py" line="4000"/> <source>Save</source> <translation>Uložit</translation> </message> <message> - <location filename="../Project/Project.py" line="3998"/> + <location filename="../Project/Project.py" line="4004"/> <source>Save the debugger properties</source> <translation>Uložit nastavení debugeru</translation> </message> <message> - <location filename="../Project/Project.py" line="3999"/> + <location filename="../Project/Project.py" line="4005"/> <source><b>Save Debugger Properties</b><p>This saves the project specific debugger settings.</p></source> <translation><b>Uložit nastavení debugeru</b><p>Uloží nastavení debugeru definovaná v projektu..</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4006"/> + <location filename="../Project/Project.py" line="4012"/> <source>Delete</source> <translation>Smazat</translation> </message> <message> - <location filename="../Project/Project.py" line="4006"/> + <location filename="../Project/Project.py" line="4012"/> <source>&Delete</source> <translation>Sma&zat</translation> </message> <message> - <location filename="../Project/Project.py" line="4010"/> + <location filename="../Project/Project.py" line="4016"/> <source>Delete the debugger properties</source> <translation>Smazat nastavení debugeru</translation> </message> <message> - <location filename="../Project/Project.py" line="4011"/> + <location filename="../Project/Project.py" line="4017"/> <source><b>Delete Debugger Properties</b><p>This deletes the file containing the project specific debugger settings.</p></source> <translation><b>Smazat nastavení debugeru</b><p>Smaže se soubor obsahující nastavení debugeru v daném projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4019"/> + <location filename="../Project/Project.py" line="4025"/> <source>Reset</source> <translation></translation> </message> <message> - <location filename="../Project/Project.py" line="4019"/> + <location filename="../Project/Project.py" line="4025"/> <source>&Reset</source> <translation>&Reset</translation> </message> <message> - <location filename="../Project/Project.py" line="4023"/> + <location filename="../Project/Project.py" line="4029"/> <source>Reset the debugger properties</source> <translation>Reset nastavení debugeru</translation> </message> <message> - <location filename="../Project/Project.py" line="4024"/> + <location filename="../Project/Project.py" line="4030"/> <source><b>Reset Debugger Properties</b><p>This resets the project specific debugger settings.</p></source> <translation><b>Reset nastavení debugeru</b><p>Zresetuje nastavení debugeru v projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4033"/> + <location filename="../Project/Project.py" line="4039"/> <source>Load session</source> <translation>Načíst relaci</translation> </message> <message> - <location filename="../Project/Project.py" line="4037"/> + <location filename="../Project/Project.py" line="4043"/> <source>Load the projects session file.</source> <translation>Načíst soubor s relací projektu.</translation> </message> <message> - <location filename="../Project/Project.py" line="4038"/> + <location filename="../Project/Project.py" line="4044"/> <source><b>Load session</b><p>This loads the projects session file. The session consists of the following data.<br>- all open source files<br>- all breakpoint<br>- the commandline arguments<br>- the working directory<br>- the exception reporting flag</p></source> <translation><b>Načíst relaci</b><p>Načte soubor s relací projektu. Relace obsahuje následující údaje:<br>- všechny otevřené zdrojové soubory<br>- všechny breakpointy<br>- argumenty příkazové řádky <br>- pracovní adresář<br>- příznak výjimky</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4051"/> + <location filename="../Project/Project.py" line="4057"/> <source>Save session</source> <translation>Uložit relaci</translation> </message> <message> - <location filename="../Project/Project.py" line="4055"/> + <location filename="../Project/Project.py" line="4061"/> <source>Save the projects session file.</source> <translation>Uložit soubor s relací projektu.</translation> </message> <message> - <location filename="../Project/Project.py" line="4056"/> + <location filename="../Project/Project.py" line="4062"/> <source><b>Save session</b><p>This saves the projects session file. The session consists of the following data.<br>- all open source files<br>- all breakpoint<br>- the commandline arguments<br>- the working directory<br>- the exception reporting flag</p></source> <translation><b>Uložit relaci</b><p>Uloží soubor s relací projektu. Relace obsahuje následující údaje:<br>- všechny otevřené zdrojové soubory<br>- všechny breakpointy<br>- argumenty příkazové řádky <br>- pracovní adresář<br>- příznak výjimky</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4069"/> + <location filename="../Project/Project.py" line="4075"/> <source>Delete session</source> <translation>Smazat relaci</translation> </message> <message> - <location filename="../Project/Project.py" line="4073"/> + <location filename="../Project/Project.py" line="4079"/> <source>Delete the projects session file.</source> <translation>Smaže soubor s relací projektu.</translation> </message> <message> - <location filename="../Project/Project.py" line="4074"/> + <location filename="../Project/Project.py" line="4080"/> <source><b>Delete session</b><p>This deletes the projects session file</p></source> <translation><b>Smazat relaci</b><p>Smaže soubor s relací projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4083"/> + <location filename="../Project/Project.py" line="4089"/> <source>Code Metrics</source> <translation>Metriky kódu</translation> </message> <message> - <location filename="../Project/Project.py" line="4083"/> - <source>&Code Metrics...</source> - <translation>Metriky &kódu...</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4087"/> - <source>Show some code metrics for the project.</source> - <translation>Zobrazit metriky kódu projektu.</translation> - </message> - <message> <location filename="../Project/Project.py" line="4089"/> + <source>&Code Metrics...</source> + <translation>Metriky &kódu...</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4093"/> + <source>Show some code metrics for the project.</source> + <translation>Zobrazit metriky kódu projektu.</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4095"/> <source><b>Code Metrics...</b><p>This shows some code metrics for all Python files in the project.</p></source> <translation><b>Metriky kódu...</b><p>Zobrazí se metriky kódu všech python souborů v projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4097"/> - <source>Python Code Coverage</source> - <translation>Pokrytí python kódu</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4097"/> - <source>Code Co&verage...</source> - <translation>Pokr&ytí kódu...</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4101"/> - <source>Show code coverage information for the project.</source> - <translation>Zobrazit informace pokrytí kódu projektu.</translation> - </message> - <message> <location filename="../Project/Project.py" line="4103"/> + <source>Python Code Coverage</source> + <translation>Pokrytí python kódu</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4103"/> + <source>Code Co&verage...</source> + <translation>Pokr&ytí kódu...</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4107"/> + <source>Show code coverage information for the project.</source> + <translation>Zobrazit informace pokrytí kódu projektu.</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4109"/> <source><b>Code Coverage...</b><p>This shows the code coverage information for all Python files in the project.</p></source> <translation><b>Pokrytí kódu...</b><p>Zobrazí informace o pokrytí kódu ve všech python souborech projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4965"/> + <location filename="../Project/Project.py" line="4971"/> <source>Profile Data</source> <translation>Profilovat data</translation> </message> <message> - <location filename="../Project/Project.py" line="4111"/> - <source>&Profile Data...</source> - <translation>&Profilovat data...</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4115"/> - <source>Show profiling data for the project.</source> - <translation>Zobrazit profilování dat projektu.</translation> - </message> - <message> <location filename="../Project/Project.py" line="4117"/> + <source>&Profile Data...</source> + <translation>&Profilovat data...</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4121"/> + <source>Show profiling data for the project.</source> + <translation>Zobrazit profilování dat projektu.</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4123"/> <source><b>Profile Data...</b><p>This shows the profiling data for the project.</p></source> <translation><b>Profilovat data</b><p>Zobrazí se profilování dat projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="5019"/> + <location filename="../Project/Project.py" line="5025"/> <source>Application Diagram</source> <translation>Diagram aplikace</translation> </message> <message> - <location filename="../Project/Project.py" line="4126"/> - <source>&Application Diagram...</source> - <translation>Diagram &aplikace...</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4130"/> - <source>Show a diagram of the project.</source> - <translation>Zobrazit diagram projektu.</translation> - </message> - <message> <location filename="../Project/Project.py" line="4132"/> + <source>&Application Diagram...</source> + <translation>Diagram &aplikace...</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4136"/> + <source>Show a diagram of the project.</source> + <translation>Zobrazit diagram projektu.</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4138"/> <source><b>Application Diagram...</b><p>This shows a diagram of the project.</p></source> <translation><b>Diagram aplikace...</b><p>Zobrazí diagram projektu.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4256"/> - <source>&Project</source> - <translation>&Projekt</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4257"/> - <source>Open &Recent Projects</source> - <translation>Otevřít poslední p&rojekty</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4258"/> - <source>&Version Control</source> - <translation>Kontrola &verzí</translation> - </message> - <message> <location filename="../Project/Project.py" line="4262"/> - <source>Chec&k</source> - <translation>Zkontro&lovat</translation> + <source>&Project</source> + <translation>&Projekt</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4263"/> + <source>Open &Recent Projects</source> + <translation>Otevřít poslední p&rojekty</translation> </message> <message> <location filename="../Project/Project.py" line="4264"/> - <source>Sho&w</source> - <translation>Zo&brazit</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4265"/> - <source>&Diagrams</source> - <translation>&Diagramy</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4266"/> - <source>Session</source> - <translation>Relace</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4267"/> - <source>Source &Documentation</source> - <translation>Zd&rojová dokumentace</translation> - </message> - <message> - <location filename="../Project/Project.py" line="4269"/> - <source>Debugger</source> - <translation></translation> + <source>&Version Control</source> + <translation>Kontrola &verzí</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4268"/> + <source>Chec&k</source> + <translation>Zkontro&lovat</translation> </message> <message> <location filename="../Project/Project.py" line="4270"/> + <source>Sho&w</source> + <translation>Zo&brazit</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4271"/> + <source>&Diagrams</source> + <translation>&Diagramy</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4272"/> + <source>Session</source> + <translation>Relace</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4273"/> + <source>Source &Documentation</source> + <translation>Zd&rojová dokumentace</translation> + </message> + <message> + <location filename="../Project/Project.py" line="4275"/> + <source>Debugger</source> + <translation></translation> + </message> + <message> + <location filename="../Project/Project.py" line="4276"/> <source>Pac&kagers</source> <translation>Balíč&ky</translation> </message> <message> - <location filename="../Project/Project.py" line="4389"/> + <location filename="../Project/Project.py" line="4395"/> <source>Project</source> <translation>Projekt</translation> </message> <message> - <location filename="../Project/Project.py" line="4455"/> + <location filename="../Project/Project.py" line="4461"/> <source>&Clear</source> <translation>&Vyčistit</translation> </message> <message> - <location filename="../Project/Project.py" line="4618"/> + <location filename="../Project/Project.py" line="4624"/> <source>Search New Files</source> <translation>Hledat nové soubory</translation> </message> <message> - <location filename="../Project/Project.py" line="4618"/> + <location filename="../Project/Project.py" line="4624"/> <source>There were no new files found to be added.</source> <translation>Nebyly nalezeny žádné soubory, které je možné přidat.</translation> </message> <message> - <location filename="../Project/Project.py" line="4764"/> + <location filename="../Project/Project.py" line="4770"/> <source>Version Control System</source> <translation>Version Control System</translation> </message> <message> - <location filename="../Project/Project.py" line="4892"/> + <location filename="../Project/Project.py" line="4898"/> <source>Coverage Data</source> <translation>Datové pokrytí</translation> </message> <message> - <location filename="../Project/Project.py" line="4942"/> + <location filename="../Project/Project.py" line="4948"/> <source>There is no main script defined for the current project. Aborting</source> <translation>V aktuálním projektu nebyl určen hlavní skript. Zrušeno</translation> </message> <message> - <location filename="../Project/Project.py" line="4915"/> + <location filename="../Project/Project.py" line="4921"/> <source>Code Coverage</source> <translation>Pokrytí kódu</translation> </message> <message> - <location filename="../Project/Project.py" line="4915"/> + <location filename="../Project/Project.py" line="4921"/> <source>Please select a coverage file</source> <translation>Prosím, vyberte soubor pokrytí</translation> </message> <message> - <location filename="../Project/Project.py" line="4965"/> + <location filename="../Project/Project.py" line="4971"/> <source>Please select a profile file</source> <translation>Prosím, vyberte soubor s profilem</translation> </message> <message> - <location filename="../Project/Project.py" line="5019"/> + <location filename="../Project/Project.py" line="5025"/> <source>Include module names?</source> <translation>Včetně jmen modulů?</translation> </message> <message> - <location filename="../Project/Project.py" line="5213"/> + <location filename="../Project/Project.py" line="5219"/> <source>Create Package List</source> <translation>Vytvořit seznam balíčků</translation> </message> <message> - <location filename="../Project/Project.py" line="4155"/> + <location filename="../Project/Project.py" line="4161"/> <source>Create &Package List</source> <translation type="unfinished">Vytvořit Plugin &archiv</translation> </message> <message> - <location filename="../Project/Project.py" line="5490"/> + <location filename="../Project/Project.py" line="5496"/> <source>Create Plugin Archive</source> <translation>Vytvořit Plugin archiv</translation> </message> <message> - <location filename="../Project/Project.py" line="5164"/> + <location filename="../Project/Project.py" line="5170"/> <source><p>The file <b>PKGLIST</b> already exists.</p><p>Overwrite it?</p></source> <translation><p>Soubor <b>PKGLIST</b> již existuje.</p><p>Přepsat jej?</p></translation> </message> @@ -52815,22 +52820,22 @@ <translation type="obsolete"><p>Soubor <b>PKGLIST</b> neexistuje. Zrušeno...</p></translation> </message> <message> - <location filename="../Project/Project.py" line="5232"/> + <location filename="../Project/Project.py" line="5238"/> <source>The project does not have a main script defined. Aborting...</source> <translation>Projekt nemá definován hlavní skript. Zrušeno...</translation> </message> <message> - <location filename="../Project/Project.py" line="1689"/> + <location filename="../Project/Project.py" line="1695"/> <source><p>The source directory doesn't contain any files belonging to the selected category.</p></source> <translation><p>Zdrojový adresář neobsahuje žádné soubory související s danou kategorií.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="2911"/> + <location filename="../Project/Project.py" line="2917"/> <source>Select Version Control System</source> <translation>Vybrat Version Control System</translation> </message> <message> - <location filename="../Project/Project.py" line="2533"/> + <location filename="../Project/Project.py" line="2539"/> <source>None</source> <translation>None</translation> </message> @@ -52840,42 +52845,42 @@ <translation>Zaregistrovat typ projektu</translation> </message> <message> - <location filename="../Project/Project.py" line="4171"/> + <location filename="../Project/Project.py" line="4177"/> <source>Create Plugin &Archives</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Project/Project.py" line="1370"/> + <location filename="../Project/Project.py" line="1376"/> <source>You have to specify a translation pattern first.</source> <translation>Nejdříve musíte specifikovat vzor překladu.</translation> </message> <message> - <location filename="../Project/Project.py" line="2634"/> + <location filename="../Project/Project.py" line="2640"/> <source>Translation Pattern</source> <translation>Vzor překladu</translation> </message> <message> - <location filename="../Project/Project.py" line="2634"/> + <location filename="../Project/Project.py" line="2640"/> <source>Enter the path pattern for translation files (use '%language%' in place of the language code):</source> <translation>Zadejte vzor cesty pro soubory s překlady (použijte '%language%' na místě s kódem jazyka):</translation> </message> <message> - <location filename="../Project/Project.py" line="3951"/> - <source>Lexer Associations</source> - <translation>Spojení lexeru</translation> - </message> - <message> - <location filename="../Project/Project.py" line="3951"/> - <source>Lexer Associations...</source> - <translation>Spojení lexeru...</translation> - </message> - <message> - <location filename="../Project/Project.py" line="3955"/> - <source>Show the project lexer associations (overriding defaults)</source> - <translation>Zobrazit spojení lexeru projektu (přepíše výchozí)</translation> - </message> - <message> <location filename="../Project/Project.py" line="3957"/> + <source>Lexer Associations</source> + <translation>Spojení lexeru</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3957"/> + <source>Lexer Associations...</source> + <translation>Spojení lexeru...</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3961"/> + <source>Show the project lexer associations (overriding defaults)</source> + <translation>Zobrazit spojení lexeru projektu (přepíše výchozí)</translation> + </message> + <message> + <location filename="../Project/Project.py" line="3963"/> <source><b>Lexer Associations...</b><p>This shows a dialog to edit the lexer associations of the project. These associations override the global lexer associations. Lexers are used to highlight the editor text.</p></source> <translation><b>Spojení lexeru...</b><p>Zobrazuje dialog s editací spojení lexeru projektu. Tato spojení přepisují globální lexer spojení. Lexer je použit pro zvýraznění textu v editoru.</p></translation> </message> @@ -52895,62 +52900,62 @@ <translation>Python3 soubory (*.py *.py3);;Python3 GUI soubory (*.pyw *.pyw3);;</translation> </message> <message> - <location filename="../Project/Project.py" line="789"/> + <location filename="../Project/Project.py" line="794"/> <source><p>The project file <b>{0}</b> could not be read.</p></source> <translation><p>Soubor projektu <b>{0}</b> nelze načíst.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="891"/> + <location filename="../Project/Project.py" line="896"/> <source><p>The project file <b>{0}</b> could not be written.</p></source> <translation><p>Do souboru projektu <b>{0}</b> nelze zapisovat.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="927"/> + <location filename="../Project/Project.py" line="932"/> <source><p>The user specific project properties file <b>{0}</b> could not be read.</p></source> <translation><p>Uživatelská nastavení projektu <b>{0}</b> nelze načíst.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="951"/> + <location filename="../Project/Project.py" line="956"/> <source><p>The user specific project properties file <b>{0}</b> could not be written.</p></source> <translation><p>Do souboru s uživatelskými nastaveními <b>{0}</b> nelze zapisovat.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1009"/> + <location filename="../Project/Project.py" line="1014"/> <source><p>The project session file <b>{0}</b> could not be read.</p></source> <translation><p>Soubor s relací projektu <b>{0}</b> nelze načíst.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1045"/> + <location filename="../Project/Project.py" line="1050"/> <source><p>The project session file <b>{0}</b> could not be written.</p></source> <translation><p>Do souboru s relací projektu <b>{0}</b> nelze zapisovat.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1074"/> + <location filename="../Project/Project.py" line="1079"/> <source><p>The project session file <b>{0}</b> could not be deleted.</p></source> <translation><p>Soubor s relací projektu <b>{0}</b> nelze smazat.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1108"/> + <location filename="../Project/Project.py" line="1113"/> <source><p>The tasks file <b>{0}</b> could not be read.</p></source> <translation><p>Soubor s úlohami <b>{0}</b> nelze načíst.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1128"/> + <location filename="../Project/Project.py" line="1133"/> <source><p>The tasks file <b>{0}</b> could not be written.</p></source> <translation><p>Do souboru s úlohami <b>{0}</b> nelze zapisovat.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1185"/> + <location filename="../Project/Project.py" line="1191"/> <source><p>The project debugger properties file <b>{0}</b> could not be read.</p></source> <translation><p>Soubor s nastaveními debuggeru <b>{0}</b> nelze načíst.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1219"/> + <location filename="../Project/Project.py" line="1225"/> <source><p>The project debugger properties file <b>{0}</b> could not be written.</p></source> <translation><p>Do souboru s nastaveními debuggeru <b>{0}</b> nelze zapisovat.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1245"/> + <location filename="../Project/Project.py" line="1251"/> <source><p>The project debugger properties file <b>{0}</b> could not be deleted.</p></source> <translation><p>Soubor s nastaveními debuggeru <b>{0}</b> nelze smazat.</p></translation> </message> @@ -52960,17 +52965,17 @@ <translation type="obsolete"><p>Vybraný soubor s překladem <b>{0}</b> nelze smazat.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1720"/> + <location filename="../Project/Project.py" line="1726"/> <source><p>The file <b>{0}</b> already exists.</p><p>Overwrite it?</p></source> <translation><p>Soubor <b>{0}</b> již existuje.</p><p>Má se přepsat?</p></translation> </message> <message> - <location filename="../Project/Project.py" line="3071"/> + <location filename="../Project/Project.py" line="3077"/> <source><p>The file <b>{0}</b> already exists. Overwrite it?</p></source> <translation><p>Soubor <b>{0}</b> již existuje.</p><p>Má se přepsat?</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1960"/> + <location filename="../Project/Project.py" line="1966"/> <source><p>The file <b>{0}</b> could not be renamed.<br />Reason: {1}</p></source> <translation><p>Soubor <b>{0}</b> nemůže být přejmenován.<br />Důvod: {1}</p></translation> </message> @@ -52985,17 +52990,17 @@ <translation type="obsolete"><p>Vybraný adresář <b>{0}</b> nelze smazat.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="2320"/> + <location filename="../Project/Project.py" line="2326"/> <source><p>The project directory <b>{0}</b> could not be created.</p></source> <translation><p>Adresář projektu <b>{0}</b> nelze vytvořit.</p></translation> </message> <message> - <location filename="../Project/Project.py" line="4764"/> + <location filename="../Project/Project.py" line="4770"/> <source><p>The selected VCS <b>{0}</b> could not be found.<br/>Disabling version control.</p><p>{1}</p></source> <translation><p>Vybrané VCS <b>{0}</b> nebylo nalezeno.<br/>Kontrola verzí vypnuta.</p><p>{1}</p></translation> </message> <message> - <location filename="../Project/Project.py" line="5213"/> + <location filename="../Project/Project.py" line="5219"/> <source><p>The file <b>PKGLIST</b> could not be created.</p><p>Reason: {0}</p></source> <translation><p>Soubor <b>PKGLIST</b> nelze vytvořit.</p><p>Důvod: {0}</p></translation> </message> @@ -53005,22 +53010,22 @@ <translation type="obsolete"><p>Soubor <b>PKGLIST</b> nelze načíst.</p><p>Důvod: {0}</p></translation> </message> <message> - <location filename="../Project/Project.py" line="5374"/> + <location filename="../Project/Project.py" line="5380"/> <source><p>The file <b>{0}</b> could not be stored in the archive. Ignoring it.</p><p>Reason: {1}</p></source> <translation><p>Soubor <b>{0}</b> nelze uložit do archivu. Ingorováno.</p><p>Důvod: {1}</p></translation> </message> <message> - <location filename="../Project/Project.py" line="5448"/> + <location filename="../Project/Project.py" line="5454"/> <source><p>The plugin file <b>{0}</b> could not be read.</p><p>Reason: {1}</p></source> <translation><p>Plugin soubor <b>{0}</b> nelze přečíst.</p><p>Důvod: {1}</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1645"/> + <location filename="../Project/Project.py" line="1651"/> <source><p>The selected file <b>{0}</b> could not be added to <b>{1}</b>.</p><p>Reason: {2}</p></source> <translation><p>Vybraný soubor <b>{0}</b> nelze přidat do <b>{1}</b>.</p><p>Důvod: {2}</p></translation> </message> <message> - <location filename="../Project/Project.py" line="1702"/> + <location filename="../Project/Project.py" line="1708"/> <source><p>The target directory <b>{0}</b> could not be created.</p><p>Reason: {1}</p></source> <translation><p>Cílový adresář <b>{0}</b> nelze vytvořit.</p><p>Důvod: {1}</p></translation> </message> @@ -53030,32 +53035,32 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../Project/Project.py" line="2401"/> + <location filename="../Project/Project.py" line="2407"/> <source>Create main script</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Project/Project.py" line="2401"/> + <location filename="../Project/Project.py" line="2407"/> <source><p>The mainscript <b>{0}</b> could not be created.<br/>Reason: {1}</p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="../Project/Project.py" line="4140"/> - <source>Load Diagram</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Project/Project.py" line="4140"/> - <source>&Load Diagram...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../Project/Project.py" line="4144"/> - <source>Load a diagram from file.</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../Project/Project.py" line="4146"/> + <source>Load Diagram</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Project/Project.py" line="4146"/> + <source>&Load Diagram...</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../Project/Project.py" line="4150"/> + <source>Load a diagram from file.</source> + <translation type="unfinished"></translation> + </message>